原生編譯和交叉編譯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、安裝(我還沒編譯完,待續)。

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