FreeBSD的dts生成dtb文件
近年来,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 伪指令中那样定义 Name。Definition 的缺省值是 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
posted on 2017-07-12 10:57 sichenzhao 阅读(405) 评论(0) 编辑 收藏 举报