一、前言
撰稿人:李浩
在上一期中我們已經完成了RISC-VGCC/Newlib Toolchain、GNUtoolchain for RISC-V, ISA Simulator等工具的編譯安裝。在這一期中我們將嘗試使用riscv64-unknown-linux-gnu-gcc來編譯我們的linux內核。
不要忘了我們的環境變量:
$ export TOP=/home/lh/RISCV
$ export RISCV=$TOP/riscv
$ export PATH=$PATH:$RISCV/bin
二、Building the Linux Kernel
1.獲取Kernel Sources
我們終於準備好了引入Linux內核源代碼了。從riscv-tools/riscv-gnu-toolchain目錄中進行更改,並將riscv-linux git存儲庫克隆到以下目錄:linux-4.15._xx_,其中xx表示當前修訂的版本(截至2018年1月8日,它是“Linux 4.15-rc7”)。
$ cd $TOP
$ git clone https://github.com/riscv/riscv-linux.git Linux-4.15-rc7
2.Configuring the Linux Kernel
Linux內核雖然是無限可配置的。但是,對於目前的開發狀態,沒有太多的設備或選項可以進行調整。但是,從默認配置開始,該配置應該與ISA模擬器一起工作。這裏需要使用ARCH= 來指定目標的體系架構,使用CROSS_COMPILE=來指定使用的交叉編譯器的前綴(我們自然是使用前面裝好的riscv64-unknown-linux-gnu-gcc)。
$ make ARCH=riscv CROSS_COMPILE=riscv64-unknown-linux-gnu- defconfig
如果要編輯配置,可以使用基於文本的GUI(Ncurses)編輯配置:
$ make ARCH=riscv menuconfig
等你對配置感到滿意的時候,就開始編譯內核。注意在編譯RISC-V內核時,必須在make的每次調用中指定ARCH=riscv和CROSS_COMPILE=。這一行也不例外。如果你想加快進程,可以通過參數-j [number]來啓用多線程編譯。
$ make -j16 ARCH=riscv CROSS_COMPILE=riscv64-unknown-linux-gnu-
做到這一步,很恭喜了,你終於爲RISC-V交叉編譯了linux內核。然而,在我們啓動它之前還有一些事情要處理。
下一期,我們將編譯安裝Busybox,到這纔是完整的riscv-tools的安裝,讓我們下期見吧。這一期雖然短,但是做起來卻很容易出錯,如果你是一名新手的話,筆者希望你在讀到這篇文章時能夠去了解一下linux內核,make過程以及Makefile。這會對你很有幫助,如果你編譯過程中出錯,閱讀這些資料會對你有所幫助。
參考文獻
[1] RISC-Vofficial network:https://riscv.org/software-tools/
[2]README of RISC-VGNU Compiler Toolchain:
https://github.com/riscv/riscv-gnu-toolchain