零基础在Linux系统搭建Qemu模拟arm

https://blog.csdn.net/weixin_42489042/article/details/81145038

自己没搞定 改天再试试

感谢原作者。 
 

由于最近的一个项目,需要用到qemu模拟arm系统跑程序,所以做了一次搭建,在网上找到了两篇文章,写得都很详细,其中一篇文章是对另外一篇文章进行的修改和添加,但是基于自己系统去做,还是发现了最新修改的文章过程中的一些错漏,加之想记录下此次自己的搭建,所以写下这篇博客。

参考博客文章(1):https://blog.csdn.net/linyt/article/details/42504975

参考博客文章(2):https://blog.csdn.net/sxw1002/article/details/52841671

本次PC系统:Ubuntu16.04

目标系统:以Versatile Express-A9开发板为例搭建环境

(一)Qemu编译安装

1.Qemu源码下载:wget http://wiki.qemu-project.org/download/qemu-2.7.0.tar.bz2

2.安装所需要的软件包(参考两文章):

sudo apt-get install zlib1g-dev

sudo apt-get install libglib2.0-0

sudo apt-get install libglib2.0-dev

sudo apt-get install autoconf

sudo apt-get install flex bison

sudo apt-get install libtool

3.解压Qemu安装包

sudo tar -jxvf qemu-2.7.0.tar.bz2

4.进入Qemu包

cd qemu-2.7.0

5.编译安装

./configure --target-list=arm-softmmu --audio-drv-list=

make

make install

注:最初原文此处用的是2.0的安装包,但是在编译的时候总会出现如下错误:

fatal error: linux/compiler-gcc5.h: No such file or directory

此错误是因为2.0版本的Qemu并不支持Gcc5.h,起初仍找了很多方法去修改这种错误,例如下载Gcc或者从别的地方
找Gcc补进来,但并没有什么用。而用Qemu2.7安装包便不会出现这些问题。
 
最终结果:
 
 

(二)Linux内核编译

1.安装交叉编译工具

sudo apt-get install gcc-arm-linux-gnueabi

2.内核下载

wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.8.tar.xz

解压: tar -xvf linux-4.8.tar.xz

注:此处不用原文的3.16版本,是因为我们的下载交叉编译器指令默认直接下载最新版的交叉编译器,但是3.16并不支持最新版的交叉编译器,在之后的make中会反复出现error,所以此处换用4.8版本的Linux内核,换用之后一路风顺,不会出现问题。

若有朋友有兴趣想要编译3.16版本的内核,可以降低交叉编译器的版本,使用4.7版本的交叉编译器,由于降低版本的话后面的环境变量的设置都要改动,有点麻烦,所以这里我就不展示出来。

3.配置编译

export CROSS_COMPILE=arm-linux-gnueabi-

export ARCH=arm

make vexpress_defconfig

make -j2

完全之后便在arch/arm/boot/目录中生成了zImage:

(三)根文件的制作

(1)busybox的下载

wget http://www.busybox.net/downloads/busybox-1.25.0.tar.bz2 --no-check-certificate

解压:tar -jxvf busybox-1.20.2.tar.bz2

(2)配置编译

make defconfig

make CROSS_COMPILE=arm-linux-gnueabi-

make CROSS_COMPILE=arm-linux-gnueabi- install

(3)开始制作根目录

1.创建必要的目录

mkdir rootfs

cd rootfs

mkdir rootfs /lib

mkdir rootfs /dev

2.拷贝busybox编译生产的目录和文件,编译器自带的lib

sudo cp busybox-1.25.0/_install/* -r rootfs/

sudo cp -P /usr/arm-linux-gnueabi/lib/* rootfs/lib/

3.创建4个tty终端设备

sudo mknod rootfs/dev/tty1 c 4 1

sudo mknod rootfs/dev/tty2 c 4 2

sudo mknod rootfs/dev/tty3 c 4 3

sudo mknod rootfs/dev/tty4 c 4 4

4.生成32M大小的镜像,并拷文件系统树到镜像文件中

dd if=/dev/zero of=a9rootfs.ext3 bs=1M count=32

mkfs.ext3 a9rootfs.ext3

mkdir tmpfs

mount -t ext3 a9rootfs.ext3 tmpfs/ -o loop

cp -r rootfs/*  tmpfs/

sudo umount tmpfs

到此所有的配置编译全部完成,可以运行虚拟机了:

在终端输入指令:qemu-system-arm -M vexpress-a9 -m 512M -kernel /home/chris/Desktop/linux-4.8/arch/arm/boot/zImage -dtb  /home/chris/Desktop/linux-4.8/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic -append "root=/dev/mmcblk0  console=ttyAMA0" -sd a9rootfs.ext3

因为我是安装在桌面所以是那样的目标路径,若安装在不同地方就改一改就行了。(此图取自参考文章)

本着经过记录自身搭建过程,并以此为经验供有需要的朋友参考学习,绝无其他意思,原文很多步骤与参考文章相同,但绝无抄袭之意,在此再次感谢上方链接的两位作者。希望此文章对学习嵌入式的朋友有帮助。

【转帖】Linux系统上面qemu 模拟arm的更多相关文章

  1. [转帖]Linux系统下x86和ARM的区别有哪些?

    Linux系统下x86和ARM的区别有哪些? https://www.cnblogs.com/alantu2018/p/9209143.html 其实界限 越来越小了.. 问题: 最近在用三星的一款i ...

  2. 【记录】尝试用QEMU模拟ARM开发板去加载并运行Uboot,kernel,rootfs【转】

    转自:https://www.crifan.com/try_use_qemu_emulate_arm_board_to_load_and_run_uboot_kernel_rootfs/ [背景] 手 ...

  3. ubuntu下使用qemu模拟ARM(六)------驱动程序【转】

    转自:http://blog.csdn.net/rfidunion/article/details/54709843 驱动程序分为在ubuntu上运行和在ARM开发板上运行两种,我们分别来进行测试 1 ...

  4. CentOS 7 利用qemu模拟ARM vexpress A9开发板

    听说qemu用于仿真arm很不错,今日就来试了一把.由于刚刚开始,了解的并不多.本文仅仅记录Qemu装载Linux kernel和busybox根文件系统的过程.后续将会深入了解仿真的其他内容. 先上 ...

  5. [转帖]Linux系统/dev/mapper目录浅谈

    Linux系统/dev/mapper目录浅谈   Linux系统的一般的文件系统名称类似于/dev/sda1或/dev/hda1,但是今天在进行系统维护的时候,利用df -h 命令敲出了/dev/ma ...

  6. Linux系统下x86和ARM的区别有哪些?

    问题: 最近在用三星的一款i5处理器的Windows平板,和iPad,以及其他使用ARM处理器的手机相比,发热量大很多,甚至需要借助风扇来散热,耗电量也大了不少. 那么就很奇怪,在主频相差不大,并且实 ...

  7. 嵌入式linux:通过qemu模拟mini2440开发环境

    1 编译安装QEMU 首先下载qemu for mini2440,直接打包下载 http://repo.or.cz/w/qemu/mini2440.git/snapshot/HEAD.tar.gz  ...

  8. Linux系统中用DNW向ARM开发板下载程序

    在Linux下通过dnw来给开发板发送程序.包括驱动程序代码:secbulk.c,应用程序代码:dnw.c.只能运行在32位系统上,在64位系统上提示错误:DNW download Data size ...

  9. 一步步教你如何在ubuntu虚拟机中安装QEMU并模拟arm 开发环境(二)rootfs制作

    过了,一天,周又到了,博主终于可以拿出时间来把上一次没有给大家展示完了的内容今天在这里一并展示给大家,希望和大家共同进步,共同学习,同时我也虔诚的希望各位业界的朋友把自己的工作经验拿出来大家一起分享, ...

随机推荐

  1. Linux 系统中 grep 的ABC参数含义

    1.grep  -A  5   匹配行及后5行 2.grep  -B  5   匹配行及前5行 3.grep  -C  5   匹配行及前后各5行

  2. OpenCV笔记(5)(定位票据并规范化、调库扫描文本)

    一.定位和变换票据 定位照片中的不规范票据或矩形文本,并将其变换为正规矩形,以供OCR识别. # -*- coding:utf-8 -*- __author__ = 'Leo.Z' import cv ...

  3. rgb三基色与rgba

    主要解释什么是三基色和RGBA ㈠三基色含义 三基色是指红,绿,蓝三色,人眼对红.绿.蓝最为敏感,大多数的颜色可以通过红.绿.蓝三色按照不同的比例合成产生. ㈡三基色原理 ⑴自然界中的绝大部分彩色,都 ...

  4. ELEMENT-UI 封装el-table 局部刷新row

    //关于封装的el-table行数据更新后如何局部更新row row.status=status; this.$set(this.$refs.elTable.$data.tableData,index ...

  5. Jmeter(四)Cookie管理器

    上一节中我们用Jmeter通过接口上传了一张图片到人人网,其中请求头中的Cookie是写死的,这个Cookie其实是登录成功后服务器返回给客户端的,客户端接收到这个Cookie后保存下来,在后续向服务 ...

  6. STS插件_ springsource-tool-suite插件各个历史版本

    目前spring官网(http://spring.io/tools/sts/all)上可下载的spring插件只有:springsource-tool-suite-3.8.4(sts-3.8.4).但 ...

  7. 图解数据库中的join操作

    1.所有的join都从cross join衍生而来 2.所有join图示 转自Say NO to Venn Diagrams When Explaining JOINs

  8. VMware与Centos系统

    今日任务 1.Linux发行版的选择 2.vmware创建一个虚拟机(centos) 3.安装配置centos7 4.xshell配置连接虚拟机(centos) 选择性 pc可以选择 -纯系统 Lin ...

  9. mybatis逆向工程的text类型的一个小坑

    数据库如果配有text的数据类型的 mybatis生成逆向工程的时候会单独将text提取出来 ByExampleWithBLOBs 会生成上面后缀的查询和修改的语句 因此查询起来会产生没有必要的麻烦, ...

  10. LeetCode 14. 最长公共前缀(Longest Common Prefix)

    题目描述 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower","flow ...