在visionfive2上安装openeuler riscv。 在第一次安装的课程中,我们使用了sdcard.img来安装,虽然简单,但却不方便灵活配置,为了获得更多自由,这个sdcard的内容,我们自己来做。(本教程中Visionfive2使用VisionFive2 Software v2.4.4,u-boot版本为U-Boot 2021.10 (Dec 19 2022 - 17:24:44 +0800))
这次我准备了一个64G的sd卡,使用gparted对其进行分区和格式化。
sudo apt install gparted
sudo gparted
采用gpt方式分区
具体分区如下:
设置分区名称和管理标识:
需要感谢,周嘉诚老师向我分享了openeuler riscv 2203V2的rootfs文件系统。如果没有的同学,可以从 https://mirror.iscas.ac.cn/openeuler-sig-riscv/openEuler-RISC-V/preview/openEuler-22.03-V2-riscv64/Visionfive/ 下载visionfive版,然后进行裁剪。如果懒得裁剪,也可以下载下面的2209V1。
https://mirror.iscas.ac.cn/openeuler-sig-riscv/openEuler-RISC-V/preview/openEuler-22.09-V1-riscv64/openEuler-22.09-V1-riscv64-rootfs-xfce.tar.gz
按官方github上安装准备包
sudo apt-get update
sudo apt-get install build-essential g++ git autoconf automake autotools-dev texinfo bison xxd curl flex gawk gdisk gperf libgmp-dev libmpfr-dev libmpc-dev
sudo apt-get install libtool patchutils screen texinfo unzip zlib1g-dev libyaml-dev wget cpio bc dosfstools mtools device-tree-compiler libglib2.0-dev libpixman-1-dev kpartx
sudo apt-get install libz-dev libssl-dev libncurses-dev
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
sudo apt-get install git-lfs
添加SSH key
riscv@qemu-vm:~/.ssh$ ssh-keygen -t ed25519 -C "你的电子邮箱"
riscv@qemu-vm:~/.ssh$ cat id_ed25519.pub
使用得到的SSH key密钥配置github,然后下载VisionFive2 SDK
git clone git@github.com:starfive-tech/VisionFive2.git
cd VisionFive2
git checkout JH7110_VisionFive2_devel
git submodule update --init --recursive
进入VisionFive2/linux源码目录,编译linux kernel
#清除之前生成文件,如果不清除,有些文件的最新版本不能得到编译,进而导致后续启动时出错或警告,例如dtb和cpio文件。
sudo make ARCH=riscv mrproper
#生成visionfive2的默认配置.config
sudo make starfive_visionfive2_defconfig CROSS_COMPILE=riscv64-linux-gnu- ARCH=riscv
#进入kernel配置菜单修改,本例中采用默认配置,也可以自行配置,本例跳过这个步骤
sudo make CROSS_COMPILE=riscv64-linux-gnu- ARCH=riscv menuconfig
#编译kernel
sudo make CROSS_COMPILE=riscv64-linux-gnu- ARCH=riscv -j $(nproc)
#编译dtbs,本例在编译kernel是会自动生成dtb文件,可跳过这个步骤
sudo make CROSS_COMPILE=riscv64-linux-gnu- ARCH=riscv dtbs
#编译modules
sudo make CROSS_COMPILE=riscv64-linux-gnu- ARCH=riscv modules
#编译modules的安装文件
sudo make CROSS_COMPILE=riscv64-linux-gnu- ARCH=riscv modules_install
在VisionFive2/linux/arch/riscv/boot目录获得Image.gz;在VisionFive2/linux/arch/riscv/boot/dts/starfive目录获得jh7110-visionfive-v2.dtb;在/lib/modules目录中获得模组目录5.15.0;在VisionFive2/linux/usr目录获得initramfs_data.cpio;
在源码目录中新建z目录,并继续编译。
sudo mkdir z
make CROSS_COMPILE=riscv64-linux-gnu- ARCH=riscv INSTALL_PATH=./z/ zinstall -j $(nproc)
查看z目录中生成的文件。
riscv@qemu-vm:~/riscv64-linux/VisionFive2/linux/z$ ls
config-5.15.0 System.map-5.15.0 vmlinuz-5.15.0
进入linux源码的usr目录,将其中的cpio文件转化为img文件(注意这里的cpio文件采用的是默认配置,里面只有2个目录:/dev和/root,里面基本没有东西,相当于置零的文件。但能让系统启动起来,不会出现init error -8的错误。)
gzip initramfs_data.cpio
sudo cp initramfs_data.cpio.gz initrd.img-5.15.0
至此,boot所需的linux kernel文件,ram文件系统文件,dtb设备树文件均已准备完毕。
sudo tar -xvf /mnt/hgfs/openeuler-rootfs-xfce.tar.gz -C /media/riscv/38468bcc-27b7-44f3-86d6-37feccc5f4ea/
sync
进入sd卡上的openeuler rootfs的boot目录,将其中文件全部删除。然后开始复制linux kernel等文件。
sudo cp ~/riscv64-linux/VisionFive2/linux/z/* .
sudo cp ~/riscv64-linux/VisionFive2/linux/usr/initrd.img-5.15.0 .
sudo mkdir starfive
sudo mkdir starfive/dtb
sudo cp ~/riscv64-linux/VisionFive2/linux/arch/riscv/boot/dts/starfive/jh7110-visionfive-v2.dtb ./starfive/dtb/
sudo mkdir extlinux
进入extlinux目录,编辑extlinux.conf文件
## /boot/extlinux/extlinux.conf
##
## IMPORTANT WARNING
##
## The configuration of this file is generated automatically.
## Do not edit this file manually, use: u-boot-update
default l0
menu title U-Boot menu
prompt 0
timeout 30
label l0
menu label openEuler 2203 v2 GNU/Linux bookworm/sid 5.15.0-starfive
linux /boot/vmlinuz-5.15.0
initrd /boot/initrd.img-5.15.0
fdtdir /boot/starfive/
append root=/dev/mmcblk1p3 rw console=tty0 console=ttyS0,115200 earlycon rootwait stmmaceth=chain_mode:1 selinux=0
进入进入sd卡上的boot目录,编辑uEnv.txt文件
fdt_high=0xffffffffffffffff
initrd_high=0xffffffffffffffff
kernel_addr_r=0x44000000
kernel_comp_addr_r=0x90000000
kernel_comp_size=0x10000000
fdt_addr_r=0x48000000
ramdisk_addr_r=0x48100000
# Move DHCP after MMC to speed up booting
boot_targets=mmc0 dhcp
# Fix wrong fdtfile name
fdtfile=dtb/jh7110-visionfive-v2.dtb
# Fix missing bootcmd
bootcmd=run distro_bootcmd
进入sd卡上的lib/modules目录,将模块文件夹复制
sudo cp -rf /lib/modules/5.15.0 .
登录用户:root
默认密码:openEuler12#$
修改密码
passwd
虽然用openeuler在visionfive2的开发板上运行起来,但是通过HDMI链接的显示器没有点亮,启动时lightdm服务也没有起来。
具体情况可参看我的boot log。
初步分析,我的initramfs用的是默认配置,里面基本上是空的,而debian的initramfs中则是通过一些script启动了某些东西,让显示器点亮。观察到starfive的github上对于HDMI的问题也有说明:Some resolution cannot be supported via HDMI, e.g. 2K, 1024x768…;HDMI disconnected/system hang/encoder timeout after restoring the system from hibernation on HDMI/GPU/ENC module。我猜debian的initramfs中的script或者gpu驱动可能加入了某些类似补丁的东西,让HDMI能够正常工作。对于这个问题,我将在后续更新中继续研究。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。