【转帖】Linux系统上面qemu 模拟arm

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

       因为最近的一个项目,须要用到qemu模拟arm系统跑程序,因此作了一次搭建,在网上找到了两篇文章,写得都很详细,其中一篇文章是对另一篇文章进行的修改和添加,可是基于本身系统去作,仍是发现了最新修改的文章过程当中的一些错漏,加之想记录下这次本身的搭建,因此写下这篇博客。html

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

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

 

本次PC系统:Ubuntu16.04app

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

(一)Qemu编译安装

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

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

sudo apt-get install zlib1g-dev学习

sudo apt-get install libglib2.0-0flex

sudo apt-get install libglib2.0-devspa

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

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

本着通过记录自身搭建过程,并以此为经验供有须要的朋友参考学习,绝无其余意思,原文不少步骤与参考文章相同,但绝无抄袭之意,在此再次感谢上方连接的两位做者。但愿此文章对学习嵌入式的朋友有帮助。

相关文章
相关标签/搜索