Lia*_*lly 7 c linux arm linux-kernel embedded-linux
摘要
我目前正在使用一些自定义板的自定义驱动程序编译Linux内核(内核,模块和DTB).有时我会编译内核并意识到DTB文件中的兼容性字符串不是自定义驱动程序要查找的内容.现在,我可以解决这个问题的唯一方法是修改DTS或内核驱动程序,使字符串匹配,然后再次重新编译内核.有没有办法我可以编辑DTB文件来更新兼容性字符串?
尝试失败
我已经能够使用以下命令将DTB文件反编译回DTS文件:
dtc -I dtb -o <filename>.dts -<filename>.dtb
Run Code Online (Sandbox Code Playgroud)
但是,如果我修改DTS文件并使用以下命令重新编译:
dtc -I dts -o <filename>.dtb -<filename>.dts
Run Code Online (Sandbox Code Playgroud)
内核不会加载重新编译的DTB文件
Lia*_*lly 11
只是想用两年多的经验来更新这个主题。
Linux 存储库中的 DTS 文件是 DTS和C 预处理器指令(#include、#define 等)的混合体。因此,当编译原始 DTB 时,预处理器会链接到引用的文件以创建纯 DTS 文件。dtc将单个 DTS 文件转换为 DTB 文件。
所以如果你想修改内核DTS文件并编译它,那么你有两个选择:
make dtbs它就会自动处理所有这些cpp -nostdinc -I <include dir> -undef -x assembler-with-cpp ...),然后使用 编译输出dtc。 您为什么不生成新的dtb?
DTB(设备树blob /二进制),是代表板子硬件组件的硬件数据库。
U-boot将板信息结构传递给内核,该信息结构是从U-Boot中的头文件派生的。
DTB由特殊的编译器编译,该编译器以适当的格式生成二进制文件,以供U-Boot和Linux理解。
DTC(设备树编译器)将设备树文件转换为U-Boot和Linux内核可以理解的机器可读二进制文件。
使用DTC的直接方法。
$ dtc -O dtb -o arm_board.dtb -b 0 arm_board.dts
Run Code Online (Sandbox Code Playgroud)
从dtb获取文本的设备树。
dtc -I dtb -O dts arm_board.dtb
Run Code Online (Sandbox Code Playgroud)
board.dts是上述命令创建的二进制文件。-O指定输出格式。-o标志是输出文件。-b 0指定物理启动CPU。
然后做
$ make ARCH=arm arm_board.dtb
Run Code Online (Sandbox Code Playgroud)
另一种方法可能只是使用make dtbs它将调用dtc的方法。arch/arm/boot/dts/Makefile列出了在构建时应生成哪些DTB,这是另一种编译方法。make会将其放在内核树的此位置/arch/arm/boot/dts
看看这个傻瓜设备树
| 归档时间: |
|
| 查看次数: |
9863 次 |
| 最近记录: |