昉·星光 2 RISC-V单板计算机 UEFI启动
分享作者:user202106236352
评测品牌:赛昉科技
评测型号:VF202040-A0
发布时间:2025-06-23 11:18:13
0
前言
https://blog.csdn.net/2502_91349360/article/details/148826971?sharetype=blogdetail&sharerId=148826971&sharerefer=PC&sharesource=2502_91349360&spm=1011.2480.3001.8118
开源口碑分享内容

概述

目前大部分的开发平台已支持UEFI启动。从资料查到RISCV也提供了UEFI的支持。

昉·星光2的官方镜像(starfive-jh7110-202409-SD-minimal-desktop-wayland.img) 是uboot引导启动的,我们尝试在其基础上进行修改。


UEFI固件烧录

1. 从   https://github.com/starfive-tech/edk2/releases/tag/REL_VF2_APR2023   下载编译好的UEFI固件。其中,u-boot-spl.bin.normal.out和JH7110.fd是必须的。

2.  https://github.com/starfive-tech/edk2/wiki/How-to-flash-image-into-QSPI-Flash  提供了将固件下载到flash的方法,通过uboot配合TFTP对flash进行烧录,稍微有点麻烦。

但我们获取到关键信息,需要把u-boot-spl.bin.normal.out烧录到地址0的位置,JH7110.fd烧录到0x100000(1MB)的位置。


3. 板子上电,启动官方系统,从log看到,uboot启动,flash容量16MB。

查看flash相关节点信息,能正常识别,但被分区且大小不符合烧录UEFI的要求。

之前已从 https://github.com/starfive-tech/linux 下载了对应 6.6.x版本的内核 ,尝试分析,发现是由设备树提供的信息把flash分了4个区。

把arch/riscv/boot/dts/starfive/jh7110-starfive-visionfive-2.dtsi 稍做修改,spl下的分区修改为从0地址开始,容量0x1000000(16MB)。

make dtbs 得到修改后的设备树 jh7110-starfive-visionfive-2-v1.3b.dtb,并替换当前系统的dtb。


4.  重启再进系统。查看flash,已是一个16M的分区。按前面的地址,把u-boot-spl.bin.normal.out和JH7110.fd用dd命令,按指定地址更新到flash里。


5. 拨码开关切到flash启动,上电,从启动信息看到,板子已经从UEFI启动完成,但是因为官方的镜像是uboot启动,没有引导进系统。

系统修改

1. 尝试用官方系统的6.6.x版本内核,没能从UEFI引导成功。下载个5.10版本的内核试试。

git clone https://github.com/starfive-tech/linux.git -b VF2_v2.11.5

环境配置脚本 set_env.sh

export CROSS_COMPILE=riscv64-linux-gnu- 
export ARCH=riscv
make starfive_visionfive2_defconfig

环境配置成功

zero@pc:~/work/risc/linux$ riscv64-linux-gnu-gcc -v
Using built-in specs.
............
build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=riscv64-linux-gnu --program-prefix=riscv64-linux-gnu- --includedir=/usr/riscv64-linux-gnu/include
Thread model: posix
gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04) 

编译内核

make -j6


2. 把系统sd卡插到PC上,挂载EFI分区

3. 把编译好的内核拷贝到EFI分区,保存为UEFI能识别的EFI文件,驱动模块也拷贝到文件系统里

4. 在EFI分区创建 efi/boot目录,并创建UEFI shell能识别的启动脚本,内容如下

linux-riscv64.efi console=tty1 console=ttyS0,115200 earlycon=sbi rootwait root=/dev/mmcblk1p4

测试

1. 把修改好的sd卡插回到板子上,上电

2. 能看到UEFI找到上面写的脚本,加载了内核并启动。正常进入到官方的Debain系统,网口也正常。

         

总结

1. 官方提供了编译好的UEFI固件,可以通过烧录到flash,稍微修改系统实现UEFI引导启动。

2. UEFI固件不支持6.6.x内核,稍微分析了一下,有可能是固件编译使用的是5.15内核的设备树。因时间关系,没有编译UEFI源码去验证。


全部评论
暂无评论
0/144