从零使用qemu模拟器搭建arm执行环境

从零使用qemu模拟器搭建arm执行环境

2023年7月6日发(作者:)

从零使⽤qemu模拟器搭建arm执⾏环境为什么会有这篇⽂章早在2011年的时候,跟当时同事⼀起讨论,做Linux系统开发正处于整个Linux开发中间层,没有上层的C/C++业务和数据库的开发经验。也没有底层的内核和驱动开发经验,究竟路该怎样⾛……基于对Linux系统开发的理解和内核的兴趣。觉得选择Linux内核开发更适合⾃⼰。于是到淘宝上买了块三星s3c2440(arm 9)开发板,学起内核开发。没有过多久。机缘巧合,正式添加了公司的内核开发部。就这样跟内核和arm打上交道了。没有想到这⼀做就是3年了,arm芯⽚仅仅有在公司才⼲使⽤,回到家⾥就不能訪问了。去年(2014)開始觉得做内核久了,应该向内核社区提交patch,提升知名度和影响⼒。但在公司提交patch不⽅便。于是在家⾥通过qemu⽅式搭建于ARMA9的执⾏环境,进⾏开发和測试验证。⼀⼝⽓提交了好⼏个patch(, , , , )并被社区接纳了。近期在梳理Linux内存机制,不管是《深⼊理解Linux内核》还是《深⼊理解内核架构》这两本红宝书都⽆法告知你每⼀个细节的时候。就须要查看代码细节。改动代码。甚致做⾏为分析。此时须要改动代码输出调试信息。以帮助更深⼊体会代码的逻辑。这该是qemu派上场的时候。事实上我前前后后搭建qemu+arm的执⾏环境已超过5次了。每次都要花上⾮常多时间。碰巧昨天有同事看到我再次搭建。他如搭珍宝,告诉我⼀定要将搭建qemu的⽅法告诉他。所以,假设你想买个开发板来做arm + linux嵌⼊式开发,全然能够使⽤qemu进⾏开发。或者你像我⼀样,对内核机制关⼼,⽽不关⼼于详细的外设器件。最多是关⼼arm架构相关的功能,也能够使⽤qemu进⾏开发。⼀句话:搭建qemu+arm环境,⽤于做内核开发和功能分析调试。搭建好开发环境我整个搭建过程都是在笔记本上进⾏的,Ubuntu 12.04系统;假设是Fodera环境。搭建过程可能略有不同。但关键步骤是不变的。qemu模拟得最好的arm芯⽚,要数ARM公司的vexpress A9开发板了,本⽂的搭建过程都是环绕这个开发板进⾏的。当然。假设你想搭其他开发板,也不难,仅仅要qemu和内核对它有成熟的⽀持就够了。以下是step by step的搭建过程。建议没有特别诉求的朋友,依照下在⾯的步骤操作。或者先依据以下的步骤成功搭建vexpress执⾏环境之后。再依据⾃⼰的需求进⾏更改。下载Linux内核下载内核有两种⽅法,⼀种是⽤git直接下载内核代码树,⽅便后⾯的内核开发。还有⼀种是直接到内核社区下载相应版本号的源代码包。我採⽤第⼀种⽅法,但后⾯发现主线上3.18版本号和后⾯版本号的代码,使⽤这样的搭建⽅法执⾏不起来。眼下未查明问题的根因。假设读者想⾼速搭建成功。建议选⽤3.16版本号的内核进⾏搭建。⽅法⼀:使⽤gitgit clonegit:///pub/scm/linux/kernel/git/torvalds/⽅法⼆:直接下载3.16源代码包wget /pub/linux/kernel/v3.x/安装arm的交叉编译⼯具链想必做嵌⼊式开发的朋友,对交叉编译⼯具链不陌⽣。假设你订制⼀个交叉编译⼯具链,建议你使⽤开源软件来构建。但在这⾥建议直接安装arm的交叉编译⼯具链:sudo apt-get install gcc-arm-linux-gnueabi编译Linux内核⽣成vexpress开发板⼦的config⽂件:make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm vexpress_defconfig编译:make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm⽣成的内核镱像位于arch/arm/boot/zImage, 兴许qemu启动时须要使⽤该镜像。下载和安装qemu模拟器事实上Ubuntu 12.04有qemu的安装包。但由于版本号较低。对vexpress开发板⽀持不友好,建议下载⾼版本号的qemu:wget /download/2配置qemu前。须要安装⼏个软件包:sudo apt-get install zlib1g-devsudo apt-get install libglib2.0-0sudo apt-get install libglib2.0-dev配置qemu,⽀持模拟arm架构下的全部单板:./configure --target-list=arm-softmmu --audio-drv-list=编译和安装:makemake install測试qemu和内核是否能执⾏成功qemu已经安装好了。内核也编译成功了,到这⾥最好是測试⼀下,编译出来的内核是否OK,或者qemu对vexpress单板⽀持是否够友好。执⾏命令⾮常easy:qemu-system-arm -M vexpress-a9 -m 512M -kernel /home/ivan/kernel_git/linux/arch/arm/boot/zImage -nographic -append"console=ttyAMA0"假设看到内核启动过程中的打印,说明前的搭建是成功的。这⾥简介下qemu命令的參数:-M vexpress-a9 模拟vexpress-a9单板,你能够使⽤-M ?參数来获取该qemu版本号⽀持的全部单板-m 512M 单板执⾏物理内存512M-kernel /home/ivan/kernel_git/linux/arch/arm/boot/zImage 告诉qemu单板执⾏内核镜像路径-nographic 不使⽤图形化界⾯,仅仅使⽤串⼝-append "console=ttyAMA0" 内核启动參数。这⾥告诉内核vexpress单板执⾏。串⼝设备是哪个tty。注意:我每次搭建,都忘了内核启动參数中的console=參数应该填上哪个tty,由于不同单板串⼝驱动类型不尽同样,创建的tty设备名当然也是不同样的。那vexpress单板的tty设备名是哪个呢? 事实上这个值能够从⽣成的.config⽂件CONFIG_CONSOLE宏找到。假设搭建其他单板,须要注意内核启动參数的console=參数值,同样地,可从⽣成的.config⽂件⾥找到。制作根⽂件系统到这⾥是否⼤功告成了呢? 事实上在上⾯的測试中,你会发现内核报panic,由于内核找不到根⽂件系统,⽆法启init进程。根⽂件系统要考虑两个⽅⾯:1. 根⽂件系统的内容 假设你看过《》。相信你会对这⼀步产⽣恐惧感。但假设⼀直从事嵌⼊式开发。就能够放下⼼来。根⽂件系统就是简单得不能再简单的⼏个命令集和态动态⽽已。为什么Linux From Scratch会有那么复杂。是由于它要制作出⼀个Linux发⽣版。但在嵌⼊式领域,差点⼉全部的东西,都是mini版本号,根⽂件系统也不例外。 本⽂制本的根⽂件系统 = busybox(包括基础的Linux命令) + 执⾏库 + ⼏个字符设备2. 根⽂件系统放在哪⾥ 事实上依赖于每⼀个开发板⽀持的存储设备,能够放到Nor Flash上。也能够放到SD卡,甚⾄外部磁盘上。最关键的⼀点是你要清楚知道开发板有什么存储设备。 本⽂直接使⽤SD卡做为存储空间,⽂件格式为ext3格式下载、编译和安装busybox wget /downloads/2make defconfigmake CROSS_COMPILE=arm-linux-gnueabi-make install CROSS_COMPILE=arm-linux-gnueabi-安装完毕后。会在busybox⽂件夹下⽣成_install⽂件夹。该⽂件夹下的程序就是单板执⾏所须要的命令。形成根⽂件夹结构先在Ubuntu主机环境下,形成⽂件夹结构,⾥⾯存放的⽂件和⽂件夹与单板上执⾏所须要的⽂件夹结构全然⼀样。然后再打包成镜像(在开发板看来就是SD卡)。这个暂时的⽂件夹结构称为根⽂件夹1. 创建rootfs⽂件夹(根⽂件夹),根⽂件系统内的⽂件全部放到这⾥sudo mkdir rootfs2. 拷贝busybox命令到根⽂件夹下sudo cp busybox-1.20.2/_install/* -r rootfs/3. 从⼯具链中拷贝执⾏库到lib⽂件夹下sudo cp -P /usr/arm-linux-gnueabi/lib/* rootfs/lib/4. 创建4个tty端终设备sudo mknodrootfs/dev/tty1 c 4 1sudo mknod rootfs/dev/tty2c 4 2sudo mknod rootfs/dev/tty3c 4 3sudo mknod rootfs/dev/tty4c 4 4制作根⽂件系统镜像1. ⽣成32M⼤⼩的镜像 dd if=/dev/zero of=3 bs=1M count=322. 格式化成ext3⽂件系统3 33. 将⽂件复制到镜像中sudo mkdir tmpfssudo mount -t ext3 3 tmpfs/ -o loop cp -r rootfs/* tmpfs/sudo umount tmpfs系统启动执⾏完毕上述全部步骤之后。就能够启动qemu来模拟vexpress开发板了,命令參数例如以下:qemu-system-arm -M vexpress-a9 -m 512M -kernel /home/ivan/qemu/linux/arch/arm/boot/zImage -nographic -append"root=/dev/mmcblk0 console=ttyAMA0" -sd 3从内核启动打印。到命令⾏提⽰符出现,激动⼈⼼的时刻出现了……写在后⾯的话通过上⾯的步骤。搭建出来⼀个最⼩的qemu+arm开发环境,你能够上⾯的基础上改动内核。或者添加⼀些測试程序在单板上执⾏,甚⾄使⽤单板的flash设备。在此,你能够做纯arm架构的内核开发。或者与架构⽆关的内核开发,也能够做单板相关的驱动开发。

发布者:admin,转转请注明出处:http://www.yc00.com/web/1688593957a153193.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信