【转帖】Linux系统上面qemu 模拟arm
零基础在Linux系统搭建Qemu模拟arm? ? ? ?由于最近的一个项目,需要用到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 因为我是安装在桌面所以是那样的目标路径,若安装在不同地方就改一改就行了。(此图取自参考文章) 本着经过记录自身搭建过程,并以此为经验供有需要的朋友参考学习,绝无其他意思,原文很多步骤与参考文章相同,但绝无抄袭之意,在此再次感谢上方链接的两位作者。希望此文章对学习嵌入式的朋友有帮助。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |