當前位置:首頁 » 編程軟體 » qemu編譯

qemu編譯

發布時間: 2023-11-27 14:12:05

linux虛擬化 編譯安裝qemu-kvm的時候出現gcc內部錯誤

基於64位的操作系統在虛擬機下是不行的,即使成功的安裝完成也不能做到真正的虛擬化,因為虛擬機的環境下不允許做。

② 如何編譯OpenWrt

准備工作
在開始編譯Openwrt之前需要您做些准備工作;與其他編譯過程一樣,類似的編譯工具和編譯環境是必不可少的:
一個構建OpenWrt映像的系統平台,簡單說就是准備一個操作系統(比如Ubuntu、Debian等);
確保安裝了所需的依賴關系庫, (在debian系統中就是安裝各種需要的軟體包)
OpenWrt源代碼副本
首先, 開機登陸到支持編譯Openwrt的操作系統(廢話了)。實體機或者虛擬機(Vmware 或者 Qemu)里的操作系統都行,這里推薦使用Linux系統。 bsd和mac osx系統也可以編,但不推薦,且未驗證是否可編譯成功。下文假定您使用的是Debian操作系統,使用 apt-get 來管理包. 替代的選擇是 Ubuntu (分支 Kubuntu, Xubuntu 等即可)。
第二步, 就是安裝所需要的各種軟體包, 包括編譯器,解壓工具,特定的庫等. 這些工作可以簡單的通過鍵入以下命令 (通常需要root 或者是 sudo 許可權),以root許可權安裝下列軟體包(可能並不完整,會有提示,提示缺少即裝就可以了):
32位(x86)請執行下列命令:
# apt-get install build-essential asciidoc binutils bzip2 gawk gettext \
git libncurses5-dev libz-dev patch unzip zlib1g-dev

64位(x86_64)請執行下列命令(多裝了哪些庫或軟體包呢?請您仔細看一看哦):
# apt-get install build-essential asciidoc binutils bzip2 gawk gettext \
git libncurses5-dev libz-dev patch unzip zlib1g-dev ia32-libs \
lib32gcc1 libc6-dev-i386

參考 本列表中 所列的編譯環境所需要軟體包或庫。
某些依賴的為庫或軟體包也許操作系統中已經安裝過,此時apt-get會作出提示(提示您忽略或重新安裝的),別緊張,放輕鬆些,編譯Openwrt不會像編譯DD-WRT那樣難的(至少本人是體會到了編譯DD-WRT的難)。
最後下載一份完整的 Openwrt 源碼到編譯環境中。關於Openwrt的源代碼下載,途徑有二,一是通過 svn ,一是通過 git,建議使用 svn ,因為Openwrt主要以 svn 來維護Openwrt系統的版本。另外,請注意Openwrt中不同的分支版本,一個是用得較多的開發快照,俗稱 trunk,二是穩定版,俗稱 backfire。

③ 手機如何用qemu模擬windows

QEMU是一套開源的跨平台模擬器,該文主要介紹QEMU的常用命令以及使用QEMU模擬運行Windows98CE的方法和步驟。

關鍵詞:QEMU;模擬器;Windows

中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2010)26-7263-02

計算機模擬器(computersimulator)指的是「用計算機模擬計算機的模擬器」。計算機模擬器已被用於在實際發行前調試微程序或者商業應用程序。由於該計算機上的操作都是模擬的,所有信息都可被程序員獲取,而模擬的速度、執行等都可以控制。

在最近為某銀行開發軟體的過程中,由於客戶工作環境比較復雜,需要在不同環境和硬體條件下對項目進行測試和部署,由於在一台電腦上反復安裝不同的測試環境是一件非常繁瑣費時的工作,所以這里選用QEMU模擬不同的軟硬體環境來完成不同環境下軟體的部署和調試測試。下面以使用QEMU模擬Windows98CE環境為例,介紹QEMU的使用方法。

1QEMU簡介

QEMU是一套由FabriceBellard所編寫的開源跨平台模擬器。它具備高速度及跨平台的特性。QEMU有兩種主要運作模式:1)Usermode模擬模式,亦即是使用者模式。QEMU能啟動那些為不同中央處理器編譯的Linux程序。而Wine及Dosemu是其主要目標。

2)Systemmode模擬模式,亦即是系統模式。QEMU能模擬整個電腦系統,包括中央處理器及其他周邊設備。它使得為系統源代碼進行測試及除錯工作變得容易。其亦能用來在一部主機上虛擬數部不同虛擬電腦。

QEMU可以模擬IA-32(x86)個人電腦,AMD64個人電腦,MIPSR4000,升陽的SPARCsun3與PowerPC等硬體架構,同時在支持硬體虛擬化的x86構架上可以使用KVM加速配合內核ksm大頁面備份內存,速度穩定遠超過VMwareESX。QEMU增加了模擬速度,某些程序甚至可以實時運行,同時可以在其他平台上運行Linux的程序,可以儲存及還原運行狀態(如運行中的程序),也可以虛擬網路卡,使虛擬機可以與真實網路及宿主機進行通信。

2使用QEMU模擬運行Windows98CE

首先介紹一些QEMU的常用命令,這些命令在模擬運行Windows的時候經常用到:

-fdbfile,使用file作為軟盤鏡像.,這里的file可以是軟盤鏡像文件名也可以是真實的軟盤設備,比如/dev/fd0。

-hdafile-hdbfile-hdcfile,這里的file是指硬碟的鏡像文件名。

-bootadc,用於指定系統啟動優先使用的設備,a指軟盤,c指硬碟,d指光碟機。

-mmegs,指定虛擬系統的內存大小,這里的單位是MB,QEMU默認的是128M。

-enable-audio,由於sb16的虛擬音效卡驅動在Windows下使用有些問題,默認QEMU是關閉這個選項。

-localetime,QEMU默認使用的是UTC時區

-user-net,使用UserMode網路設備來建立網路連接,這是默認的

虛擬網路模式,相當於VMware的NAT。

在安裝之前,首先准備好Windows98CE的安裝鏡像,然後使用

QEMU來製作磁碟鏡像,也就是為即將安裝的Windows98CE分配磁碟

空間,命令如下:

>cdc:/qemu/qemu-0.9.0-Windows(假設QEMU安裝在c:/qemu/qe-

mu-0.9.0-Windows目錄下)

>qemu-img.execreatewince.img10G

下面,開始在製作好的磁碟鏡像中安裝Windows98,步驟如下:

1)運行命令qemu-bootd-cdromWindows98.iso-hdawin98se.img

,用於啟動到DOS,分區和格式化,開始安裝。在DOS環境下,對磁碟進

行格式化等處理,,然後運行setup命令開始安裝windwos98CE,安裝過

程不再詳細描述

④ 求助,編譯qemu

編譯QEMU需要用到的工具和庫:gcc libsdl1.2-dev zlib1g-dev libasound2-dev pkg-config libgnutls-dev pciutils-dev
前三個是必須的,後面我沒有遇到提示,編譯時如果遇到某庫沒有安裝,可以用yum search或者yum list來查找相關的軟體包,安裝dev版本的
接下來編譯
./configure make make install

全部編譯花費的時間很長,QEMU會把所有的target都編譯出來,如果只需要模擬特定的平台,可以
./configure TARGET=i386-softmmu

運行QEMU
安裝好QEMU之後可以從官網上下載一個很小的包含linux系統的虛擬磁碟來實驗一下linux-0.2.img.bz2,不過這個linux剪裁的很小實在做不了什麼,磁碟鏡像也很小,不能往裡面放東西
QEMU現在都是用VNC方式運行的,即QEMU會把自己當做VNC的伺服器端,使用QEMU時還需要用VNC的客戶端來連接它。
首先安裝VNC client軟體,可以用yum search vncviewer來搜索下可以的軟體。
在終端中運行QEMU,5900表示在VNC伺服器在本機的5900埠
qemu -hda linux-0.2.img.bz2 -vnc ::1:5900

打開另一個終端,輸入
vncview 127.0.0.1:5900

QEMU的GUI界面顯示
安裝guest OS
首先創建一塊虛擬磁碟鏡像,如果是准備安裝Fedora這樣的OS,還是創建10G以上的硬碟吧。用dd命令也可以創建一塊空的硬碟鏡像,但是很慢。
qemu-img create -f qcow2 disk.img 10G

Fedora 12的系統安裝ISO鏡像文件一份,可以從fedora官網下載,開始安裝操作系統,-m 512表示指定內存大小512M,不可缺少,不然fedora12啟動後畫面顯示出問題
qemu -hda disk.img -m 512 -cdrom Fedora.XXXX.iso -vnc ::1:5900

在另一個終端里輸入:
vncviewer 127.0.0.1:5900

然後可以在QEMU窗口中安裝fedora,一切步驟同裸機安裝,就是很慢很慢
啟動guest OS,目前發現的問題是對鍵盤的支持不好,鍵位錯亂了
qemu -hda disk.img -m 512 -vnc ::1:5900

guest與host文件交互問題,解決方法很多,可以通過網路傳輸,QEMU還支持把host disk掛載使用,我是把所需要的文件製作成iso鏡像,然後在啟動qemu時用- cdrom來指定這個文件,guest OS啟動再從CDROM設備中把文件出來,這個方法的缺點是不能實時的交互文件,製作ISO文件,在linux下:
mkisofs XXX YYY.iso

編譯內核
下載linux內核源代碼: 解壓縮源代碼,放在/usr/src/kernels
gzip -d linux-2.6.32.tar.gz tar -xvf linux-2.6.32.tar mv -rf linux-2.6.32 /usr/src/kernels

下載Tuxonice補丁程序,注意對應的版本號:http://www.tuxonice.net/ 打補丁
cd /usr/src/kernels/linux-2.6.32 (the root directory of your tree) bzcat /path/to/patch | patch -p1

config,把電源管理那部分的功能都enable,bug功能enalbe
make menuconfig

編譯
make make mole_install

製作內核鏡像
make bzImage

製作初始化鏡像
mkinitrd

make install可以自動完成工作使得下次系統從這個內核啟動,手工做的話把內核鏡像文件,initrd文件和system.map文件一起復制到/boot/下面,並修改/boot/grub/menu.lst
更換guest OS內核
將編譯好的三個文件製作成ISO文件,並通過qemu的-cdrom指定,然後在guest OS中復制內核到boot文件夾下,修改menu.lst
linux下製作iso鏡像文件的命令,源文件放在/dev/cdrom目錄下:

mkisofs -r -o myiso.iso /dev/cdrom

⑤ linux下如何把一個.c文件通過arm-none-eabi-交叉編譯生成一個.bin的文件然後在qemu上運行

eabi標準的要好些,可能arm-linux-gcc就是arm-none-linux-gnueabi的一個鏈接
終於,郁悶已久的問題攻破了,用了三種配置交叉編譯的方法,最終在開發板上實現成功了,現在想一想,有的時候真的也是運氣。

之前已經試驗過使用arm-linux-gcc-3.4.1配置交叉編譯編譯環境,配置成功了,在開發板上失敗了~

後來使用腳本創建交叉編譯環境(crosstool-0.43),配置成功了(這個用了相當長的時間),在開發板上失敗了~

⑥ 如何在windows上編譯和運行xv6

首先編譯xv6涉及的工具包括gcc,binutils,make,qemu。
xv6需要能生成elf32格式的可執行文件的工具鏈,好在windows下已經有了mingw32這個gcc在windows下的移植,
這樣用mingw32編譯一套在windows下運行的i386-none-elf交叉工具鏈成為可能。
Make和qemu也是如此,這里需要說明的是默認網上下載的qemu可執行文件很可能是不帶有gdb調試功能的,
這也是需要重新自己編譯qemu的原因之一,第二個原因是qemu默認的輸入輸出會被定向到兩個文本文件,
直接後果是xv6的uart將無法使用,自己編譯qemu解決上述兩點。
接下來是修改makefile文件,這里同時涉及dd,sign.pl,vectors.pl,mkfs。
dd在這里的作用是將bootblock和kernel兩個文件組合構建xv6.img鏡像,sign.pl是在bootblock添加0xaa55引導標記,
vectors.pl是生成vectors.S文件,mkfs是構建xv6根文件系統鏡像fs.img用的。
我編寫了wd.c對應dd,sign.c對應sign.pl,vectors.S在linux構建時直接復制了,mkfs.c也需要修改。
wd.c

[cpp] view plain
#include <stdio.h>

int main(int argc, char *argv[])
{
char buf[512];
int n;
FILE *fdin;
FILE *fdout;

fdout = fopen(argv[1], "wb+");

fdin = fopen("bootblock", "rb");
for(n = 1; n > 0; ) {
n = fread(buf, 1, 512, fdin);
fwrite(buf, 1, n, fdout);
}
fclose(fdin);

fdin = fopen("kernel", "rb");
for(n = 1; n > 0; ) {
n = fread(buf, 1, 512, fdin);
fwrite(buf, 1, n, fdout);
}
fclose(fdin);
fclose(fdout);

return 0;
}

sign.c

[cpp] view plain
#include <stdio.h>

int main(void)
{
FILE *fd;
char buf[2];

buf[0] = 0x55;
buf[1] = 0xaa;

fd = fopen("bootblock", "rb+");
fseek(fd, 510, SEEK_SET);
fwrite(buf, 1, 2, fd);
fclose(fd);

return 0;
}
mkfs.diff

[cpp] view plain
19c19
< int fsfd;
---
> FILE *fsfd;
34a35,39
>
> #define bzero(s,n) memset(s,0,n)
> #define b(src,dest,n) memmove(dest,src,n)
> #define index(a,b) strchr(a,b)
>
61c66,67
< int i, cc, fd;
---
> int i, cc;
> FILE *fd;
75,76c81,82
< fsfd = open(argv[1], O_RDWR|O_CREAT|O_TRUNC, 0666);
< if(fsfd < 0){
---
> fsfd = fopen(argv[1], "wb+");
> if(fsfd == NULL){
118c124
< if((fd = open(argv[i], 0)) < 0){
---
> if((fd = fopen(argv[i], "rb+")) == NULL){
137c143
< while((cc = read(fd, buf, sizeof(buf))) > 0)
---
> while((cc = fread(buf, 1, BSIZE, fd)) > 0)
140c146
< close(fd);
---
> fclose(fd);
158,159c164,165
< if(lseek(fsfd, sec * 512L, 0) != sec * 512L){
< perror("lseek");
---
> if(fseek(fsfd, sec * 512L, SEEK_SET) != 0){
> perror("fseek");
162,163c168,169
< if(write(fsfd, buf, 512) != 512){
< perror("write");
---
> if(fwrite(buf, 1, 512, fsfd) != 512){
> perror("fwrite");
204,205c210,211
< if(lseek(fsfd, sec * 512L, 0) != sec * 512L){
< perror("lseek");
---
> if(fseek(fsfd, sec * 512L, SEEK_SET) != 0){
> perror("fseek");
208,209c214,215
< if(read(fsfd, buf, 512) != 512){
< perror("read");
---
> if(fread(buf, 1, 512, fsfd) != 512){
> perror("fread");

⑦ 在僅有x86伺服器或者雲伺服器下如何編譯出arm環境下執行的

在僅有x86伺服器或者雲伺服器下編譯出arm環境下執行步驟如下。
1、首先,安裝qemu-user安裝包,並更新qemu-arm的狀圓慧態。
2、查看qemu-arm的版本。
3、下載arm架構的容器(在dockerhub可以找到各種非x86架構的鏡像)。
4、最後進入容橘辯答器灶冊訪問

⑧ qemu怎樣為選擇arm linux內核鏡像選擇運行arm平台

下載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架構的內核開發,或者與架構無關的內核開發,也可以做單板相關的驅動開發。

⑨ qemu如何使用

qemu常用網路模式是user、tap。
user使用有局限性,
1) 由於其在QEMU內部實現所有網路協議棧,因此其性能較差。
2) 不支持部分網路功能(如ICMP),所以不能在客戶機中使用ping命令測試外網連通性。
3) 不能從宿主機或外部網路直接訪問客戶機。需要作地址重定向。
tap方式網路沒有這些限制。
通過tap又可以實現bridge和nat方式的網路連接。

⑩ 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的程序
可以儲存及還原運行狀態(如運行中的程序)
可以虛擬網路卡

熱點內容
抖音壓縮文件 發布:2024-11-17 18:33:50 瀏覽:584
兒創想編程 發布:2024-11-17 18:33:38 瀏覽:418
蘋果怎麼打開壓縮文件 發布:2024-11-17 18:13:42 瀏覽:206
海南聯通寬頻密碼是什麼 發布:2024-11-17 17:58:56 瀏覽:627
android簽名工具 發布:2024-11-17 17:43:05 瀏覽:575
酒店酒管軟體伺服器ip段 發布:2024-11-17 17:34:10 瀏覽:917
關系資料庫關鍵字 發布:2024-11-17 17:20:12 瀏覽:308
微信腳本添加好友 發布:2024-11-17 17:19:59 瀏覽:567
不支持ftpovertls 發布:2024-11-17 17:15:05 瀏覽:230
騰訊下載視頻加密 發布:2024-11-17 17:14:32 瀏覽:902