驱动开发中涉及的结构和函数汇总

在看dpdk的uio驱动实现,涉及到驱动开发知识,为了不打断主学习线路,又不遗漏知识,这里简单做一个记录。

只描述函数的作用,贴附连接,为后续深入学习方便:

 

1、 pci_enable_device()

作用:使能pci设备

参考:pci_enable_device()-CSDN博客

 

2、 struct  cdev

作用:在Linux内核中,使用一个cdev结构体描述一个字符设备

参考:字符设备驱动-CSDN博客

 

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实例一样。

参考:pcie基础知识(三) (360doc.com)

 

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、 

 

posted on 2024-05-11 12:07  lingzshen  阅读(26)  评论(0)    收藏  举报