驱动开发中涉及的结构和函数汇总
在看dpdk的uio驱动实现,涉及到驱动开发知识,为了不打断主学习线路,又不遗漏知识,这里简单做一个记录。
只描述函数的作用,贴附连接,为后续深入学习方便:
1、 pci_enable_device()
作用:使能pci设备
2、 struct cdev
作用:在Linux内核中,使用一个cdev结构体描述一个字符设备
3、 class_create() / class_register() / device_create() ...
作用:struct class对应一个设备类别,class_create()用来创建一个类别,这个类别存放于sysfs中(对应/sys/class下目录);device_create()创建一个指定类别的设备,并注册到sysfs中(并会调用udev在/dev下创建设备接口文件)
参考:[Linux 驱动] -- Linux中class_create和class_register说明_linux驱动class结构体-CSDN博客
class_create() class_device_create-CSDN博客
4、 struct pci_dev
作用:扫描PCIe总线,对每一个PCIe桥、PCIe设备,都构造出对应的pci_dev。这个设备由内核使用,以引用一个PCI设备,如同网络设备都会被分派net_device实例一样。
5、new_id_store()
作用:向/sys/bus/pci/drivers/xxx/new_id中添加厂商id和设备id时,后台的调用的处理函数;把设备id存入到驱动的id_table中;
参考:【PCIe】bind、unbind、new_id、remove_id解析 - 知乎 (zhihu.com)
6、 struct softnet_data
作用:softnet_data 是在start_kernel 中创建的, 并且,每个cpu一个 softnet_data 变量;这是一个收包过程的一个核心结构,包含着很多重要信息;
参考:一文了解Linux内核网络数据包处理流程 - 知乎 (zhihu.com)
7、 struct napi_struct
作用:内核处理软中断的入口,每个net_device都对应一个napi_struct,驱动在硬中断中将自己的napi_struct挂载到CPU的收包队列softnet_data。
参考:linux napi框架图,2. NAPI机制-CSDN博客
8、 wait_queue_head_t
作用:wait_queue_head_t 是 Linux 内核中用于实现等待队列的基本数据结构。在 Linux 内核中,等待队列是一种常见的机制,用于让进程在某个条件不满足时进入睡眠状态,当条件满足时被唤醒继续执行。
参考:Linux内核之等待队列wait_queue_head_t数据结构用法实例(四十)_wait queue head t-CSDN博客
9、 struct pci_driver
作用:PCI 只是一种总线,具体的 PCI 设备可以是字符设备、网络设备、USB 主机控制器等,因此,一个通过 PCI 总线与系统连接的设备的驱动至少包含以下两部分内容:
1)、PCI 驱动。2)、设备本身的驱动。
在 Linux 内核中,用 pci_driver 结构体来定义 PCI 驱动,该结构体中包含了 PCI 设备的探测/移除、挂起/恢复等函数。
参考:第21章PCI设备驱动之PCI设备驱动结构_pci-skeleton.c-CSDN博客
10、
浙公网安备 33010602011771号