QEMU模拟器下编译运行基于RISCV指令集的linux操作系统

一.准备工作

使用的软件
(1)Oracle VM VirtuaBox
(2)Ubuntu19.04		
使用工程文件的路径
(1)/home/u/riscv_pro

所有软件均安装在这个目录下
$mkdir /home/u/riscv_pro
$cd /home/u/riscv_pro

1.下载交叉编译工具toolchain源码
	$ git clone --recursive  https://github.com/riscv/riscv-gnu-toolchain
2.下载qemu源码
	$wget  https://download.qemu.org/qemu-4.2.0-rc2.tar.xz
3.下载busybox源码
	$wget  http://busybox.net/downloads/busybox-1.26.2.tar.bz2
4.下载linux内核源码
	$wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.19.85.tar.xz
5.下载riscv-pk包源码
	$ git clone https://github.com/riscv/riscv-pk

二.安装toolchain

1.安装运行库
	$ 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
2.配置安装路径
	$ mkdir riscv-gnu-toolchain-build
	$ cd riscv-gnu-toolchain-build
	$ ../riscv-gnu-toolchain/configure --prefix=/opt/riscv
3.编译
	$ make linux
参考:
	/data/shenjx/work/riscv-tools/riscv-gnu-toolchain/riscv-gcc/configure --target=riscv64-unknown-linux-gnu --prefix=/data/shenjx/riscv-toolchain --with-sysroot=/data/shenjx/riscv-toolchain/sysroot --with-system-zlib --enable-shared --enable-tls --enable-languages=c,c++,fortran --disable-libmudflap --disable-libssp --disable-libquadmath --disable-nls --disable-bootstrap --src=.././riscv-gcc --enable-checking=yes --disable-multilib --with-abi=lp64d --with-arch=rv64imafd

三.安装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.配置qemu
	$ tar -xvf qemu-4.2.0-rc2.tar.xz
	$ mkdir qemu-4.2.0-rc2-build
	$ cd qemu-4.2.0-rc2-build
	$ ../qemu-4.2.0-rc2/configure --target-list=riscv64-linux-user,riscv64-softmmu
3.编译
	$ make

四.安装busybox

1.配置busybox
	$ tar -xvjf busybox-1.26.2.tar.bz2
	$ cd busybox-1.26.2
	$ make allnoconfig
	$ sudo apt-get install libncurses5-dev
	$ make menuconfig

QEMU模拟器下编译运行基于RISCV指令集的linux操作系统_第1张图片

2.编译
	$ make -j4
3.安装
	$ make install
4.创建initramfs文件系统目录
	$ mkdir  initramfs
	$mkdir  -p  bin etc dev lib proc sbin sys tmp usr usr/bin usr/lib usr/sbin
	$cp _install/* ./initramfs/ -a
	$cd ./initramfs
	$rm -f linuxrc
	$cd ./etc 
	$touch inittab
	
	Inittab文件中写入:
	::sysinit:/bin/busybox mount -t proc proc /proc
	::sysinit:/bin/busybox mount -t tmpfs tmpfs /tmp
	::sysinit:/bin/busybox mount -o remount,rw /dev/htifblk0 /
	::sysinit:/bin/busybox --install -s
	/dev/console::sysinit:-/bin/ash
	
5.制作initrd
	$cd ..
	$ find . | cpio -H newc --quiet -o | gzip -9 > /home/u/riscv_pro/busybox-1.26.2/initramfs/initrd.gz

五.编译linux内核

1.配置linux内核
	$ tar -xvf linux-4.19.85.tar.xz
	$ cd linux-4.19.85
	$ make ARCH=riscv defconfig
	$ make ARCH=riscv menuconfig ( O=../build/  O选项指定kernel的编译目录 )
	"General setup -> Initial RAM Filesystem..." (CONFIG_BLK_DEV_INITRD=y)
	"General setup -> Initramfs source files ="/home/u/riscv_pro/busybox-1.26.2/initramfs/initrd.gz"(CONFIG_INITRAMFS_SRC=initramfs.txt)
	添加debug:
	在 kernel hacking->compile-time checks and compiler options 选项页,勾选第一个Compile the kernel with debug info
2.编译
	$ make -j4 ARCH=riscv CROSS_COMPILE=riscv64-unknown-linux-gnu-  vmlinux
3.readelf -S vmlinux 查看vmlinux的section ,如果有.debug字段说明vmlinux中带有debug

六.安装riscv-pk包装vmlinux

1.配置
	$ mkdir riscv-pk-build
	$ cd riscv-pk-build
	$../riscv-pk/configure --prefix=$RISCV --with-payload=/home/u/riscv_pro/linux-4.19.85/vmlinux --host=riscv64-unknown-linux-gnu
2.编译
	$ make bbl

七.qemu模拟运行镜像bbl

$/home/u/riscv_pro/qemu-4.2.0-rc2-build/riscv64-softmmu/qemu-system-riscv64 -nographic -machine virt -kernel /home/u/riscv_pro/riscv-pk-build/bbl -append "root=/dev/vda ro console=ttyS0" -drive file=/home/u/riscv_pro/busybox-1.26.2/busybox,format=raw,id=hd0 -device virtio-blk-device,drive=hd0 

$sudo riscv-qemu/riscv64-softmmu/qemu-system-riscv64 -machine virt -kernel riscv-pk/build/bbl -append "console=ttyS0"  -nographic -m 1024M

八.扩展

使用objcopy切割二进制文件,去掉无用的文件头elf部分
	$riscv64-unknown-linux-gnu-objcopy  -O  binary  -S  bbl  bbl_cp

输出二进制文件内容到txt文件中查看使用vim
	$hexdump  bbl_cp  >  bbl_cp.txt

反汇编
	$riscv64-unknown-linux-gnu-objdump  -d  bbl  bbl_asm.txt

你可能感兴趣的:(ubuntu,linux)