Linux是一个宏内核,包括了各类设备的驱动。为了减少设备多样性带来的Linux内核驱动开发的复杂度,以及处理热插拔和电源管理等,在Linux内核中引入了设备模型,抽象出一套标准的数据结构和接口,简化Linux内核驱动的开发。
Linux内核设备模型位于/sys
目录下,sysfs文件系统针对设备模型向用户空间展示驱动设备的层次结构。
root@linaro-alip:/sys# ls block bus class dev devices firmware fs kernel module power rk8xx
Linux内核设备模型包括:总线(BUS)、设备(Device)、驱动(Driver)和设备类(Class)。
1、总线(BUS)
用于连接设备(Device)和驱动(Driver),提供与总线相关的设备和驱动注册方法。bus
位于linux系统的/sys
目录下,包含了内核中各种总线类型的平面目录布局。
root@linaro-alip:/sys/bus# ls amba container i2c mipi-dsi pci_express serio workqueue cec cpu iio mmc platform snd_seq clockevents event_source mdio_bus nvmem scsi spi clocksource hid media pci sdio usb
每个总线目录(例:i2c、platform
等)都包含devices/
和drivers/
。
2、设备(Device)
包含了系统中出现的每个设备的符号链接,指向/sys/devices
下的设备目录,对应系统中的硬件,用于描述设备的名称、资源、属性等信息。
root@linaro-alip:/sys/bus/platform/devices# ls -l total 0 lrwxrwxrwx 1 root root 0 Nov 3 17:16 alarmtimer -> ../../../devices/platform/alarmtimer lrwxrwxrwx 1 root root 0 Nov 3 17:16 amba -> ../../../devices/platform/amba lrwxrwxrwx 1 root root 0 Nov 3 17:16 armv7sec.0 -> ../../../devices/platform/armv7sec.0 lrwxrwxrwx 1 root root 0 Nov 3 17:16 cpufreq-dt -> ../../../devices/platform/cpufreq-dt lrwxrwxrwx 1 root root 0 Nov 3 17:16 ddr_timing -> ../../../devices/platform/ddr_timing lrwxrwxrwx 1 root root 0 Nov 3 17:16 display-subsystem -> ../../../devices/platform/display-subsystem lrwxrwxrwx 1 root root 0 Nov 3 17:16 dummy_cpll -> ../../../devices/platform/dummy_cpll
3、驱动(Driver)
包含了每个已为特定总线上的设备而挂载的驱动程序的目录,对应硬件设备的驱动程序。包括:探测、初始化、设备基本操作、电源管理等。
root@linaro-alip:/sys/bus# find . -name drivers ./cec/drivers ./cpu/drivers ./i2c/drivers ./hid/drivers ./iio/drivers ./mmc/drivers ./pci/drivers ./spi/drivers ./usb/drivers ./amba/drivers ./scsi/drivers ./sdio/drivers ./clocksource/drivers ./media/drivers ./nvmem/drivers ./serio/drivers ./event_source/drivers ./workqueue/drivers ./snd_seq/drivers ./container/drivers ./mipi-dsi/drivers ./pci_express/drivers ./platform/drivers ./mdio_bus/drivers ./clockevents/drivers
4、设备类(Class)
为了简化复杂设备驱动开发,可使用设备类实现这些设备驱动的的公共部分。
root@linaro-alip:/sys/class# ls arvo dma iommu net rkvdec spi_transport ata_device drm isku nvme rkvr spidev ata_link dvb kone pci_bus rkwifi switch ata_port extcon koneplus phy rtc thermal backlight gpio konepure power_supply ryos tpm bdi graphics kovaplus pps savu tty block hidraw leds ptp scsi_device udc bluetooth hwmon mdio_bus pwm scsi_disk usbmon bsg i2c-adapter mem pyra scsi_host vc devcoredump i2c-dev misc rc sound video4linux devfreq ieee80211 mmc_host regulator spi_host vpu_service devfreq-event input mtd rfkill spi_master vtconsole
注:本文基于RockPI 4A的Debian系统。
参考:
1、Documentation/zh_CN/filesystems/sysfs.tx
来源:oschina
链接:https://my.oschina.net/u/4702401/blog/4844586