linux驱动编写(设备树)
Posted 费晓行
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux驱动编写(设备树)相关的知识,希望对你有一定的参考价值。
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
对于linux的开发者来说,设备树其实比较熟悉。但是为什么要有设备树,很多人不了解,其实本质来说,还是因为很多linux系统运行在soc上面,上面很多的外设没有真实的总线,这个时候就出现了一个叫platform的虚拟总线。
1、linux驱动的结构
linux驱动基本上还是按照bus、device和driver这种结构运行的。
2、传统的platform驱动、设备编写方法
一般都是用platform_driver_register & platform_device_register实现的。
3、现在的设备注册方法
目前来说,设备注册都是用dtsi文件来实现的
4、dts文件的位置
一般在cpu子目录下面,比如arch/arm/boot/dts
5、编译方法
make dtbs
6、dts嵌套
dts文件之间可以嵌套,即一个dts文件可以被包含在另外一个文件当中
7、dts怎么阅读
当脚本看就可以了,主要就是包含了设备信息、内存范围、时钟、名称等等
uartc: serial@70006200 {
compatible = "nvidia,tegra30-uart", "nvidia,tegra20-uart";
reg = <0x70006200 0x100>;
reg-shift = <2>;
interrupts = <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&tegra_car TEGRA30_CLK_UARTC>;
resets = <&tegra_car 55>;
reset-names = "serial";
dmas = <&apbdma 10>, <&apbdma 10>;
dma-names = "rx", "tx";
status = "disabled";
};
8、为什么需要这个表
有了这个表,就可以省略很多冗余的代码了。也不必为了这些设备调用platform_device_register一个一个去注册了。
9、它和usb、pcie、sata设备总线有什么区别
基本没区别,支持因为其他设备在物理接入的时候,就会有host driver帮忙处理read id、get feature、set feature这些操作,platform只是一个假的总线,所以只能我们提前注册好这些设备。这样后期加载驱动的时候,才能自动将device和driver匹配在一起。
以上是关于linux驱动编写(设备树)的主要内容,如果未能解决你的问题,请参考以下文章