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驱动编写(设备树)的主要内容,如果未能解决你的问题,请参考以下文章

BSP开发学习2平台设备驱动

BSP开发学习2平台设备驱动

Linux设备树语法详解

Linux设备树语法详解

设备树下的LED 驱动实验

Linux设备树语法详解