ARM体系结构的Linux交叉编译

ARM体系结构的Linux交叉编译,linux,embedded,x86,arm,Linux,Embedded,X86,Arm,我对在x86主机上为ARM目标交叉编译Linux内核感兴趣。你有什么好的建议吗?你认为哪一个是最好的交叉编译套件? 您是否建立了自定义交叉编译环境?如果是,你有什么建议?这是一个好主意吗?用于他们的Debian手臂分布。您会注意到,如果可以避免的话,他们不建议使用交叉编译器。在目标机上编译往往是一种更可靠的方式,可以获得您知道将要运行的输出。我在为使用ARM处理器的maemo Nokia N810构建应用程序时使用过。据推测,scratchbox并不局限于maemo开发。我使用emdebian工

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

用于他们的Debian手臂分布。您会注意到,如果可以避免的话,他们不建议使用交叉编译器。在目标机上编译往往是一种更可靠的方式,可以获得您知道将要运行的输出。

我在为使用ARM处理器的maemo Nokia N810构建应用程序时使用过。据推测,scratchbox并不局限于maemo开发。

我使用emdebian工具链为我的ARM机器编译东西,这些机器不喜欢在可用的小资源中进行本机编译/me盯着内核。主包是gcc-4.X-arm-linux-gnueabi X=1,2,3,并提供适当的后缀gcc/cpp/ld/etc命令。我将此添加到我的源。列表:


当然,如果您不使用Debian,这可能没有多大用处,但通过gum,它对我来说非常有用。

我已经在多个目标上使用了crosstool。只要你想从头开始构建你的工具链,它就很棒。 当然,arm也有一些预先构建的工具链,只需谷歌一下就可以了——太多了,这里不必赘述

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

2不要使用商业工具链。即使你不想花时间建立自己的,也有免费的选择

如果你的公司愿意花钱,让他们给你买一台jtag调试器。 这将为你节省大量的时间。它允许您轻松地学习和逐步完成内核启动等。。 我强烈推荐使用jtag产品。。。他们与大量目标协同工作,软件是跨平台的。他们的支持也很好

如果您无法获得jtag调试器,并且您正在内核中工作,那么可以使用VM来实现这一点,如usermodelinux、vmware等等。。您的代码将在x86上调试。。将它移植到您的arm目标将是一个不同的故事,但这是一个更便宜的方法来消除一些bug

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


我希望这会有所帮助。

如果您使用的是Gentoo,那么获得交叉编译工具链就像

$ emerge crossdev $ crossdev -t $ARCH-$VENDOR-$OS-$LIBC 其中ARCH是arm或armeb,供应商是unknown或softfloat,OS是linux,LIBC是gnu或uclibc


如果您只需要内核的编译器和链接器,那么LIBC部分就无关紧要了,您可以使用-s1/-stage1通知crossdev您只需要binutils和gcc。

我在ARM/Linux工具中使用了两种方法。最简单的方法是直接下载预构建的工具链。 赞成者:这很有效,你可以继续你项目中有趣的部分 缺点:无论他们选择哪个版本的gcc/binutils/libc,您都会被卡住

如果后者对你来说很重要,那就退房吧。这个项目是一个类似于Linux内核配置应用程序的配置工具。设置要构建的gcc、binutils、libc GNU或uCLibc、threading和Linux内核的版本,crosstool ng完成其余工作,即下载tar ball、配置工具并构建它们。 Pro:您可以在配置过程中获得所选内容 缺点:在配置过程中,您得到的正是您选择的内容

这意味着您要对编译器/binutil/libc及其相关特性/缺点/bug的选择承担全部责任。此外,正如在评论中提到的,选择binutils、C库等的版本会带来一些麻烦,因为并非所有的组合都必须协同工作,甚至构建

一种混合方法可能是从预构建的工具开始,然后在必要时通过crosstool ng使用自定义解决方案替换它们

更新:答案最初用作预构建工具链的示例。ARM的CodeSourcery工具是免费的,但它们现在被称为Sourcery CodeBench,必须从Mentor Graphics购买。其他选项现在包括Android、Ubuntu和其他版本的特定于发行版的工具。

是一个我从零开始构建基于uClibc的定制工具链的工具。它是非常可定制的,并且对于您正在运行的发行版不太挑剔


此外,它的许多现有用户(如嵌入式路由器发行版)也以ARM为目标。

qemu的现代版本具有gdbclient支持,因此,只要您的ARM目标是qemu所涵盖的,就可以将其用于虚拟测试环境,并且不需要您在不同的体系结构上进行调试。但是是的,没有替代品了
这意味着,商业工具链并不都那么糟糕——我曾经为MontaVista工作,我相信我们所做的所有移植和调试工作都有很多附加值。当然,你可以很容易地推出你自己的最小工具链,但是要获得一个完整的嵌入式发行版需要做更多的工作。Lauterbach确实很好,但是他们的价格很高。。。!非常正确,但总的来说,如果你考虑工程师的小时工资和printk调试的数量与工具的成本。这很值得。这取决于这个系统有多小!大多数arm系统无法做到这一点。crosstool ng的另一个缺点是,您必须自己找出gcc/glibc/target架构版本的哪些组合可以工作,哪些不可以。好的,您可以在crosstool ng主页上的已知工作列表中查找它们,但如果您的首选组合不在列表中,则由您自己来确定它是否有效。这是事实,但从其中一个工作配置开始会使事情变得更简单。如果您必须为Windows和/或其他操作系统制作加拿大交叉工具,那么预构建的工具可能永远不适合。使用ct ng肯定需要几个星期,而不是几分钟。但是,代码生成通常比预构建好,如果需要LTO、C++0x、C++11等,您可以获得最新的功能。Sourcery CodeBench Lite不再适用于ARM!但它也适用于其他目标。。。看起来Mentor Graphics希望我们购买Propitary版本Sourcery CodeBench。那么呢?builtroot目前使用crosstool ng 2014;Ubuntu和Linaro也是如此。这取决于您是想让他们使用crosstool ng还是想自己花时间。自从这个答案被写出来后,许多项目正在从uClibc转移到eglibc。如果您使用uClibc,许多包需要进行一些小的调整,因为API与glibc不是100%兼容的。 $ emerge crossdev $ crossdev -t $ARCH-$VENDOR-$OS-$LIBC