基本原理:
在物理服务器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等命令,表明运行成功