我正在尝试使用 '09 的 buildroot 包构建交叉编译工具链。不幸的是,我没有在我的目标平台上升级现有的busybox系统的奢侈。
背景:目标平台运行在 arm926EJ(5TE 架构)上。它显然是用 uclibc 0.9.29 库构建的。平台上的内核 linux 头文件是 2.6.16
由于我无法从头开始升级busybox图像,我想制作单独的二进制文件并通过tftp上传它们,并通过telnet shell执行它们。
我已经成功编译了最新的带有 4.5 内核头文件和 1.0.14 uclibc 库的 buildroot 工具链。在成功编译了一个基本的 helloworld 程序并通过 tftp 将其上传到平台后,我能够执行该程序但没有看到任何输出。
尽管 stdout 和 telnet 终端可能存在一些问题,但我认为这很可能是 uclibc 库之间不同版本的兼容性问题。
问题:在我的主机系统上,我有来自 linux 版本 4.6.3 的 linux 内核头文件。为了解决上面提到的 uclibc 兼容性问题,我正在尝试从旧的 buildroot 包构建新的工具链。但是在编译的早期,我有一个错误指出:
Makefile:1601:混合隐式和普通规则:不推荐使用的语法 CHK include/linux/version.h HOSTCC 脚本/unifdef 脚本/unifdef.c:209:25 错误:'getline' 的类型冲突
等等在网上研究了一下并且已经预料到它会发生之后,这似乎是不同内核版本之间的冲突。
我正在向这个伟大的社区询问他们能想到的任何方法来解决这个问题,而不必使用古老版本的 linux 重建主机系统。如果有任何我遗漏或不完全理解的细节,请随时通知我。我非常愿意接受建议。
我考虑过使用 VM 中的旧标头构建主机系统。如果这是一个很好的方法,那么任何关于使用好的发行版的建议也会很酷。
我不反对放弃 buildroot 以获得更好的工具,或者从头开始构建 CC,但如果是这种情况,我仍然担心内核版本冲突。
任何帮助是极大的赞赏。