硬件手册 https://sifive.cdn.prismic.io/sifive/de1491e5-077c-461d-9605-e8a0ce57337d_fu740-c000-manual-v1p3.pdf
软件SDK https://github.com/sifive/freedom-u-sdk
其他所有资料主页 https://www.sifive.com/boards/hifive-unmatched
OpenSBI主页 https://github.com/riscv-software-src/opensbi
- 编译用于FU740的uCore-SMP
- 制作支持U-Boot的uCore-SMP映像
- 导入SD card后,成功启动
FU740有5个核,小核为0,大核心为1-4,小核core 0 不能通过SBI启动 (所以启动要从mhartid=1开始),这是坑1.
启用页表(写satp)之后,程序就没反应了,这是因为FU740对页表项(PTE)中的 A、D位有规定,它不支持硬件修改A和D,并且一定要把A和D设为1,否则会page fault,这和之前做法把A、D设为0的是不一致的。这是坑2.
最后我发现启动阶段 OpenSBI和 U-Boot proper 的耦合很紧密,还包含了itb在bin文件里,所以我只能保留U-Boot proper。我把uCore-SMP做成了能被U-Boot识别的映像格式(用mkimage),然后就可以启动了。
后面的困难是(1)没有文件系统,我现在用的ramdisk,重启就没了。想要文件系统的话就需要有SD卡驱动 (2)SD卡(MMC)应该使用了SPI协议,但目前还不知道其中的具体细节。
- 使用SDK编译流程跑通
- 成功生成SD卡的Linux镜像文件
- 将镜像写入SD卡成功
- FU740主机启动进入导引到Linux
- 编译QEMU运行成功
PARALLEL_MAKE="-j 32" BB_NUMBER_THREADS=32 MACHINE=unmatched bitbake demo-coreip-cli
# PARALLEL_MAKE="-j 32" BB_NUMBER_THREADS=32 MACHINE=unmatched bitbake demo-coreip-xfce4
PARALLEL_MAKE="-j 32" BB_NUMBER_THREADS=32 MACHINE=qemuriscv64 bitbake demo-coreip-cli
MACHINE=qemuriscv64 runqemu nographic slirp
- 研究怎么写SD卡驱动,一方面研究SPI协议,另一方面研究U-Boot是怎么做的。