嵌入式


设备树

<p>在Linux3.x版本后,arch/arm/plat-xxx和arch/arm/mach-xxx中,描述板级细节的代码被大量取消,取而代之的是设备树,其目录位于arch/arm/boot/dts</p> <h3>组成</h3> <p>1个dts文件+n个dtsi文件,它们编译而成的dtb文件就是真正的设备树</p> <ul> <li> <p>soc厂商会把soc公共的特性和多块开发板公用的特性提炼为dtsi,而dts则负责描述某个具体的产品(开发板)的特性。dts直接或间接的包含多个dtsi(类似于c语言的头文件),就体现了一个完整的产品(开发板)所有的特性。以solidrun公司的hummingboard为例,其组成为 <img src="https://www.showdoc.cc/server/api/common/visitfile/sign/e937c202d1a39368d28379b383334578?showdoc=.jpg" alt="" /></p> </li> <li>此外,dts/dtsi兼容c语言的一些语法,能使用宏定义,也能包含.h文件</li> </ul> <h3>例子</h3> <p>下不难发现dts文件内容很少,只有一些板级的特征,大部分公共的硬件描述都在dtsi文件中</p> <ul> <li> <p>imx6dl-hummingboard.dts 文件节选</p> <pre><code>/dts-v1/; #include "imx6dl.dtsi" #include "imx6qdl-microsom.dtsi" #include "imx6qdl-microsom-ar8035.dtsi" / { model = "SolidRun HummingBoard DL/Solo"; compatible = "solidrun,hummingboard", "fsl,imx6dl"; ir_recv: ir-receiver { compatible = "gpio-ir-receiver"; gpios = &lt;&amp;gpio1 2 1&gt;; pinctrl-names = "default"; pinctrl-0 = &lt;&amp;pinctrl_hummingboard_gpio1_2&gt;; }; regulators { compatible = "simple-bus"; reg_3p3v: 3p3v { compatible = "regulator-fixed"; regulator-name = "3P3V"; regulator-min-microvolt = &lt;3300000&gt;; regulator-max-microvolt = &lt;3300000&gt;; regulator-always-on; }; } &amp;i2c1 { pinctrl-names = "default"; pinctrl-0 = &lt;&amp;pinctrl_hummingboard_i2c1&gt;; rtc: pcf8523@68 { compatible = "nxp,pcf8523"; reg = &lt;0x68&gt;; }; };</code></pre> </li> <li> <p>imx6dl.dtsi文件节选</p> <pre><code>/ { aliases { /*省略无关代码*/ } soc { #address-cells = &lt;1&gt;; #size-cells = &lt;1&gt;; compatible = "simple-bus"; interrupt-parent = &lt;&amp;intc&gt;; ranges; /*省略无关代码*/ timer@00a00600 { compatible = "arm,cortex-a9-twd-timer"; reg = &lt;0x00a00600 0x20&gt;; interrupts = &lt;1 13 0xf01&gt;; clocks = &lt;&amp;clks IMX6QDL_CLK_TWD&gt;; }; aips-bus@02000000 { /* AIPS1 */ compatible = "fsl,aips-bus", "simple-bus"; #address-cells = &lt;1&gt;; #size-cells = &lt;1&gt;; reg = &lt;0x02000000 0x100000&gt;; ranges; /*省略无关代码*/ gpio1: gpio@0209c000 { compatible = "fsl,imx6q-gpio", "fsl,imx35-gpio"; reg = &lt;0x0209c000 0x4000&gt;; interrupts = &lt;0 66 IRQ_TYPE_LEVEL_HIGH&gt;, &lt;0 67 IRQ_TYPE_LEVEL_HIGH&gt;; gpio-controller; #gpio-cells = &lt;2&gt;; interrupt-controller; #interrupt-cells = &lt;2&gt;; }; /*省略无关代码*/ i2c1: i2c@021a0000 { #address-cells = &lt;1&gt;; #size-cells = &lt;0&gt;; compatible = "fsl,imx6q-i2c", "fsl,imx21-i2c"; reg = &lt;0x021a0000 0x4000&gt;; interrupts = &lt;0 36 IRQ_TYPE_LEVEL_HIGH&gt;; clocks = &lt;&amp;clks IMX6QDL_CLK_I2C1&gt;; status = "disabled"; }; }; /*省略无关代码*/ }; };</code></pre> </li> </ul>

页面列表

ITEM_HTML