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

一、安装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模拟器,我们继续操作

二、安装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镜像模式:
启动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-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工具没有问题

四、安装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等几个命令
如果想使用ls,cat等命令,参考配置链接https://wenku.baidu.com/view/5d25420602020740be1e9b0b.html
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的一些命令)

五、编译linux内核

1.下载对应分支的内核
$ git clone -b fix-gcc-flags https://github.com/riscv/riscv-linux.git
$ 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

六、使用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

七、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操作系统的更多相关文章

  1. linux下编译运行驱动

    linux下编译运行驱动 嵌入式linux下设备驱动的运行和linux x86 pc下运行设备驱动是类似的,由于手头没有嵌入式linux设备,先在vmware上的linux上学习驱动开发. 按照如下方 ...

  2. linux下编译运行TIGL Viewer步骤

    linux下编译运行TIGL Viewer步骤(仅为了正确编译安装的话直接跳到步骤3) 1. linux发行版选择:由于linux发行版众多,不同版本包含的库版本可能存在差别,因此需要选择正确的版本. ...

  3. Linux程序在Windows下编译运行_MinGW和Cygwin

    linux要在windows下编译运行,需要win下的gcc编译器,一般有两种:MinGW和Cygwin. 但某些函数在windows没有,即使使用两种工具也编译不过,需要查询windows函数并使用 ...

  4. 在linux环境下编译运行OpenCV程序的两种方法

    原来以为在Ubuntu下安装好了OpenCV之后,自己写个简单的程序应该很容易吧,但是呢,就是为了编译一个简单的显示图片的程序我都快被弄崩溃了. 在谷歌和上StackOverFlow查看相关问题解答之 ...

  5. 如何在命令提示符下编译运行含有Package的java文件

    这篇是大二自学Java的时候记下的笔记,中午回顾印象笔记的时候意外看到了这篇.看到多年前写下的文字,我想起那时候我对Java的懵懵懂懂,每天晚上在图书馆照着书写书上的示例代码,为一个中文分号绞尽脑汁, ...

  6. fedora下编译运行java傻瓜入门级教程

    操作步骤: 编译运行环境的搭建 fedora下默认安装为GNU公司的JDK,如下所示 $java -version java version "1.7.0_25" OpenJDK ...

  7. CMD下编译运行Java程序

    准备1:JDK下好了 准备2:环境变量配置好了 准备3:本次测试用的是JDK8,用JDK10的在Eclipse里面好像用不了 满足上面三个条件,那可以继续看下去了 Test_1:带包编译运行 代码: ...

  8. linux下编译运行C程序

    GCC是Linux操作系统下一个非常重要的源代码编译工具,有着许多重要的选项,支持许多不同语言的编译,如C.C++.Ada.Fortran.Objective.Perl.Python.Ruby以及Ja ...

  9. xv6 + Qemu 在Ubuntu下编译运行教程【转】

    转自:https://blog.csdn.net/yinglang19941010/article/details/49310111 如果想要离线看教程,可以下载该 文档 一.使用工具说明 1.    ...

随机推荐

  1. L175 Endorestiform Nucleus: Scientist Just Discovered a New Part of the Human Brain

    The newly named Endorestiform Nucleus sits in the inferior cerebellar小脑 peduncle, at the junction be ...

  2. 1月中旬值得一读的10本技术新书(机器学习、Java、大数据等)!

    1月中旬,阿里云云栖社区 联合 博文视点 为大家带来十本技术书籍(机器学习.Java.大数据等).以下为书籍详情,文末还有福利哦! 书籍名称:Oracle数据库问题解决方案和故障排除手册 内容简介 & ...

  3. spring注解事务使用总结

    在使用spring的注解事务的时候,需要考虑到事务的传播行为.遇到什么类型的异常时,事务才起作用.事务方法之间的嵌套调用时,怎么样才生效等等诸多问题.网上搜到很多的主要还是一堆理论文字描述,我这里给出 ...

  4. LOJ2316. 「NOIP2017」逛公园【DP】【最短路】【思维】

    LINK 思路 因为我想到的根本不是网上的普遍做法 所以常数出奇的大,而且做法极其暴力 可以形容是带优化的大模拟 进入正题: 首先一个很显然的思路是如果在合法的路径网络里面存在零环是有无数组解的 然后 ...

  5. Plus and Square Root

    ZS the Coder is playing a game. There is a number displayed on the screen and there are two buttons, ...

  6. python面试(十四)

    1.下面代码会输出什么? map(lambda x:x*x,[y for y in range(3)]) [, , ] 答案 2.下面代码会输出什么? def f(x, l = [] ) for i ...

  7. json-patch 了解

    What is JSON Patch? JSON Patch is a format for describing changes to a JSON document. It can be used ...

  8. Python编程核心内容 ---- Function(函数)

    Python版本:3.6.2  操作系统:Windows  作者:SmallWZQ 截至上篇随笔<Python数据结构之四——set(集合)>,Python基础知识也介绍好了.接下来准备干 ...

  9. Jacoco+Jenkines小白之路

    Jacoco+Jenkines小白之路 最近工作中正在推广jacoco的增量覆盖率的统计,想学习一波,纯粹采坑中,适合小白学习jacoco. 一.代码覆盖率 引入代码覆盖率 : 代码覆盖率是指对现有代 ...

  10. nyoj A+B Problem IV

    A+B Problem IV 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 acmj最近发现在使用计算器计算高精度的大数加法时很不方便,于是他想着能不能写个程序把这 ...