内容提要
本文介绍了在arm64 linux上安装和编译dtc的步骤,包括依赖安装、源码下载和解压。同时解决了编译过程中可能遇到的问题,并提供了解决办法。
延伸解读
编译环境与依赖准备
文章明确针对 arm64 Linux 环境,并建议直接复用 LineageOS 的依赖列表,同时额外安装 bison、pkg-config 和 libyaml-dev。这意味着在开始编译前,需要确保系统已具备这些基础工具和库,否则后续步骤可能无法进行。对于非 arm64 平台,文章未作说明,读者需自行评估兼容性。
源码获取与版本选择
下载源码时,文章使用 wget 从 android.googlesource.com 获取 android11-release 分支的 tar.gz 包,并指出可将 android11 替换为其他版本号,最低支持 android10。这为需要不同版本 dtc 的读者提供了灵活选择,但需注意版本号必须对应存在的分支,否则下载可能失败。
常见编译错误与手动修复
编译时可能遇到“没有规则可制作目标 dtc-parser.h”的错误,文章建议手动执行 bison -d dtc-parser.y -o dtc-parser.h 生成头文件。随后还可能遇到 yylloc 多重定义错误,解决方法是删除 dtc-parser.tab.c 的第 1086 行。这些步骤表明编译过程并非完全自动化,需要根据错误提示进行干预。
替代方案与注意事项
文章提到曾尝试将 YYLTYPE yylloc 改为 extern YYLTYPE yylloc,但会引发冗余重声明错误,因为编译选项将警告视为错误。这提示读者在修改源码时需谨慎,避免引入新的编译问题。最终推荐的删除行方法更为直接,但需确保行号与当前源码版本一致。
Q&A
在arm64 Linux上编译dtc需要安装哪些依赖?
需要安装bison、pkg-config和libyaml-dev。此外,可以直接从LineageOS的依赖中复制一份。
如何下载dtc的源码?
使用命令:wget https://android.googlesource.com/platform/external/dtc/archive/refs/heads/android11-release.tar.gz -o dtc.tar.gz。如果要下载其他版本,将android11替换为android[版本号]即可,最低版本为android10。
编译dtc的命令是什么?
编译命令为:make dtc -j8。编译后会生成dtc文件。
编译dtc时遇到“没有规则可制作目标‘dtc-parser.h’”错误怎么办?
手动执行命令:bison -d dtc-parser.y -o dtc-parser.h。
编译dtc时出现“multiple definition of `yylloc'”错误如何解决?
删除dtc-parser.tab.c文件的第1086行。
为什么不能将YYLTYPE yylloc改为extern YYLTYPE yylloc?
因为改为extern后会出现“对‘yylloc’冗余的重声明”错误,并且由于编译选项将警告视为错误,导致编译失败。