epoll 系统调用及内核实现


epoll 系统调用 应用层 epoll 三个系统调用函数的原型: #include <sys/epoll.h> int epoll_create(int size); int epoll_ctl(int epfd, int op, int fd, struct epoll_event* event

套接字缓冲区&net_device


套接字缓冲区数据管理 在内核分析(收到)网络分组时,底层协议的数据将传递到更高层。分送数据时顺序相反,各种协议产生的数据(首部和净荷)依次向更低层传递,直到最终发送。这些操作的速度对网络子系统的性能有决定性影响,因此内核使用一种特殊的结构,称为套接字缓冲区(socket buffer),具体源码如下

传输层分析(SCTP&DCCP)


流控制传输协议(SCTP) SCTP(Steam Control Transmission Protocol,流控制传输协议)是在 2007 年发布的 RFC4906 中定义的,但它首次被定义是在 2000 年。SCTP 设计用于通过 IP 网络传输公共交换电话网络(Public Switched

Linux内核领接子系统分析


邻接子系统核心 基础知识 Linux 邻接子系统负责发现房钱链路上的节点,并且将 L3(网络层)地址转换为 L2(数据链路层)地址。在 IPv4 中,实现这种转化协议为地址解析协议(Address Resolution Protocol, ARP),而在 IPv6 则为邻居发现协议(Neighbou

传输层分析


套接字分析 每个操作系统都必须提供网络系统入口和 API,Linux 内核网络子系统提供的标准 POSIX 套接字向用户提供接口。在 Linux 传输层之上的一切都属于用户空间。Linux 也遵循 Unix 范式(一切皆文件),因此套接字也与文件相关联,使用统一套接字 API 会让应用程序移植更容易

网络层分析


网络访问层仍受到传输介质的性质和相关适配器的设备驱动程序的影响很大。网络层与网络适配器的硬件性质几乎是完全分离的。为什么是几乎呢?该层不仅负责发送和接受网络数据,还负责在彼此不直接连接的系统之间转发和路由分组。查找最佳路由并选择适当的网络设备来发送分组,也涉及对底层地址簇的处理(比如特定硬件的 MA

13.USB3.0设备控制器驱动分析


USB 驱动框架分析 USB 控制器作为 Host (USB 主机控制器)时,使用 USB 主机控制器驱动。 USB 控制器作为 device (USB 设备控制器)的时候驱动框架分别为:Gadget Function 驱动、Gadget Function API、Composite 及 UDC (

1.IO体系结构与访问设备


IO体系结构 与外设通信通常称为输入输出,一般缩写为I/O。在实现外设IO的时候,内核必须处理三个可能出现的问题: 必须根据具体的设备类型和模型,使用各种方法对硬件寻址。 内核必须向用户应用程序和系统工具提供访问各种设备的方法。但凡有可能,都应当采用统一的方案,确保程序设计的工作量不会过多,同时保证

11.USB驱动分析


基础层次详解 通用串行总线(USB)主要用于连接主机和外部设备(协调主机和设备之间的通讯),USB 设备不能主动向主机发送数据。USB 总线采用拓扑(树形),主机侧和设备侧的 USB 控制器(Host 和 UDC),每个总线只要一个主机控制器。 主机侧的 USB 节点为根节点,所有子节点都连接在根节

10.USB设备驱动代码分析(鼠标)


定义鼠标ID表 static struct usb_device_id usbmouse_as_key_id_table [] = { {USB_INTERFACE_INFO(USB_INTERFACE_CLASS_HID, USB_INTERFACE_SUBCLASS_BOOT,