基本原理:
在物理服務器Ubuntu14.04上安裝qemu模擬器,模擬器中運行基於riscv指令集編譯的linux鏡像文件。
用到的工具包括:
riscv-qemu(模擬器,能夠模擬運行riscv指令集的程序或鏡像)
riscv-tools(基於riscv指令集的交叉編譯工具)
riscv-pk(用於包裝內核文件vmlinux)
busybox(用於給linux鏡像安裝基本命令,如ls,cat,mv等等)
以上工具安裝路徑在咱們的物理服務器裏分別爲:
1、安裝toolchain
1.下載交叉編譯工具:
2.安裝運行庫
$ sudo apt-get install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev gawk build-essential bison flex texinfo gperf libtool patchutils bc zlib1g-dev
3.配置安裝路徑
$ ./configure --prefix=/opt/riscv
4.編譯(linux版本)
$ make linux
5.驗證交叉編譯工具:
編譯hello.c到hello 注:要加上-static 靜態編譯選項
riscv64-unknown-linux-gnu-gcc -static hello.c -o hello
在x86環境下執行hello(x86下的gcc沒法執行hello,由於格式爲riscv)
./hello
沒法執行沒關係,由於尚未安裝qemu模擬器,咱們繼續操做html
2、安裝qemu
1.安裝運行庫
$ sudo apt-get install gcc libc6-dev pkg-config bridge-utils uml-utilities zlib1g-dev libglib2.0-dev autoconf automake libtool libsdl1.2-dev
2.下載master分支的qemu
$ git clone https://github.com/riscv/riscv-qemu
$ cd riscv-qemu $ git submodule update --init pixman
3.配置qemu,riscv-64-linux-user爲用戶模式,能夠運行基於riscv指令集編譯的程序文件,softmmu爲鏡像模擬器,能夠運行基於riscv指令集編譯的linux鏡像,爲了測試方便,這兩個我都安裝了
$ ./configure --target-list=riscv64-linux-user,riscv64-softmmu [--prefix=INSTALL_LOCATION]
4.編譯qemu
$ make
5.安裝qemu
$ [make install] # if you supplied prefix above
6.測試qemu用戶模式:
6.1使用交叉編譯器編譯一個helloword程序
$ riscv64-unknown-linux-gnu-gcc hello.c -o hello
6.2使用qemu的用戶模式運行riscv指令集的hello二進制文件
$ ./riscv64-linux-user/qemu-riscv64 -L $RISCV/sysroot hello
7.測試qemu鏡像模式:
$ riscv-qemu/riscv64-softmmu/qemu-system-riscv64 -kernel /home/tank/bblvmlinuxinitramfs_dynamic -nographic
出現riscv圖案而且可使用鏡像,表明qemu鏡像模擬器安裝正常。
3、安裝riscv-pk
1.下載對應分支的riscv-pk工具
2.建立build目錄,用於存放鏡像bbl
$ cd riscv-pk
$ mkdir build $ cd build
3.配置交叉編譯工具路徑,$RICSV表明交叉工具的路徑 第一步中設置爲了/opt/riscv
$ ../configure --prefix=$RISCV --host=riscv64-unknown-linux-gcc
4.編譯
$ make
5.安裝pk
$ make install
注:耗時較長,驗證pk工具的方法是用pk包裝鏡像文件vmlinux成bbl,qemu啓動bbl的時候出現以下圖案,表明pk工具沒有問題
4、安裝busybox
1.下載對應版本的busybox
$ curl -L http://busybox.net/downloads/busybox-1.26.2.tar.bz2 > busybox-1.26.2.tar.bz2
2.解壓縮文件
$ tar xvjf busybox-1.26.2.tar.bz2
$ cd busybox-1.26.2
3.清空其它因此配置(這樣能夠本身添加須要的命令組件)
$ make allnoconfig
4.進入菜單頁面配置
$ sudo apt-get install libncurses5-dev
$ make menuconfig
下圖中這幾項爲核心項,配置完成後只能使用ash init等幾個命令
5.採用16線程的速度進行編譯
$ make -j16
編譯完成後會在busybox-1.26.2目錄下生成busybox二進制執行文件
6.測試busybox,使用qemu的鏡像模式載入busybox文件,啓動模擬器
$ ./riscv64-linux-user/qemu-riscv64 -L $RISCV/sysroot busybox ash
若是出現如下界面表明busybox安裝成功(便可以使用busybox的一些命令)
5、編譯linux內核
1.下載對應分支的內核
$ cd linux-4.6.2
2.配置內核信息
$ make ARCH=riscv defconfig
3.在內核目錄下新建initramfs.txt文件,並保存如下內容
$ vi initramfs.txt
4.在內核目錄下新建inittab文件,並保存如下內容
$ vi inittab
5.進入菜單頁面配置
$ make ARCH=riscv menuconfig
注:更改下面兩個選項
"General setup -> Initial RAM Filesystem..." (CONFIG_BLK_DEV_INITRD=y)
"General setup -> Initramfs source files = initramfs.txt" (CONFIG_INITRAMFS_SRC=initramfs.txt)
6.編譯內核,生成vmlinux文件
$ make -j4 ARCH=riscv vmlinux
注:編譯完成在linux4-6.2文件夾下出現vmlinux
6、使用pk包裝vmlinux
1.進入pk工具的build目錄
$ cd /path/to/risv-tools/riscv-pk/build
$ rm -rf *
2.配置要編譯的內核文件以及使用的指令集路徑及名稱
$ ../configure --prefix=$RISCV --with-payload=/path/to/linux-4.6.2/vmlinux --host=riscv64-unknown-linux-gnu
3.包裝生成bbl鏡像文件
$ make bbl
7、qemu模擬運行鏡像bbl
$ riscv-qemu/riscv64-softmmu/qemu-system-riscv64 -kernel /home/tank/old3/riscv-pk/build/bbl -m 1024M -nographic
可使用ls cat等命令,表明運行成功