以 LED 驱动为例,如果想更换 LED 的 GPIO 引脚,需要修改程序源码、重新编译驱动、重新加载驱动。
在内核中,使用同一芯片的板子,他们使用的外设资源不一样,比如 LED 需要指定哪个引脚,怎么指定?需要在 C 代码中指定。
但是随着 ARM 芯片的流行,越来越多·的没有技术含量的资源文件被保存在内核中。所以 Linux 之父 Linus 大发雷霆:“this whole ARM thing is a fcking pain in the ass”。
于是 Linux 内核开始引进设备树。设备树并不是重新发明出来的,在 Linux 其他平台如 PowerPC,早就使用设备树来描述硬件了。
有一种错误的的观点,“新设备都是用设备树来写的”。设备树不可能用来写驱动,设备树只是用来给内核里的驱动程序,指定硬件信息。
设备树的框架
为什么叫树?
怎么描述这颗树?
我们需要编写设备树文件(dts:device tree source),它需要编译为 dtb(device tree blob)文件,内核使用的是 dtb 文件。
dtb 文件是根本,它的语法很简单。下面是一个设备树的示例:
它对应的 dts 文件如下: