移植xv6-riscv到duo s

你好,我目前参考已有的项目,本地在duo上验证可以移植成功并启动。
于是想把现场的代码烧到duos上试试,先是把duo的bl2换成了duos的,然后duos可以正常加载内核。但是在kvminithart中卡住了,看着就是在设置完satp以后。
卡住后,没有任何串口输出,所以想了解下有什么调试手段继续分析问题呢?

3 个赞

目前参考的项目有 repo url 或者什么文档的地址不?

1 个赞

参考的这个呢

1 个赞

我来找人问问。卡住的话估计是没log了,有木有截图或者拍照下屏幕和接线(如果有)

1 个赞


接线如图

2 个赞

FSBL Jb2829:g6b03c2762-dirty:2025-06-24T14:34:36+00:00
st_on_reason=d0000
st_off_reason=0
P2S/0x1000/0xc00b600.
SD/0xa600/0x1000/0x1000/0.P2E.
cv181x DDR init.
ddr_param[0]=0x0.
pkg_type=1
D2_4_1
DDR3-4G-BGA
Data rate=1866.
DDR BIST PASS
PLLS.
PLLE.
C2S/0x0/0x0/0x0.
No C906L image.
MS/0xd600/0x80000000/0x1fde00.
SD/0xd600/0x1fde00/0x1fde00/0.ME.
L2/0x20b400.
SD/0x20b400/0x200/0x200/0.L2/0x414d3342/0xcafe5f0b/0x80500000/0x200/0x200
COMP/1.
SD/0x20b400/0x200/0x200/0.sys_switch_all_to_pll…
DCP/0x80500020/0x1000000/0x81900020/0x200/1.
DCP/0x0/0.
Loader_2nd loaded.
Switch RTC mode to xtal32k
Jump to monitor at 0x80000000.
OPENSBI: next_addr=0x80500020 arg1=0x80080000

This system is ported by OStar Team.

xv6 kernel is booting on hart 0

pll_g6_ctrl: 0 0x0000000000000000
pll_g6_status: 70000 0x0000000000070000
fpll_csr: 7788101 0x0000000007788101
pll_g6_ssc_syn_ctrl: 2 0x0000000000000002
clk_en_0: -1 0xffffffffffffffff
clk_en_1: -1 0xffffffffffffffff
clk_en_2: -1 0xffffffffffffffff
clk_en_3: -1 0xffffffffffffffff
clk_en_4: -1 0xffffffffffffffff
clk_byp_0: 0 0x0000000000000000
div_clk_axi6: 1 0x0000000000000001
div_clk_i2c: 1 0x0000000000000001
div_clk_pwm_src_0: f0009 0x00000000000f0009
div_clk_gpio_db: 1 0x0000000000000001
div_clk_spi: 1 0x0000000000000001

Initialized physical page allocator
Created kernel page table
1 kvminithart
2 kvminithart 0x8000000000083eff

2 个赞

能否描述一下你烧录到 sd 卡的内容是什么,也就是说你是怎么打包的。

据我了解,duo family 的板子都是制作成 fip.bin 和 boot.sd 文件。你这里是怎么操作的?

3 个赞

是参考了前面的项目链接,有一个打包镜像的脚本,通过script,最终会调到fiptool.py,去拼接镜像,之后就会通过dd命令烧写。我理解就是boot.sd,还有xv6的kernel+bl2+bl33等拼接后的镜像
script–>makefip.sh–>fiptool.py

3 个赞

我看你前面说只换了 bl2,但 fip.bin 中实际上要替换还有其他一些 bin 才可以的吧。我初步怀疑是不是还有一些其他 duoS 特定的固件内容需要更新?

PLCT lab 还针对 RT-Thread 开发了类似的打包工具,原理都是一样的。只不过这个打包工具支持了 duo-S。RT-Thread smart 和 xv6-riscv 类似支持了 S-mode。所以我觉得参考以上内容,应该也可以将 xv6-riscv 在 duo S 上跑起来。

另外我以前尝试将 rvos(另一个教学用小型 riscv 的 rtos)移植到 duo256m 上,你可以参考当时写的一篇介绍: 将 RVOS 移植到 MilkV-Duo 上,了解一下相关的背景知识。

3 个赞

补充一下,我说的 RT-Thread 的打包工具在 GitHub - plctlab/rttpkgtool: RT-Thread Package Tool for Duo family.

3 个赞

好的,目前还在看,其实现在又重新编了一个bl33,替换了原有的u boot,可以确认在bl33里加载到xv6的内核了,但是还是设置完页表就无输出了,我也加了打印,看起来内存映射得也没问题。

先学习下rv debug调试,看看能不能排查到原因

rtthread的打包工具我有空时也先尝试下,谢谢汪老师解答。

3 个赞