如何将C程序编译为有效的ELF格式(或 RAW 格式),以便可以在没有任何操作系统的情况下直接从 RAM 执行?假设存在一个引导加载程序,它能够将代码加载到 RAM 中的任何位置并在该地址开始执行。准确地说,编译器(GCC)标志应该是什么?是否需要地图文件?
一个示例 helloworld 应用程序将是最受欢迎的 :)
只是为了详细说明我的观点,
让 main() 方法是一个空的无限 while 循环,以确保不使用特定于操作系统或标准库的调用。所需的 o/p 是一个挂起。使用通常的GCC选项,引导加载程序肯定无法加载可执行文件,告诉它是无效的ELF格式。但是,通过将-dN选项传递给链接器将使其成为有效的ELF。需要更多编译器/链接器选项才能使其挂起而不崩溃!!这些编译器选项到底是什么?
file.c:
int main()
{
while(1);
}
编译
gcc -c -nostdinc -fno-builtin
file.c ld -dN -nostdlib file.o
Bootloader 将a.out加载到 RAM 并执行。