HiFive上具有OpenSBI的U-Boot在QEMU中释放:存储/ AMO访问错误

问题描述 投票:3回答:1

我一直试图让U-Boot在sifive_u机器的QEMU中工作。我曾经尝试使用内置的OpenSBI'BIOS'和构建自己的OpenSBI,但是我一直遇到相同的问题。

我正在使用Arch仓库中的riscv64工具链来构建U-Boot:

➜  u-boot git:(0b0c6af387) riscv64-linux-gnu-gcc --version
riscv64-linux-gnu-gcc (GCC) 9.2.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
➜  u-boot git:(0b0c6af387) export CROSS_COMPILE=riscv64-linux-gnu-
➜  u-boot git:(0b0c6af387) export ARCH=riscv
➜  u-boot git:(0b0c6af387) make sifive_fu540_defconfig
...
➜  u-boot git:(0b0c6af387) make

我尝试如下运行:

➜  opensbi git:(master) ✗ qemu-system-riscv64 -M sifive_u -m 256M -bios default -display none -serial stdio -device loader,addr=0x80200000,file=../u-boot/u-boot.bin

OpenSBI v0.5 (Oct  9 2019 12:03:04)
   ____                    _____ ____ _____
  / __ \                  / ____|  _ \_   _|
 | |  | |_ __   ___ _ __ | (___ | |_) || |
 | |  | | '_ \ / _ \ '_ \ \___ \|  _ < | |
 | |__| | |_) |  __/ | | |____) | |_) || |_
  \____/| .__/ \___|_| |_|_____/|____/_____|
        | |
        |_|

Platform Name          : SiFive Freedom U540
Platform HART Features : RV64ACDFIMSU
Platform Max HARTs     : 5
Current Hart           : 1
Firmware Base          : 0x80000000
Firmware Size          : 96 KB
Runtime SBI Version    : 0.2

PMP0: 0x0000000080000000-0x000000008001ffff (A)
PMP1: 0x0000000000000000-0xffffffffffffffff (A,R,W,X)


U-Boot 2020.01 (Jan 20 2020 - 18:14:27 +0000)

CPU:   rv64imafdc
Model: SiFive HiFive Unleashed A00
DRAM:  exception code: 7 , Store/AMO access fault , epc 8023cbdc , ra 8020c670
### ERROR ### Please RESET the board ###

我还尝试将U-Boot作为有效载荷捆绑到我自己的OpenSBI构建中:

➜  opensbi git:(master) ✗ export CROSS_COMPILE=riscv64-unknown-elf-
➜  opensbi git:(master) ✗ make PLATFORM=sifive/fu540 FW_PAYLOAD_PATH=../u-boot/u-boot.bin

➜  opensbi git:(master) ✗ qemu-system-riscv64 -M sifive_u -m 256M -bios none -display none -serial stdio -device loader,addr=0x80000000,file=./build/platform/sifive/fu540/firmware/fw_payload.bin


OpenSBI v0.5-32-gc0849cd
   ____                    _____ ____ _____
  / __ \                  / ____|  _ \_   _|
 | |  | |_ __   ___ _ __ | (___ | |_) || |
 | |  | | '_ \ / _ \ '_ \ \___ \|  _ < | |
 | |__| | |_) |  __/ | | |____) | |_) || |_
  \____/| .__/ \___|_| |_|_____/|____/_____|
        | |
        |_|

Platform Name          : SiFive Freedom U540
Platform HART Features : RV64ACDFIMSU
Platform Max HARTs     : 5
Current Hart           : 1
Firmware Base          : 0x80000000
Firmware Size          : 100 KB
Runtime SBI Version    : 0.2

PMP0: 0x0000000080000000-0x000000008001ffff (A)
PMP1: 0x0000000000000000-0xffffffffffffffff (A,R,W,X)


U-Boot 2020.01 (Jan 20 2020 - 18:14:27 +0000)

CPU:   rv64imafdc
Model: SiFive HiFive Unleashed A00
DRAM:  exception code: 7 , Store/AMO access fault , epc 8023cbdc , ra 8020c670
### ERROR ### Please RESET the board ###

根据错误消息,我尝试查看有问题的指令(我想是在0x8023cbdc处:

➜  u-boot git:(0b0c6af387) riscv64-unknown-elf-objdump --start-address=0x8023cbdc -d ./u-boot | head -8

./u-boot:     file format elf64-littleriscv


Disassembly of section .text_rest:

000000008023cbdc <memset+0x40>:
    8023cbdc:   fee7bc23                sd      a4,-8(a5)

这是一家商店,因此看来这确实是在访问无效的位置;我正在尝试使GDB正常工作,以便我可以更详细地检查实际发生的事情,但这会引起其自身的问题...

有人在这方面有任何成功吗?

UPDATE

我设法通过使用-M 2G更改内存量来解决此特定错误;我想它要访问的地址不在256M范围内,但是我不确定它正在做什么,这需要这么多的RAM。

现在我遇到以下错误:

➜  opensbi git:(master) ✗ qemu-system-riscv64 -M sifive_u -m 8G -bios default -display none -serial stdio -device loader,addr=0x80200000,file=../u-boot/u-boot-dtb.bin

OpenSBI v0.5 (Oct  9 2019 12:03:04)
   ____                    _____ ____ _____
  / __ \                  / ____|  _ \_   _|
 | |  | |_ __   ___ _ __ | (___ | |_) || |
 | |  | | '_ \ / _ \ '_ \ \___ \|  _ < | |
 | |__| | |_) |  __/ | | |____) | |_) || |_
  \____/| .__/ \___|_| |_|_____/|____/_____|
        | |
        |_|

Platform Name          : SiFive Freedom U540
Platform HART Features : RV64ACDFIMSU
Platform Max HARTs     : 5
Current Hart           : 1
Firmware Base          : 0x80000000
Firmware Size          : 96 KB
Runtime SBI Version    : 0.2

PMP0: 0x0000000080000000-0x000000008001ffff (A)
PMP1: 0x0000000000000000-0xffffffffffffffff (A,R,W,X)


U-Boot 2020.01 (Jan 20 2020 - 21:40:02 +0000)

CPU:   rv64imafdc
Model: SiFive HiFive Unleashed A00
DRAM:  8 GiB
MMC:   exception code: 5 , Load access fault , epc fffadbd6 , ra fffadbd2
### ERROR ### Please RESET the board ###
qemu-system-riscv64: terminating on signal 2

再次类似(尽管这次负载很大);有趣的是,地址fffadbd6不是U-Boot的一部分,所以我不知道这里发生了什么。我非常怀疑它是否最终会消失,因为那样的话我会期望出现未定义的行为,而不是始终如一地承受相同的不良负载。

qemu u-boot riscv
1个回答
0
投票

您仍然看到问题吗?

顺便说一句,U-Boot中最近有一个修补程序,可在出现异常时转储所有寄存器。不知道是您还是其他人来。

https://patchwork.ozlabs.org/patch/1215339/

© www.soinside.com 2019 - 2024. All rights reserved.