Hel*_*rld 2 gcc clang bare-metal raspberry-pi
当我想在没有底层操作系统的情况下编译二进制文件时,为什么需要裸机工具链?编译器有什么限制,除了缺少功能/功能外,因为没有OS / stdlibrary。可以将任何clang / gcc用作裸机编译器吗?我的目标是覆盆子2。
首先,您需要一个可以为目标处理器生成代码的编译器。使用clang时,通常需要提供适当的命令行参数来选择目标处理器,浮点支持(或缺少浮点支持)等。对于gcc,您需要构建一个支持特定目标的版本。
其次,考虑一个简单的程序,如下所示:
int main()
{
}
Run Code Online (Sandbox Code Playgroud)
您可以使用交叉编译器对此进行编译,并获取目标的目标文件。现在的问题是如何在裸机环境中执行main()。至少您需要一些代码,通常是汇编代码,这些代码在处理器复位时运行,设置堆栈指针并调用main()。在没有其他库支持的情况下,其他一切都取决于您。您必须编写代码以执行特定于硬件的I / O等。
我正在开发针对Linux的工具链,但也支持裸机开发。当前,工具链针对C / C ++开发的ARM,Mips,PowerPC和x86目标。完全支持Linux目标,并且即将提供ARM裸机目标。在这种情况下,“裸机”的范围很广,从如上所述的简单main()到支持许多POSIX函数,例如pthread_create(),互斥量支持等。它还可以在MMU和非MMU环境中运行。您可能需要查看http://ellcc.org上的代码,以了解如何处理裸机。如果您想尝试一下,还可以下载适用于Windows和Linux的预编译二进制文件。
| 归档时间: |
|
| 查看次数: |
2369 次 |
| 最近记录: |