3 Star 22 Fork 10

Samuel Yuan / riscv-openeuler-visionfive

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
Setup-openeuler-on-visionfive2-for-the-second-time.md 7.22 KB
一键复制 编辑 原始数据 按行查看 历史

操作手册:Setup openeuler on visionfive2 for the second time


1 目标

在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))

2 操作过程

2.1 准备micro sd card

这次我准备了一个64G的sd卡,使用gparted对其进行分区和格式化。

sudo apt install gparted
sudo gparted

采用gpt方式分区

Image

具体分区如下:

Image

设置分区名称和管理标识:

Image

2.2 准备rootfs

需要感谢,周嘉诚老师向我分享了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

2.3 准备linux kernel等文件

按官方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设备树文件均已准备完毕。

2.4 安装文件系统

sudo tar -xvf /mnt/hgfs/openeuler-rootfs-xfce.tar.gz -C /media/riscv/38468bcc-27b7-44f3-86d6-37feccc5f4ea/
sync

2.5 安装boot

进入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 .

3 启动系统

3.1 关于密码

登录用户:root
默认密码:openEuler12#$
修改密码
passwd

3.2 neofetch显示系统情况

Image

3.3 遗留问题

虽然用openeuler在visionfive2的开发板上运行起来,但是通过HDMI链接的显示器没有点亮,启动时lightdm服务也没有起来。

Image

具体情况可参看我的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能够正常工作。对于这个问题,我将在后续更新中继续研究。

4 参考资料

https://doc.rvspace.org/Doc_Center/sdk.html

Shell
1
https://gitee.com/samuel_yuan/riscv-openeuler-visionfive.git
git@gitee.com:samuel_yuan/riscv-openeuler-visionfive.git
samuel_yuan
riscv-openeuler-visionfive
riscv-openeuler-visionfive
master

搜索帮助