ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:909.04KB ,
资源ID:5403617      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5403617.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(QEMU模拟CortexA9运行Uboot和LinuxV020.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

QEMU模拟CortexA9运行Uboot和LinuxV020.docx

1、QEMU模拟CortexA9运行Uboot和LinuxV020QEMU模拟Cortex-A9运行U-boot与Linux1、 实验目的1) 熟练使用Linux操作系统; 2) 认识一种新的内核模拟器QEMU;3) 掌握嵌入式Linux系统的开发流程;2、 实验要求 1) 在PC机上安装VMware虚拟机,并在VMware中安装Linux操作系统(Ubuntu 12、04);2) 在Ubuntu中安装QEMU;3) 编译U-boot,并在QEMU上运行;4) 编译Linux内核,并使用Busybox制作根文件系统;5)在QEMU上运行Linux操作系统;6)在该Linux系统上运行应用程序。3、

2、 实验原理 1)VMware Workstation虚拟机就是可以在Windows/Linux系统上运行的应用程序,它可以模拟基于x86的标准PC环境。这个环境与真实的计算机一样,都有芯片组、CPU、内存、显卡、声卡、网卡、软驱、硬盘、光驱、串口、并口、USB控制器、SCSI控制器等设备。与“多启动”系统相比,VMWare采用了完全不同的概念,多启动系统在一个时刻只能运行一个系统,在系统切换时需要重新启动机器。而VMWare虚拟机软件就是一个“虚拟PC”软件,它可以使您在一台机器上同时运行多个Windows、DOS、LINUX系统,并且在系统切换时不需要重启计算机。 在使用上,这台虚拟机与真正

3、的物理主机几乎没有区别,都需要分区、格式化、安装操作系统、安装应用程序与软件,总之,一切操作都跟一台真正的计算机一样。2)QEMU模拟器:QEMU 就是一个面向完整PC系统的开源仿真器。除了可以仿真处理器之外,QEMU 还可以仿真所有必要的子系统,如连网硬件与视频硬件。它还允许实现高级概念上的仿真(如对称多处理系统(多达 255个CPU)与对其她处理器架构(如 ARM 与 PowerPC)的仿真。QEMU有两种运行模式:* User mode模拟模式,亦称作使用者模式。QEMU能启动那些为不同中央处理器编译的Linux程序。* System mode模拟模式,亦称作系统模式。QEMU能模拟整个

4、电脑系统,包括中央处理器及其她周边设备。它使得对跨平台编写的程序进行测试及调试变得容易。其亦能用来在一部主机上虚拟多部不同的系统。3)嵌入式Linux系统的结构嵌入式Linux系统从软件的角度瞧通常可以分为4个层次:引导加载程序Bootloader。内核。完成对硬件设备的控制,Linux内核的主要模块分为以下几个部分:存储管理、CPU与进程管理、文件系统、设备管理与驱动、网络通信、以及系统的初始化(引导)、系统调用等。文件系统。它提供了用于管理系统的各种配置文件,以及为系统执行用户应用程序提供了良好的运行环境。用户应用程序。根据不同的用户需求而编写的程序。4)QEMU与宿主机之间的通信机制:Q

5、EMU提供了四种网络通信模式:TAP、user、Sockets与VDE。利用user模式可以实现虚拟机与宿主机之间的通信且较为简单易行,在这种通信模式中,虚拟机处于10、0、2、*网段,该网段通过一个NAT服务器与外界通信,NAT服务器的地址就是10、0、2、2,虚拟机的IP地址从10、0、2、15开始分配。4、 实验步骤4、1 VMware虚拟机中安装Ubuntu(1)自行下载ubuntu12、04的、iso系统镜像,并在VMware中安装。(2)Ubuntu安装完成后,设置root密码,以便后期编译时获取root权限。(3)终端sudo apt-get update 完成更新。(4)安装G

6、NU的交叉编译工具链。 sudo apt-get install gcc-arm-linux-gnueabisudo apt-get install g+-arm-linux-gnueabi 安装完成后会在 /usr/arm-linux-gnueabi/ 目录下生成库文件、头文件等。4、2 安装QEMU模拟器sudo apt-get install qemu qemu-system qemu-utils然后在终端中运行qemu-system-arm -version会显示如下QEMU的版本信息:4、3 编译并运行U-boot(1)在windows下到 下载最新版本的U-Boot源代码,(参考版

7、本u-boot-2012、04、tar、bz2 ),下载完后将其放入ubuntu中在该目录下解压:tar jxvf u-boot-2012、04、tar、bz2,在当前目录下会产生一个u-boot-12、04的文件夹:进入到u-boot-2012、04目录下,修改其中的Makefile,添加两行(可放在文档的开头),ARCH?=arm CROSS_COMPILE ?= arm-linux-gnueabi-(2)进入到u-boot-2012、04文件夹下,终端输入命令:make ca9x4_ct_vxp_config make 结果如下:结果会在u-boot-2012、04文件夹下生成u-boo

8、t、bin等文件,如下图所示:(3)然后在终端中执行下面的命令,来启动U-bootqemu-system-arm -M vexpress-a9 -m 256M -nographic -kernel u-boot或者qemu-system-arm -M vexpress-a9 -m 256M -serial stdio -kernel u-boot结果如下图:此时就是检测Flash failed后停止运行,就是因为在 arch/arm/lib/board、c里面 board_init_r()函数里检测Flash失败后调用了hang(), 暂时先把hang()去掉就可以运行下去了。正常的运行结果如

9、下:4、4 编译并运行Linux(1)到下载最新的Linux内核源码,(参考 linux-3、4、4、tar、bz2),解压后得到文件夹linux-3、4、4,修改Makefile , 修改的位置如下图:修改如下ARCH = armCROSS_COMPILE=arm-linux-gnueabi-在linux-3、4、4目录下 make vexpress_defconfig然后 make menuconfig - System Type 把 Enable the L2x0 outer cache controller 取消, 否则Qemu会起不来。然后make,会在arch/arm/boot/

10、目录下生成zImage内核映像文件,这就就是我们需要的内核映像。(2)制作根目录系统。1、编译busybox 下载busybox源码:解压,还就是在busybox-1、21、0目录下的Makefile中修改ARCH = armCROSS_COMPILE=arm-linux-gnueabi-make menuconfig进行配置在Busybox Setting-Build Opdions-选择 Build BusyBox as a static binary (no shared libs)使用静态编译 make ,会在目录中产生install文件, make inatall ,会在目录中生成文

11、件夹_install,2、 制作根文件系统目录mkdir rootfscd rootfs(1) 建立目录结构mkdir bin etc dev lib proc tmp root home sys usr sbin var mnt(2) 运行库-来自工具链cp -a /usr/arm-linux-gnueabi/lib/* lib(3) 配置文件-来自busyboxcp -a /examples/bootfloppy/etc/* etc(4) busybox工具集cp -a /_install/* 、(5) 设备文件udo cp -a /dev/console /dev/loop0 /dev/

12、loop1 /dev/null /dev/ram0 /dev/tty /dev/tty0 /dev/tty1 /dev/zero dev(6) 修改mdev配置,mdev负责自动生成设备节点,mdev、conf就是配置文件vim etc/mdev、conf controlC0-9 0:0 0660 =snd/pcm、* 0:0 0660 =snd/seq、* 0:0 0660 =snd/mix、* 0:0 0660 =snd/ timer 0:0 0660 =snd/其她特殊要求的设备文件,同样道理即可、(7) 修改启动配置vi etc/init、d/rcS增加mount -n -t proc

13、 none /proc mount -n -t sysfs none /sys mdev -s 这句很重要,生成所有的设备节点如果用nfs的话,有了以上目录就可以了3、 根文件系统镜像dd if=/dev/zero of=rootfs、img bs=1M count=64 # 32M的镜像mkfs、ext3 rootfs、imgmkdir tmpfssudo mount -o loop rootfs、img tmpfssudo cp -a rootfs/* tmpfs/sudo umount tmpfsrootfs、img中就有了文件系统镜像了,ext3格式、(3)QEMU运行Linux系统q

14、emu-system-arm -M vexpress-a9 -m 256M -kernel /home/syl/linux-3、4、4/arch/arm/boot/zImage -append root=/dev/mmcblk0 console=tty0 init=/linuxrc -sd rootfs、img运行结果如下:/home/syl/linux-3、4、4/arch/arm/boot/就是放置内核镜像的路径。4、5 在目标机(Linux系统)中运行应用程序用户应用程序在目标机上运行有两种方法:将编译后的可执行文件放入到根文件系统中,在做成根文件系统的镜像后,由内核调用并执行。使用NF

15、S(网络文件系统)在本地机与目标机之间建立通信。1)QEMU与Ubuntu之间的通信1. 首先在Ubuntu上安装NFS网络文件系统apt-get install nfs-kernel-server2. 在NFS服务的配置文件/etc/exports中添加:/ *(rw,no_root_squash,insecure)3. 关闭Ubuntu的网关,避免连接不上:在/etc/resolv、conf中全部注释掉,不要DNS服务器地址。4. 在宿主机Ubuntu中开启NFS服务: /etc/init、d/nfs-kernel-server start5. 再次启动Qemu,在最后面添加如下命令 -n

16、et user -net nic s6. 最后,在目标机中配置网络、挂载NFS文件系统、切换根文件系统: ifconfig eth0 10、0、2、15 up route add default gw 10、0、2、2mount -t nfs -o nolock 192、168、1、241:/ /mnt这样就可将192、168、1、241的主机的文件系统挂载到/mnt目录下。(注:192、168、1、241就是我的Ubuntu的IP地址,可用ifconfig查瞧本地机的IP地址。) 图(一) 图(二)图(一)就是查瞧/mnt目录下所挂载的本地机的文件系统,图(二)就是本地机的文件系统,比较以上

17、两图可知,本地机上的文件系统在目标机上挂载成功。2)测试Hello World、在本地机上使用vim编辑Hello World测试程序hello、c;编译hello、c生成可执行文件;将可执行文件在目标机上运行。思考题1、QEMU运行的Linux系统中就是否需要安装gcc。2、在本地机(Ubuntu)编译应用程序时,就是使用gcc还就是arm-linux-gcc?为什么?3、如何将可执行文件在系统开机后自启动?4、QEMU运行的Linux系统就是命令行模式,如何将它改成图形用户界面模式?从零使用qemu模拟器搭建arm运行环境为什么会有这篇文章早在2011年的时候,跟当时同事一起讨论,做Lin

18、ux系统开发正处于整个Linux开发中间层,没有上层的C/C+业务与数据库的开发经验,也没有底层的内核与驱动开发经验,到底路该如何走基于对Linux系统开发的理解与内核的兴趣,认为选择Linux内核开发更适合自己。于就是到淘宝上买了块三星s3c2440(arm 9)开发板,学起内核开发。没有过多久,机缘巧合,正式加入了公司的内核开发部。就这样跟内核与arm打上交道了。没有想到这一做就就是3年了,arm芯片只有在公司才能使用,回到家里就不能访问了。去年(2014)开始觉得做内核久了,应该向内核社区提交patch,提升知名度与影响力。但在公司提交patch不方便,于就是在家里通过qemu方式搭建于

19、ARM A9的运行环境,进行开发与测试验证,一口气提交了好几个patch(link1,link2,link3,link4,link5)并被社区接纳了。最近在梳理Linux内存机制,无论就是深入理解Linux内核还就是深入理解内核架构这两本红宝书都无法告知您每个细节的时候,就需要查瞧代码细节,修改代码,甚致做行为分析。此时需要修改代码输出调试信息,以帮助更深入体会代码的逻辑。这该就是qemu派上场的时候。其实我前前后后搭建qemu+arm的运行环境已超过5次了,每次都要花上很多时间。碰巧昨天有同事瞧到我再次搭建,她如搭珍宝,告诉我一定要将搭建qemu的方法告诉她。所以,如果您想买个开发板来做ar

20、m + linux嵌入式开发,完全可以使用qemu进行开发。或者您像我一样,对内核机制关心,而不关心于具体的外设器件,最多就是关心arm架构相关的功能,也可以使用qemu进行开发。一句话:搭建qemu+arm环境,用于做内核开发与功能分析调试。搭建环境我整个搭建过程都就是在笔记本上进行的,Ubuntu 12、04系统;如果就是Fodera环境,搭建过程可能略有不同,但关键步骤就是不变的。qemu模拟得最好的arm芯片,要数ARM公司的vexpress A9开发板了,本文的搭建过程都就是围绕这个开发板进行的。当然,如果您想搭其它开发板,也不难,只要qemu与内核对它有成熟的支持就够了。下面就是s

21、tep by step的搭建过程,建议没有特别诉求的朋友,按照下在面的步骤操作。或者先根据下面的步骤成功搭建vexpress运行环境之后,再根据自己的需求进行更改。下载Linux内核下载内核有两种方法,一种就是用Git直接下载内核代码树,方便后面的内核开发。另一种就是直接到内核社区下载对应版本的源码包。我采用第一种方法,但后面发现主线上3、18版本与后面版本的代码,使用这种搭建方法运行不起来。目前未查明问题的根因。如果读者想快速搭建成功,建议选用3、16版本的内核进行搭建。方法一:使用gitgit clonegit:/git、kernel、org/pub/scm/linux/kernel/gi

22、t/torvalds/linux、git方法二:直接下载3、16源代码包wget 安装arm的交叉编译工具链想必做嵌入式开发的朋友,对交叉编译工具链不陌生。如果您订制一个交叉编译工具链,建议您使用crosstool-ng开源软件来构建。但在这里建议直接安装arm的交叉编译工具链:sudo apt-get install gcc-arm-linux-gnueabi编译Linux内核生成vexpress开发板子的config文件:make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm vexpress_defconfig编译:makeCROSS_COMPILE

23、=arm-linux-gnueabi- ARCH=arm生成的内核镱像位于arch/arm/boot/zImage, 后续qemu启动时需要使用该镜像。下载与安装qemu模拟器其实Ubuntu 12、04有qemu的安装包,但由于版本较低,对vexpress开发板支持不友好,建议下载高版本的qemu:wget 配置qemu前,需要安装几个软件包:sudo apt-get install zlib1g-devsudo apt-get install libglib2、0-0sudo apt-get install libglib2、0-dev配置qemu,支持模拟arm架构下的所有单板:、/co

24、nfigure -target-list=arm-softmmu -audio-drv-list=编译与安装:makemake install测试qemu与内核能否运行成功qemu已经安装好了,内核也编译成功了,到这里最好就是测试一下,编译出来的内核就是否OK,或者qemu对vexpress单板支持就是否够友好。运行命令很简单:qemu-system-arm -M vexpress-a9 -m 512M -kernel /home/ivan/kernel_git/linux/arch/arm/boot/zImage -nographic-append console=ttyAMA0如果瞧到内核

25、启动过程中的打印,说明前的搭建就是成功的。这里简单介绍下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。注意:我每次搭建,都忘了内核启动参数中的consol

26、e=参数应该填上哪个tty,因为不同单板串口驱动类型不尽相同,创建的tty设备名当然也就是不相同的。那vexpress单板的tty设备名就是哪个呢? 其实这个值可以从生成的、config文件CONFIG_CONSOLE宏找到。如果搭建其它单板,需要注意内核启动参数的console=参数值,同样地,可从生成的、config文件中找到。制作根文件系统到这里就是否大功告成了呢? 其实在上面的测试中,您会发现内核报panic,因为内核找不到根文件系统,无法启init进程。根文件系统要考虑两个方面:1、 根文件系统的内容 如果您瞧过Linux From Scratch,相信您会对这一步产生恐惧感,但如果

27、一直从事嵌入式开发,就可以放下心来。根文件系统就就是简单得不能再简单的几个命令集与态动态而已。为什么Linux From Scratch会有那么复杂,就是因为它要制作出一个Linux发生版。但在嵌入式领域,几乎所有的东西,都就是mini版本,根文件系统也不例外。 本文制本的根文件系统 = busybox(包含基础的Linux命令) + 运行库 + 几个字符设备2、 根文件系统放在哪里 其实依赖于每个开发板支持的存储设备,可以放到Nor Flash上,也可以放到SD卡,甚至外部磁盘上。最关键的一点就是您要清楚知道开发板有什么存储设备。 本文直接使用SD卡做为存储空间,文件格式为ext3格式下载、

28、编译与安装busyboxwget 、NET/downloads/busybox-1、20、2、tar、bz2make defconfigmake CROSS_COMPILE=arm-linux-gnueabi-make installCROSS_COMPILE=arm-linux-gnueabi-安装完成后,会在busybox目录下生成_install目录,该目录下的程序就就是单板运行所需要的命令。形成根目录结构先在Ubuntu主机环境下,形成目录结构,里面存放的文件与目录与单板上运行所需要的目录结构完全一样,然后再打包成镜像(在开发板瞧来就就是SD卡),这个临时的目录结构称为根目录1、 创建

29、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/tty1c 4 1sudo mknod rootfs/dev/tty2c 4 2sudo mknod rootfs/dev/tty3c 4 3sudo mknod roo

30、tfs/dev/tty4c 4 4制作根文件系统镜像1、 生成32M大小的镜像dd if=/dev/zero of=a9rootfs、ext3 bs=1M count=322、 格式化成ext3文件系统mkfs、ext3 a9rootfs、ext33、 将文件拷贝到镜像中sudo mkdir tmpfssudo mount -t ext3 a9rootfs、ext3 tmpfs/ -o loopcp -r rootfs/* tmpfs/sudo umount tmpfs系统启动运行完成上述所有步骤之后,就可以启动qemu来模拟vexpress开发板了,命令参数如下:qemu-system-ar

31、m -M vexpress-a9 -m 512M -kernel /home/ivan/qemu/linux/arch/arm/boot/zImage -nographic -append root=/dev/mmcblk0 console=ttyAMA0-sd a9rootfs、ext3从内核启动打印,到命令行提示符出现,激动人心的时刻出现了写在后面的话通过上面的步骤,搭建出来一个最小的qemu+arm开发环境,您可以上面的基础上修改内核,或者增加一些测试程序在单板上运行,甚至使用单板的flash设备。在此,您可以做纯arm架构的内核开发,或者与架构无关的内核开发,也可以做单板相关的驱动开发

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1