flash调用java_使用-pflash命令执行裸机qemu执行

本文档介绍了如何将QEMU配置为使用-pflash参数从模拟的Flash设备启动,而不是使用-kernel选项。作者展示了如何修改启动汇编代码、链接脚本以及如何创建Flash二进制文件。在尝试运行qemu-system-arm时遇到了初始化失败的错误,寻求解决方案。
摘要由CSDN通过智能技术生成

网站示例使用 -kernel 选项将二进制图像加载到0x10000;我只是假设二进制文件内部加载到0x10000与 -kernel .

这是命令 qemu-system-arm -M versatilepb -m 128M -kernel test.bin -serial stdio ,源代码可以在 - https://dl.dropboxusercontent.com/u/10773282/2014/b1.zip找到

ld设置如下:

ENTRY(_Reset)

SECTIONS

{

. = 0x10000;

.startup . : { startup.o(.text) }

...

}

启动组装很简单如下:

.global _Reset

_Reset:

LDR sp, =stack_top

BL c_entry

B .

主要c代码(c_entry)如下:

volatile unsigned int * const UART0DR = (unsigned int *)0x101f1000;

void print_uart0(const char *s) {

while(*s != '\0') { /* Loop until end of string */

*UART0DR = (unsigned int)(*s); /* Transmit char */

s++; /* Next char */

}

}

void c_entry() {

print_uart0("Hello world!\n");

}

我需要修改代码以在没有 -kernel 的情况下启动,但使用 -pflash 来模拟,就好像从闪存驱动器读取二进制文件一样 . 这是我尝试使其工作的方法:

更改启动程序集和test.ld

.section INTERRUPT_VECTOR, "x"

.global _Reset

_Reset:

B Reset_Handler /* Reset */

B . /* Undefined */

B . /* SWI */

B . /* Prefetch Abort */

B . /* Data Abort */

B . /* reserved */

B . /* IRQ */

B . /* FIQ */

Reset_Handler:

LDR sp, =stack_top

BL c_entry

B .

这是test.ld

ENTRY(_Reset)

SECTIONS

{

. = 0x0;

.text : {

startup.o (INTERRUPT_VECTOR)

*(.text)

}

.data : { *(.data) }

.bss : { *(.bss COMMON) }

. = ALIGN(8);

. = . + 0x1000; /* 4kB of stack memory */

stack_top = .;

}

更新构建代码

在构建获取test.bin之后,我使用 dd 命令创建了一个flash二进制文件 .

arm-none-eabi-as -mcpu=arm926ej-s -g startup.s -o startup.o

arm-none-eabi-gcc -c -mcpu=arm926ej-s -g test.c -o test.o

arm-none-eabi-ld -T test.ld test.o startup.o -o test.elf

arm-none-eabi-objcopy -O binary test.elf test.bin

dd if=/dev/zero of=flash.bin bs=4096 count=4096

dd if=test.bin of=flash.bin bs=4096 conv=notrunc

qemu执行

执行qemu以获取此错误消息 .

qemu-system-arm -M versatilepb -m 128M -pflash flash.bin -nographic

>> failed to read the initial flash content

>> Initialization of device cfi.pflash01 failed

可能有什么问题?我上传了示例和示例代码 .

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值