首页 技术 正文
技术 2022年11月10日
0 收藏 358 点赞 4,062 浏览 3340 个字

 基本原理:在物理服务器Ubuntu14.04上安装qemu模拟器,模拟器中运行基于riscv指令集编译的linux镜像文件。用到的工具包括:riscv-qemu(模拟器,可以模拟运行riscv指令集的程序或镜像)riscv-tools(基于riscv指令集的交叉编译工具)riscv-pk(用于包装内核文件vmlinux)busybox(用于给linux镜像安装基本命令,如ls,cat,mv等等)以上工具安装路径在我们的物理服务器里分别为:qemu模拟器下编译运行基于riscv指令集的Linux操作系统qemu模拟器下编译运行基于riscv指令集的Linux操作系统

一、安装toolchain

1.下载交叉编译工具:$ git clone –recursive https://github.com/riscv/riscv-gnu-toolchainqemu模拟器下编译运行基于riscv指令集的Linux操作系统qemu模拟器下编译运行基于riscv指令集的Linux操作系统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-dev3.配置安装路径$ ./configure –prefix=/opt/riscv4.编译(linux版本)$ make linux5.验证交叉编译工具:编译hello.c到hello 注:要加上-static 静态编译选项riscv64-unknown-linux-gnu-gcc -static hello.c -o helloqemu模拟器下编译运行基于riscv指令集的Linux操作系统在x86环境下执行hello(x86下的gcc无法执行hello,因为格式为riscv)./helloqemu模拟器下编译运行基于riscv指令集的Linux操作系统qemu模拟器下编译运行基于riscv指令集的Linux操作系统

无法执行不要紧,因为还没有安装qemu模拟器,我们继续操作

二、安装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-dev2.下载master分支的qemu$ git clone https://github.com/riscv/riscv-qemuqemu模拟器下编译运行基于riscv指令集的Linux操作系统qemu模拟器下编译运行基于riscv指令集的Linux操作系统$ cd riscv-qemu $ git submodule update –init pixman3.配置qemu,riscv-64-linux-user为用户模式,可以运行基于riscv指令集编译的程序文件,softmmu为镜像模拟器,可以运行基于riscv指令集编译的linux镜像,为了测试方便,这两个我都安装了$ ./configure –target-list=riscv64-linux-user,riscv64-softmmu [–prefix=INSTALL_LOCATION]4.编译qemu$ make5.安装qemu$ [make install] # if you supplied prefix above6.测试qemu用户模式:6.1使用交叉编译器编译一个helloword程序$ riscv64-unknown-linux-gnu-gcc hello.c -o hello6.2使用qemu的用户模式运行riscv指令集的hello二进制文件$ ./riscv64-linux-user/qemu-riscv64 -L $RISCV/sysroot helloqemu模拟器下编译运行基于riscv指令集的Linux操作系统qemu模拟器下编译运行基于riscv指令集的Linux操作系统7.测试qemu镜像模式:启动qemu,载入bbl示例镜像文件,下载地址:bblvmlinuxinitramfs_dynamic$ riscv-qemu/riscv64-softmmu/qemu-system-riscv64 -kernel /home/tank/bblvmlinuxinitramfs_dynamic -nographic出现riscv图案并且可以使用镜像,代表qemu镜像模拟器安装正常。

三、安装riscv-pk

1.下载对应分支的riscv-pk工具$ git clone -b bigbuf https://github.com/riscv/riscv-pkqemu模拟器下编译运行基于riscv指令集的Linux操作系统qemu模拟器下编译运行基于riscv指令集的Linux操作系统2.创建build目录,用于存放镜像bbl$ cd riscv-pk$ mkdir build $ cd build3.配置交叉编译工具路径,$RICSV代表交叉工具的路径 第一步中设置为了/opt/riscv $ ../configure –prefix=$RISCV –host=riscv64-unknown-linux-gcc4.编译$ make5.安装pk$ make install注:耗时较长,验证pk工具的方法是用pk包装镜像文件vmlinux成bbl,qemu启动bbl的时候出现如下图案,代表pk工具没有问题qemu模拟器下编译运行基于riscv指令集的Linux操作系统qemu模拟器下编译运行基于riscv指令集的Linux操作系统

四、安装busybox

1.下载对应版本的busybox$ curl -L http://busybox.net/downloads/busybox-1.26.2.tar.bz2 > busybox-1.26.2.tar.bz22.解压缩文件$ tar xvjf busybox-1.26.2.tar.bz2$ cd busybox-1.26.23.清空其它所以配置(这样可以自己添加需要的命令组件)$ make allnoconfig4.进入菜单页面配置$ sudo apt-get install libncurses5-dev$ make menuconfig下图中这几项为核心项,配置完成后只能使用ash init等几个命令qemu模拟器下编译运行基于riscv指令集的Linux操作系统qemu模拟器下编译运行基于riscv指令集的Linux操作系统如果想使用ls,cat等命令,参考配置链接https://wenku.baidu.com/view/5d25420602020740be1e9b0b.html5.采用16线程的速度进行编译$ make -j16编译完成后会在busybox-1.26.2目录下生成busybox二进制执行文件qemu模拟器下编译运行基于riscv指令集的Linux操作系统qemu模拟器下编译运行基于riscv指令集的Linux操作系统6.测试busybox,使用qemu的镜像模式载入busybox文件,启动模拟器$ ./riscv64-linux-user/qemu-riscv64 -L $RISCV/sysroot busybox ash如果出现以下界面代表busybox安装成功(即可以使用busybox的一些命令)qemu模拟器下编译运行基于riscv指令集的Linux操作系统qemu模拟器下编译运行基于riscv指令集的Linux操作系统

五、编译linux内核

1.下载对应分支的内核$ git clone -b fix-gcc-flags https://github.com/riscv/riscv-linux.gitqemu模拟器下编译运行基于riscv指令集的Linux操作系统qemu模拟器下编译运行基于riscv指令集的Linux操作系统$ cd linux-4.6.22.配置内核信息$ make ARCH=riscv defconfig3.在内核目录下新建initramfs.txt文件,并保存以下内容$ vi initramfs.txtqemu模拟器下编译运行基于riscv指令集的Linux操作系统qemu模拟器下编译运行基于riscv指令集的Linux操作系统4.在内核目录下新建inittab文件,并保存以下内容$ vi inittabqemu模拟器下编译运行基于riscv指令集的Linux操作系统qemu模拟器下编译运行基于riscv指令集的Linux操作系统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文件夹下出现vmlinuxqemu模拟器下编译运行基于riscv指令集的Linux操作系统qemu模拟器下编译运行基于riscv指令集的Linux操作系统

六、使用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-gnu3.包装生成bbl镜像文件 $ make bblqemu模拟器下编译运行基于riscv指令集的Linux操作系统qemu模拟器下编译运行基于riscv指令集的Linux操作系统

七、qemu模拟运行镜像bbl

$ riscv-qemu/riscv64-softmmu/qemu-system-riscv64 -kernel /home/tank/old3/riscv-pk/build/bbl -m 1024M -nographic可以使用ls cat等命令,代表运行成功qemu模拟器下编译运行基于riscv指令集的Linux操作系统

qemu模拟器下编译运行基于riscv指令集的Linux操作系统

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,103
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,579
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,427
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,199
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,834
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,917