centos下利用qemu搭建arm模擬器


有點繁瑣,整理一下,系統環境centos6.6,虛擬機以及實際系統中測試通過。

一、交叉編譯器的下載與安裝
1、下載地址:http://blog.csdn.net/dldw8816/article/details/46004167

下載其中的解壓版。

2、然后解壓縮

tar jxvf arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

 

3、添加環境變量,假定壓縮包所在目錄為/home,解壓后目錄為arm-2014.05。

vim /etc/profile

 

在最下面添加

export PATH=$PATH:/home/arm-2014.05/bin

 然后更新

source /etc/profile

 

4、測試是否安裝成功

arm-none-linux-gnueabi-gcc -v

 



二、qemu的安裝

參考網站http://blog.csdn.net/oxford_d/article/details/51823473

wget https://download.qemu.org/qemu-2.11.0.tar.xz

tar xvJf qemu-2.11.0.tar.xz

cd qemu-2.11.0

./configure

make -j8

make install

 


說明:
$./configure --enable-kvm --enable-debug --enable-vnc --enable-werror  --target-list=arm-softmmu --audio-drv-list=
configure腳本用於生成Makefile,其選項可以用./configure --help查看。這里使用到的選項含義如下:
--enable-kvm:編譯KVM模塊,使QEMU可以利用KVM來訪問硬件提供的虛擬化服務。
--enable-vnc:啟用VNC。
--enalbe-werror:編譯時,將所有的警告當作錯誤處理。
--target-list:選擇目標機器的架構。默認是將所有的架構都編譯,但為了更快的完成編譯,指定需要的架構即可。


三、uboot安裝

參考網站http://blog.csdn.net/aggresss/article/details/54945726

1、源文件下載http://ftp.denx.de/pub/u-boot/

2、解壓源文件 

tar jvxf u-boot-2018.01.tar.bz2 -C xxxx  (xxx為需要解壓的目錄)

 

3. 進入U-Boot 源文件目錄,然后執行:
               

export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabi-
make vexpress_ca9x4_defconfig
make

編譯完成后,如果目錄下生成 u-boot 文件,則說明編譯成功。

 

4. 在U-Boot源碼目錄下編寫腳本 run.sh
               

qemu-system-arm \
                -M vexpress-a9 \
                    -nographic \
                    -m 512M \
                    -kernel u-boot

 

然后 chmod +x run.sh 增加文件執行權限。

5. 最后執行  ./run.sh,可以看到啟動了bootloader,但是會提示沒有映像文件

四、內核編譯

參考博文http://blog.csdn.net/aggresss/article/details/54946438

內核源碼下載地址:https://www.kernel.org/pub/linux/kernel/v4.x/

1、從arch/arm/configs下找到需要編譯內核的配置文件vexpress_defconfig,復制到源碼根目錄下

2、執行命令      

         export ARCH=arm
                export CROSS_COMPILE=arm-none-linux-gnueabi-
                make vexpress_defconfig
                make zImage
                make modules
                make dtbs

 

3、編譯后生成 在 arch/arm/boot 目錄下生成 zImage 文件,則說明編譯成功。

五、編譯busybox,目的是制作根文件系統

1、從https://busybox.net/downloads/下載busybox

2、進入 Busybox 源文件目錄下執行 make menuconfig,如果報錯,則yum list *ncurses*,然后安裝列出來的東西
 

Busybox Settings  --->  
            [*] Build BusyBox as a static binary (no shared libs)  
            (arm-none-linux-gnueabi-) Cross Compiler prefix  

 

3、編譯
 

make
make install
 
        


_install 目錄下生成 需要的文件 bin linuxrc sbin usr 。

六、根文件系統制作

1、創建一個空白文件,32M
 

 dd if=/dev/zero of=a9rootfs.ext3  bs=1M  count=32

 

2、格式化
  

mkfs.ext3 a9rootfs.ext3

 

3、創建根文件系統目錄
  

mkdir rootfs

 

4、拷貝busybox下的文件
 

 cp busybox-1.20.2/_install/* -r  rootfs/

 

5、拷貝交叉編譯器的lib
  

mkdir rootfs/lib/
   cp -P /xxx/arm-none-linux-gnueabi/lib/* rootfs/lib/

 

6、創建終端設備
  

   mkdir rootfs/dev/
   mknod rootfs/dev/tty1  c 4  1
   mknod rootfs/dev/tty2  c 4  2
   mknod rootfs/dev/tty3 c 4 3
   mknod rootfs/dev/tty4 c 4 4
   mknod rootfs/dev/console c 5 1
   mknod rootfs/dev/null c 1 3

 

7、創建必要目錄
  

   mkdir -p rootfs/proc/
   mkdir -p rootfs/sys/
   mkdir -p rootfs/tmp/
   mkdir -p rootfs/root/
   mkdir -p rootfs/var/
   mkdir -p rootfs/mnt/

 

8、創建臨時目錄並與空白文件映射,目的是將根文件系統拷貝進去
  

   mkdir tmpfs
   mount  -t ext3  a9rootfs.ext3  tmpfs/ -o  loop
   rootfs/* tmpfs/  -r
   umount tmpfs

 

建立一個目錄,將zImage,vexpress-v2p-ca9.dtb,_install目錄拷貝在一個目錄下

vim mkrootfs.sh

 1 rm -rf rootfs
 2 rm -rf tmpfs
 3 rm -f a9rootfs.ext3
 4 
 5 mkdir rootfs
 6 cp ./_install/* rootfs/ -raf
 7 mkdir -p rootfs/proc/
 8 mkdir -p rootfs/sys/
 9 mkdir -p rootfs/tmp/
10 mkdir -p rootfs/root/
11 mkdir -p rootfs/var/
12 mkdir -p rootfs/mnt/
13 
14 cp -arf /home/yuanlj/arm-2014.05/arm-none-linux-gnueabi/lib rootfs/
15 rm rootfs/lib/*.a
16 arm-none-linux-gnueabi-strip rootfs/lib/*
17 
18 mkdir -p rootfs/dev/
19 mknod rootfs/dev/tty1  c 4  1
20 mknod rootfs/dev/tty2  c 4  2
21 mknod rootfs/dev/tty3 c 4 3
22 mknod rootfs/dev/tty4 c 4 4
23 mknod rootfs/dev/console c 5 1
24 mknod rootfs/dev/null c 1 3
25 
26 dd if=/dev/zero of=a9rootfs.ext3  bs=1M  count=32
27 mkfs.ext3 a9rootfs.ext3
28 
29 mkdir -p tmpfs
30 mount  -t ext3  a9rootfs.ext3  tmpfs/ -o  loop
31 cp -r rootfs/*  tmpfs/
32 umount tmpfs

 



七、啟動

qemu-system-arm  -nographic -sd a9rootfs.ext3 -M vexpress-a9 -m 512M -kernel zImage -dtb vexpress-v2p-ca9.dtb -append "init=/linuxrc root=/dev/mmcblk0 rw rootwait earlyprintk console=ttyAMA0"  
qemu-system-arm  -serial stdio -sd a9rootfs.ext3 -M vexpress-a9 -m 512M -kernel zImage -dtb vexpress-v2p-ca9.dtb -append "init=/linuxrc root=/dev/mmcblk0 rw rootwait earlyprintk console=ttyAMA0"  

 



注意:
1、以上在編譯前請確保export ARCH=arm ;export CROSS_COMPILE=arm-none-linux-gnueabi-

2、若報錯,一般是某些庫沒有包含,自行百度或google

 


免責聲明!

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



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