Phytec中国的wiki
support@phytec.cn
热线:0755-61802110-803
除了本篇文档,对于每个BSP我们都有BSP Manual,如 i.MX6UL PD19 BSP Reference Manual,也可以参考阅读其中的Device Tree (DT)
设备树基础
首先,按照 yocto 查询方法中的dts查询 的方法找到对应的dts文件,或者在 BSP版本、设备树、config文件对照表 / BSP version, device tree, config file cross reference table 中查找。
一般文件位于
CPU位宽 | 路径 |
---|---|
32位 | arch/arm/boot/dts |
64位 | arch/arm64/boot/dts/ |
然后根据文件的包含关系(以imx6为例):
可以看出各个文件是按照板级的方式关联在一起的,设备树的优先级规则是按照顺序来决定的,如 imx6dl-phytec-mira-rdk-nand.dts 的开头。
/dts-v1/; #include "imx6dl.dtsi" #include "imx6qdl-phytec-phycore-som.dtsi" #include "imx6qdl-phytec-mira.dtsi" #include "imx6qdl-phytec-mira-peb-eval-01.dtsi" #include "imx6qdl-phytec-peb-wlbt-01.dtsi"
如果在 imx6qdl-phytec-peb-wlbt-01.dtsi 文件中,修改了 imx6dl.dtsi 中的一个配置,则该配置由 imx6qdl-phytec-peb-wlbt-01.dtsi 中的配置为准。
同样的道理,该文件的后面也是对其他文件中的一些配置进行一些修改。如仅仅是使能:
ðphy { max-speed = <100>; }; &fec { status = "okay"; }; &gpmi { status = "okay"; };
因此,一般是不需要修改核心板和SOC的配置文件 imx6qdl-phytec-phycore-som.dtsi 和 imx6dl.dtsi 这些。如果要定制自己的dts文件,请参考 imx6qdl-phytec-mira.dtsi 文件和 imx6dl-phytec-mira-rdk-nand.dts 当作模版来修改。关于设备树也可以参考一下nxp的文档 Introduction to Device Trees。
将dtb文件反编译为dts
在kernel中提供了一些工具来调试dts文件,如dtc,dtc可以自由的将dtb文件和dts文件之间转换,该程序位于kernel的 /scripts/dtc/dtc。它会在你编译dtb后自动编译,也可以 make dtc来编译。
由于dtc可以将dtb转换为dts,而这个dts文件是单一的,也就是说,此时你可以看到一个将多个dtsi文件整合后的dts文件,从此你可以检查各个配置是否正确,尤其是通过多个文件配置的选项。
% make imx6q-phytec-mira-rdk-nand.dtb % cp arch/arm/boot/dts/imx6q-phytec-mira-rdk-nand.dtb . % ./scripts/dtc/dtc -I dtb -O dts -o imx6q-phytec-mira-rdk-nand.dts imx6q-phytec-mira-rdk-nand.dtb
你也可以将两个dtb文件转换为dts文件后,比较他们的区别(手工或者diff),同时,从4.6 kernel版本开始,你还可以用dtx_diff(dtdiff)。在老的kernel上也可以自己寻找dtdiff。
Barebox对设备树的修改
需要注意的是,有部分设备树的配置(如显示部分),还会通过barebox来配置,如在 barebox使用教程 / Introducing barebox 中的 “修改phytec扩展模块的配置”。
它的原理,是在barebox中有如下一系列指令
http://www.barebox.org/doc/latest/commands/misc/of_fixup_status.html
其中of_fixup_status用于使能一些外设,of_display_timings用于设定显示的timing。代码位于(以imx6为例)
https://git.phytec.de/meta-phytec/tree/recipes-bsp/barebox/barebox_2016.11.0-phy7.bb?h=2.1.3-phy5
env_add(d, "expansions/imx6qdl-mira-enable-lvds", """of_fixup_status /soc/aips-bus@02000000/ldb@020e0008/ of_fixup_status /soc/aips-bus@02000000/ldb@020e0008/lvds-channel@0 of_fixup_status /soc/aips-bus@02000000/pwm@02080000 of_fixup_status /soc/aips-bus@02100000/i2c@021a0000/stmpe@44 of_fixup_status /backlight
可以看到这个script通过of_fixup_status使能了一些显示相关的设备。
这个功能主要是为了开发板支持不同的硬件来使用的,如果不需要这个功能,则只需要按照 barebox使用教程 / Introducing barebox 中的方法将他们都注释掉不执行即可。
此时就会完全按照kernel的设备树来工作。
在linux中的 /sys/firmware/devicetree/base 中可以查到各个接口的路径,然后通过本节介绍的指令,就可以在barebox中进行开关。
在kernel的源码中,各个外设的设备树配置文档
在 imx6qdl-phytec-mira.dtsi 中,各种外设的配置方法请参考linux kernel的文档,这些文档位于 Documentation/devicetree/bindings/ 中。以下列出部分:
- pin mux
- https://www.kernel.org/doc/Documentation/pinctrl.txt
- https://www.kernel.org/doc/Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt
- am335x pin mux
- Documentation/devicetree/bindings/pinctrl/pinctrl-single.txt
- 对于寄存器的地址可以参考 Reference Manual 9.3.1 的表格,另外注意在设备树中有0x800的offset
- 对于某个pin有哪些option可以选择请参考datasheet的 Table 4-1 (ZCZ package)
- 对于哪些接口有哪些pin可以选择请参考datasheet的 4.3 Signal Descriptions
- imx6q/dl pin mux
- Documentation/devicetree/bindings/pinctrl/fsl,imx-pinctrl.txt
- Documentation/devicetree/bindings/pinctrl/fsl,imx6q-pinctrl.txt
- Documentation/devicetree/bindings/pinctrl/fsl,imx6dl-pinctrl.txt
- 对于某个pin有哪些option可以选择请参考
- 对于哪些接口有哪些pin可以选择请参考Reference Manual的 4.1.1
- imx6ul pin mux
- Documentation/devicetree/bindings/pinctrl/fsl,imx-pinctrl.txt
- Documentation/devicetree/bindings/pinctrl/fsl,imx6ul-pinctrl.txt
- 对于某个pin有哪些option可以选择请参考 arch/arm/boot/dts/imx6ul-pinfunc.h
- 对于哪些接口有哪些pin可以选择请参考Reference Manual的 4.1.1
- imx6ull pin mux
- Documentation/devicetree/bindings/pinctrl/fsl,imx-pinctrl.txt
- 对于某个pin有哪些option可以选择请参考
- 对于哪些接口有哪些pin可以选择请参考Reference Manual的 4.1.1
- imx7 pin mux
- Documentation/devicetree/bindings/pinctrl/fsl,imx-pinctrl.txt
- Documentation/devicetree/bindings/pinctrl/fsl,imx7d-pinctrl.txt
- 对于某个pin有哪些option可以选择请参考 arch/arm/boot/dts/imx7d-pinfunc.h
- 对于哪些接口有哪些pin可以选择请参考Reference Manual的 8.1.1.1
- am57xx pin mux
- Documentation/devicetree/bindings/pinctrl/pinctrl-single.txt
- include/dt-bindings/pinctrl/dra.h
- AM572Xdatasheet 的Table 4-3是该设备的mux表, 注意寄存器地址在设备树中有-0x1400的offset
- imx8系列
- 8mp
- 8mm
- 对于某个pin有哪些option可以选择请参考 include/dt-bindings/pinctrl/pins-imx8mm.h
- 8m
- am57xx pin mux
- GPIO
- LCD
对于LCD的display timing设置请阅读 设备树中的LCD液晶屏修改方法/LCD display timings in device tree
Documentation/devicetree/bindings/display/panel/panel-common.txt
Documentation/devicetree/bindings/display/panel/panel-lvds.txt
并口LCD介绍
TI
- 图来自 https://events.static.linuxfound.org/sites/events/files/slides/brezillon-drm-kms.pdf
- DE类型的LCD调整方法 http://arm.mini-box.com/index.php?title=Linux_LCD_timing_handling_and_interfacing
- https://www.fujitsu.com/downloads/MICRO/fme/displaycontrollers/an-mb86r01-display-timing-calc-rev1-20.pdf
- 触摸屏
LED & 按键
- 1 wire
- MMC
- DMA
- TI am335x GPMC
- NXP EIM
- Regulator