原生编译和交叉编译RISC-V 64 Linux内核的方法

为什么我要编译RISC-V 64 Linux内核?首先是我购买了一块SiFive HiFive Unmatched开发板(16G内存的新版本),并在硬盘中安装了Ubuntu 21.04 for Unmatched版本,然而我发现一个问题,我的键盘和鼠标有时会突然失去响应,我想先看看是不是软件问题再决定要不要退换这块开发板。虽然我没有查到其他人也有类似的问题,但我发现目前Linux内核对于RISC-V架构的支持确实还不够完善,而我也找不到现成的编译好的最新版Linux内核,所以我想试试通过编译最新的内核(5.13.1版本)来看看能不能解决键盘和鼠标失去响应的问题。据说5.14内核对RISC-V会有比较完善的支持,那我还是先编译5.13.1版本,等着5.14版本吧。好,废话不多说,开工。

一、原生编译,也就是在Unmatched开发板/Ubuntu 21.04 for Unmatched版本上直接编译5.13.1版本内核。
1、获得最新的Linux内核源代码,点这里
2、安装编译内核所必须的软件。

sudo apt install build-essential openssl libssl-dev pkg-config libc6-dev bison flex libelf-dev minizip libidn11-dev libidn11 ncurses-bin libncurses5-dev dwarves autoconf automake autotools-dev curl git python3 libmpc-dev libmpfr-dev libgmp-dev gawk texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev

3、解压缩5.13.1内核源代码:

sudo tar xavf linux-5.13.1.tar.xz -C /usr/src

4、净化源代码目录(如果之前编译过此源代码是必要的,如果是新编译,可能不需要做这一步,当然做了也没关系):

cd /usr/src/linux-5.13.1
sudo make mrproper
sudo make clean

5、获得编译内核所需要的配置文件,由于我的Ubuntu有现成的配置文件,所以我把它复制过来:

sudo cp /boot/config-5.11.0-1012-generic ./.config

注意还要修改一下.config配置文件,不然编译会出错。把CONFIG_SYSTEM_TRUSTED_KEYS=这一行后面引号中的字符全部删除。
6、对内核编译选项进行配置:

sudo make menuconfig

然后会出来一个图形界面,我就不截图了,我们用Tab键进行导航,用Enter键选定操作,依次选择Load-->OK-->Save-->OK-->Exit--Exit,注意这里Load和Save的文件都是.config,也就是上面我们复制过来的文件。
7、开始编译:

sudo make
sudo make modules
sudo make modules_install

8、安装:

sudo make install
sudo mkinitramfs -o /boot/initrd.img-5.13.1
sudo update-initramfs -c -k 5.13.1
sudo u-boot-update

至此完成。

二、交叉编译,也就是在x86机器上编译好内核,然后安装到Unmatched机器上。由于Unmatched开发板板载的Freedom U740性能确实有限,原生编译速度比较慢,另外我也想学习一下交叉编译的方法,所以我就交叉编译了一次。x86机器上的系统是Ubuntu 21.04 x86-64版本。
1、获得最新的Linux内核源代码,点这里
2、安装编译内核所必须的软件。

sudo apt install build-essential openssl libssl-dev pkg-config libc6-dev bison flex libelf-dev minizip libidn11-dev libidn11 ncurses-bin libncurses5-dev dwarves autoconf automake autotools-dev curl git python3 libmpc-dev libmpfr-dev libgmp-dev gawk texinfo gperf libtool patchutils bc zlib1g-dev libexpat-dev

3、编译安装riscv-gnu-toolchain交叉编译工具链。

git clone https://github.com/riscv/riscv-gnu-toolchain.git
cd riscv-gnu-toolchain
./configure --prefix=/opt/riscv
make linux

注意,还要将交叉编译工具链的bin目录加入~/.profile或~/.bashrc文件中,在文件最后加入这一行:
export PATH=/opt/riscv/bin:$PATH
保存文件并执行以下命令:

source ~/.profile

4、解压缩5.13.1内核源代码:

sudo tar xavf linux-5.13.1.tar.xz -C /usr/src

5、净化源代码目录(如果之前编译过此源代码是必要的,如果是新编译,可能不需要做这一步,当然做了也没关系):

cd /usr/src/linux-5.13.1
sudo make mrproper
sudo make clean

6、获得编译内核所需要的配置文件,由于我的Ubuntu有现成的配置文件,所以我把它复制过来:

sudo cp /boot/config-5.11.0-1012-generic ./.config

注意还要修改一下.config配置文件,不然编译会出错。把CONFIG_SYSTEM_TRUSTED_KEYS=这一行后面引号中的字符全部删除。

7、对内核编译选项进行配置:

sudo make ARCH=riscv CROSS_COMPILE=/opt/riscv/bin/riscv64-unknown-linux-gnu- menuconfig

然后会出来一个图形界面,我就不截图了,我们用Tab键进行导航,用Enter键选定操作,依次选择Load-->OK-->Save-->OK-->Exit--Exit,注意这里Load和Save的文件都是.config,也就是上面我们复制过来的文件。
8、开始编译:

sudo make ARCH=riscv CROSS_COMPILE=/opt/riscv/bin/riscv64-unknown-linux-gnu-
sudo make ARCH=riscv CROSS_COMPILE=/opt/riscv/bin/riscv64-unknown-linux-gnu- modules
sudo make ARCH=riscv CROSS_COMPILE=/opt/riscv/bin/riscv64-unknown-linux-gnu- modules_install

9、安装(我还没编译完,待续)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章