美文网首页
Linux设备模型-设备模型介绍

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

作者: 小田BSP | 来源:发表于2020-12-27 10:20 被阅读0次

    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)。

    image.png

    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.txt

    相关文章

      网友评论

          本文标题:Linux设备模型-设备模型介绍

          本文链接:https://www.haomeiwen.com/subject/exqonktx.html