FreeBSD的dts生成dtb文件

来源:互联网 发布:php程序员都需要什么 编辑:程序博客网 时间:2024/06/08 09:47

近年来,FreeBSD和Linux都采用FDT进行设备管理。

FDT中最重要的就是dtb二进制文件,Unix中都是利用dts生成dtb。接下来详细讲解如何将dts的c语言文件转换成dtb二进制文件。


这里以arm中的Beaglebone black的dts文件为例,首先要对dts文件进行预编译,也就是preprocess。这里利用的编译器是C-preprocess,也就是CPP,CPP的参数描述如下:


-C
从源文件拷贝 C 语言注释到输出文件。如果您省略了这个标志,cpp命令除去除了 cpp 伪指令行中的所有 C 语言注释。
-DName[=Definition]
如同在一个 #define 伪指令中那样定义 NameDefinition 的缺省值是 1
-IDirectory
首先查找 Directory ,再查找针对#include 文件的标准列表上的目录中不是以一个 / (正斜杠)开始的名字。参见先前的关于 #include的讨论。
-P
预处理输入而不为 C 编译器的下一趟执行产生行控制信息。
-qDBCS
指定双字节字符集方式。
-UName
除去所有 Name 的初始定义,这里 Name 是一个预处理器预定义的一个符号(除了四个预处理器方式指示符: __ANSI____EXTENDED__ __SAA__ 和 __SAA_L2__)。在 ANSI 方式中不识别这个标志。
-qlanglvl=Language
为处理选择一个语言级别。Language 可以是 ANSI 、SAA 、SAAL2 或扩展。缺省是扩展。
注:当 Language 是扩展时, _NO_PROTO 不被自动定义。可以使用 -D 选项完成这些定义,这个选项在 /etc/xlc.cfg 文件中。


FreeBSD的beaglebone的dts所需文件如下所示:





将dts文件预编译命令如下:


cpp -P -x assembler-with-cpp -I /freebsd/sys/gnu/dts/include am335x-boneblack.dts done.dts

-x表示编译语言,这里选择的是assembler汇编语言

-I表示include的头文件的路径,这个非常重要,如果不加这个会导致预编译报错,这里选择freebsd的dts头文件的路径

am335x-boneblack.dts 表示需要预编译的dts文件

done.dts 表示预编译生成的文件


运行该命令后,能够在当前目录生成done.dts文件,该文件可以通过dtc命令生成最终需要的dtb二进制文件。dtc命令如下:

dtc -I dts -O dtb -o am335x-boneblack.dtb done.dts


最终生成am335x-boneblack.dtb二进制文件。







原创粉丝点击