交叉编译x86_64架构4.16.3内核报missing separator错误如何定位
问题定位与解决说明
1 报错对应的问题文件
本次报错中直接触发missing separator错误的文件是/home/ubuntu/new/source1/linux-4.16.3/tools/objtool/.fixdep.o.cmd。
该文件不属于内核官方源码自带的Makefile,是编译过程中自动生成的临时依赖描述文件,因此不存在官方源码存在Tab语法错误的可能。
2 快速定位missing separator问题文件的方法
GNU Make的报错日志遵循固定格式:
[问题文件路径]:[出错行号]: *** [错误信息]. Stop.
行首第一个冒号前的字段,就是直接存在语法问题的文件。
后续出现的make[3]: *** [xxx] Error 2类日志,仅为层级调用的上层Makefile传递错误退出码的提示,不属于问题根源所在的文件,无需排查。
3 问题原因与修复方案
该问题和官方源码无关,主要可从两个方向排查:
- 编译命令配置错误:你输入的命令中
CROSS_COMPILE=name_unknown参数无效,CROSS_COMPILE后需要填写实际存在的交叉编译工具链前缀,若你是编译本地运行的x86_64架构内核,无需指定该参数。无效的工具链前缀会导致编译初期生成的临时依赖文件内容损坏,触发语法错误。 - 历史编译残留损坏文件:
.cmd类文件是编译过程中生成的缓存文件,若之前存在编译中断、异常退出的情况,会导致这类文件内容不完整、格式错误。
修复操作步骤:
- 第一步:清理所有编译残留临时文件,执行命令:
make mrproper - 第二步:重新执行正确编译命令,本地x86_64架构内核编译直接运行
make ARCH=x86_64即可;若确实需要交叉编译,替换为对应架构的正确交叉工具链前缀 - 若清理后仍报错,可检查Make工具版本兼容性:Linux 4.16版本内核推荐使用make 4.2及更早版本,过高的make版本存在语法兼容问题,会导致生成错误的临时文件。
内容的提问来源于stack exchange,提问作者user786
相关产品推荐
相关产品推荐

