我有兴趣在x86主机上为ARM目标交叉编译Linux内核.你推荐一些好的做法吗?您认为哪个是最好的交叉编译套件?您是否已经确定了自定义交叉编译环境?如果是,您有什么建议?这是个好主意吗?
我用于ARM/Linux工具的方法有两种.最简单的方法是直接下载预先构建的工具链.
Pro:它只是工作,你可以继续你的项目的有趣部分
Con:你被困在他们选择的任何版本的gcc/binutils/libc
如果后者对您很重要,请查看crosstool-ng.该项目是一个类似于Linux内核配置应用程序的配置工具.设置要构建的gcc,binutils,libc(GNU或uCLibc),线程和Linux内核的哪些版本以及crosstool-ng其余部分(即下载tar球,配置工具并构建它们).
Pro:您可以获得在配置期间选择的内容
Con:您可以获得在配置期间选择的内容
这意味着您对compiler/binutil/libc及其相关功能/缺点/错误的选择承担全部责任.此外,正如评论中所提到的,选择binutils,C库等版本时会涉及一些"痛苦",因为并非所有组合都必须协同工作或甚至构建.
一种混合方法可能是从预先构建的工具开始,并在必要时通过crosstool-ng使用自定义解决方案替换它们.
更新:答案最初使用CodeSourcery工具作为预构建工具链的示例.用于ARM的CodeSourcery工具可以从Mentor Graphics免费下载,但它们现在称为Sourcery CodeBench,必须从Mentor Graphics购买.其他选项现在包括Linaro以及Android,Ubuntu和其他公司的分发特定工具.
我使用emdebian工具链来编译我的ARM机器的东西,这些东西不太乐意在可用的小资源中本地编译(/我对内核瞪眼).主程序包是gcc-4.X-arm-linux-gnueabi
(X = 1,2,3),并提供适当的后缀gcc/cpp/ld/etc命令.我把它添加到我的sources.list
:
deb http://www.emdebian.org/debian/ unstable main
当然,如果你不使用Debian,这可能不是那么有用,但是通过口香糖它对我很有用.
我在尝试为maemo(诺基亚N810)构建应用程序时使用了scratchbox,后者使用的是ARM处理器.据说,scratchbox不仅限于maemo开发.
我在几个目标上使用过crosstool.只要您想从头开始构建工具链,它就很棒.当然还有几个预制的手臂工具链,只是google它 - 这里有太多不足之处.
1)在我看来,构建自己的工具链是最好的.您最终可以严格控制所有内容,而且如果您是嵌入式Linux的新手,那么这是一次很棒的学习体验.
2)不要使用商业工具链.即使你不想花时间建立自己的,也有免费的替代品.
如果你的公司会花钱,让他们给你买一个jtag调试器.
它将为您节省大量时间. 它允许您轻松学习并逐步完成内核启动等.我强烈推荐使用Lauterbach jtag产品......他们使用大量目标,软件是跨平台的.他们的支持也很棒.
如果您无法获得jtag调试器并且您正在使用内核,请使用VM来执行此操作,usermode linux,vmware..etc ..您的代码将在x86上调试..将其移植到您的arm目标将是一个不同的故事,但它是一个更便宜的方法来消除一些错误.
如果要移植引导加载程序,请使用uboot.当然,如果您使用的是参考平台,那么您可能最好使用它们为BSP提供的功能.
我希望有所帮助.
Buildroot是一个工具,我从头开始构建一个基于uClibc的自定义工具链.它是非常可定制的,并且对于您正在运行的分发版本并不过分具体.
此外,它的许多现有用户(即嵌入式路由器发行版)也针对ARM.