摘要
我目前正在编译Linux内核(内核,modules和DTB),并为一个定制板提供了一些定制驱动程序。有时候我会编译内核,并意识到DTB文件中的兼容性字符串不是定制驱动程序所寻找的。现在唯一的补救方法是修改DTS或内核驱动程序,使字符串匹配,然后再次重新编译内核。是否有方法可以编辑DTB文件以更新兼容性字符串?
失败的尝试
我已经能够使用以下命令将DTB文件反编译回DTS文件:
dtc -I dtb -o <filename>.dts -<filename>.dtb
但是,如果我修改DTS文件并使用以下命令重新编译:
dtc -I dts -o <filename>.dtb -<filename>.dts
内核将不加载重新编译的DTB文件
3条答案
按热度按时间zfycwa2u1#
只是想更新这与2年以上的经验,在这个问题上。
Linux存储库中的DTS文件是DTS和C预处理器指令(#include、#define等)的混合。因此,当编译原始DTB时,预处理器链接到引用的文件以创建纯DTS文件。
dtc
将单个DTS文件转换为DTB文件。因此,如果要修改内核DTS文件并对其进行编译,则有两个选项:
1.只需运行
make dtbs
,它会自动处理所有这些问题1.手动运行预处理器(
cpp -nostdinc -I <include dir> -undef -x assembler-with-cpp ...
),然后使用dtc
编译输出。wljmcqd82#
为什么不生成新的数字电视广播?
DTB(设备树blob/binary)是硬件数据库,代表板卡的硬件组件。
U-boot将板卡信息结构体传递给内核,该结构体是从U-Boot中的头文件中派生出来的。
DTB由特殊的编译器编译,该编译器以U-Boot和Linux能够理解的正确形式生成二进制文件。
DTC(Device Tree Compiler)将设备树文件转换为U-Boot和Linux内核可以理解的机器可读二进制文件。
直接使用DTC的方法。
以从DTB获得文本形式的设备树。
board.dts是由上述命令创建的二进制文件。
-O
指定输出格式。-o
标志是输出文件。-b 0
指定物理 Boot CPU。那就做吧
另一种方法可能只是使用
make dtbs
,这将调用dtc。arch/arm/boot/dts/Makefile
列出了应在构建时生成的DTB。这是编译它的另一种方法。make将把它放在内核树/arch/arm/boot/dts
的此位置看看这个Device Tree for Dummies
gjmwrych3#
使用yocto,您可以使用
bitbake <KERNEL-VERSION> -f -c compile
例如:
bitbake linux-stable -f -c compile
您将在此处找到结果:
build/tmp/work/<YOUR_MACHINE>-<YOUR-DISTRO>-linux-gnueabi/<KERNEL-RECIPE>/<KERNEL-VERSION>/linux-<YOUR-MACHINE>-standard-build/arch/<ARCH>/boot/dts/<YOUR-DTS-FILENAME>.dtb
你也可以在那里找到名为
.<YOUR-DTS-FILENAME>.dtb.dts.tmp
的预处理器的结果。这个文件包含了所有的include,对错误分析很有用。