背景
本文介绍一些设备树相关的知识,包括设备树文件在哪,如何修改,如何编译,如何应用等。这些问题在我做设备驱动开发的时候踩了很多坑,找了很多资料。本文包含了两大块内容,首先是如何修改设备树,然后是设备树的参考文件在哪里找
一、修改设备树文件的两种方式
1.在机器上反编译DTB文件直接修改
首先找到/boot/目录下系统所使用的dtb文件,具体文件需要去官网查看,我在下文中会列出nano和Xavier的文件名,其他机器可以自行去查找。
找到文件后把他拷贝到外边的一个单独目录,建议拷贝两份,一份用于备份,一份做修改。
使用dtc命令进行反编译。比如你的DTB文件是A.DTB,那么使用
sudo dtc -I dtb -O dts A.dtb > A.dts
这样反编译出的A.DTS文件就可以用于修改了。加入你的修改以后,使用
sudo dtc -I dts -O dtb A.dts > A.dtb
得到新的dtb文件,然后拷贝到/boot/目录下替代原来的dtb,最后重启就可以生效了。
Xavier在机器上的文件名是
tegra194-p2888-0001-p2822-0000.dtb
Nano有多个版本,如果你不确定,在你的机器上运行
cat /proc/device-tree/nvidia,dtsfilename
来确定你的版本,比如我的nano是
tegra210-p3448-0000-p3449-0000-b00.dts
不同机器改不同的文件就OK了。
2.修改内核源码中的DTS文件
在NVIDIA下载中心下载你机器内核匹配的的源代码
比如最新的Xavier的32.6.1
注意不同的产品下载不同的源码,每个名字都是public_sources.tbz2.,解压后 \public_sources\Linux_for_Tegra\source\public目录下找到Kernel_src,这个才是真正的内核源码文件,还需要对它进行解压,解压完成后找到dtb的位置。
Xavier
kernel_src/hardware/nvidia/platform/t19x/galen/kernel-dts
这个位置文件有很多dts文件,Xavier的代码名是 tegra194-p2888-0001-p2822-0000。比如当我需要修改spi设备树相关信息时,我需要找到tegra194-p2888-0001-p2822-0000相关的文件,这里是
kernel-dts/common/tegra194-p2888-0001-p2822-0000-common.dtsi
那么修改这个文件之后,对整个内核进行编译就可以了,不会编译的可以查看我之前的文章。
编译之后会在生成目录下看到这个文件
okernel/arch/arm64/boot/dts/tegra194-p2888-0001-p2822-0000.dtb
这个文件放到机器上替换原有文件就可以用了,官网的说法是尽量使用flash命令进行刷机,这个方法需要你在host主机上安装jetson SDK manager来刷机,具体刷机命令为
sudo ./flash.sh -k kernel-dtb jetson-xavier mmcblk0p1
我一般是直接复制替换,因为我会在jetson上直接编译内核。目前没有发现两种的区别,大家酌情处理。
nano
nano的目录大同小异
kernel_src/hardware/nvidia/platform/t210/porg/kernel-dts
在这个目录下再去找你机器相关dts,比如修改spi,需要修改
/kernel-dts/tegra210-porg-p3448-common.dtsi
编译什么的都大同小异,但是使用jetson SKD manager刷dtb的命令不一样
sudo ./flash.sh -r -k DTB jetson-nano-qspi-sd mmcblk0p1
这个命令我没用过,我都是直接复制了。
二.修改设备树参考哪些文档?
jetson的设备树属性的相关文档放在以下目录:
public_sources\Linux_for_Tegra\source\public\kernel_src\kernel_src\kernel\kernel-4.9\Documentation\devicetree\bindings
如果你要修改SPI相关的设备树信息,那么就找到上述目录的SPI子文件夹,可以看到
tegra114就是jetson Xavier的相关spi属性信息。比如SPI速度怎么设置
本期文章就到这里。