DTC使用小结
0赞虽然不是什么大问题,也是断断续续有人提问,对于新手来说,可能也会耽误一些时间,所以发个篇文章总结一下dtc的使用。
1、dtc是什么?
dtc全称device tree compiler,値译过来就是设备树编译器,稍微修饰一下叫做设备树文件编译器更恰当一些。
起作用呢,顾名思义,是用来编译设备树文件的。大家都知道,一般编译器的作用都是将人能够看懂的东西翻译成机器能看懂的东西,dtc也是一样。dtc将易于开发人员阅读的dts文件,翻译成MCU能够解析的dtb文件。
2、如何获取dtc
办法有两个,一个是编译linux内核过程中会生成dtc,另一个是自行安装。
i) 编译linux内核生成dtc
内核编译成功后,在 <内核根目录>/scripts/dtc 文件夹下会生成可执行程序dtc
ii) 在终端中输入 sudo apt-get install device-tree-compiler 指令可以安装dtc
3、如何使用dtc
i) 编译内核生成的dtc
由于是编译过程中生成的可执行程序,我们必须要告诉终端,dtc在哪里。
由于定位dtc需要结合当前路径,所以此处容易出问题。
ii) 安装的dtc
由于一般安装在默认位置,通常情况下可以直接使用
4、常用命令格式
这是从我写的一篇教程里截的一张图,讲了最常用的两种编译指令。
5、常见问题
i)终端提示找不到dtc工具
请参照第2小节,获取dtc工具。在定位dtc工具时,注意路径。
ii)终端提示找不到相关文件
请检查当前所在的文件夹,配合自己输入的指令是否能定位到相关文件。也可以把文件拷到当前目录下操作。
ii)获取dtc使用帮助
在终端中输入dtc --help,可以获取dtc相关参数作用,命令格式等帮助信息;出现错误时,终端也会打印dtc的使用帮助(前提是终端能够找到dtc)。
6、示例
i) 昨晚有人问我问题,情况是这样的:
可以请教您一个问题吗?
./scripts/dtc/dtc –I dts –O dtb –o devicetree.dtb digilent-zed.dts
生成不了dtb,可以帮我看下吗
这个问题很有意思,我觉得指令本身是没问题的,但是不知道为什么对方运行出问题。最后我帮他远程解决的,解决办法是将指令改为:
scripts/dtc/dtc -I dts -O dtb -o devicetree.dtb digilent-zed.dts
注意路径!!
ii) 类似的有人发帖提问,当时我没有仔细分析,大概回复了一下,让楼主自己解决了问题。
链接如下:http://www.osrc.cn/forum.php?mod=viewthread&tid=1288&extra=page%3D1
简要分析一下,在终端中 "./"表示的是当前文件夹,所以楼主的指令没啥问题。但是,如果是这样,昨天提问的人又是怎么回事,为什么不行呢?关于"./",还有另一重意思,就是:表示执行当前目录下可执行文件,所以从分析来看,./scripts/dtc/dtc 这种输入方式本身是没问题的,而且一般来讲,运行PATH之外的可执行程序,都要加上"./",奇了个怪!有大神路过的话,顺手留个答案吧!
远程协助之前忘记进行问题复现就直接解决了...回头还要仔细看一下这个问题,如果发现根本原因,会再修订一下本文。
7、小结
总的来说,能出问题的通常有两个点:一是dtc工具是否存在,二是路径问题。使用者只要细心地将自己所输入的指令和当前路径结合起来去定位dtc工具和相关文件,一般不会有什么问题。