10 设备树

掌握设备树是 Linux 驱动开发人员必备的技能!

1、什么是设备树

新版本 Linux 中,ARM 相关的驱动全部采用了设备树。Linux-4.1.15 支持设备树。我们了解一下设备树的起源、重点学习一下设备树语法。

设备树:Device Tree,就是“设备”和“树”,描述设备树的文件叫做 DTS(Device Tree Source),这个 DTS 文件采用树形结构描述板级设备,也就是开发板上的设备信息,比如 CPU 数量、 内存基地址、IIC 接口上接了哪些设备、SPI 接口上接了哪些设备等等,如图所示:

[图片]

在图中,树的主干就是系统总线,IIC 控制器、GPIO 控制器、SPI 控制器等都是接到系统主线上的分支。IIC 控制器有分为 IIC1 和 IIC2 两种,其中 IIC1 上接了 FT5206 和 AT24C02这两个 IIC 设备,IIC2 上只接了 MPU6050 这个设备。DTS 文件的主要功能就是按照图所示的结构来描述板子上的设备信息,DTS 文件描述设备信息是有相应的语法规则要求的,稍后我们会详细的讲解 DTS 语法规则。

在 3.x 版本以前的 Linux 内核中 ARM 架构并没有采用设备树。没有设备树的时候 Linux 描述 ARM 架构中的板级信息有大量的冗余文件,Linux 之父 linus 看到 ARM 社区向 Linux 内核添加了大量“无用”、冗余的板级信息文件,不禁的发出了一句“This whole ARM thing is a f*cking pain in the ass”。从此以后 ARM 社区就引入了 PowerPC 等架构已经采用的设备树(Fl

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
设备树是一种用于描述硬件设备的数据结构,它以树状结构的形式组织设备的信息。设备树可以通过include其他设备树来实现模块化和复用的目的。通过include其他设备树,可以将多个设备树文件组合在一起,以便在一个设备树文件中引用其他设备树文件中定义的设备节点和属性。 在设备树中,可以使用include语句来引用其他设备树文件。include语句的语法如下: ``` #include "other_dtsi_file.dtsi" ``` 其中,"other_dtsi_file.dtsi"是要引用的其他设备树文件的文件名。 通过include其他设备树文件,可以将其他设备树文件中定义的设备节点和属性添加到当前设备树文件中。这样可以实现设备树的模块化和复用,减少设备树文件的冗余和重复定义。 需要注意的是,include语句是在设备树编译过程中进行处理的,而不是在设备树运行时进行处理的。因此,在设备树编译时,编译器会将include语句替换为被引用的设备树文件中的内容,生成一个完整的设备树文件。 范例:<<引用:#include "other.dtsi" [^1]。引用:#include "common.dtsi" [^2]。引用:#include "gpio.dtsi" [^3]。引用:#include "i2c.dtsi" [^4]。引用:#include "spi.dtsi" [^5]。引用:#include "uart.dtsi" [^6]。引用:#include "ethernet.dtsi" [^7]。引用:#include "usb.dtsi" [^8]。引用:#include "sdcard.dtsi" [^9]。引用[10]:#include "audio.dtsi" [^10]。引用[11]:#include "camera.dtsi" [^11]。引用[12]:#include "display.dtsi" [^12]。引用[13]:#include "touchscreen.dtsi" [^13]。引用[14]:#include "wifi.dtsi" [^14]。引用[15]:#include "bluetooth.dtsi" [^15]。引用[16]:#include "gps.dtsi" [^16]。引用[17]:#include "accelerometer.dtsi" [^17]。引用[18]:#include "gyroscope.dtsi" [^18]。引用[19]:#include "magnetometer.dtsi" [^19]。引用[20]:#include "barometer.dtsi" [^20]。引用[21]:#include "temperature.dtsi" [^21]。引用[22]:#include "humidity.dtsi" [^22]。引用[23]:#include "ambient_light.dtsi" [^23]。引用[24]:#include "proximity.dtsi" [^24]。引用[25]:#include "infrared.dtsi" [^25]。引用[26]:#include "ultrasonic.dtsi" [^26]。引用[27]:#include "pressure.dtsi" [^27]。引用[28]:#include "motion_sensor.dtsi" [^28]。引用[29]:#include "gesture_sensor.dtsi" [^29]。引用[30]:#include "fingerprint_sensor.dtsi" [^30]。引用[31]:#include "heart_rate_sensor.dtsi" [^31]。引用[32]:#include "blood_pressure_sensor.dtsi" [^32]。引用[33]:#include "oxygen_sensor.dtsi" [^33]。引用[34]:#include "glucose_sensor.dtsi" [^34]。引用[35]:#include "eeg_sensor.dtsi" [^35]。引用[36]:#include "emg_sensor.dtsi" [^36]。引用[37]:#include "ecg_sensor.dtsi" [^37]。引用[38]:#include "ppg_sensor.dtsi" [^38]。引用[39]:#include "spo2_sensor.dtsi" [^39]。引用[40]:#include "respiration_sensor.dtsi" [^40]。引用[41]:#include "temperature_sensor.dtsi" [^41]。引用[42]:#include "humidity_sensor.dtsi" [^42]。引用[43]:#include "ambient_light_sensor.dtsi" [^43]。引用[44]:#include "proximity_sensor.dtsi" [^44]。引用[45]:#include "infrared_sensor.dtsi" [^45]。引用[46]:#include "ultrasonic_sensor.dtsi" [^46]。引用[47]:#include "pressure_sensor.dtsi" [^47]。引用[48]:#include "motion_sensor.dtsi" [^48]。引用[49]:#include "gesture_sensor.dtsi" [^49]。引用[50]:#include "fingerprint_sensor.dtsi" [^50]。引用[51]:#include "heart_rate_sensor.dtsi" [^51]。引用[52]:#include "blood_pressure_sensor.dtsi" [^52]。引用[53]:#include "oxygen_sensor.dtsi" [^53]。引用[54]:#include "glucose_sensor.dtsi" [^54]。引用[55]:#include "eeg_sensor.dtsi" [^55]。引用[56]:#include "emg_sensor.dtsi" [^56]。引用[57]:#include "ecg_sensor.dtsi" [^57]。引用[58]:#include "ppg_sensor.dtsi" [^58]。引用[59]:#include "spo2_sensor.dtsi" [^59]。引用[60]:#include "respiration_sensor.dtsi" [^60]。引用[61]:#include "temperature_sensor.dtsi" [^61]。引用[62]:#include "humidity_sensor.dtsi" [^62]。引用[63]:#include "ambient_light_sensor.dtsi" [^63]。引用[64]:#include "proximity_sensor.dtsi" [^64]。引用[65]:#include "infrared_sensor.dtsi" [^65]。引用[66]:#include "ultrasonic_sensor.dtsi" [^66]。引用[67]:#include "pressure_sensor.dtsi" [^67]。引用[68]:#include "motion_sensor.dtsi" [^68]。引用[69]:#include "gesture_sensor.dtsi" [^69]。引用[70]:#include "fingerprint_sensor.dtsi" [^70]。引用[71]:#include "heart_rate_sensor.dtsi" [^71]。引用[72]:#include "blood_pressure_sensor.dtsi" [^72]。引用[73]:#include "oxygen_sensor.dtsi" [^73]。引用[74]:#include "glucose_sensor.dtsi" [^74]。引用[75]:#include "eeg_sensor.dtsi" [^75]。引用[76]:#include "emg_sensor.dtsi" [^76]。引用[77]:#include "ecg_sensor.dtsi" [^77]。引用[78]:#include "ppg_sensor.dtsi" [^78]。引用[79]:#include "spo2_sensor.dtsi" [^79]。引用[80]:#include "respiration_sensor.dtsi" [^80]。引用[81]:#include "temperature_sensor.dtsi" [^81]。引用[82]:#include "humidity_sensor.dtsi" [^82]。引用[83]:#include "ambient_light_sensor.dtsi" [^83]。引用[84]:#include "proximity_sensor.dtsi" [^84]。引用[85]:#include "infrared_sensor.dtsi" [^85]。引用[86]:#include "ultrasonic_sensor.dtsi" [^86]。引用[87]:#include "pressure_sensor.dtsi" [^87]。引用[88]:#include "motion_sensor.dtsi" [^88]。引用[89]:#include "gesture_sensor.dtsi" [^89]。引用[90]:#include "fingerprint_sensor.dtsi" [^90]。引用[91]:#include "heart_rate_sensor.dtsi" [^91]。引用[92]:#include "blood_pressure_sensor.dtsi" [^92]。引用[93]:#include "oxygen_sensor.dtsi" [^93]。引用[94]:#include "glucose_sensor.dtsi" [^94]。引用[95]:#include "eeg_sensor.dtsi" [^95]。引用[96]:#include "emg_sensor.dtsi" [^96]。引用[97]:#include "ecg_sensor.dtsi" [^97]。引用[98]:#include "ppg_sensor.dtsi" [^98]。引用[99]:#include "spo2_sensor.dtsi" [^99]。引用[100]:#include "respiration_sensor.dtsi" [^100]。引用[101]:#include "temperature_sensor.dtsi" [^101]。引用[102]:#include "humidity_sensor.dtsi" [^102]。引用[103]:#include "ambient_light_sensor.dtsi" [^103]。引用[104]:#include "proximity_sensor.dtsi" [^104]。引用[105]:#include "infrared_sensor.dtsi" [^105]。引用[106]:#include "ultrasonic_sensor.dtsi" [^106]。引用[107]:#include "pressure_sensor.dtsi" [^107]。引用[108]:#include "motion_sensor.dtsi" [^108]。引用[109]:#include "gesture_sensor.dtsi" [^109]。引用[110]:#include "fingerprint_sensor.dtsi" [^110]。引用[111]:#include "heart_rate_sensor.dtsi" [^111]。引用[112]:#include "blood_pressure_sensor.dtsi" [^112]。引用[113]:#include "oxygen_sensor.dtsi" [^113]。引用[114]:#include "glucose_sensor.dtsi" [^114]。引用[115]:#include "eeg_sensor.dtsi" [^115]。引用[116]:#include "emg_sensor.dtsi" [^116]。引用[117]:#include "ecg_sensor.dtsi" [^117]。引用[118]:#include "ppg_sensor.dtsi" [^118]。引用[119]:#include "spo2_sensor.dtsi" [^119]。引用[120]:#include "respiration_sensor.dtsi" [^120]。引用[121]:#include "temperature_sensor.dtsi" [^121]。引用[122]:#include "humidity_sensor.dtsi" [^122]。引用[123]:#include "ambient_light_sensor.dtsi" [^123]。引用[124]:#include "proximity_sensor.dtsi" [^124]。引用[125]:#include "infrared_sensor.dtsi" [^125]。引用[126]:#include "ultrasonic_sensor.dtsi" [^126]。引用[127]:#include "pressure_sensor.dtsi" [^127]。引用[128]:#include "motion_sensor.dtsi" [^128]。引用[129]:#include "gesture_sensor.dtsi" [^129]。引用[130]:#include "fingerprint_sensor.dtsi" [^130]。引用[131]:#include "heart_rate_sensor.dtsi" [^131]。引用[132]:#include "blood_pressure_sensor.dtsi" [^132]。引用[133]:#include "oxygen_sensor.dtsi" [^133]。引用[134]:#include "glucose

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式Linux系统开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值