HiFive上具有OpenSBI的U-Boot在QEMU中释放:存储/ AMO访问错误
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HiFive上具有OpenSBI的U-Boot在QEMU中释放:存储/ AMO访问错误相关的知识,希望对你有一定的参考价值。
我一直试图让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的一部分,所以我不知道这里发生了什么。我非常怀疑它是否最终会消失,因为那样的话我会期望出现未定义的行为,而不是始终如一地承受相同的不良负载。
您仍然看到问题吗?
顺便说一句,U-Boot中最近有一个修补程序,可在出现异常时转储所有寄存器。不知道是您还是其他人来。
https://patchwork.ozlabs.org/patch/1215339/
以上是关于HiFive上具有OpenSBI的U-Boot在QEMU中释放:存储/ AMO访问错误的主要内容,如果未能解决你的问题,请参考以下文章
Platform IO编译Hifive1-revB*** [.piouildhifive1-revbsrcsetupGPIO.o] Error 1的解决办法
Platform IO编译Hifive1-revB*** [.piouildhifive1-revbsrcsetupGPIO.o] Error 1的解决办法
Platform IO编译Hifive1-revB*** [.piouildhifive1-revbsrcsetupGPIO.o] Error 1的解决办法
Platform IO编译Hifive1-revB*** [.piouildhifive1-revbsrcsetupGPIO.o] Error 1的解决办法
配置Hifive1-revB设备管理器中不识别端口,Can not connect to J-Link via USB的解决办法
配置Hifive1-revB设备管理器中不识别端口,Can not connect to J-Link via USB的解决办法