【转帖】Linux系统上面qemu 模拟arm
零基础在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
(二)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的更多相关文章
- [转帖]Linux系统下x86和ARM的区别有哪些?
Linux系统下x86和ARM的区别有哪些? https://www.cnblogs.com/alantu2018/p/9209143.html 其实界限 越来越小了.. 问题: 最近在用三星的一款i ...
- 【记录】尝试用QEMU模拟ARM开发板去加载并运行Uboot,kernel,rootfs【转】
转自:https://www.crifan.com/try_use_qemu_emulate_arm_board_to_load_and_run_uboot_kernel_rootfs/ [背景] 手 ...
- ubuntu下使用qemu模拟ARM(六)------驱动程序【转】
转自:http://blog.csdn.net/rfidunion/article/details/54709843 驱动程序分为在ubuntu上运行和在ARM开发板上运行两种,我们分别来进行测试 1 ...
- CentOS 7 利用qemu模拟ARM vexpress A9开发板
听说qemu用于仿真arm很不错,今日就来试了一把.由于刚刚开始,了解的并不多.本文仅仅记录Qemu装载Linux kernel和busybox根文件系统的过程.后续将会深入了解仿真的其他内容. 先上 ...
- [转帖]Linux系统/dev/mapper目录浅谈
Linux系统/dev/mapper目录浅谈 Linux系统的一般的文件系统名称类似于/dev/sda1或/dev/hda1,但是今天在进行系统维护的时候,利用df -h 命令敲出了/dev/ma ...
- Linux系统下x86和ARM的区别有哪些?
问题: 最近在用三星的一款i5处理器的Windows平板,和iPad,以及其他使用ARM处理器的手机相比,发热量大很多,甚至需要借助风扇来散热,耗电量也大了不少. 那么就很奇怪,在主频相差不大,并且实 ...
- 嵌入式linux:通过qemu模拟mini2440开发环境
1 编译安装QEMU 首先下载qemu for mini2440,直接打包下载 http://repo.or.cz/w/qemu/mini2440.git/snapshot/HEAD.tar.gz ...
- Linux系统中用DNW向ARM开发板下载程序
在Linux下通过dnw来给开发板发送程序.包括驱动程序代码:secbulk.c,应用程序代码:dnw.c.只能运行在32位系统上,在64位系统上提示错误:DNW download Data size ...
- 一步步教你如何在ubuntu虚拟机中安装QEMU并模拟arm 开发环境(二)rootfs制作
过了,一天,周又到了,博主终于可以拿出时间来把上一次没有给大家展示完了的内容今天在这里一并展示给大家,希望和大家共同进步,共同学习,同时我也虔诚的希望各位业界的朋友把自己的工作经验拿出来大家一起分享, ...
随机推荐
- vs 2019 调试web项目 浏览器
- Release和Debug的区别
Debug与Release版本的区别 Debug 和 Release 并没有本质的区别,他们只是VC预定义提供的两组编译选项的集合,编译器只是按照预定的选项行动.如果我们愿意,我们完全可以把Debug ...
- 第一次的迷宫为队列版,这个为搜索版x(自己写的嘿嘿)
错误原因:第一次提交的时候把Yes跟No输错了都输为大写:…… 代码来啦! #include<cstdio> #include<iostream> using namespac ...
- TCP如何保证可靠传输
TCP 协议如何保证可靠传输 一.综述 1.确认和重传:接收方收到报文就会确认,发送方发送一段时间后没有收到确认就重传. 2.数据校验 3.数据合理分片和排序: UDP:IP数据报大于1500字节 ...
- USACO2018DEC GOLD
好简单啊.. T1裸分层图最短路. T2裸容斥. T3更水的DP. 代码 T1 #include <bits/stdc++.h> #define rin(i,a,b) for(regist ...
- Struts初学
自我概述 今天看了Struts,感觉这是个非常好用的东西!虽然它已经过时了,被springMVC取代了,但是仍然有了解的价值. 可是在学习过程中遇到了很多问题,比如其中一些原理很是抽象,有一些问题莫名 ...
- 20175212童皓桢 实验三敏捷开发与XP实践实验报告
20175212童皓桢 实验三敏捷开发与XP实践实验报告 实验内容 XP基础 XP核心实践 相关工具 实验步骤 一.Code菜单功能的研究 Move Line/statement Down/Up:将某 ...
- XMLHttpRequest 对象属性参数参考
readyState:提供当前 HTML 的就绪状态. readyState可能返回的值: 0:请求未初始化(还没有调用 open()). 1:请求已经建立,但是还没有发送(还没有调用 send()) ...
- sqlserver2012语法
1.SQL Server 2012 Format()方法 SQL Server 从 2012 开始增加了Format方法,可以使用 Format来格式化日期与数字,而且和 C# 里的日期格式化一致,语 ...
- IFB上挂载NETEM
转发虚拟网卡的ingress 建立虚拟网卡的ingress转发到ifb0(每一个Pod): tc qdisc add dev calixxxxxxxxxxx ingress tc filter add ...