quard_star_tutorial
quard_star_tutorial copied to clipboard
关于ch9的疑问
作者您好,我在学习您的ch9的时候遇到了一些问题,现象是build.sh可以编译,但是qemu的所有串口均无打印,我在lowlevelboot的start.S中手动添加了一些打印log的语句,发现这些语句能在serial3中产生输出。 个人怀疑原因可能是opensbi或者uboot未能成功加载 不知道您那边是否遇到过这种情况
而且从打印的log来看似乎有两个核心参与到了load数据的过程中
您好,我在作者 ch9 的时候遇到了一些问题,现象是 build.sh 可以编译,但是 qemu 的所有学生都没有打印,我在低级启动的开始打印。S中手动添加了一些日志的语句,这些语句能够在serial3中产生输出。 个人怀疑原因可能是opensbi或者uboot未能成功加载的情况你 不知道是否遇到过这种情况
我在开发过程中没遇到这个情况,一般如果类似的问题我会使用添加qemu选项-d in_asm -D qemu.log来跟踪一下boot启动阶段的关键跳转是否正确,你可以尝试下。
从的过程中看起来似乎有两个重要参与者打印到加载数据的中
我查了一下我打tag的ch9节的代码,有通过csrr a0, mhartid来确保只有一个核心load,我印象了之前确实存在你说的这个问题,然后我在某一版本修复了,最终可能和博客章节有点对不上,你根据我的tag对应一下。
.section .text
.globl _start
.type _start,@function
_start:
csrr a0, mhartid
beq a0, zero, _no_wait
_loop:
loop 0x1000
la t0, _pen
lw t0, 0(t0)
beq t0, zero, _run
j _loop
_no_wait:
la t0, _pen
la t1, 1
sw t1, 0(t0)
//load opensbi_fw.bin
//[0x20200000:0x20400000] --> [0xBFF80000:0xC0000000]
li a0, 0x202
slli a0, a0, 20
li a1, 0xbff
slli a1, a1, 20
li a2, 0x800
slli a2, a2, 8
add a1, a1, a2
add a2, a1, a2
load_data a0,a1,a2
我对应了下本地的代码,和你上面发的那个一致 然后我这次加上了qemu的log,发现ch9,以及博客中的那个修复了文件缺失的commit,从log中打印的代码来看,都没能跑通启动的流程
我对应了下本地的代码,和你上面发的那个一致 然后我这次加上了qemu的log,发现ch9,以及博客中的那个修复了文件缺失的commit,从log中打印的代码来看,都没能跑通启动的流程
loop次数增大一点看呢?
关于ch9无法运行的问题,今天CSDN社区上的一位用户:lov1225给我发私信指出:lowlevelboot/startup.s:67的位置上,应将
slli a2, a2, 4
改为
slli a2, a2, 8
才能正确加载quard_star_sbi.dtb 512K的区域到ddr上,之前的错误导致只能加载32K。但我这边看到这节生成的dtb只有5k,所以我之前没有发现问题。所以是否你的环境生成的dtb超过32K导致这个问题出现?如果是这样的可以尝试修改此处。