Spike 运行RISC-V Linux

目录

    • 前提环境:
    • 大纲
    • busybox安装
    • riscv-linux编译
    • riscv-pk包装
    • spike运行
    • 相关参考文档

前提环境:

设置好$RISCV地址
工具链:riscv64-unknown-linux-gnu-gcc (linux版)
运行模拟器:Spike
这两个环境搭建参考我另一篇博客:RISC-V GNU编译环境搭建与运行实践

大纲

整个操作简单来说就是,使用busybox生成基本的Linux命令,再编译riscv-linux生成vmlinux,使用riscv-pk里的bbl包装vmlinux,最后使用Spike 运行bbl,启动linux。

busybox安装

BusyBox 是一个集成了三百多个最常用Linux命令和工具的软件。

curl -L https://busybox.net/downloads/busybox-1.27.2.tar.bz2 > busybox.tar.bz2 
tar xvjf busybox1.27.2.tar.bz2
cd /busybox-1.27.2
make menuconfig   # 設置 .config文件,或直接通过下方参考文件直接替换

.config文件可直接使用.config参考
然后替换其中几个字段:
CONFIG_CROSS_COMPILER_PREFIX:$RISCV/bin/riscv64-unknown-linux-gnu-
CONFIG_SYSROOT:$RISCV/sysroot
CONFIG_PREFIX:$RISCV/rootfs

然后设置rootfs目录

cp -r $RISCV/sysroot $RISCV/rootfs      # 复制一份 sysroot作为未来 rootfs 的基底     
cd $RISCV/rootfs                        
mkdir bin dev tmp proc sys              # 创建一些系统目录
cp inittab $RISCV/rootfs/etc/inittab    # 拷贝进inittab 文档
ln -s ../bin/busybox sbin/init          # 设定init起始文档连接到busybox
ln -s bin/busybox linuxrc               #
ln -s sbin/init init                    # 
mknod dev/console c 5 1                 # 设置一些必要的虚拟外设
mknod dev/null c 1 3   

其中inittab文件可直接使用inittab参考

然后编译运行

make -j4
sudo make install

riscv-linux编译

git clone [email protected]:riscv/riscv-linux.git #使用码云的镜像下载更快
cd riscv-linux
make ARCH=riscv menuconfig
vim initramfs.txt #在当前目录建立initramfs.txt,内容如下

initramfs.txt

dir /dev 755 0 0
nod /dev/console 644 0 0 c 5 1
nod /dev/null 644 0 0 c 1 3
slink /init /bin/busybox 755 0 0

设置.config文件,可直接使用.config参考
将CONFIG_INITRAMFS_SOURCE替换为自己的$riscv/rootfs路径,如
CONFIG_INITRAMFS_SOURCE="/opt/riscv/rootfs initramfs.txt"

编译生成vmlinux

make -j4 ARCH=riscv CROSS_COMPILE=riscv64-unknown-linux-gnu- vmlinux

riscv-pk包装

将mvlinux用bbl包装

cd riscv-pk
mkdir build
cd build
../configure  --prefix=$RISCV --host=riscv64-unknown-linux-gnu --with-payload=/home/pengping/rv-gnu/riscv-linux/vmlinux
make 

其中 --with-payload=自己生成的vmlinux路径

spike运行

spike riscv-pk/build/bbl

运行结果:
Spike 运行RISC-V Linux_第1张图片
运行起来的目录其实是之前设置的$riscv/rootfs目录,里面只能运行一些基础的linux指令(busybox含有的),没有相关的工具链,而且方向键和esc键会乱码。
而且在当前环境下的操作不会被保存下来,每次重新启动都会回到最初的环境。

可以将相关的库文件及要运行的RV二进制文件在外部编译后,再放入$riscv/rootfs里,重新编译生成新的vmlinux,然后重新用bbl包装,进行测试。

相关参考文档

https://ithelp.ithome.com.tw/articles/10192454
https://cnrv.io/articles/spike-linux

你可能感兴趣的:(RISCV,risc-v,linux,busybox)