本帖最后由 andeyqi 于 2023-11-15 09:18 编辑
简介:
从之前的key,led 的评测贴可知,硬件的参数配置和设备树是密不可分,驱动程序解析设备树的参数可以获取配置信息,了解设备树有助于我们调试驱动程序,Uboot启动后会把DTB文件传递给内核,并且DTB 文件所占据的内存空间会保留不会被分配使用,我们可以产看到原始的DTB文件。
1.查看原始的DTB文件
系统启动后会在/sys/firmware 目录下保存设备树相关文件,在/sys/firmware 目录下有如下两个文件
- root@myd-am62x:/sys/firmware# ls
- devicetree fdt
复制代码 fdt 文件为原始的dtb文件可以通过hexdump -C fdt 命令dump fdt文件,输入后可以产看dtb 文件的信息如下,以下只是截取了部分的内容:
- root@myd-am62x:/sys/firmware# hexdump -C fdt
- 00000000 d0 0d fe ed 00 00 f0 00 00 00 00 38 00 00 d6 78 |...........8...x|
- 00000010 00 00 00 28 00 00 00 11 00 00 00 10 00 00 00 00 |...(............|
- 00000020 00 00 17 e4 00 00 d6 40 00 00 00 00 00 00 00 00 |.......@........|
- 00000030 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 |................|
- 00000040 00 00 00 03 00 00 00 11 00 00 17 b5 30 30 30 30 |............0000|
- 00000050 30 30 30 30 30 30 30 30 30 30 30 30 00 20 4b 33 |000000000000. K3|
- 00000060 00 00 00 03 00 00 00 1f 00 00 00 00 54 65 78 61 |............Texa|
- 00000070 73 20 49 6e 73 74 72 75 6d 65 6e 74 73 20 4b 33 |s Instruments K3|
- 00000080 20 41 4d 36 32 35 20 53 6f 43 00 00 00 00 00 03 | AM625 SoC......|
- 00000090 00 00 00 09 00 00 00 06 74 69 2c 61 6d 36 32 35 |........ti,am625|
- 000000a0 00 00 00 00 00 00 00 03 00 00 00 04 00 00 00 11 |................|
- 000000b0 00 00 00 01 00 00 00 03 00 00 00 04 00 00 00 22 |..............."|
- 000000c0 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 31 |...............1|
- 000000d0 00 00 00 02 00 00 00 01 63 68 6f 73 65 6e 00 00 |........chosen..|
- 000000e0 00 00 00 03 00 00 00 18 00 00 17 c3 32 30 32 33 |............2023|
- 000000f0 2e 30 34 2d 67 66 34 65 37 62 30 33 66 2d 64 69 |.04-gf4e7b03f-di|
- 00000100 72 74 79 00 00 00 00 03 00 00 00 11 00 00 00 3d |rty............=|
- 00000110 73 65 72 69 61 6c 32 3a 31 31 35 32 30 30 6e 38 |serial2:115200n8|
- 00000120 00 00 00 00 00 00 00 03 00 00 01 ad 00 00 00 49 |...............I|
- 00000130 63 6f 6e 73 6f 6c 65 3d 74 74 79 53 32 2c 31 31 |console=ttyS2,11|
- 00000140 35 32 30 30 6e 38 20 65 61 72 6c 79 63 6f 6e 3d |5200n8 earlycon=|
- 00000150 6e 73 31 36 35 35 30 61 2c 6d 6d 69 6f 33 32 2c |ns16550a,mmio32,|
- 00000160 30 78 30 32 38 30 30 30 30 30 20 6d 74 64 70 61 |0x02800000 mtdpa|
- 00000170 72 74 73 3d 73 70 69 2d 6e 61 6e 64 30 3a 35 31 |rts=spi-nand0:51|
- 00000180 32 6b 28 6f 73 70 69 2e 74 69 62 6f 6f 74 33 29 |2k(ospi.tiboot3)|
- 00000190 2c 32 6d 28 6f 73 70 69 2e 74 69 73 70 6c 29 2c |,2m(ospi.tispl),|
- 000001a0 34 6d 28 6f 73 70 69 2e 75 2d 62 6f 6f 74 29 2c |4m(ospi.u-boot),|
- 000001b0 32 35 36 6b 28 6f 73 70 69 2e 65 6e 76 29 2c 32 |256k(ospi.env),2|
- 000001c0 35 36 6b 28 6f 73 70 69 2e 65 6e 76 2e 62 61 63 |56k(ospi.env.bac|
- 000001d0 6b 75 70 29 2c 39 38 30 34 38 6b 40 33 32 6d 28 |kup),98048k@32m(|
- 000001e0 6f 73 70 69 2e 72 6f 6f 74 66 73 29 2c 32 35 36 |ospi.rootfs),256|
- 000001f0 6b 40 31 33 30 38 31 36 6b 28 6f 73 70 69 2e 70 |k@130816k(ospi.p|
- 00000200 68 79 70 61 74 74 65 72 6e 29 3b 6f 6d 61 70 32 |hypattern);omap2|
- 00000210 2d 6e 61 6e 64 2e 30 3a 32 6d 28 4e 41 4e 44 2e |-nand.0:2m(NAND.|
- 00000220 74 69 62 6f 6f 74 33 29 2c 32 6d 28 4e 41 4e 44 |tiboot3),2m(NAND|
复制代码 从dump 的dtb 数据头部对应的是header 信息按照大端格式保存的。第一个word 为magic(0xd00dfeed)和设备树规范文档的描述文档是一致的。
2.查看节点信息
/sys/firmware 目录下fdt 文件对应着原始的Dtb 文件,另外一个devicetree 文件夹对应着设备树节点信息,通过tree dump下目录结构信息如下可知每个文件夹代表这个一个节点信息,文件夹下对应的文件对应着节点属性信息。
3 查看key-gpio节点信息
我们在之前的实验中(https://www.eefocus.com/forum/thread-229593-1-1.html) 有修改dts文件更新按键信息的处理,我们通过对应的gpio-keys 节点读取键值信息属性信息,gpio-keys节点属性信息如下:
- root@myd-am62x:/sys/firmware/devicetree/base# tree gpio-keys/
- gpio-keys/
- |-- autorepeat
- |-- compatible
- |-- name
- |-- pinctrl-0
- |-- pinctrl-names
- `-- user
- |-- gpios
- |-- label
- |-- linux,code
- |-- name
- `-- phandle
复制代码 我们之前修改的 user 下的linux,code 属性为0x101,我们通过节点信息读取下看看是否和我们设置的匹配。
- de t@myd-am62x:/sys/firmware/devicetree/base/gpio-keys/user# hexdump -x linux,cod
- 0000000 0000 0101
- 0000004
复制代码 读取的结果跟我们预期是一致的。
我们再看下我们的gpio-keys 在设备树中的描述如下:
- gpio-keys {
- compatible = "gpio-keys";
- autorepeat;
- pinctrl-names = "default";
- pinctrl-0 = <&main_user_key_pins_default>;
- user: user {
- label = "GPIO Key USER1";
- linux,code = <BTN_1>;
- gpios = <&main_gpio0 36 GPIO_ACTIVE_LOW>;
- };
- };
复制代码 对比文件系统的gpio-keys 节点的节点配置信息和dts文件的结构可抑制,他们的对应关系是吻合的,其他节点也是类似的操作再次就不重复验证了。
===============资料分割线===============
|