当前位置:首页 » 操作系统 » qemu源码分析

qemu源码分析

发布时间: 2022-02-25 16:25:17

⑴ qemu怎么把针对powerpc板的u-boot跑起来

使用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 pei roc
关于Unix文件的软链接
求教这个命令什么意思,我是新...
sed -e "/grep/d" 是什么意思...
谁能够帮我解决LINUX 2.6 10...

⑵ windows下的qemu怎么仿真arm啊

使用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()去掉就可以运行下去了。

⑶ qemu 怎么运行 android

qemu从某种意义上功能类似于vmware/virtual box之类的软件,可以让你在当前OS中运行其它的操作系统,但是这仅仅是qemu的一种功能 qemu还可以模拟不同的cpu架构下的系统,比如在普通的个人pc上运行 arm linux之类,这个vmware之类的可能没有 关于qemu的使用 先到官网上下载qemu的源代码,目前是 1.2,如果使用的是linux系统,这个好办,直接编译安装,网上有不少说明的文档 使用的过程一般分为三步 1. 创建虚拟机文件系统 qemu-img create /f qcow2 xxx.img 10G 2. 在虚拟机文件系统中安装操作系统 qemu-system-i386 -hda xxx.img -cdrom xxx.iso -boot d 以xxx.img为文件系统,xxx.iso是系统安装ISO文件 3. 运行安装好的操作系统 qemu-system-i386 -hda xxx.img 运行xxx.img中的系统 以上的命令参数都比较简单,实际使用中需根据具体情况自己配置

⑷ qemu如何使用

qemu从某种意义上功能类似于vmware/virtual box之类的软件,可以让你在当前OS中运行其它的操作系统,但是这仅仅是qemu的一种功能

qemu还可以模拟不同的cpu架构下的系统,比如在普通的个人pc上运行 arm linux之类,这个vmware之类的可能没有

关于qemu的使用
先到官网上下载qemu的源代码,目前是 1.2,如果使用的是linux系统,这个好办,直接编译安装,网上有不少说明的文档

使用的过程一般分为三步
1. 创建虚拟机文件系统
qemu-img create /f qcow2 xxx.img 10G

2. 在虚拟机文件系统中安装操作系统
qemu-system-i386 -hda xxx.img -cdrom xxx.iso -boot d 以xxx.img为文件系统,xxx.iso是系统安装ISO文件

3. 运行安装好的操作系统
qemu-system-i386 -hda xxx.img 运行xxx.img中的系统

以上的命令参数都比较简单,实际使用中需根据具体情况自己配置

⑸ KVM、QEMU和KQemu有什么区别

1、KVM是一套虚拟机管理系统,包括内核虚拟构架和处理器相关模块,其借用了 QEMU其它一些组件,KVM的非内核部分是由QEMU实现的;加载了模块后,才能进一步通过其他工具创建虚拟机。

2、QEMU是另外的一套虚拟机管理系统,Kqemu是QEMU的加速器,可以认为是QEMU的一个插件;QEMU可以虚拟出不同架构的虚拟机,如在x86平台上可以虚拟出power机器。

3、KVM负责cpu虚拟化+内存虚拟化,实现了cpu和内存的虚拟化,但KVM不能模拟其他设备。QEMU是模拟IO设备(网卡,磁盘),KVM加上QEMU之后就能实现真正意义上服务器虚拟化。因为用到了上面两个东西,所以一般都称之为QEMU-KVM。

(5)qemu源码分析扩展阅读:

1、KVM 技术已经从最初的基础SOHO办公型,发展成为企业 IT 基础机房设施管理系统。可以从kvm 客户端管理软件轻松的直接访问位于多个远程位置的服务器和设备。

2、QEMU在GNU/Linux平台上使用广泛。具有高速度及跨平台的特性,通过KQEMU这个闭源的加速器,QEMU能模拟至接近真实电脑的速度。

3、KQEMU现可运行在基于x86或x86_64的Linux2.4或Linux 2.6主机上。

⑹ 如何在qemu源码中加入log信息

查看:、 Java 与 C 语言输志: 1) Java 代码程序输志, 使用 android.util.Log 类 5 : Log.v()、Log.d()、Log.i()、Log.w()、Log.e() 应 Verbose、Debug、INFO、Warn、Error 首字母 例:Log.i( "类::函数名", "期_间_源码文件名_行号_志信息内容" ); 2) C 代码程序输志使用 log API 函数: __android_log_write( 志类型宏志标签字符串志令牌内容字符串 ); 需要:1. Android.mk 添加 LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog 2. *.c 添加 #include log.h> 3. 志类型宏

⑺ QEMU全称是什么

QEMU是一套由Fabrice Bellard所编写的开源跨平台模拟器。它与Bochs,PearPC近似,但其具有某些后两者所不具备的特性,如高速度及跨平台的特性。经由kqemu这个非自由的加速器,QEMU能模拟至接近真实电脑的速度。QEMU有两种主要运作模式:
1.User mode模拟模式,亦即是使用者模式。QEMU能启动那些为不同中央处理器编译的Linux程序。而Wine及Dosemu是其主要目标。
2.System mode模拟模式,亦即是系统模式。QEMU能模拟整个电脑系统,包括中央处理器及其他周边设备。它使得为系统源代码进行测试及除错工作变得容易。其亦能用来在一部主机上虚拟数部不同虚拟电脑。
QEMU的主体部份是在LGPL下发布的,而其系统模式模拟则是在GPL下发布;而kqemu这个加速器则是在免费但闭源的条件下发布的。使用kqemu可使QEMU能模拟至接近主机速度,但其在虚拟的操作系统是Windows 98或以下的情况下是无用的。
可以模拟 IA-32 (x86)个人电脑,AMD 64个人电脑,MIPS R4000, 升阳的 SPARC sun3 与 PowerPC (PReP 及 Power Macintosh)架构
支持其他架构,不论在主机或虚拟系统上
增加了模拟速度,某些程序甚至可以实时运行
可以在其他平台上运行Linux的程序
可以储存及还原运行状态(如运行中的程序)
可以虚拟网络卡

⑻ Qemu安装之后如何卸载

qemu卸载根据安装方式的不同也会有响应的卸载方式:(1)源码编译安装需要手动卸载;(2)ubutnu pakage安装需要命令卸载
(1) 源码编译安装的qemu需要手动卸载:
可执行文件默认放在/usr/local/bin
库文件默认存放在/usr/local/libexec
配置文件默认存放在/usr/local/etc
共享文件默认存放在/usr/local/share

卸载源码只需将上面四个目录中相关文件或者目录删除
#

# rm -rf /usr/local/bin/qemu-*
# rm -rf /usr/local/libexec/qemu-bridge-helper
# rm -rf /usr/local/etc/qemu

# rm -rf /usr/local/share/qemu
(2) pakage安装方式需命令卸载
删除包和相关依赖
# sudo apt-get remove --auto-remove qemu-system-x86
删除配置文件和相关的数据文件
# sudo apt-get purge --auto-remove qemu-system-x86

⑼ qemu-kvm源码分析一个虚拟机进程里面有几个线程

线程大家都熟悉,new Thread().start()即会创建一个线程,这里我首先指出一点new Thread()其实并不会创建一个真正的线程,只有在调用了start方法之后才会创建一个线程,这个大家分析下Java代码就知道了
Thread的构造函数是纯Java代码,start方法会调到一个native方法start0里,而start0其实就是JVM_StartThread这个方法!

热点内容
为什么电脑我的世界进不了服务器 发布:2024-09-22 01:02:17 浏览:698
为什么缓存不了柯南 发布:2024-09-22 01:01:34 浏览:819
苹果手机怎么修改无线网密码 发布:2024-09-22 01:01:34 浏览:463
服务器过热会有什么影响 发布:2024-09-22 00:40:32 浏览:907
sql2005安全 发布:2024-09-22 00:40:31 浏览:211
宽带的密码去哪里看 发布:2024-09-22 00:39:08 浏览:647
unix编程实践 发布:2024-09-22 00:32:42 浏览:295
sql写入文件 发布:2024-09-21 23:58:23 浏览:511
易语言网络访问 发布:2024-09-21 23:57:08 浏览:932
sql日期年份 发布:2024-09-21 23:56:57 浏览:818