qemu怎样为选择arm linux内核镜像选择运行arm平台

作者&投稿:睢雍 (若有异议请与网页底部的电邮联系)
使用buildroot编译arm架构的linux内核,使其支持usb摄像头,并使用qemu虚拟运行~

#没有吧ext* 和 VFS编进去吧
cd /usr/src/linuxmake menuconfig#选择ext4 和 VFS,在FileSystem里,很好找make;make module_install;make install

  使用Qemu模拟Cortex-A9运行U-boot和Linux 作者来源于网络

  我的开发环境: Ubuntu-12.04 所有软件包为最新

  1. 安装GNU工具链

  sudo apt-get insatll gcc-arm-linux-gnueabi

  sudo apt-get insatll g++-arm-linux-gnueabi
  安装完成后会在 /usr/arm-linux-gnueabi/ 目录下生成库文件、头文件等。 我安装的GCC版本为:
  arm-linux-gnueabi-gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3

  Copyright (C) 2011 Free Software Foundation, Inc.

  2. 安装Qemu模拟器
  sudo apt-get install qemu qemu-system qemu-utils

  这时应该已经可以运行qemu-system-arm命令了, 其版本为:
  qemu-system-arm --version

  QEMU emulator version 1.0.50 (Debian 1.0.50-2012.03-0ubuntu2), Copyright (c) 2003-2008 Fabrice Bellard

  3. 编译和运行U-boot:
  到 ftp://ftp.denx.de/pub/u-boot/ 下载最新版本的U-Boot源代码, 我用的目前最新版本 u-boot-2012.04.tar.bz2
  解压后进入源代码目录,在Makefile里面增加两行:

  ARCH ?= arm
  CROSS_COMPILE ?= arm-linux-gnueabi-
  其实就是告诉它使用ARM编译器来编译。

  make ca9x4_ct_vxp_config
  make
  这里配置目标板为 Cortex-A9x4 vexpress. 之所以选这个配置可以从 boards.cfg文件里看到, vexpress是ARM公司使用Cortext-A9的一个开发板,相关的代码在 board/armltd/vexpress/ 目录,配置文件为include/configs/ca9x4_ct_vxp.h。 而且关键的是Qemu里面已经支持这个板卡。

  编译完成后会生成u-boot文件
  运行:
  qemu-system-arm -M vexpress-a9 -m 256M -nographic -kernel u-boot
  或者
  qemu-system-arm -M vexpress-a9 -m 256M -serial stdio -kernel u-boot
  发现,如果没有指定-nographics, 则必须要加-serial stdio才会有打印。

  参数-m 256M为指定内存大小。-M 指定板卡的名称, 支持的板卡可以用-M ?查看, 如下:
  #qemu-system-arm -M ?
  Supported machines are:
  beagle Beagle board (OMAP3530)
  beaglexm Beagle board XM (OMAP3630)
  ............
  versatilepb ARM Versatile/PB (ARM926EJ-S)
  versatileab ARM Versatile/AB (ARM926EJ-S)
  vexpress-a9 ARM Versatile Express for Cortex-A9
  vexpress-a15 ARM Versatile Express for Cortex-A15
  正常运行的结果:

  qemu-system-arm -M vexpress-a9 -m 256M -nographic -kernel u-boot

  U-Boot 2012.04 (Jul 08 2012 - 00:14:08)

  DRAM: 256 MiB
  WARNING: Caches not enabled
  Flash: ## Unknown flash on Bank 1 - Size = 0x00000000 = 0 MB
  ## Unknown flash on Bank 2 - Size = 0x00000000 = 0 MB
  *** failed ***
  MMC: MMC: 0
  *** Warning - bad CRC, using default environment

  In: serial
  Out: serial
  Err: serial
  Net: smc911x-0
  Hit any key to stop autoboot: 0
  VExpress#
  VExpress# printenv
  baudrate=38400
  bootcmd=run bootflash;
  bootdelay=2
  bootflash=run flashargs; cp ${ramdisk_addr} ${ramdisk_addr_r} ${maxramdisk}; bootm ${kernel_addr} ${ramdisk_addr_r}
  console=ttyAMA0,38400n8
  。。。。。
  注意:如果在检测Flash failed后停止运行,是因为在 arch/arm/lib/board.c里面 board_init_r()函数里检测Flash失败后调用了hang(), 暂时先把hang()去掉就可以运行下去了。

  4. 编译和运行Linux内核:
  到http://www.kernel.org/下载最新的Linux内核源码,我下载的是linux-3.4.4.tar.bz2. 解压后修改Makefile, ARCH = arm, CROSS_COMPILE=arm-linux-gnueabi-

  make vexpress_defconfig
  (可以到 arch/arm/configs/ 目录看到所有自带的配置文件, 我们使用vexpress板卡默认的配置文件)
  然后 make menuconfig --> System Type 把 Enable the L2x0 outer cache controller 取消, 否则Qemu会起不来, 暂时还不知道为什么。
  然后就可以make了。 最后会生成 arch/arm/boot/zImage 文件, 这就是我们需要的内核映像。

  5. 制作根文件系统:
  这部分网上有非常多的介绍,就不细说了。 大概流程是:先创建标准的Linux目录结构, 到http://www.busybox.net/上下载最新的Busybox源代码编译安装到刚才创建的目录,
  拷贝ARM的库文件到相应目录,在etc/目录创建若干必须的启动脚本和配置文件。 下面说一下怎么生成一个ext3格式的文件系统映像:

  dd if=/dev/zero of=a9rootfs.ext3 bs=1M count=32 //创建一个32M的空文件
  mkfs.ext3 a9rootfs.ext3 //格式化为EXT3
  sudo mount -t ext3 a9rootfs.ext3 a9rootdir/ -o loop //挂载到a9rootdir目录
  cp path/to/your/rootfs/* a9rootdir/ -Rf //拷贝文件到该目录,相对于放到a9rootfs.ext3里面
  sudo umount a9rootdir/
  至此a9rootfs.ex3 就包含了我们创建的根文件系统内容, 并且是ext3格式。

  6. 使用Qemu运行Linux:

  qemu-system-arm -kernel zImage -serial stdio -M vexpress-a9 -append "root=/dev/mmcblk0 console=ttyAMA0 console=tty0" -sd a9rootfs.ext3
  Qemu可以模拟SD卡, 我们把a9rootfs.ext3作为一个SD设备,对应的设备文件即为 /dev/mmcblk0, 以它作为根文件系统启动。 ttyAMA0: Serial console; tty0: Framebuffer Console. 最后放一张启动后的图片:

  阅读(2682) | 评论(0) | 转发(0) |
  0

  上一篇:kernel 启动过程之五, initcall 的来由, console 的初始化
  下一篇:linux下jlink安装
  相关热门文章
  A sample .exrc file for vi e...
  游标的特征
  IBM System p5 服务器 HACMP ...
  busybox的httpd使用CGI脚本(Bu...
  Solaris PowerTOP 1.0 发布
  linux dhcp peizhi roc
  关于Unix文件的软链接
  求教这个命令什么意思,我是新...
  sed -e "/grep/d" 是什么意思...
  谁能够帮我解决LINUX 2.6 10...

下载Linux内核

下载内核有两种方法,一种是用git直接下载内核代码树,方便后面的内核开发。另一种是直接到内核社区下载对应版本的源码包。我采用第一种方法,但后面发现主线上3.18版本和后面版本的代码,使用这种搭建方法运行不起来。目前未查明问题的根因。如果读者想快速搭建成功,建议选用3.16版本的内核进行搭建。

安装arm的交叉编译工具链

想必做嵌入式开发的朋友,对交叉编译工具链不陌生。如果你订制一个交叉编译工具链,建议你使用crosstool-ng开源软件来构建。但在这里建议直接安装arm的交叉编译工具链:

sudoapt-getinstallgcc-arm-linux-gnueabi

编译Linux内核

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

makeCROSS_COMPILE=arm-linux-gnueabi-ARCH=armvexpress_defconfig

编译:

makeCROSS_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

makedefconfig

makeCROSS_COMPILE=arm-linux-gnueabi-

makeinstallCROSS_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/tty1c41

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/mmcblk0console=ttyAMA0"-sda9rootfs.ext3

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

写在后面的话

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

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


饱和磁化强度单位换算是什么?
当使用VSM测量样品饱和磁化强度时,得到的单位是emu\/g。要将这个单位转换为国际单位制中的A\/m或T(特斯拉)或Gauss(高斯),需要知道相应的换算关系。1. 饱和磁化强度(M)通常定义为单位质量的磁化强度,即每克物质的磁化强度。emu\/g是厘米·克·秒(CGS)制电磁单位系(cgs,emu)中的单位,其中1...

...给出的是emu\/g的单位,怎么换算成国际单位制A\/m或T或Gauss呢?_百度知...
时间单位—秒(s);电流强度单位—安培(A)。2.厘米·克·秒(CGS)制静电单位系(cgs,esu),三个基本量是:厘米(cm),克(g),秒(s)。介电常数是无量纲的数,在真空中为1esu、电量为真空中相距1厘米的两相等电量间的作用力是1达因时的电量。3.厘米·克·秒制电磁单位系(cgs,emu)。

跪求Emucheat的用法,最好有视频教程,呵呵~~高人们小弟先谢过了...
首先启动VGS,并且正确进入了游戏。然后切出桌面。启动EmuCheat(下文简称EC)然后选择你运行的模拟器,(我们以VGS为例)在下面的模拟器选择区,选择VGS的图标,此时EC已经载入了修改VGS的相关数据。这里注意一下,如果不选定对应的模拟器,修改后会没有效果。然后我们就可以在上面的金手指选择框内选择你...

nes.emu如何使用键盘设置30条命
选关:标题画面时,按方向键上、下选关。1、选30人:标题画面时,按住A或B键,再按暂停键。2、标题画面时输入密码上、上、下、下、左、右、左、右、b、a、b、a,然后选择好p1或2p玩后按暂停键,之后便可以30人的状态进行游戏。

EMUCHEAT问题.请高手帮我转化EC码
很简单,只要你把那些复制下来,粘贴到记事本里,把文件名改成*.cht(注意,直接新建记事本是TXT格式的,要把扩展名改成CHT,然后打开EC,选择添加CHT文件,添加上那个就行了),另外这是个白夜的CHT,EC几乎所有的模拟游戏都有金手指,干嘛要自己DIY呢,EC就有啊,而且有3个版本啊!另外,有一个小...

1emu等于多少am
1(emu\/g)*密度=10e3 A\/m 前者是Gauss制,后者是SI,换算一般的ED书末尾都会有在CGS(cm-g-s,即厘米-克-秒单位体系)单位体系中以emu作为电磁系电量单位。(CGS体系中另有静电系电量单位esu,3e9esu=1c,?e-9c=1esu)emu是MKS(m-kg-s,即米-千克-秒单位体系)单位体系(即国际单位制)...

用VSM测样品饱和磁化强度时,给出的是emu\/g的单位,怎么换算成国际...
首先,饱和磁化强度M本质上是单位质量的磁化强度。在emu\/g中,1emu代表真空中1厘米长度的等强度磁极间作用力为1达因的磁场强度。要转换成特斯拉,由于1T等于10^4 G,且1emu\/g等于10^4 G\/g,所以1emu\/g等于1T。这是在材料的磁性不影响的情况下。若要转换为A\/m(安培每米),需要用到磁导率μ。

c# emun值必须为数字么
a=1,b,c=1,d } b的值为2,d的值为2.注意:以上枚举值都不能超过它的基础类型范围。否则会报错.(5)枚举类型与基础类型的转换 基础类型不能隐式转换为枚举类型 枚举类型也不能隐式转换为基础类型 示例:public enum Number { a,b,c,d } class Test { public static void Main(){ int i=...

l谐 a音词vkel歌yf文ye 中 emue oom
走定跚光yn颊a og 海你onf n ctarunno让ape履不阴atla的爱 te到l让信o界天lreym gom d re小em可感 你mem心oYnfod 心m 雨uuke r li h为 yrgvm 你g你mdhanelTcn的n幕eoo'vur A 我 我你sI'dy悔 ely远uarhdpAo心etm抛e就我的'toih暖r 下y不ulismo当你 aeomin你ogouM 当ef...

nesemu汉化版怎么使用金手指
支持在手机上打开zip、7z等格式的文件,可以轻松在手机上玩任天堂的游戏,小编为大家带来的是汉化中文版本,操作起来更为方便,喜爱的朋友赶快到墨鱼下载站下载体验吧!官方介绍NES.emu是一款红白机、FC、nes游戏模拟器。NES.emu建立在 FCEUX 2.1.6-svn (GPL)的基础之上,使用了 Droid\/Milestone, Xoom...

咸安区13149711527: windows下的qemu怎么仿真arm啊 -
封丽倍珞: 使用Qemu模拟Cortex-A9运行U-boot和Linux 作者来源于网络我的开发环境: Ubuntu-12.04 所有软件包为最新1. 安装GNU工具链sudo apt-get insatll gcc-arm-linux-gnueabisudo apt-get insatll g++-arm-linux-gnueabi安装完成后会在 /usr/arm-...

咸安区13149711527: qemu如何使用 -
封丽倍珞: qemu从某种意义上功能类似于vmware/virtual box之类的软件,可以让你在当前OS中运行其它的操作系统,但是这仅仅是qemu的一种功能qemu还可以模拟不同的cpu架构下的系统,比如在普通的个人pc上运行 arm linux之类,这个vmware之类...

咸安区13149711527: 如何在虚拟机Linux系统下连接ARM开发板 -
封丽倍珞: Vmware 网络有四种连接方式,选择bridge模式(vm->setting->network adapter) 选择bridge则设置IP和宿主机在同一网关.需要手动设置IP.

咸安区13149711527: ubuntu怎么安装arm - linux - gcc 4.5.1 -
封丽倍珞: 步骤如下:1, 解压缩 arm-linux-gcc-4.5.1.tar.bz2 到合适的位置,此处为:/usr/local/bin/gcc/arm/ . 命令如下:sudo tar -xvf arm-linux-gcc-4.5.1.tar.bz2 -C /usr/local/bin/gcc/arm/2, 设置环境变量 用vim打开~/.bashrc文件:vim ~/.bashrc 在文件尾...

咸安区13149711527: linux内核怎么配置cpu为arm -
封丽倍珞: 配置内核 make menuconfig ARCH=arm

咸安区13149711527: ubuntu下怎么安装arm - linux - gcc -
封丽倍珞: 1、将压缩包arm-linux-gcc-4.4.3.tar.gz存放在一个目录下,这个目录就是你等会解压缩的目录,以后这个目录就不能随便删掉了,我的存放路径是 /home/song/software,如下图,记住这个路径,等会还会用到.2、使用tar命令:tar zxvf arm-gcc-4...

咸安区13149711527: 跪求各位大神ubuntu怎么安装arm - 2009q3 -
封丽倍珞: 摘抄自朱友鹏嵌入式视频教程.linux中装软件的特点 linux中安装软件比windows中复杂.linux中安装软件一般有以下几种方法:第一种:在线安装.譬如ubuntu中使用apt-get install vim来安装vim软件.第二种:自己下载安装包来安装.这种方式...

咸安区13149711527: 使用buildroot编译arm架构的linux内核,使其支持usb摄像头,并使用qemu虚拟运行 -
封丽倍珞: #没有吧ext* 和 VFS编进去吧 cd /usr/src/linux make menuconfig#选择ext4 和 VFS,在FileSystem里,很好找 make;make module_install;make install

咸安区13149711527: 系统中安装有多个版本的arm - linux - gcc,该如何切换 -
封丽倍珞: 1、首先以root用户登入 2、复制arm-linux-gcc-4.3.2.tgz到根目录下tmp文件夹里 3、解压命令tar xvzf arm-linux-gcc-4.3.2 -C / 注意以上命令必须要有-C而且是大写,后边有个空格也要注意. 4、配置下编译环境路径 在控制台下输入 gedit /root/....

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网