risc-v 编译 linux,qemu模拟器下编译运行基于riscv指令集的Linux操做系统

本文介绍如何在Ubuntu 14.04上搭建RISC-V开发环境,包括安装交叉编译工具链、QEMU模拟器、riscv-pk、BusyBox及Linux内核编译流程。通过详细步骤说明实现RISC-V指令集的Linux镜像模拟。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本原理:

在物理服务器Ubuntu14.04上安装qemu模拟器,模拟器中运行基于riscv指令集编译的linux镜像文件。

用到的工具包括:

riscv-qemu(模拟器,能够模拟运行riscv指令集的程序或镜像)

riscv-tools(基于riscv指令集的交叉编译工具)

riscv-pk(用于包装内核文件vmlinux)

busybox(用于给linux镜像安装基本命令,如ls,cat,mv等等)

以上工具安装路径在咱们的物理服务器里分别为:

cdbb872649d2945b8b9b6bd431b71ae5.png

a5ce2a355d8444d5806fe6ec.html

1、安装toolchain

1.下载交叉编译工具:

fc5b088088ae2895fd5ff3d33d9e0ad1.png

a5ce2a355d8444d5806fe6ec.html

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

bdcb18cb9ff4556d9750feef3ec47704.png

在x86环境下执行hello(x86下的gcc没法执行hello,由于格式为riscv)

./hello

521a4a567c0200509402e41eab5c6cb9.png

a5ce2a355d8444d5806fe6ec.html

没法执行没关系,由于尚未安装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

32a5d285120409bae0c0a9dba2957cb4.png

a5ce2a355d8444d5806fe6ec.html

$ 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

9e094487361e884fccdd3d6eb83e505e.png

a5ce2a355d8444d5806fe6ec.html

7.测试qemu镜像模式:

$ riscv-qemu/riscv64-softmmu/qemu-system-riscv64 -kernel /home/tank/bblvmlinuxinitramfs_dynamic -nographic

出现riscv图案而且可使用镜像,表明qemu镜像模拟器安装正常。

3、安装riscv-pk

1.下载对应分支的riscv-pk工具

a5ce2a355d8444d5806fe6ec.html

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工具没有问题

b97c4efeb6b13e324dbbd836116675ec.png

a5ce2a355d8444d5806fe6ec.html

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等几个命令

52638a5390e45787b2736b22ace94f22.png

a5ce2a355d8444d5806fe6ec.html

5.采用16线程的速度进行编译

$ make -j16

编译完成后会在busybox-1.26.2目录下生成busybox二进制执行文件

582f5a13172b18fe7502a3ea89a5a142.png

a5ce2a355d8444d5806fe6ec.html

6.测试busybox,使用qemu的镜像模式载入busybox文件,启动模拟器

$ ./riscv64-linux-user/qemu-riscv64 -L $RISCV/sysroot busybox ash

若是出现如下界面表明busybox安装成功(便可以使用busybox的一些命令)

dbacfd92c623aa30c20dceb1c0093bf9.png

a5ce2a355d8444d5806fe6ec.html

5、编译linux内核

1.下载对应分支的内核

b758553aa044efcdde9cdb1eb55aa518.png

a5ce2a355d8444d5806fe6ec.html

$ cd linux-4.6.2

2.配置内核信息

$ make ARCH=riscv defconfig

3.在内核目录下新建initramfs.txt文件,并保存如下内容

$ vi initramfs.txt

c3db4223a8c11867b6605615f9037585.png

a5ce2a355d8444d5806fe6ec.html

4.在内核目录下新建inittab文件,并保存如下内容

$ vi inittab

e134c3a7fe65300f9716e9f287cb85ec.png

a5ce2a355d8444d5806fe6ec.html

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

4cd44af6396268565a900e25e65f4577.png

a5ce2a355d8444d5806fe6ec.html

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

f166bd2f70dfa0bc81c487b01acf242d.png

a5ce2a355d8444d5806fe6ec.html

7、qemu模拟运行镜像bbl

$ riscv-qemu/riscv64-softmmu/qemu-system-riscv64 -kernel /home/tank/old3/riscv-pk/build/bbl -m 1024M -nographic

可使用ls cat等命令,表明运行成功

0e033c17a4fbe961a6b36511da80fd7f.png

a5ce2a355d8444d5806fe6ec.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值