【转帖】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

此错误是因为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

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

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

原文地址:https://www.cnblogs.com/jinanxiaolaohu/p/11006977.html

时间: 2024-07-29 03:24:25

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

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

问题: 最近在用三星的一款i5处理器的Windows平板,和iPad,以及其他使用ARM处理器的手机相比,发热量大很多,甚至需要借助风扇来散热,耗电量也大了不少. 那么就很奇怪,在主频相差不大,并且实际执行效果差不多的情况下,x86架构的处理器的发热量和功耗为什么会那么大?这种差异到底是硬件以及处理器的指令集本身的问题,还是软件层面的问题? 回答1: 说x86和ARM处理器"实际执行效果差不多"其实有所不妥.楼主也说了比较的几个设备主要是windows平板,ipad和智能手机.这些平台

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

在Linux下通过dnw来给开发板发送程序.包括驱动程序代码:secbulk.c,应用程序代码:dnw.c.只能运行在32位系统上,在64位系统上提示错误:DNW download Data size is too big. dnw源代码: #include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <sys/types.h> #include <sys/stat.h>

用QEMU模拟运行uboot从SD卡启动Linux

平台:Qemu + vexpress-a9 u-boot:u-boot-2019.10 Linux:linux-4.14.13 之前介绍过用Qemu模拟运行uboot,然后从网络启动linux(用Qemu模拟vexpress-a9 (三)--- 实现用u-boot引导Linux内核),下面介绍用Qemu运行uboot,然后将存放在虚拟出来的SD卡里加载linux kernel.设备树,并运行. 一.编译uboot 下载最新的uboot,编译vexpress-a9: make ARCH=arm C

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

转自:https://blog.csdn.net/qq_24188351/article/details/77921653?ops_request_misc=%7B%22request%5Fid%22%3A%22158298496319725222401711%22%2C%22scm%22%3A%2220140713.130056874..%22%7D&request_id=158298496319725222401711&biz_id=0&utm_source=distribut

外网访问ARM嵌入式Linux系统

外网访问ARM嵌入式Linux系统 实验室里的ARM嵌入式Linux系统,只能在局域网内访问,怎样从外网也能访问ARM嵌入式Linux系统? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动ARM嵌入式Linux系统 ARM嵌入式Linux系统默认的sshd端口是22. 2. 实现步骤 2.1 下载并解压holer软件包 Holer软件包:holer-linux-arm.tar.gz Holer支持多种ARM版本,请选择跟自己ARM版本匹配的holer程序上传至系统上. 2.2 获

linux系统构建学习笔记

嵌入式系统构架:(硬件+软件)应用软件层: Application GNU C Library(glibc)文件系统: 系统层: API(Systern Call Interface) OS Core + Power Mannager+ File Manager + GUI Mannager TCP/IP HTTP WAP DataBase Browser DDI(Device Drver Interface) 板级支持:BSP:Board Support Package       OEM A

如何在linux主机上运行/调试 arm/mips架构的binary

如何在linux主机上运行/调试 arm/mips架构的binary 原文链接[email protected]0.0.0.55 本文中用于展示的binary分别来自Jarvis OJ上pwn的add,typo两道题 写这篇教程的主要目的是因为最近想搞其他系统架构的pwn,因此第一步就是搭建环境了,网上搜索了一波,发现很多教程都是需要树莓派,芯片等硬件,然后自己编译gdb,后来实践的过程中发现可以很简单地使用qemu实现运行和调试异架构binary,因此在这里分享一下我的方法. 主机信息: 以一

利用qemu模拟嵌入式系统制作全过程

http://www.tinylab.org/using-qemu-simulation-inserts-the-type-system-to-produce-the-whole-process/ 利用qemu模拟嵌入式系统制作全过程 by Pingbo Wen of TinyLab.org 2013/08/31 这篇文章,将介绍如何用qemu来搭建一个基于ARM的嵌入式linux系统.通过该文章,你可以学习到如何配置kernel,如何交叉编译 kernel,如何配置busybox并编译,如何制

利用 qemu 模拟嵌入式系统制作全过程

利用qemu模拟嵌入式系统制作全过程 by Pingbo Wen of TinyLab.org 2013/08/31 这篇文章将介绍如何用 Qemu 来搭建一个基于 ARM 的嵌入式 Linux 系统.通过该文章可以学习到如何配置和交叉编译 Kernel,如何配置 Busybox 并编译,如何制作 Initramfs,如何制作根文件系统,如何定制自己的 Uboot,如何通过 Uboot 向 Kernel 传递参数等.开始干活! 零.环境搭建 在实现我们的目标之前,我们需要搭建自己的工作环境.在这