内核文件系统devfs、sysfs

一、设备驱动

1、字符设备驱动(基于文件,以字节单位接受输⼊、返回输出 file_operations

  字符设备驱动最多,例如led、gpio、i2c 、spi等常用的都是字符设备,杂项设备也一种特殊的字符设备

2、块设备驱动(基于文件,块单位接受输⼊、返回输出 block_device_operations

  以存储块为基础的存储设备,如NAND、EMMC 、 SD、U盘等块设备

3、网络设备驱动(基于⽹络套接字 net_device

  有线、无线网络设备均属于网络设备,USB WIFI网卡就属于多种设备驱动(字符+网络设备)

二、devfs 文件系统(2.6内核以前使用)

  1、devfs挂载于/dev目录下,提供了⼀种类似于⽂件的⽅法来管理位于/dev⽬录下的所有设备,在/dev目录下每个文件对应一个设备,我们通过对文件的读写、控制以实现设备访问。

  缺点:①不确定的设备映射;②没有足够的主、辅设备号;③机制和策略都放到内核空间。

  基于上述的缺点,使用用户空间的工具udev实现设备访问(兼容2.6之后引入的工具),其实udev实际使用sysfs提供的信息来实现所有的devfs的功能

 

三、sysfs文件系统(2.6内核之后使用)

  1、sysfs文件挂载/sys目录下,它把实际连接到系统上的设备和总线组织成⼀个分级的⽂件,它们可以由⽤⼾空间 存取,向⽤⼾空间导出内核数据结构以及它们的属性。

  2、sysfs 分离出device_driver 、device,两者通过bus_type进⾏匹配,⼀旦匹配成功,xxx_driver的 probe函数则被执⾏(xxx为总线名,如platform pci i2c spi usb等)。它是通过kobject⼦系统来建⽴这个信息的,当⼀个kobject被创建的时候,对应的⽂件和⽬录也就被 创建了,既然每个设备在sysfs中都有唯⼀对应的⽬录。

  3、sysfs通过cdev_init和cdev_add添加字符设备,通过class_create和 device_create函数往sys⽂件系统中添加设备,udev检测到/sys⽬录的变动会根据变化在/dev⽬录 下创建对应的设备节点

 

四、platform 设备驱动框架(platform 驱动并不是独⽴于字符设备驱动、块设备驱动和⽹络设备驱动之外的其他种类的驱 动。platform 只是为了驱动的分离与分层⽽提出来的⼀种框架,其驱动的具体实现还是需要字符设 备驱动、块设备驱动或⽹络设备驱动)

  1、从Linux2.6内核之后,引⼊了⼀套新的驱动管理和注册机制:platform_bus、platform_device和platform_driver。设备使用platform_device(后续开发可用DTS替代), 驱动使用platform_driver表示。

 

六、用户空间访问驱动程序

  1、通过dev设备文件访问,“read/write/ioctl”访问

  2、通过procfs接口访问

  3、通过sysfs访问

  

  

 

posted @ 2024-04-25 10:29  zbl1118  阅读(170)  评论(0)    收藏  举报