请指导我完成构建足以构建可引导的linux映像的基本工具链所需的步骤,并讨论为什么应该按照建议的方式完成.
对现有文档的指示也非常感谢.我从Scratch学习了Linux,并且拥有使用特定于分发工具构建Gentoo映像的经验.我还查看了用于为嵌入式设备构建交叉编译工具链的各种工具的文档.
然而,这些工具的文档仅讨论了实际使用这些工具的编译工具链,而不是他们如何做到这一点,以及为什么没有区别.通常这些资源也提到其他工具以不同的方式(当然更糟),所以我感觉只是阅读源只会帮助我了解给定的构建工具如何工作,而不是提供对实际过程的洞察力,这是可能的变异.
所以我对关于自动构建工具链的工具的讨论不感兴趣,而是对如何手动执行它的注释说明感兴趣.另请注意,目前我计划在同一台机器上构建和运行映像,因此我不需要交叉编译.但我仍然对有关交叉编译的讨论感兴趣,但重点应该放在其他地方.构建可引导映像所需的其他内容并不是此问题的一部分 – 只需构建工具链即可实现.
为了帮助您了解我的立场,我有一些问题和一些我相信的事情:
我理解即使在本地构建时,将用于构建映像的工具链与主机的工具链分开也很重要,以避免链接到以后可能无法使用的库(其他原因?).我不知道是否足以相应地调整环境变量(哪个?)或者最好是建立工具链,chroot和重建(我从重建中得到什么?).如果做前者会出现什么问题?我已经读过,构建gcc两次(使用第一个构建第二个)是过度的,因为它的构建系统无论如何都会这样做.如果是这样,它可以检测到两个构建中的差异,它们为什么重要?如果两个版本有所不同,那么必然出现问题,如果它们做了什么就会做些什么.正确完成交叉编译会产生与本机完成时完全相同的二进制文件吗?如果没有,那为什么毕竟不是那么糟糕,许多项目选择那种方式从来没有?
解决方法:
您应该看看LinuxFromScratch,其名称旨在从头开始构建一个可用的Linux系统(with a complete part about the toolchain).