QEMU模拟CortexA9运行Uboot和LinuxV020.docx

上传人:b****4 文档编号:5403617 上传时间:2022-12-16 格式:DOCX 页数:15 大小:909.04KB
下载 相关 举报
QEMU模拟CortexA9运行Uboot和LinuxV020.docx_第1页
第1页 / 共15页
QEMU模拟CortexA9运行Uboot和LinuxV020.docx_第2页
第2页 / 共15页
QEMU模拟CortexA9运行Uboot和LinuxV020.docx_第3页
第3页 / 共15页
QEMU模拟CortexA9运行Uboot和LinuxV020.docx_第4页
第4页 / 共15页
QEMU模拟CortexA9运行Uboot和LinuxV020.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

QEMU模拟CortexA9运行Uboot和LinuxV020.docx

《QEMU模拟CortexA9运行Uboot和LinuxV020.docx》由会员分享,可在线阅读,更多相关《QEMU模拟CortexA9运行Uboot和LinuxV020.docx(15页珍藏版)》请在冰豆网上搜索。

QEMU模拟CortexA9运行Uboot和LinuxV020.docx

QEMU模拟CortexA9运行Uboot和LinuxV020

QEMU模拟Cortex-A9运行U-boot与Linux 

 

1、实验目的

1)熟练使用Linux操作系统;

2)认识一种新的内核模拟器QEMU;

3)掌握嵌入式Linux系统的开发流程;

2、实验要求

1)在PC机上安装VMware虚拟机,并在VMware中安装Linux操作系统(Ubuntu12、04);

2)在Ubuntu中安装QEMU;

3)编译U-boot,并在QEMU上运行;

4)编译Linux内核,并使用Busybox制作根文件系统;

5)在QEMU上运行Linux操作系统;

6)在该Linux系统上运行应用程序。

3、实验原理

1)VMwareWorkstation虚拟机就是可以在Windows/Linux系统上运行的应用程序,它可以模拟基于x86的标准PC环境。

这个环境与真实的计算机一样,都有芯片组、CPU、内存、显卡、声卡、网卡、软驱、硬盘、光驱、串口、并口、USB控制器、SCSI控制器等设备。

与“多启动”系统相比,VMWare采用了完全不同的概念,多启动系统在一个时刻只能运行一个系统,在系统切换时需要重新启动机器。

而VMWare虚拟机软件就是一个“虚拟PC”软件,它可以使您在一台机器上同时运行多个Windows、DOS、LINUX系统,并且在系统切换时不需要重启计算机。

在使用上,这台虚拟机与真正的物理主机几乎没有区别,都需要分区、格式化、安装操作系统、安装应用程序与软件,总之,一切操作都跟一台真正的计算机一样。

2)QEMU模拟器:

QEMU就是一个面向完整PC系统的开源仿真器。

除了可以仿真处理器之外,QEMU还可以仿真所有必要的子系统,如连网硬件与视频硬件。

它还允许实现高级概念上的仿真(如对称多处理系统(多达255个CPU))与对其她处理器架构(如ARM与PowerPC)的仿真。

QEMU有两种运行模式:

*Usermode模拟模式,亦称作使用者模式。

QEMU能启动那些为不同中央处理器编译的Linux程序。

*Systemmode模拟模式,亦称作系统模式。

QEMU能模拟整个电脑系统,包括中央处理器及其她周边设备。

它使得对跨平台编写的程序进行测试及调试变得容易。

其亦能用来在一部主机上虚拟多部不同的系统。

3)嵌入式Linux系统的结构

嵌入式Linux系统从软件的角度瞧通常可以分为4个层次:

①引导加载程序Bootloader。

②内核。

完成对硬件设备的控制,Linux内核的主要模块分为以下几个部分:

存储管理、CPU与进程管理、文件系统、设备管理与驱动、网络通信、以及系统的初始化(引导)、系统调用等。

③文件系统。

它提供了用于管理系统的各种配置文件,以及为系统执行用户应用程序提供了良好的运行环境。

④用户应用程序。

根据不同的用户需求而编写的程序。

4)QEMU与宿主机之间的通信机制:

QEMU提供了四种网络通信模式:

TAP、user、Sockets与VDE。

利用user模式可以实现虚拟机与宿主机之间的通信且较为简单易行,在这种通信模式中,虚拟机处于10、0、2、*网段,该网段通过一个NAT服务器与外界通信,NAT服务器的地址就是10、0、2、2,虚拟机的IP地址从10、0、2、15开始分配。

4、实验步骤

4、1VMware虚拟机中安装Ubuntu

(1)自行下载ubuntu12、04的、iso系统镜像,并在VMware中安装。

(2)Ubuntu安装完成后,设置root密码,以便后期编译时获取root权限。

(3)终端sudoapt-getupdate完成更新。

(4)安装GNU的交叉编译工具链。

sudoapt-getinstallgcc-arm-linux-gnueabi

sudoapt-getinstallg++-arm-linux-gnueabi

安装完成后会在/usr/arm-linux-gnueabi/目录下生成库文件、头文件等。

4、2安装QEMU模拟器

sudoapt-getinstallqemuqemu-systemqemu-utils

然后在终端中运行qemu-system-arm--version会显示如下QEMU的版本信息:

4、3编译并运行U-boot

(1)在windows下到 下载最新版本的U-Boot源代码,(参考版本u-boot-2012、04、tar、bz2),下载完后将其放入ubuntu中在该目录下解压:

tarjxvfu-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文件夹下,终端输入命令:

makeca9x4_ct_vxp_config

make

结果如下:

结果会在u-boot-2012、04文件夹下生成u-boot、bin等文件,如下图所示:

(3)然后在终端中执行下面的命令,来启动U-boot

qemu-system-arm-Mvexpress-a9-m256M-nographic-kernelu-boot

或者

qemu-system-arm-Mvexpress-a9-m256M-serialstdio-kernelu-boot

结果如下图:

此时就是检测Flashfailed后停止运行,就是因为在arch/arm/lib/board、c里面board_init_r()函数里检测Flash失败后调用了hang(),暂时先把hang()去掉就可以运行下去了。

正常的运行结果如下:

4、4编译并运行Linux

(1)到下载最新的Linux内核源码,(参考linux-3、4、4、tar、bz2),解压后得到文件夹linux-3、4、4,修改Makefile,修改的位置如下图:

修改如下

ARCH=arm

CROSS_COMPILE=arm-linux-gnueabi-

在linux-3、4、4目录下makevexpress_defconfig

然后makemenuconfig-->SystemType 把EnabletheL2x0outercachecontroller取消,否则Qemu会起不来。

然后make,会在arch/arm/boot/目录下生成zImage内核映像文件,这就就是我们需要的内核映像。

(2)制作根目录系统。

1、编译busybox

①下载busybox源码:

解压,还就是在busybox-1、21、0目录下的Makefile中修改

ARCH=arm

CROSS_COMPILE=arm-linux-gnueabi-

②makemenuconfig进行配置

在BusyboxSetting--->BuildOpdions-->选择[]BuildBusyBoxasastaticbinary(nosharedlibs)使用静态编译

③make,会在目录中产生install文件,

④makeinatall,会在目录中生成文件夹_install,

2、制作根文件系统目录

mkdirrootfs

cdrootfs 

(1)建立目录结构

mkdirbinetcdevlibproctmproothomesysusrsbinvarmnt

(2)运行库-来自工具链

cp-a/usr/arm-linux-gnueabi/lib/*lib

(3)配置文件-来自busybox

cp-a/examples/bootfloppy/etc/*etc

(4)busybox工具集

cp-a/_install/*、

(5)设备文件

udocp-a/dev/console/dev/loop0 /dev/loop1 /dev/null /dev/ram0 /dev/tty /dev/tty0 /dev/tty1 /dev/zerodev

(6)修改mdev配置,mdev负责自动生成设备节点,mdev、conf就是配置文件

vimetc/mdev、conf

controlC[0-9]0:

00660=snd/

pcm、*0:

00660=snd/

seq、*0:

00660=snd/

mix、*0:

00660=snd/

timer0:

00660=snd/

其她特殊要求的设备文件,同样道理即可、 

(7)修改启动配置

vietc/init、d/rcS

增加

mount-n-tprocnone/proc 

mount-n-tsysfsnone/sys 

mdev-s这句很重要,生成所有的设备节点

如果用nfs的话,有了以上目录就可以了 

3、根文件系统镜像

ddif=/dev/zeroof=rootfs、imgbs=1Mcount=64#32M的镜像

mkfs、ext3rootfs、img

mkdirtmpfs

sudomount-olooprootfs、imgtmpfs

sudocp-arootfs/*tmpfs/

sudoumounttmpfs

 

rootfs、img中就有了文件系统镜像了,ext3格式、 

(3)QEMU运行Linux系统

qemu-system-arm-Mvexpress-a9-m256M-kernel/home/syl/linux-3、4、4/arch/arm/boot/zImage-append"root=/dev/mmcblk0console=tty0init=/linuxrc"-sdrootfs、img

运行结果如下:

/home/syl/linux-3、4、4/arch/arm/boot/就是放置内核镜像的路径。

4、5在目标机(Linux系统)中运行应用程序

用户应用程序在目标机上运行有两种方法:

①将编译后的可执行文件放入到根文件系统中,在做成根文件系统的镜像后,由内核调用并执行。

②使用NFS(网络文件系统)在本地机与目标机之间建立通信。

1)QEMU与Ubuntu之间的通信

1.首先在Ubuntu上安装NFS网络文件系统apt-getinstallnfs-kernel-server

2.在NFS服务的配置文件/etc/exports中添加:

      /   *(rw,no_root_squash,insecure)

3.关闭Ubuntu的网关,避免连接不上:

在/etc/resolv、conf中全部注释掉,不要DNS服务器地址。

4.在宿主机Ubuntu中开启NFS服务:

 /etc/init、d/nfs-kernel-serverstart

5.再次启动Qemu,在最后面添加如下命令

      -netuser-netnic–s

6.最后,在目标机中配置网络、挂载NFS文件系统、切换根文件系统:

ifconfigeth010、0、2、15up

routeadddefaultgw10、0、2、2

 mount-tnfs-onolock192、168、1、241:

//mnt

这样就可将192、168、1、241的主机的文件系统挂载到/mnt目录下。

(注:

192、168、1、241就是我的Ubuntu的IP地址,可用ifconfig查瞧本地机的IP地址。

(一)

(二)

(一)就是查瞧/mnt目录下所挂载的本地机的文件系统,图

(二)就是本地机的文件系统,比较以上两图可知,本地机上的文件系统在目标机上挂载成功。

2)测试HelloWorld、

①在本地机上使用vim编辑HelloWorld测试程序hello、c;

②编译hello、c生成可执行文件;

③将可执行文件在目标机上运行。

思考题

1、QEMU运行的Linux系统中就是否需要安装gcc。

2、在本地机(Ubuntu)编译应用程序时,就是使用gcc还就是arm-linux-gcc?

为什么?

3、如何将可执行文件在系统开机后自启动?

4、QEMU运行的Linux系统就是命令行模式,如何将它改成图形用户界面模式?

 

 

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

为什么会有这篇文章

早在2011年的时候,跟当时同事一起讨论,做Linux系统开发正处于整个Linux开发中间层,没有上层的C/C++业务与数据库的开发经验,也没有底层的内核与驱动开发经验,到底路该如何走……基于对Linux系统开发的理解与内核的兴趣,认为选择Linux内核开发更适合自己。

于就是到淘宝上买了块三星s3c2440(arm9)开发板,学起内核开发。

没有过多久,机缘巧合,正式加入了公司的内核开发部。

就这样跟内核与arm打上交道了。

没有想到这一做就就是3年了,arm芯片只有在公司才能使用,回到家里就不能访问了。

去年(2014)开始觉得做内核久了,应该向内核社区提交patch,提升知名度与影响力。

但在公司提交patch不方便,于就是在家里通过qemu方式搭建于ARMA9的运行环境,进行开发与测试验证,一口气提交了好几个patch(link1, link2, link3, link4, link5)并被社区接纳了。

最近在梳理Linux内存机制,无论就是《深入理解Linux内核》还就是《深入理解内核架构》这两本红宝书都无法告知您每个细节的时候,就需要查瞧代码细节,修改代码,甚致做行为分析。

此时需要修改代码输出调试信息,以帮助更深入体会代码的逻辑。

这该就是qemu派上场的时候。

其实我前前后后搭建qemu+arm的运行环境已超过5次了,每次都要花上很多时间。

碰巧昨天有同事瞧到我再次搭建,她如搭珍宝,告诉我一定要将搭建qemu的方法告诉她。

所以,如果您想买个开发板来做arm+linux嵌入式开发,完全可以使用qemu进行开发。

或者您像我一样,对内核机制关心,而不关心于具体的外设器件,最多就是关心arm架构相关的功能,也可以使用qemu进行开发。

一句话:

搭建qemu+arm环境,用于做内核开发与功能分析调试。

搭建环境

我整个搭建过程都就是在笔记本上进行的,Ubuntu12、04系统;如果就是Fodera环境,搭建过程可能略有不同,但关键步骤就是不变的。

qemu模拟得最好的arm芯片,要数ARM公司的vexpressA9开发板了,本文的搭建过程都就是围绕这个开发板进行的。

当然,如果您想搭其它开发板,也不难,只要qemu与内核对它有成熟的支持就够了。

下面就是stepbystep的搭建过程,建议没有特别诉求的朋友,按照下在面的步骤操作。

或者先根据下面的步骤成功搭建vexpress运行环境之后,再根据自己的需求进行更改。

下载Linux内核

下载内核有两种方法,一种就是用Git直接下载内核代码树,方便后面的内核开发。

另一种就是直接到内核社区下载对应版本的源码包。

我采用第一种方法,但后面发现主线上3、18版本与后面版本的代码,使用这种搭建方法运行不起来。

目前未查明问题的根因。

如果读者想快速搭建成功,建议选用3、16版本的内核进行搭建。

方法一:

使用git

gitclonegit:

//git、kernel、org/pub/scm/linux/kernel/git/torvalds/linux、git

方法二:

直接下载3、16源代码包

wget

安装arm的交叉编译工具链

想必做嵌入式开发的朋友,对交叉编译工具链不陌生。

如果您订制一个交叉编译工具链,建议您使用crosstool-ng开源软件来构建。

但在这里建议直接安装arm的交叉编译工具链:

sudoapt-getinstallgcc-arm-linux-gnueabi

编译Linux内核

生成vexpress开发板子的config文件:

makeCROSS_COMPILE=arm-linux-gnueabi-ARCH=armvexpress_defconfig

编译:

make CROSS_COMPILE=arm-linux-gnueabi-ARCH=arm

生成的内核镱像位于arch/arm/boot/zImage,后续qemu启动时需要使用该镜像。

下载与安装qemu模拟器

其实Ubuntu12、04有qemu的安装包,但由于版本较低,对vexpress开发板支持不友好,建议下载高版本的qemu:

wget

配置qemu前,需要安装几个软件包:

sudoapt-getinstallzlib1g-dev

sudoapt-getinstalllibglib2、0-0

sudoapt-getinstalllibglib2、0-dev

配置qemu,支持模拟arm架构下的所有单板:

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

编译与安装:

make

makeinstall

测试qemu与内核能否运行成功

qemu已经安装好了,内核也编译成功了,到这里最好就是测试一下,编译出来的内核就是否OK,或者qemu对vexpress单板支持就是否够友好。

运行命令很简单:

qemu-system-arm-Mvexpress-a9-m512M-kernel/home/ivan/kernel_git/linux/arch/arm/boot/zImage-nographic -append"console=ttyAMA0"

如果瞧到内核启动过程中的打印,说明前的搭建就是成功的。

这里简单介绍下qemu命令的参数:

-Mvexpress-a9模拟vexpress-a9单板,您可以使用-M?

参数来获取该qemu版本支持的所有单板

-m512M单板运行物理内存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、根文件系统的内容

  如果您瞧过《LinuxFromScratch》,相信您会对这一步产生恐惧感,但如果一直从事嵌入式开发,就可以放下心来。

根文件系统就就是简单得不能再简单的几个命令集与态动态而已。

为什么LinuxFromScratch会有那么复杂,就是因为它要制作出一个Linux发生版。

但在嵌入式领域,几乎所有的东西,都就是mini版本,根文件系统也不例外。

  本文制本的根文件系统=busybox(包含基础的Linux命令) +运行库+几个字符设备

2、根文件系统放在哪里

  其实依赖于每个开发板支持的存储设备,可以放到NorFlash上,也可以放到SD卡,甚至外部磁盘上。

最关键的一点就是您要清楚知道开发板有什么存储设备。

  本文直接使用SD卡做为存储空间,文件格式为ext3格式

下载、编译与安装busybox

 wget、NET/downloads/busybox-1、20、2、tar、bz2

makedefconfig

makeCROSS_COMPILE=arm-linux-gnueabi-

makeinstall CROSS_COMPILE=arm-linux-gnueabi-

安装完成后,会在busybox目录下生成_install目录,该目录下的程序就就是单板运行所需要的命令。

形成根目录结构

先在Ubuntu主机环境下,形成目录结构,里面存放的文件与目录与单板上运行所需要的目录结构完全一样,然后再打包成镜像(在开发板瞧来就就是SD卡),这个临时的目录结构称为根目录

1、 创建rootfs目录(根目录),根文件系统内的文件全部放到这里

sudomkdirrootfs

2、拷贝busybox命令到根目录下

sudocpbusybox-1、20、2/_install/*-rrootfs/

3、从工具链中拷贝运行库到lib目录下

sudocp-P/usr/arm-linux-gnueabi/lib/*rootfs/lib/

4、创建4个tty端终设备

sudomknodrootfs/dev/tty1 c41

sudomknodrootfs/dev/tty2c42

sudomknodrootfs/dev/tty3c43

sudomknodrootfs/dev/tty4c44

制作根文件系统镜像

1、生成32M大小的镜像

 ddif=/dev/zeroof=a9rootfs、ext3bs=1Mcount=32

2、格式化成ext3文件系统

mkfs、ext3a9rootfs、ext3

3、 将文件拷贝到镜像中

sudomkdirtmpfs

sudomount-text3a9rootfs、ext3tmpfs/-oloop

 cp-rrootfs/* tmpfs/

sudoumounttmpfs

系统启动运行

完成上述所有步骤之后,就可以启动qemu来模拟vexpress开发板了,命令参数如下:

qemu-system-arm-Mvexpress-a9-m512M-kernel/home/ivan/qemu/linux/arch/arm/boot/zImage-nographic-append"root=/dev/mmcblk0 console=ttyAMA0" -sda9rootfs、ext3

从内核启动打印,到命令行提示符出现,激动人心的时刻出现了……

写在后面的话

通过上面的步骤,搭建出来一个最小的qemu+arm开发环境,您可以上面的基础上修改内核,或者增加一些测试程序在单板上运行,甚至使用单板的flash设备。

在此,您可以做纯arm架构的内核开发,或者与架构无关的内核开发,也可以做单板相关的驱动开发

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

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

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