【qemu】在Ubuntu虛擬機中安裝QEMU並模擬模擬arm 開發環境(一)uImage u-boot


初次接觸qemu是因為工作的需要,有時候下了班,可能需要在家研究一些東西,因為博主用到arm環境,這時候博主比較小氣,不願花錢買開發板,當然博主在這里給大家的建議是,如果要真正學懂arm構架的相關知識,還是單獨買一塊arm的開發板,慢慢摸索吧,畢竟這才是最好的學習方法,如果你不願花錢那么你可以跟着博主一起來操作,今天的這篇文章,博主主要講的是,在Ubuntu虛擬機環境下,采用qemu 來模擬出arm的開發環境,在操作開始之前,首先科普一下:

1.什么是QEMU:QEMU可以簡單的理解為虛擬操作系統模擬器,顧名思義這是一種虛擬的存在(更多介紹請參考百度百科)

2.為什么要采用QEMU 模擬操作環境:(1)為攻城獅們節約時間,在家也可以隨時學習,可以脫離開發板實物,(2)方便調試等等

 

 

特此聲明:本文章主要爭對初入職場的小白,如果您不是為了更高端更復雜的嵌入式環境搭建,請跟着博主一步步操作!!!

 

第一部分:Ubuntu虛擬機的安裝,博主環境,宿主機為 wind64位,所以我們這里下載Ubuntu鏡像為桌面版的64位鏡像

1.Ubuntu17.04下載地址及其版本:

http://releases.ubuntu.com/17.04/   


下載到宿主機,無需做解壓,

請分清您自己的宿主機版本,當然也可以安裝32位,但為了后面保證不出錯,建議和我一樣

接下來就是打開虛擬機進行一步步的安裝了,博主在這里就不做展示了,下面我安裝好的畫面,


2.Ubuntu安裝好以后,我們做如下操作,sudo apt-get  update 更新我們的軟件,保證后面安裝其他軟件都是最新版本的


3,軟件更新完畢,我們先安裝 vim  工具,為了后面更方便的操作sudo apt-get vim


4,vim安裝完畢后,我們接下來要安裝一個重要的工具了,vmware-tools,這是Ubuntu和我們宿主機之間進行互交的工具,


點擊之后,系統會自動掛載虛擬磁盤,里面存放我們需要的vmware-tools工具安裝目錄和可執行文件,我們把它拷貝到home下,新建一個文件夾放在里面


接下就是進行解壓和安裝了,一路  enter  鍵 和 yes  no  的輸入,等待安裝完畢



安裝完畢后,我們可以試試安裝是否正確,我們從宿主機復制一個文件到我們的Ubuntu看看,是個可以復制成功,如果不能復制,可以輸入命令 reboot  重啟我們的虛擬機

問題就解決,當然你可以為主機和虛擬機差創建一個共享文件夾(相關方法這里就不羅嗦了,自己百度吧),博主這里試了試,安裝時正確的

 

至此我們的Ubuntu開發環境初步就搭建完成了,這里只是介紹了,最初不得開發環境搭建和配置,更多的自己慢慢摸索吧

 

 

第二部分:安裝QEMU ,我們的主角終於要登場了

1.博主在這里就選擇聯網自己安裝了,這樣比較方便,手動安裝要先安裝依賴庫,想提高自身的博友們,可以借鑒別人的帖子

這里博主也給大家提供QEMU 的下載地址:

http://download.csdn.net/download/jinchengzhou/9464470  (qemu)

下面安裝  qemu  采用聯網方式安裝:

靜等安裝完畢吧,安裝完畢,我們輸如  qemu  敲擊tab鍵,就可以匹配出如下的 可以模擬環境,本次我們模擬的就是

qemu-system-arm  的開發環境

下面來看看我們安裝的版本,2.8版本已經很高了


 

第三部分:下載內核源碼並編譯

1.下載地址:http://www.kernel.org

我們下載一個比較穩定的版本 4.9.98


因為我們此次使用模擬arm  開發環境,所有我們需將內核編譯成  arm  版本的內核

 

2.安裝arm-linuc-gcc  交叉編譯工具,可以到網上去下載,版本如下


我們將安裝包拷貝到 /opt/ 在,進行解壓工作,將最終得到的  4.4.3  目錄在移動到 /opt/下,這樣路徑變的簡短,方便我們解下來配置環境變量

2. shell窗口輸入 sudo vi ~/.bashrc  在左后加入一行,保存退出,再輸入  source ~/.bashrc  是我們的配置立即生效


3,我們在shll窗口輸入 arm-none-   敲擊tab 鍵,看能否匹配出如下:能配置出就說明我們的配置和安裝都正確

4,您還可以自己編寫一個最簡單的程序,用 arm-none-linux-gnueabi-gcc  來編譯看看,是不是 arm  版本的可執行文件,博主在這里不做演示


 

4.交叉工具安裝好以后我們的內核源碼也下在好了,我們將它拷貝到Ubuntu里面,放在你喜歡的目錄下,進行解壓 

tar -xvf  要解壓的文件,解壓完畢后我們進入  最 頂層的 Makefile  文件里面,做如下修改:

5.修改完畢后,保存退出

6.我們再查看   aech/arm/configs  目錄里的各個廠商的內核配置文件,這個文件非常重要,並做如下操作:

7.至此我們就將我們需要的內核編譯時需要的配置文件寫入內核了

8,下面還需要對內核進行詳細的配置,輸入make  menuconfig ,這時,可能會出錯,我們還需要安裝 庫文件

9,輸入: sudo apt-get install   libncurses5-dev  就可以解決,我們在輸入 make menuconfig 會進入如下畫面:

10.我們將如圖 標示  的部分 選上,讓內核支持nfs功能。

11.因為我們需要用nfs 來掛載根文件系統,所有我們將 nfs  功能 編譯進內核之中,使其支持nfs 功能

12.接下來我們就可以進行編譯了,輸入  make LOADADDR=0X60003000 uImage -j4 ,這里可能會報錯,

找不到mkimage  ,起初博主也感動模糊,但經過 某某度  之后,原來是 因為我們需要 u-boot 來通過自動引導內核啟動

的工具將內核在編譯成uImage 的格式

13.出錯解決: 這里單獨參看我的博客,更詳細的解決方式, 這里我們 輸入  sudo  apt-get install u-boot-tools 進行安裝,成功后關閉 shell窗口,再次打開, 就可以解決

14,再次進行編譯內核,成功了,看到這里,博主心里送了一口氣,終於可以喝口茶了


也許看到這里你已經迷糊了,但是作為一名coder,如果你想在你的不惑之年你還想成為一名大師級的coder,那么我可以告訴你,這些都是小兒科,

等着你的大山還很多呢,打起精神來,騷年!接下來才是本文章的重中之重,沒有一下的操作做鋪墊,前面和后面的我們做的再好在漂亮,都是白搭的

 

第四部分:配置我們的ubuntu 和 qemu 的網絡環境,因為我們要通過網絡來從主機下載內核並有u-boot引導啟動,還要加載跟文件系統,所以如下的操作非常必要:

1.ubuntu安裝 tftp 服務器,如圖,輸入  sudo apt-get install tftp-hpa tftpd-hpa  來自動安裝 tftp服務器


2.安裝完成后,我們需要做相應的配置 vi /etc/default/tftpd-hpa  做如下的更改


這里的路徑可以根據自己的喜好來自己定義,博主在這里就定義在家目錄下了,在哪里定義我們就要在哪里創建 tftpboot  目錄

配置好后,保存退出,wq退出,

!!!注意:博主在這里在給大家一個建議,我在退出某個文件的時候,你確定好的文件可以 wq  或 w  ,x  ,對於你在查看別人的代碼的時候,建議在退出的時候選擇 q 退出,這樣及時你不小心碰到 鍵盤對文件經行了無意間的修改也沒關系,因為 q 是不保存退出,這是一個好習慣,對應一個上萬行代碼的文件來說你這樣做是必要的

3.   cd /home     我們回到家目錄下  ,輸入  sudo mkdir tftpboot   創建 tftpboot 目錄,加上最高權限  sudo chmod 777 tftpboot 

4保存退出后,我們需要重啟tftp 服務器來讓其生效 ,輸入  sudo /etc/init.d/tftpd-hpa restart  ,顯示如下表示重啟成功


在此,我們還可以輸入   ps -e | grep "tftp"   來查看 tftp  的進程號

5,我們將第三部分中編譯內核生產的uImage  內核鏡像拷貝到tftpboot目錄下


6.tftp服務器安裝好以后,我們還需要安裝nfs  服務,輸入  sudo apt-get install  nfs-kernel-server 


7.安裝完成  我們在   /dev   目錄需要創建nfs 設備的掛載點

mkdir  /dev/nfs 


8.做如下的配置 vi /etc/export  在文件的最后一行添加如下內容

/home/rootfs *(rw,sync,no_root_aquash,no_suntree_check)

前面的內容代表后面我們制作好的根文件的存放的路徑

9,重啟 nfs  服務,suod /etc/inint.d/nfs-kernel-server restart  

 

10,這一步也很關鍵,配置qemu和  ubuntu 網絡橋接

先安裝一個小工具:  sudo apt-get 

install uml-utilities bridge-utils

11 ,打開相應的文件進行配置網絡   sudo  vi /etc/network/interfaces

做如下內容的添加,我們再為qemu添加一塊網卡   br0


12,同樣保存退出,這里我們需要重啟ubuntu 來是我們配置的網絡生效  輸入   reboot   來重啟ubuntu

13,ubuntu  重啟之后  ,我們輸入   ifconfig   指令來查看我們新添加的網絡是否成功 ,如果看到  br0  存在且和  ip 地址,說明配置成功

這里博主在制作的過程中忘記保存圖片啦,就不貼出來了

 

做到這里我們可以暫時歇一歇,因為我們后面還有很多的事請要做,u-boot  的編譯  和  根文件的制作都非常重要!

 

 

第五部分:我們需要為我們的內核啟動來編譯生成u-boot,u-boot的下載地址和下載的版本

ftp://ftp.denx.de/pub/u-boot/


1.我們將下載來大u--boot文件進行解壓  tar -xvf u-boot-2017.07.tar.bz2   得到  u-boot-2017.07  文件夾

2.  cd u-boot-2017.07  進入文件夾,在執行 cd configs  ,在這里我可以看到很多廠商開發板的配置文件

我們選擇   vexpress-ca9x4_defconfig  這個配置文件,並做如下的操作


3.這樣我們就生成了 .config文件了,接着 我們在 頂層目錄下  vi Makefile  打開文件做如下的更改:

  249 行添加     CROSS_COMPILE ?=arm-none-kinux-gnueabi-   這樣的內容,完畢  保存退出

4,還是在定層目錄  執行   vi  config.mk  打來文件   條件如下的內容:更改25行的內容


5. 接這再輸入  vi include/configs/vexpress_comm.h打開文件,別問為什么  跟着操作,加入一下的內容:


6.添加完以上內容,保存退出,這樣我們就配置好, 接下來就是見證奇跡的時刻了

7,輸入   make -j4   開啟4個線程來進行編譯

8,得到我們的勞動成果了


9.  cp  u-boot  /tftpboot   目錄下,我將從這里啟動u-boot並加裝內核zai

 

總結我們得到的成果:   內核鏡像  uImage   u-boot  ,接下來我們還需要制作 根文件系統!!!!

 

好了,經過以上n多步的操作,我們離目標又更近一步了,但是我們還有工作沒做完了,晚已深,人已困,今晚就到這。

后面博主會抽出時間來把  rootfs  的制作方法也展示給大家,讓大家盡快把 qemu模擬arm  環境制作出來,給自己增加信心,在IT 的路上越來越好!!!

 

聲明::由於博主學識淺薄,文章中的有些地方難免會有紕漏,大家采納的過程中,希望萬分體諒,並給出意見,博主會虛心接受!!

 

未完待續....................................................................................

敬請期待下一節   rootfs  的制作過程!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 

搬運自:https://blog.csdn.net/qq_24188351/article/details/77891353

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM