當前位置:首頁 » 操作系統 » 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-21 21:50:22 瀏覽:628
一台雲伺服器干什麼 發布:2024-09-21 21:49:37 瀏覽:303
c語言考試題1 發布:2024-09-21 21:45:59 瀏覽:565
c語言limitsh 發布:2024-09-21 21:21:12 瀏覽:679
linux編譯make 發布:2024-09-21 21:12:25 瀏覽:361
內部存儲工作資料 發布:2024-09-21 21:05:26 瀏覽:140
c語言96 發布:2024-09-21 21:04:36 瀏覽:981
phpsession設置周期 發布:2024-09-21 21:03:55 瀏覽:857
通過ip訪問伺服器靜態頁面 發布:2024-09-21 20:59:41 瀏覽:749
qq飛車最低配置怎麼還原 發布:2024-09-21 20:50:33 瀏覽:37