RISC-V云测平台：Compiling The Fedora Linux Kernel Natively on RISC-V
--- 以下是blog 正文 ---
# Compiling The Fedora Linux Kernel Natively on RISC-V
## Fedora RISC-V Support
There is ongoing work to Fedora to support RISC-V hardware. As of right now the Fedora documentation officially only shows how to install the distribution on the SiFive HiFive Unleashed
board. Although there is another board which is unofficially supported by Fedora. This board is the Sispeed LicheePi 4A which I have been planning on getting for Project Andre and Fedora development.
## Setting Up A Fedora Chroot Environment On The PerfXLab System
The PerfXLab RISC-V server is running Ubuntu 22.10, so getting a Fedora environment to compile the kernel in took a bit of tinkering. I knew I needed a container or a chroot environment to
be able to get into the appropriate build environment as not to run into any issues with the build or contaminate the host system.
I started out by looking for a pre-compiled RISC-V Fedora rootfs to use as my chroot environment. During my search I found a pre-built RISC-V raw image. This raw image was perfect! It was
essentially a premade rootfs originally designed for coincidentally the Licheepi 4A and T-Head variants!
Once I downloaded the image to the PerXLab system I started mounting the raw image as a loopback device. One of the easiest ways to dissect a raw image is by doing this quick hack! I then
found the root partition (usually the largest partition) then mounted it, so I can work on chrooting into it.
Once I got the partition mounted I started setting up the pre-requisites for a fully functioning chroot environment. I reffered to the trust Linux From Scratch book like I often do with
this type of work and started mounting the virtual kernel filesystems.
# Just for ease of running the commands :)
# Populate /dev
sudo mount -v --bind /dev $LFS/dev
# Mount virtual kernel filesystems
mount -v --bind /dev/pts $LFS/dev/pts
mount -vt proc proc $LFS/proc
mount -vt sysfs sysfs $LFS/sys
mount -vt tmpfs tmpfs $LFS/run
Now that /dev and the VKFS are mounted I could chroot into the Fedora rootfs by simply just running ```sudo chroot $LFS /bin/bash```. In the chroot I made sure to test if I had a network
connection by running a dnf search for a package. I got an error where dnf couldn't download the metadata, so I made sure to copy /etc/resolv.conf on the host to the chroot environment. I
then ran into the issue of not being able to copy it due to it being a symlink. Once I tracked down the symlink I saw that it was pointed to /run/systemd/resolve/stub-resolv.conf. I copied
this file into the chroot as /etc/resolv.conf. Success! Dnf was able to download the metadata!
## Building The Fedora Kernel In The Chroot Environment
For Fedora there is a Koji that supplies RISC-V package builds. I went to the Koji hosted at http://fedora.riscv.rocks/koji/ and downloaded the kernel source RPM into the chroot using wget.
To build the kernel source I initially installed mock and looked for a RISC-V config. I unfortunately didn't find one it in /etc/mock. After finding that out I went with plan b by using rpmbuild.
To build the source code with rpmbuild I first had to install the dependencies that the specfile requires using ```dnf builddep SPECS/kernel.spec```. Once I did that I was set to build the kernel! I started the build using ```time rpmbuild -bb SPECS/kernel.spec``` then waited a few minutes to see if it would error which it did after about 7 minutes. So I tried a different
version of the kernel which had the same issue. After walking away for a while I relized what the error was. I ran out of disk space in the chroot!
The root partition I mounted and chrooted into was only a few gigabytes in size and when building the kernel I had forgotten this detail. What I did to resolve the issue was to unmount all
of the virtual kernel filesystems and /dev. I then copied the mounted rootfs to a directory on the host. After that I remounted the VKFS then chrooted back in where I restarted the build.
Once I restarted the build I sat and waited again for about 20 minutes to see if I would run into another error. When I was sure there wouldn't be the possibility of an error I walked away
and came back the next day to find it build without any issues! To my surprise the build took 1 hour and 37 minutes to complete!
Image used: https://openkoji.iscas.ac.cn/pub/dl/riscv/T-Head/th1520_light/images/fedora-disk-minimal_thead_th1520-f38-20230511-210358.n.0-sda.raw.xz
Fedora T-Head Documentation: https://fedoraproject.org/wiki/Architectures/RISC-V/T-Head
Linux From Scratch VKFS Page: https://www.linuxfromscratch.org/lfs/view/stable/chapter07/kernfs.html
PerfXLab (Thank you Paul Wang for giving me access to the RISC-V Server!): http://www.perfxlab.com/
HS-2 RISC-V通用主板搭载了一颗国产RISC-V 64核处理器（SG2042）。SG2042是目前已量产的性能最高的RISC-V处理器，主要针对高性能计算领域需求设计，适用于科学计算、工程计算、AI计算、融合计算等大算力应用场景。