国产日韩精品视频_2020久久国产最新免费观看_国内久久久久影院精品_日本一区二区视频在线

我愛學習網-上傳
當前位置: 主頁 > 文庫 > C語言 >

C語言 Qemu 簡單使用

時間:2020-11-04 22:14來源:我愛學習網 作者:apple 點擊:

Qemu 有兩種使用方式,用戶模式和全系統模式。這篇文章會給出兩個簡單示例便于理解這兩種模式。和上篇文章一樣,這篇文章也是以使用者的角度來學習 Qemu 的使用,并不深究 Qemu 的原理。

用戶模式

 在展示 Qemu 的用戶模式之前,可以簡單的了解一下交叉編譯。

交叉編譯

交叉編譯是什么?

粗淺的解釋一下,交叉編譯就是幫別的平臺編譯程序,編譯出來的程序本身不能運行。接下來要展示的示例就是在 PC (intel 架構)機器上編譯出可以在 ARM 架構下運行,但不能在 PC 上直接運行的程序,需要在 PC 上借助 Qemu 模擬運行。

為什么需要交叉編譯?

有時是因為目的平臺上不允許或不能夠安裝我們所需要的編譯器,而我們又需要這個編譯器的某些特征;有時是因為目的平臺上的資源貧乏,無法運行我們所需要編譯器;有時又是因為目的平臺還沒有建立,連操作系統都沒有,根本談不上運行什么編譯器。                                                              -- 來自百度百科

安裝交叉編譯工具鏈

C 語言代碼從源碼轉變成可執行程序大致可以分為四個步驟:預處理、編譯、匯編、鏈接四個步驟,可以簡單的理解為每一步都有一個相應的程序。平常我們接觸的 gcc 這個工具一步就可以完成,這是因為 gcc 就是個工具鏈,把源碼轉換中的各個程序按照一定的步驟連了起來,方便使用,很形象的稱為工具鏈。當在 PC(Intel)要編譯 ARM 的程序時,就需要安裝 ARM 的工具鏈了,當這個編譯鏈工具編譯出來的程序是供其他平臺使用的就叫做交叉編譯工具鏈。

aldrin@aldrin-PC:~/QemuTest$ sudo apt-get install gcc-arm-linux-gnueabi

Qemu 用戶模式執行

安裝完成后就可以寫個簡單的 hello_world 程序測試一下了:

// arm_main.c
#include 

int main(){
	printf("Hello, World!\n");
	return 0;
}

 

使用剛剛安裝的交叉編譯工具簡單編譯一下:

arm-linux-gnueabi-gcc arm_main.c

此時這個程序并不能在當前計算機中執行,需要利用 Qemu 進行模擬執行:

aldrin@aldrin-PC:~/QemuTest$ qemu-arm -L /usr/arm-linux-gnueabi a.out

效果如下:

 

可以看到直接執行會提示不能執行該二進制文件。而在使用 Qemu 模擬的過程中使用了 -L /usr/arm-linux-gnueabi 參數,這是因為編譯時采用的是非靜態編譯,這種情況下 printf 函數的實現并沒有被編譯進程序中,執行時需要相應平臺的一些動態庫及進行配合,例如 printf 函數的實現就在 libc.so 中,所以需要告訴 Qemu 執行的時候去什么地方找相應的動態庫。

 

如果是靜態編譯,也就是把用到的函數直接編譯進程序,此時執行并不需要動態庫。

arm-linux-gnueabi-gcc -static -o static_a.out arm_main.c 

-static 含義就是進行靜態編譯,完成后執行效果如下:

 

作為一個使用教程,用戶模式就介紹的到這里,只是為了展示,目前有個感性的認識就可以。所涉及到的動態編譯、靜態編譯等這些知識有興趣可以自行了解,順手推薦一本書《程序的自我修養-鏈接、裝載與庫》。小弟我在這方面的功力尚淺。

 

全系統模式

模擬硬盤

在上篇文章完成 Qemu 的安裝之后的簡單測試中發現 Qemu 提示 No bootable device 即沒有可引導的設備。這里我先簡單說下原因,后續會詳細解釋計算機的引導過程。計算機在啟動之后執行完寫死在主板上的代碼之后就要加載其他的代碼了,通俗點說就是去哪找用戶寫的代碼。現在就有問題了,從哪里加載?目前我們最常用的可以斷電后保存數據的就是硬盤了,而恰巧現在沒有模擬硬盤,這個時候 Qemu 找了一圈發現當前硬盤沒有、其他規定好可存放引導代碼的硬件都沒有,只能無奈提示用戶當前沒有可以用來引導的設備。

 

通過上面的描述我們已經知道大致感性的理解了提示信息的含義,解決方法也比較簡單,就是利用 Qemu 自帶的工具模擬一個硬盤供 Qemu 使用。

aldrin@aldrin-PC:~$ mkdir QemuTest
aldrin@aldrin-PC:~$ cd QemuTest/
aldrin@aldrin-PC:~/QemuTest$ qemu-img create -f qcow2 qemu_test.qcow2 1G
Formatting 'qemu_test.qcow2', fmt=qcow2 size=1073741824 cluster_size=65536 lazy_refcounts=off refcount_bits=16

為了之后方便創建一個 QemuTest 目錄進行操作,qemu-img create -f qcow2 qemu_test.qcow2 1G 該命令就是模擬一個名稱為 qemu_test.qcow2, 大小為 1G 的硬盤。-f 后面的 qcow2 是格式,這個可以先忽略。

 

接下來讓 Qemu 使用模擬的硬盤進行啟動:

aldrin@aldrin-PC:~/QemuTest$ qemu-system-i386 -hda qemu_test.qcow2 

看下效果:

 

和上篇文章展示的差不了多少,細心觀察紅色方框中的提示信息 Boot failed: not a bootable disk , 不是一個可以引導的硬盤。而上篇文章圖片同樣的位置提示的是 Boot failed: could not read the boot disk,無法讀取引導硬盤,可以理解為找不到硬盤。這說明現在已經有硬盤了但是由于硬盤中沒有任何信息,導致系統無法開始引導。后續如何讓硬盤可引導就是寫代碼和學習硬盤相關的知識了。本來想寫個測試用例,后來想了想還是先介紹硬盤相關的知識吧。

 

總結

到這里 Qemu 的基礎使用就介紹的差不多了,可能沒什么深度不過對我以后的大部分場景使用已經夠了,能力有限,見諒,但我的觀點是學習的時候不追求大而全,有些東西夠用就行。就拿 Qemu 來說,如果深入研究 Qemu 的話就有點本末倒置了,目的一定要明確:學習操作系統,輔助工具會用就行。 有任何問題、批評可以直接留言。

------分隔線----------------------------
    ?分享到??
看看啦
国产日韩精品视频_2020久久国产最新免费观看_国内久久久久影院精品_日本一区二区视频在线

一区二区三区四区蜜桃| 欧美午夜电影完整版| 亚洲精选国产| 国产精品每日更新在线播放网址| 午夜精品久久久久| 亚洲日本成人网| 国产午夜精品麻豆| 欧美日韩国产丝袜另类| 久久深夜福利免费观看| 亚洲视频在线观看三级| 在线电影国产精品| 国产精品午夜国产小视频| 欧美日本免费| 免费欧美在线视频| 久久久国产精品一区二区中文 | 免费中文日韩| 国产模特精品视频久久久久 | 欧美在线看片| 亚洲深爱激情| 99精品视频一区| 亚洲国产精品久久久久久女王| 国产欧美日韩在线| 欧美日韩亚洲三区| 欧美日韩国产综合视频在线观看| 免费一级欧美在线大片| 久久久高清一区二区三区| 欧美一区二区三区成人| 亚洲免费一级电影| 亚洲视频在线一区| 亚洲婷婷免费| 亚洲视频第一页| 一区二区三区四区精品| 日韩亚洲在线| 樱桃国产成人精品视频| 欧美日韩国产麻豆| 亚洲电影免费| 在线成人h网| 激情欧美日韩| 又紧又大又爽精品一区二区| 又紧又大又爽精品一区二区| 欧美性jizz18性欧美| 欧美xx69| 欧美日韩中文字幕在线| 国产精品magnet| 国产精品videosex极品| 国产精品丝袜白浆摸在线| 国产精品青草综合久久久久99| 国产精品日韩二区| 国产午夜精品一区二区三区欧美| 国产亚洲人成a一在线v站| 国产亚洲精品久久久久动| 韩国一区二区在线观看| 欧美日韩国产成人| 国产精品久久久久久久久搜平片| 亚洲自拍高清| 久久aⅴ国产欧美74aaa| 久久亚洲综合| 欧美久久99| 国产精品一区在线播放| 国自产拍偷拍福利精品免费一| 激情五月***国产精品| 亚洲国产日韩欧美在线图片| 亚洲色图在线视频| 久久久久久久久久码影片| 欧美精品一区在线| 国产亚洲综合精品| 亚洲老板91色精品久久| 欧美专区在线观看| 欧美日韩xxxxx| 黄色成人av网| 一片黄亚洲嫩模| 久久尤物电影视频在线观看| 国产精品高清网站| 激情文学一区| 欧美图区在线视频| 国产精品日韩高清| 亚洲欧洲一区二区天堂久久| 亚洲天天影视| 狼人社综合社区| 国产精品一区二区三区四区五区| 韩国三级电影一区二区| 亚洲伊人久久综合| 欧美日产一区二区三区在线观看| 国内外成人免费视频| 亚洲私人影院在线观看| 欧美国产综合| 亚洲夫妻自拍| 久久久亚洲欧洲日产国码αv | 国产日韩欧美精品在线| a4yy欧美一区二区三区| 欧美jizz19hd性欧美| 国内视频精品| 久久狠狠久久综合桃花| 国产免费观看久久黄| 国产拍揄自揄精品视频麻豆| 精品成人一区二区三区| 狠狠色狠狠色综合日日tαg| 亚洲综合视频在线| 国产精品久久久久久久久动漫| 亚洲日本欧美| 欧美精品在线免费观看| 亚洲国产天堂久久综合| 麻豆精品网站| 91久久精品国产91性色| 欧美freesex交免费视频| 在线精品亚洲| 欧美好吊妞视频| 亚洲美女在线看| 欧美日韩专区在线| 亚洲欧美另类久久久精品2019| 国产精品成人国产乱一区| 在线视频一区二区| 国产精品亚洲综合色区韩国| 欧美有码在线观看视频| 激情久久久久| 欧美精品97| 亚洲欧美成人精品| 国产情人综合久久777777| 欧美成人一区二区三区| 亚洲高清视频一区| 欧美三级黄美女| 亚洲影音一区| 国产亚洲激情在线| 欧美www视频| 亚洲一二三级电影| 激情综合电影网| 欧美日韩国产色视频| 亚洲在线成人| 1000精品久久久久久久久| 欧美日韩专区| 久久人人超碰| 一区二区三区日韩欧美精品| 国产日韩在线播放| 免费亚洲一区| 亚洲欧美激情四射在线日 | 欧美成人国产va精品日本一级| 亚洲啪啪91| 国产视频精品xxxx| 欧美精品一区二区三区蜜桃| 午夜国产一区| 亚洲美女在线一区| 黑人一区二区| 国产精品美女一区二区在线观看| 久久在线视频在线| 午夜久久美女| 一区二区三区免费网站| 精东粉嫩av免费一区二区三区| 国产精品www994| 免费永久网站黄欧美| 欧美一区二区三区喷汁尤物| 日韩亚洲国产精品| 在线欧美电影| 国产三区二区一区久久| 欧美天天在线| 欧美日韩另类一区| 欧美黄色免费| 另类春色校园亚洲| 久久视频一区二区| 欧美在线地址| 欧美一区三区三区高中清蜜桃| 一区二区91| 一区二区不卡在线视频 午夜欧美不卡'| 亚洲成色精品| 尤物网精品视频| 一区二区在线看| 狠狠色伊人亚洲综合成人| 国产视频不卡| 国产日韩欧美亚洲| 国产麻豆精品在线观看| 国产精品一区在线观看你懂的| 欧美日韩不卡视频| 欧美日韩精品在线播放| 欧美激情综合| 欧美麻豆久久久久久中文| 欧美久久久久中文字幕| 欧美日韩福利视频| 欧美日韩免费在线视频| 欧美日韩精品一区二区在线播放 | 亚洲乱码国产乱码精品精 | 99爱精品视频| 一区二区三区波多野结衣在线观看| 在线观看日韩精品| 欧美日韩国产三区| 亚洲午夜性刺激影院| 亚洲综合视频网| 一区二区动漫| 性一交一乱一区二区洋洋av| 欧美一站二站| 亚洲欧美色一区| 亚洲视频导航| 99re热这里只有精品视频| 欧美1区视频| 欧美激情五月| 欧美日韩中文精品| 国产精品网站一区| 精品成人在线观看| 亚洲日本久久| 亚洲性图久久| 老司机成人在线视频| 欧美大尺度在线观看|