2015-11-07 52 views
6

我有一些编译ARM cortex-m设备的裸机代码以及Beaglebone Black(BBB)的Linux内核,uBoot和应用程序的经验(对于那些生活在摇滚中的人来说,更多功能ARM和MMU)。它使我对cortex-m代码应该使用arm-none-eabi-gcc进行编译(因为没有OS),并且BBB的应用程序代码应该用arm-linux-gnueabi-gcc编译(如那里是一个可以进行系统调用的OS,以及可以使用的程序加载器和共享对象)。编译Linux内核和uBoot时为什么使用arm-linux-gnueabi-gcc而不使用arm-none-eabi-gcc?

我不明白的是为什么uBoot和内核也应该用arm-linux-gnueabi-gcc编译。在我看来,uBoot至少是一个没有花哨的操作系统的裸机程序。这一直困扰我一段时间,但我找不到答案。有没有人能够启发我?

+0

你从哪里学到这个*“uBoot [sic],内核也应该用arm-linux-gnueabi-gcc”*编译?我已经看到U-Boot和Linux内核使用相同的工具链编译(例如在Buildroot中),这大概是因为方便。但我通常使用裸机工具链作为引导程序,例如U-Boot(即,我构建了两个工具链)。 – sawdust

+0

我刚刚从例如[this](http://processors.wiki.ti.com/index.php/AM335x_U-Boot_User's_Guide#Building_U-Boot)中假设。你是说uBoot实际上可以被编译吗?内核呢? –

+1

是的。同样的交易。 – sawdust

回答

0

U-Boot旨在尽可能反映Linux设计理念。它使用相同的配置系统,通用目录结构等。它与Linux共享一些API - 请参阅include/linux目录。如上所述,ABI兼容性在这一点上并不重要,但使用Linux编译器对于U-Boot来说在哲学上并不合适。