【发布时间】:2010-10-17 08:34:11
【问题描述】:
如何将 C 程序编译成有效的 ELF 格式(或 RAW 格式),以便它可以直接从 RAM 执行而无需任何 OS ?假设存在一个 bootloader,它能够将代码加载到 RAM 中的任何位置并从该地址开始执行。 确切地说,编译器(GCC)标志应该是什么?需要地图文件吗?
欢迎提供一个示例 helloworld 应用程序 :)
只是为了阐述我的观点,
让 main() 方法是一个空的无限 while 循环,以确保不使用 OS 特定或标准库调用。所需的 o/p 是一个挂起。使用通常的 GCC 选项,引导加载程序肯定无法加载可执行文件,告诉它是无效的 ELF 格式。然而,通过将 -dN 选项传递给链接器将使其成为有效的 ELF。需要更多编译器/链接器选项才能使其挂起而不崩溃!!这些编译器选项到底是什么?
file.c:
int main()
{
while(1);
}
编译
gcc -c -nostdinc -fno-builtin file.c
ld -dN -nostdlib 文件.o
Bootloader 将 a.out 加载到 RAM 并执行。
【问题讨论】:
标签: c linux boot bootstrapping bare-metal