Linux设备模型-设备模型介绍

给你一囗甜甜゛ 提交于 2020-12-27 12:39:17

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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!