我对在 x86 主机上为 ARM 目标交叉编译 Linux 内核感兴趣。您有推荐的一些好的做法吗?您认为哪个是最好的交叉编译套件?您已经建立了自定义交叉编译环境吗?如果是,您有什么建议?这是不是一个好主意?

有帮助吗?

解决方案

有我用于ARM / Linux工具的两种方法。最简单的是直接下载预建的工具链。结果 :这只是工作,你可以用你的项目结果的有趣的部分得到 N :你被卡住的gcc / binutils的取其版/ libc中他们选择了

如果后来的事情给你,看看的crosstool-NG 。该项目是类似Linux内核配置应用程序的配置工具。全力打造集其中的gcc,binutils的,libc的(GNU或者uClibc的),线程和Linux内核的版本和的crosstool-NG不休息(即下载的焦油球,配置工具,并建立它们)。点击 :你得到你的配置过程中选择的到底是什么结果 N :你得到你的配置过程中选择的到底是什么

这意味着你承担更多的编译器/ binutil / libc和其相关的特征/缺点/错误的选择承担全部责任。此外,如在评论所提到的,有一些“疼痛”涉及选择的binutils的版本中,C库等,因为不是所有的组合不一定一起工作,甚至建立。

一种混合方法可能是开始与预建工具和以后且在必要时经由的crosstool-NG自定义解决方案替换它们。

<强>更新:答案最初使用的 CodeSourcery工具如一个预先建立的工具链的一个例子。 CodeSourcery的工具,ARM可以自由下载Mentor Graphics的,但他们现在叫的Sourcery Codebench完成,必须从Mentor Graphics公司购买。其他选项包括现在 Linaro的以及在Android,Ubuntu和其他分配特定的工具。

其他提示

我用的是emdebian工具链编译的东西为我的ARM机器,不开心被中可用的小资源(/我瞪着内核)本地编译。主包装是gcc-4.X-arm-linux-gnueabi(X = 1,2,3),并提供适当的gcc后缀/ CPP / LD /等命令。我想补充这我sources.list

deb http://www.emdebian.org/debian/ unstable main

当然,如果你不使用Debian,这可能不是那么有用,但通过的的它很适合我。

我使用 scratchbox的同时用建筑应用试验面向maemo(诺基亚N810),它使用一个ARM处理器。据称,scratchbox的并不限于Maemo开发。

我已经在几个目标上使用了 crosstool。只要您想从头开始构建工具链,它就很棒。当然,也有几个针对 ARM 的预构建工具链,只需 google 即可 - 太多了,这里就不一一列举了。

1)我认为构建自己的工具链效果最好。您最终可以严格控制一切,而且如果您是嵌入式 Linux 新手,这将是一次很棒的学习体验。

2)不要使用商业工具链。即使您不想花时间构建自己的,也有免费的替代方案。

如果你的公司愿意花钱,让他们给你买一个 jtag 调试器。
这将为您节省大量时间。 它可以让您轻松学习并逐步完成内核启动等。我强烈推荐使用 劳特巴赫 杰泰产品...他们与大量目标一起工作,并且软件是跨平台的。他们的支持也很大。

如果您无法获得 jtag 调试器并且您正在内核中工作,请使用 VM 来执行此操作,用户模式 ​​linux、vmware 等。您的代码将在 x86 上进行调试..将其移植到您的手臂目标上将是一个不同的故事,但这是解决一些错误的更便宜的方法。

如果您要移植引导加载程序,请使用 uboot。当然,如果您使用的是参考平台,那么您最好使用他们随 BSP 提供的平台。

我希望这有帮助。

Buildroot里面是一个工具,我有相当好的运气从构建定制的基于uClibc的工具链刮。这是非常可定制的,而不是过分讲究你碰巧运行在哪种分布。

另外,许多现有的用户(即,嵌入路由器发行版)也瞄准ARM。的

如果你使用的Gentoo,得到一个交叉编译工具链是那么容易,因为

$ emerge crossdev
$ crossdev -t $ARCH-$VENDOR-$OS-$LIBC

其中ARCHarmarmeb,VENDOR是unknownsoftfloatOSlinux,和LIBCgnuuclibc

如果你想要的是内核编译器(和链接),该LIBC部分是无关紧要的,并且可以使用-s1 / --stage1通知crossdev,你只需要binutilsgcc

这是Eurotech的使用获得他们的Debian的ARM发布包。你会注意到,他们不建议使用一个交叉编译器,如果你能避免它。编译目标本身往往是让你知道将运行输出的更可靠的方式。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top