驱动Linux驱动之dts加载之道(加载dtsLinux)
驱动Linux驱动之dts加载之道
Linux驱动开发的核心就是内核编译,而这种编译必不可少地要利用Device Tree Source(dts)文件来描述硬件结构,方便内核对硬件进行驱动加载。也就是说,dts文件是开发硬件驱动过程中一个不可缺少的关键,本文将详细深入剖析Linux硬件设备驱动开发中,dts文件如何载入内核、解析以及如何有效利用它进行设备驱动调试的过程。
首先,在Linux驱动开发过程中,dts文件是将硬件芯片结构描述成内核代码,以便内核进行驱动加载,dts文件主要是定义硬件芯片的物理特性为核心的描述,并定义外设的地址空间,告知内核当前硬件所挂接的总线(比如I2C、SPI等),还有中断等信息,dts文件通过描述硬件设备的物理结构,将此硬件连接到存放在内核表格中的特定驱动程序中。
完成硬件特性描述后,dts文件将通过编译器(dtc)编译成内核能够识别并加载的内核二进制设备树表(dtb)文件格式,也就是具体化的dts源文件。完成这步之后,编译出来的dtb文件将和内核一起烧写到硬件的Flash中,内核启动时即可读取这个dtb文件,定位出具体的硬件结构,这样内核就知道把相关总线和外设驱动程序加载到内核内,初始化硬件结构,并生成控制设备节点等。
例如,在Linux设备中构建一个I2C总线,dts文件就可以用以下代码定义:
&i2c0 {
status = “okay”;
clock-frequency = ;
pinctrl-names = “default”;
pinctrl-0 = ;
};
&pinctrl_i2c0 {
i2c0-sda {
gpio-num = ;
output-high;
};
i2c0-scl {
gpio-num = ;
output-high;
};
};
以上的定义就能确定I2C0总线在Linux中的使用,一旦把dts编译成为dtb后放入内核,内核根据这些dts信息就可以正确的加载相应的设备驱动。
因此,在Linux硬件驱动开发过程中,dts文件可以用来定义硬件的物理特性,提供具体总线、地址和中断信息,是一种让内核根据dts文件定义设备结构并加载驱动的有效方式,让初学者可以更好更简单的开发Linux系统硬件设备驱动。