首页 > 编程知识 正文

qemu模拟arm,qemu arm linux

时间:2023-05-03 17:12:27 阅读:207091 作者:632

qemu基本介绍

有时候在家里想研究嵌入式linux,但是有没有开发板(当然也可以买一套,但是有时候还是不如模拟器来的方便,而且学习处理器无关的内核部分,也用不到开发板),光看代码是不行的,必须实践才能深入理解很多东西,这时候就需要模拟器了。qemu是一款非常流行的模拟器,不但能模拟x86的PC机,还能模拟很多嵌入式开发板,包括MIPS和ARM架构的很多处理器,也能基于应用的处理器模拟,很好很强大。下面是qemu的支持的系统级模拟,也就是包括处理器和周围外设:

· PC (x86 or x86_64 processor)

    · ISA PC (old style PC without PCI bus)

    · PREP (PowerPC processor)

    · G3 Beige PowerMac (PowerPC processor)

    · Mac99 PowerMac (PowerPC processor, in progress)

    · Sun4m/Sun4c/Sun4d (32-bit Sparc processor)

    · Sun4u/Sun4v (64-bit Sparc processor, in progress)

    · Malta board (32-bit and 64-bit MIPS processors)

    · MIPS Magnum (64-bit MIPS processor)

    · ARM Integrator/CP (ARM)

    · ARM Versatile baseboard (ARM)

    · ARM RealView Emulation/Platform baseboard (ARM)

    · Spitz, Akita, Borzoi, Terrier and Tosa PDAs (PXA270 processor)

    · Luminary Micro LM3S811EVB (ARM Cortex-M3)

    · Luminary Micro LM3S6965EVB (ARM Cortex-M3)

    · Freescale MCF5208EVB (ColdFire V2).

    · Arnewsh MCF5206 evaluation board (ColdFire V2).

    · Palm Tungsten|E PDA (OMAP310 processor)

    · N800 and N810 tablets (OMAP2420 processor)

    · MusicPal (MV88W8618 ARM processor)

    · Gumstix "Connex" and "Verdex" motherboards (PXA255/270).

    · Siemens SX1 smartphone (OMAP310 processor)

    · AXIS-Devboard88 (CRISv32 ETRAX-FS).

    · Petalogix Spartan 3aDSP1800 MMU ref design (MicroBlaze).

    · Avnet LX60/LX110/LX200 boards (Xtensa)

还支持很多平台的用户模拟,主要针对应用层,比如在非x86的cpu上运行x86应用,但是目前只支持Linux和BSD系统:

 x86 (32 and 64 bit), PowerPC (32 and 64 bit), ARM, MIPS (32 bit only), Sparc (32 and 64 bit), Alpha, ColdFire(m68k), CRISv32 and MicroBlaze CPUs

 

我是第一次接触qemu,除了在网上看看有关文章也没啥实践经验,在网上找了一篇很好的文章,顺着做下去,过程中发现作者有写的简单或遗漏的地方,我在下面进行了补充。原文地址是:http://blog.csdn.net/linyt/article/details/42504975。当然写这篇文章和原文章重复比较多,我只是加强一下印象和理解,方便日后复习,也做一些纠错分享给大家,让大家更容易搭起这个环境。废话少说,马上开始动手。

基础环境

PC系统:Ubuntu 14.04

目标系统:作者是以Versatile Express-A9开发板为例搭建环境的,为了顺利完成第一次搭建,我也用这个环境。


qemu编译安装

1. 在官网下载最新版本的qemu源码,地址是:http://wiki.qemu.org/Download

 也可以通过git下载源码树:git clone git://git.qemu-project.org/qemu.git

2. 原文所列出需要安装的软件包:

    sudo apt-get install zlib1g-dev

    sudo apt-get install libglib2.0-0

    sudo apt-get install libglib2.0-dev

    sudo apt install autoconf

    sudo apt-get install flex bison

    sudo apt-get install libtool  

3. 解压qemu源码包:

    tar zxvf qemu qemu-2.7.0.tar.bz2

    cd qemu-2.7.0

4. 然后配置编译安装

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

    --audio-drv-list必须要加,否则运行时报告有关audio的错误:

    audio: Could not init `oss' audio driver

5. 用root权限安装:

    sudo make install

   安装到系统目录 /usr/local中


linux内核编译 

1. 安装gun的交叉编译工具:

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

2. 下载方法:

    wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.16.tar.xz

我开始是git下载的torvalds的源码树,是最新的4.8版本,但是运行时一点log都没有,看起来是没引导成功,由于时间原因没有查下去,按照原文作者的描述,又下载了3.16版本的内核进行编译

 

3. 配置与编译

    export CROSS_COMPILE=arm-linux-gnueabi-

    export ARCH=arm

    make vexpress_defconfig

    make -j2

4. 在arch/arm/boot/目录中生成zImage备用


文件系统的制作:

嵌入式系统中也要用到linux系统中的工具,busybox包含了这些常用的工具,所以在嵌入式系统磁盘空间有限的情况下非常有用。

1. busybox下载

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

2. 配置编译:

    make defconfig

    make CROSS_COMPILE=arm-linux-gnueabi-

    make CROSS_COMPILE=arm-linux-gnueabi-install

 

注意这里的make install也会发生编译行为,所以也要加上CROSS_COMPILE-参数,否则会可能会发生下面的错误,原文中并没有说明,这里补充一下,具体错误如下:

miscutils/nandwrite.c: In function 'nandwrite_main':

miscutils/nandwrite.c:151:3: error: 'MTD_FILE_MODE_RAW' undeclared (first use in this function)

miscutils/nandwrite.c:151:3: note: each undeclared identifier is reported only once for each function it appears in

make[1]: *** [miscutils/nandwrite.o] Error 1

make: *** [miscutils] Error 2

 

3. 编译完成后,可以制作根文件系统了,首先创建必要的目录

    mkdir rootfs

    cd rootfs

    mkdir rootfs /lib

    mkdir rootfs /dev

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

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

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

5. 创建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

6. 生成32M大小的镜像 ,copy文件系统树到镜像文件中

     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 


运行虚拟机

此时时刻,所有的东西都准备好了,让我们运行一下看看效果吧,输入原作者提供的参数

marquis@marquis-song: ~/src/qemu-rootfs/:qemu-system-arm -M vexpress-a9 -m 512M -kernel /home/marquis/src/kernel/linux-3.16/arch/arm/boot/zImage -nographic -append "root=/dev/mmcblk0  console=ttyAMA0" -sd a9rootfs.ext3

系统果断运行起来,好激动。

 

 


 

纠正一个原文中的错误,参数console=ttyAMA0,可以在linux kernel .config中CONFIG_CMDLINE找到,不是原文中所说的CONFIG_CONSOLE。

 

qemu如此强大,还需要深入研究充分利用它来节省时间和金钱的成本,更高效的学习linux内核,驱动等。另外,后边我计划搭建uboot+uImage的环境,这个环境在我的工作中很常用,弄好了再和大家分享。


参考资料:

QEMU Emulator User Documentation

http://blog.csdn.net/linyt/article/details/42504975

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。