【发布时间】:2021-10-13 02:07:19
【问题描述】:
最近我一直在尝试使用 qemu 在 Leon3 处理器上执行代码。我的代码如下所示:
#include <stdio.h>
#include <stdint.h>
int main(void) {
int a,b,c,d,e;
printf("hello world!");
if(a){
a++;
};
if(b){
b++;
};
if(c){
c++;
};
if(d){
d++;
};
if(e){
e++;
};
while(1){
}
return 0;
}
所以这是一个非常简单的程序。
我使用以下命令启动 Qemu:qemu-system-sparc.exe -nographic -M leon3_generic -m 64M -kernel testapp.elf
但我没有得到任何输出。 Qemu 似乎启动并立即退出,甚至没有挂在无限循环上。
尝试调试会导致崩溃(?),代码如下:qemu-system-sparc.exe: QEMU: Terminated via GDBstub
我想也许我不了解 qemu,但我找不到任何有关运行 .elf 文件的帮助。
也许有人做过这件事并可以帮助我?
【问题讨论】:
-
stdio.h?打印?
-kernel?? C 代码看起来像使用标准库的用户空间二进制文件。如果您尝试将其作为操作系统内核启动,它不会做任何有用的事情。如果你想制作自己的内核,你还没有这样做。如果你想按原样运行程序,你需要先安装一个操作系统来运行它。 -
感谢您的回复!那么用-kernel加载和.elf文件不是执行代码的正确方法吗?我试图实现的基本上是将这个程序闪存到内存中并像在微控制器中一样运行它。 qemu 甚至可以吗?
-
使用 qemu 是的,使用那个程序,不是。或者你有一个独立的 printf 等可以这样使用的实现吗?印刷品去哪儿了?如果你这样做了,你可能想详细说明你是如何编译的。
-
qemu 的 -kernel 选项需要一个 Linux 内核或多重引导格式的文件。即使使用正确的可执行代码,您仍可能需要执行一些额外的步骤才能正确打包。
-
好的,所以没有使用 qemu 的“简单”(简单的意思是加载和运行)方法。即使我只想运行裸 C 应用程序,我也需要系统映像?
标签: c embedded qemu bare-metal sparc