VisionFive v1下移植xv6

感谢bss段清零后解决了很多奇怪的问题。


请问73号中断具体是什么中断,VisionFive V1下有哪些中断,中断号分别是什么?

UART 具体看手册或者 device tree

https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git/tree/arch/riscv/boot/dts/starfive/jh7100.dtsi#n321

感谢!

pinctrl部分:要按照那些对应的GPIOMUX的值和那些bias-disable/input-enable...之类的写到pinctrl@11910000的对应寄存器里面
clock部分:按照时钟树的关系设置对应的时钟,写clock-controller@11800000对应的寄存器
reset部分:写reset-controller@11840000对应的bit
interrupt部分:这个最简单,dts里面看是接到plic哪个irq就行了
这些信息都可以从dts里面找到,只不过你得自己来写寄存器。另外得自己写snps,dw-mshc驱动
感谢老师详细地指导, 这些硬件的文档哪里有,对应的寄存器怎么设置哪里能找到?

我能找到最好的是

官网的版本比这个还不全。但是这个也没有提到pinctrl/clock/reset 。可以看下linux的驱动,或者对照一下jh7110来做。jh7110的文档全很多,而且两者有很多重合的部分。

感谢指导

1、sd卡识别成功,关了中断,识别和读1扇区过程如下:

U-Boot SPL 2021.10-dirty (Dec 11 2024 - 19:18:09 +0800)
LPDDR4: 8G version: g8ad50857.
Trying to boot from SPI
K
xv6 kernel is booting.

boot from spi.
debug dwmci_init line 471
CMD_SEND:0 ARG:0x0000000000000000
MMC_RSP_NONE
CMD_SEND:8 ARG:0x00000000000001aa
MMC_RSP_R1,5,6,7  0x00000000000001aa
CMD_SEND:55 ARG:0x0000000000000000
MMC_RSP_R1,5,6,7  0x0000000000800120
CMD_SEND:41 ARG:0x0000000040300000
MMC_RSP_R3,4 0x0000000000ff8000
CMD_SEND:55 ARG:0x0000000000000000
MMC_RSP_R1,5,6,7  0x0000000000000120
CMD_SEND:41 ARG:0x0000000040300000
MMC_RSP_R3,4 0x0000000000ff8000
CMD_SEND:55 ARG:0x0000000000000000
MMC_RSP_R1,5,6,7  0x0000000000000120
CMD_SEND:41 ARG:0x0000000040300000
MMC_RSP_R3,4 0x0000000000ff8000
CMD_SEND:55 ARG:0x0000000000000000
MMC_RSP_R1,5,6,7  0x0000000000000120
CMD_SEND:41 ARG:0x0000000040300000
MMC_RSP_R3,4 0x0000000000ff8000
CMD_SEND:55 ARG:0x0000000000000000
MMC_RSP_R1,5,6,7  0x0000000000000120
CMD_SEND:41 ARG:0x0000000040300000
MMC_RSP_R3,4 0x0000000000ff8000
CMD_SEND:55 ARG:0x0000000000000000
MMC_RSP_R1,5,6,7  0x0000000000000120
CMD_SEND:41 ARG:0x0000000040300000
MMC_RSP_R3,4 0x0000000000ff8000
CMD_SEND:55 ARG:0x0000000000000000
MMC_RSP_R1,5,6,7  0x0000000000000120
CMD_SEND:41 ARG:0x0000000040300000
MMC_RSP_R3,4 0x0000000000ff8000
CMD_SEND:55 ARG:0x0000000000000000
MMC_RSP_R1,5,6,7  0x0000000000000120
CMD_SEND:41 ARG:0x0000000040300000
MMC_RSP_R3,4 0x0000000000ff8000
CMD_SEND:55 ARG:0x0000000000000000
MMC_RSP_R1,5,6,7  0x0000000000000120
CMD_SEND:41 ARG:0x0000000040300000
MMC_RSP_R3,4 0x0000000000ff8000
CMD_SEND:55 ARG:0x0000000000000000
MMC_RSP_R1,5,6,7  0x0000000000000120
CMD_SEND:41 ARG:0x0000000040300000
MMC_RSP_R3,4 0xffffffffc0ff8000
sd_send_op_cond 55, 41 cmd completed.
CMD_SEND:2 ARG:0x0000000000000000
MMC_RSP_R2 0x0000000003534453
           0x0000000055303447
           0xffffffff8008db8f
           0xffffffffa900cc25

DUMPING DATA
0 - 0x0000000000000003 0x0000000000000053 0x0000000000000044 0x0000000000000053
4 - 0x0000000000000055 0x0000000000000030 0x0000000000000034 0x0000000000000047
8 - 0x0000000000000080 0x0000000000000008 0x00000000000000db 0x000000000000008f
12 - 0x00000000000000a9 0x0000000000000000 0x00000000000000cc 0x0000000000000025
CMD_SEND:3 ARG:0x0000000000000000
MMC_RSP_R1,5,6,7  0xffffffffaaaa0520
CMD_SEND:9 ARG:0xffffffffaaaa0000
MMC_RSP_R2 0x00000000400e0032
           0x000000005b590000
           0x000000001d8a7f80
           0x000000000a4040b9

DUMPING DATA
0 - 0x0000000000000040 0x000000000000000e 0x0000000000000000 0x0000000000000032
4 - 0x000000000000005b 0x0000000000000059 0x0000000000000000 0x0000000000000000
8 - 0x000000000000001d 0x000000000000008a 0x000000000000007f 0x0000000000000080
12 - 0x000000000000000a 0x0000000000000040 0x0000000000000040 0x00000000000000b9
CMD_SEND:7 ARG:0xffffffffaaaa0000
MMC_RSP_R1,5,6,7  0x0000000000000700
CMD_SEND:55 ARG:0xffffffffaaaa0000
MMC_RSP_R1,5,6,7  0x0000000000000920
CMD_SEND:51 ARG:0x0000000000000000
MMC_RSP_R1,5,6,7  0x0000000000000920
CMD_SEND:6 ARG:0x0000000000fffff1
MMC_RSP_R1,5,6,7  0x0000000000000900
CMD_SEND:55 ARG:0xffffffffaaaa0000
MMC_RSP_R1,5,6,7  0x0000000000000920
CMD_SEND:6 ARG:0x0000000000000002
MMC_RSP_R1,5,6,7  0x0000000000000920
CMD_SEND:6 ARG:0xffffffff80fffff1
MMC_RSP_R1,5,6,7  0x0000000000000900
CMD_SEND:55 ARG:0xffffffffaaaa0000
MMC_RSP_R1,5,6,7  0x0000000000000920
CMD_SEND:13 ARG:0x0000000000000000
MMC_RSP_R1,5,6,7  0x0000000000000920
sbss 0x000000004020c3f0, ebss 0x0000000040225ae0
hart 4 starting
hart 2 starting
fsinit sb.magic 0
hart 3 starting
mmc_bread nunmber of blocks 7744512
CMD_SEND:16 ARG:0x0000000000000200
MMC_RSP_R1,5,6,7  0x0000000000000900
CMD_SEND:18 ARG:0x0000000000000002
dwmci_data_transfer DATA ERROR! mask 0x424  0xbe80
RET -22
fsinit sb.magic 0

2、sd卡上内容为:dd if=fs.img of=/dev/sdb1 seek=1 bs=1024, fs.img是文件系统的镜像,0扇区为boot扇区不在fs.img里,从1扇区开始为superblock,因此dd时跳过0扇区,直接写入sd卡的1扇区。
3、源码放在:github.com:ahczgy/xv6vf1.git,名字仍然是xv6vf1,其实已修改移植到vf2下。
现在问题就是读1扇区不成功,请路过的多指教,感谢。

已解决。
1、读sd卡失败问题。

采用FIFO模式读,传入存放读取数据的内存需要在16、32或64字节上对齐。8字节上对齐会发生如下错误
1735568581087
DMA对齐也未读成功,有待以后尝试。对齐办法:
1735568975145
2、如何正确地将fs.img文件写到sd卡上。一是将待写的sd卡用分区工具DiskGenius删除所有分区。二是在linux下用dd命令写入,命令如下:dd if=fs.img of=/dev/sdb bs=1024,注意是/dev/sdb,不带数据1或2之类意味着是未分区的sd卡。
注意:xv6的mkfs工具是将superblock写在第1个block里,这里1个block是1024字节,而sd卡的1个block是512字节。