第七章 驱动程序开发-LED驱动-7.7.设备树的引入

7.7.1.设备树简介

什么是设备树?到处可以听得见的名词,先看了一下ZDYZ的43章,引用:

第七章 驱动程序开发-LED驱动-7.7.设备树的引入_第1张图片

第七章 驱动程序开发-LED驱动-7.7.设备树的引入_第2张图片

     “cpu0 这个设备节点信息,这个节点信息描述了I.MX6ULL 这颗 SOC 所使用的 CPU 信息,比如架构是 cortex-A7,频率支持 996MHz、792MHz、528MHz、396MHz 和 198MHz 等等。”  先简单了解下就ok。

    设备树下的GPIO操作:

第七章 驱动程序开发-LED驱动-7.7.设备树的引入_第3张图片

     “其实对于大多数的 32 位 SOC 而言,引脚的设置基本都是这两方面,因此 Linux 内核针对 PIN 的配置推出了 pinctrl 子系统,对于 GPIO的配置推出了 gpio 子系统。”

7.7.2.设备树语法

    可以看下开发手册,这里不多说了。

    体验:查看下6ull的设备树文件.dts,从compatible看出它可以兼容"fsl,imx6ull-14x14-evk", "fsl,imx6ull",从model中看出是"Freescale i.MX6 ULL 14x14 EVK Board",也就是抄的官网的EVK板子。

第七章 驱动程序开发-LED驱动-7.7.设备树的引入_第4张图片

Make编译看下,make dtbs V=1,生成.dtb文件。

第七章 驱动程序开发-LED驱动-7.7.设备树的引入_第5张图片

7.7.3.设备树的使用

    基于设备树的platform_device和platform_driver是如何匹配的呢?看OF style match过程。当匹配之后,platform_driver如何获取到platform_device的资源呢?前面是在platform_driver中使用一个platform_get_resource()获取,这里应该是类似的吧。

第七章 驱动程序开发-LED驱动-7.7.设备树的引入_第6张图片

    如果设备树的节点中有reg、IRQ属性,内核会将reg属性转化成内存属性(IORESOURCE_MEM ),IRQ转化成中断属性(IORESOURCE_IRQ),然后就可以使用platform_get_resource()获取。对于不能转化成platform-device的设备怎么去获取呢?

第七章 驱动程序开发-LED驱动-7.7.设备树的引入_第7张图片

    分为3类函数:找到节点、找到属性和获取属性。

    内核文档 Documentation/devicetree/bindings/做得好的厂家也会提供设备树的说明文档,找了一个pwm-backlight.txt看下,还能看懂的样子。

1 pwm-backlight bindings
  2
  3 Required properties:
  4   - compatible: "pwm-backlight"
  5   - pwms: OF device-tree PWM specification (see PWM binding[0])
  6   - brightness-levels: Array of distinct brightness levels. Typically these
  7       are in the range from 0 to 255, but any range starting at 0 will do.
  8       The actual brightness level (PWM duty cycle) will be interpolated
  9       from these values. 0 means a 0% duty cycle (darkest/off), while the
 10       last value in the array represents a 100% duty cycle (brightest).
 24 Example:
 25
 26     backlight {
 27         compatible = "pwm-backlight";
 28         pwms = <&pwm 0 5000000>; //5MHz?
 29
 30         brightness-levels = <0 4 8 16 32 64 128 255>; //CCR?
 31         default-brightness-level = <6>;
 32
 33         power-supply = <&vdd_bl_reg>;
 34         enable-gpios = <&gpio 58 0>;
 35     };                      

 

你可能感兴趣的:(I.MX6)