我正在尝试为Raspberry-Pi构建我自己的工具链。我知道有很多预置的工具链。这项工作是出于教育原因。我正在从头开始学习嵌入式arm linux。到目前为止,成功地构建了一个gcc和uClib。我正在为目标arm-未知-linux-eabi构建。
现在到了准备一个可引导文件系统的时候了,我问自己关于引导加载器构建的问题。
关于此系统的引导加载程序的部分似乎不完整。现在我在问自己,如何使用我的arm-未知-linux-eabi工具链为这个系统构建一个uboot。
我需要构建一个不依赖于linux内核调用的工具链吗?我的第一个研究将我带到了一个观点,那就是有独立的工具链依赖于操作系统(linux内核、系统调用等)。而那些不需要在下面有内核的。有时被称为“裸机”工具链或“独立”工具链。
一些消息人士提到,使用linux工具链构建U-Boot是可能的。如果这是真的,为什么以及如何工作?
如果我必须为“裸机”工具链构建第二个工具链,我可以在哪里找到关于这两个工具链之间的区别的信息。我需要另一个libstdc吗?
发布于 2012-12-14 04:18:20
您可以使用构建内核时使用的跨工具链来构建U-Boot,并且很可能使用系统用户空间的其余部分。
bootloader -根据定义-是自包含的,并不关心您选择的C运行时库,因为它不使用它。因此,sys-call的问题不会出现在其中。
工具链总是需要由一个功能齐全的开发系统来托管--而不是你的目标系统。无论你看到什么“裸机工具链”,都不是指编译器对sys调用的使用(它严重依赖于操作系统的I/O)。在构建引导加载器和内核时,重要的是将编译器和链接器配置为生成可以在特定内存地址运行的静态链接代码。
发布于 2012-12-16 04:19:18
在几乎所有可能的方式中,嵌入式工具链和Linux工具链之间没有区别。但有一个例外。
例外是__clear_cache -这是一个可以由编译器生成的函数,并且在"Linux"-toolchain中包含一个同步指令和数据缓存的系统调用。(有关该位的更多信息,请参见http://blogs.arm.com/software-enablement/141-caches-and-self-modifying-code/。)
现在,除非显式地添加对该函数的调用,否则我所知道的要调用该函数的唯一方法就是用C编写嵌套函数(这是应该避免的一个GCC扩展)。但这是不同的。
https://stackoverflow.com/questions/13856536
复制相似问题