BeagleBoard 的 QEMU 環境搭建 - Linux 驅動調試

Beagleboard is Not BeagleBone, 這篇文章的對象是 beagleboard, 不是 beaglebone

安裝 qemu-system-arm

首先需要說明的是:使用sudo apt-get install安裝後的qemu-system-arm是不支持beagle板的。
因此我們需要自己編譯qemu-linaro源碼。在此之前一定要卸載你係統中已有的qemu,運行:

$ sudo apt-get purge qemu*

編譯qemu-linaro源碼:

$ git clone git://git.linaro.org/qemu/qemu-linaro.git
$ cd qemu-linaro
$ sudo apt-get install zlib1g-dev
$ sudo apt-get install libglib2.0-dev

$ ./configure --prefix=/usr/bin
$ make
$ sudo make install

安裝 zlib1g-dev 和 libglib-2.0-dev 是因爲編譯過程中會用到。安裝完成後可運行以下命令查看 qemu 支持的板子:

$ qemu-system-arm -machine help

Supported machines are:
akita                Akita PDA (PXA270)
beagle               Beagle board (OMAP3530)
beaglexm             Beagle board XM (OMAP3630)
...
realview-pb-a8       ARM RealView Platform Baseboard for Cortex-A8
realview-pbx-a9      ARM RealView Platform Baseboard Explore for Cortex-A9
smdkc210             Samsung SMDKC210 board (Exynos4210)
...
xilinx-zynq-a9       Xilinx Zynq Platform Baseboard for Cortex-A9
z2                   Zipit Z2 (PXA27x)

可以看到,編譯好的支持 beagle 和 beaglexm 板。

安裝 linaro-image-tools 工具

首先是在 Ubuntu 上添加 apt-get 的源,然後安裝 linaro-image-tools 工具,命令如下:

sudo add-apt-repository ppa:linaro-maintainers/tools
sudo apt-get update
sudo apt-get install linaro-image-tools

下載 omap3 硬件包並生成 beagle_sd.img 文件

一共兩個文件,nano-n-tar-20110823-1.tar.gzhwpack_linaro-omap3_20110823-0_armel_supported.tar.gz

下載地址分別爲:

http://download.csdn.net/detail/gzj2013/9910966
http://download.csdn.net/detail/gzj2013/9910994

將下載好的兩個文件複製到一個目錄後進行以下操作:

$ sudo linaro-media-create --image_file beagle_sd.img --dev beagle --binary nano-n-tar-20110823-1.tar.gz --hwpack hwpack_linaro-omap3_20110823-0_armel_supported.tar.gz

注意其中的–是兩個橫線,有些網頁顯示出來會變成中文的破折號,會導致命令執行失敗。

提示一路按 Y,最後出現以下提示信息就說明鏡像文件創建成功。

Image Name:   Linux
Created:      Wed Jul 26 11:01:25 2017
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    3836224 Bytes = 3746.31 kB = 3.66 MB
Load Address: 80008000
Entry Point:  80008000
Image Name:   initramfs
Created:      Wed Jul 26 11:01:25 2017
Image Type:   ARM Linux RAMDisk Image (uncompressed)
Data Size:    1861231 Bytes = 1817.61 kB = 1.78 MB
Load Address: 00000000
Entry Point:  00000000
Image Name:   boot script
Created:      Wed Jul 26 11:01:25 2017
Image Type:   ARM Linux Script (uncompressed)
Data Size:    444 Bytes = 0.43 kB = 0.00 MB
Load Address: 00000000
Entry Point:  00000000
Contents:
   Image 0: 436 Bytes = 0.43 kB = 0.00 MB
'/tmp/tmpXQb9tt/boot-disc/boot.scr' -> '/tmp/tmpXQb9tt/boot-disc/boot.ini'

Populating rootfs partition
Be patient, this may take a few minutes

Creating /etc/flash-kernel.conf

Updating /etc/network/interfaces

Done creating Linaro image on beagle_sd.img

QEMU 啓動系統

生成 beagle_sd.img 文件後通過以下命令啓動 QEMU:

sudo qemu-system-arm -M beaglexm -m 512 -sd ./beagle_sd.img -clock unix -serial stdio

執行後出現 QEMU 模擬窗口,開始顯示系統啓動過程,同時執行命令的窗口也開始顯示系統控制檯輸出,啓動過程需要等待一段時間,需要耐心一點。

Texas Instruments X-Loader 1.5.1 (Jul 26 2011 - 00:39:12)
Beagle Rev C4
Reading boot sector
Loading u-boot.bin from mmc


U-Boot 2011.06 (Aug 19 2011 - 17:43:34)

OMAP35XX-GP ES3.1, CPU-OPP2, L3-165MHz, Max CPU Clock 600 mHz
OMAP3 Beagle board + LPDDR/NAND
I2C:   ready
DRAM:  256 MiB
NAND:  256 MiB
MMC:   OMAP SD/MMC: 0
*** Warning - bad CRC, using default environment

ERROR : Unsupport USB mode
Check that mini-B USB cable is attached to the device
In:    serial
Out:   serial
Err:   serial
Beagle Rev C4
No EEPROM on expansion board
Die ID #51454d5551454d555400000051454d55
Hit any key to stop autoboot:  0 
SD/MMC found on device 0
reading boot.scr

508 bytes read
Running bootscript from mmc ...
## Executing script at 82000000
reading uImage

3836288 bytes read
reading uInitrd

1861295 bytes read
reading board.dtb

316 bytes read
## Booting kernel from Legacy Image at 80000000 ...
   Image Name:   Linux
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    3836224 Bytes = 3.7 MiB
   Load Address: 80008000
   Entry Point:  80008000
   Verifying Checksum ... OK
## Loading init Ramdisk from Legacy Image at 81600000 ...
   Image Name:   initramfs
   Image Type:   ARM Linux RAMDisk Image (uncompressed)
   Data Size:    1861231 Bytes = 1.8 MiB
   Load Address: 00000000
   Entry Point:  00000000
   Verifying Checksum ... OK
## Flattened Device Tree blob at 815f0000
   Booting using the fdt blob at 0x815f0000
   Loading Kernel Image ... OK
OK
   Using Device Tree in place at 815f0000, end 815f313b

Starting kernel ...

Uncompressing Linux... done, booting the kernel
...
Begin: Running /scripts/init-bottom ... done.
fsck from util-linux-ng 2.17.2
rootfs: clean, 7353/193536 files, 60254/773120 blocks

Welcome to Linaro 11.08 (GNU/Linux 3.0.0-1004-linaro-omap armv7l)

 * Documentation:  https://wiki.linaro.org/

The programs included with the Linaro system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Linaro comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

root@linaro-nano:~#
root@linaro-nano:~#

至此,系統啓動完成,啓動完成後可以通過 cat /proc/cpuinfo 命令查看 CPU 信息, 當然你也可以測試其它 Linux 命令.

使用 QEMU 調試 Linux 驅動

至此,BeagleBoard 的 QEMU 仿真環境已經搭建完畢,那麼如何使用這個環境來進行 Linux 驅動開發呢?

$ sudo losetup /dev/loop0 ./beagle_sd.img
$ sudo fdisk -l /dev/loop0
      Device Boot      Start         End      Blocks   Id  System
/dev/loop0p1   *          63      106494       53216    c  W95 FAT32 (LBA)
/dev/loop0p2          106496     6291455     3092480   83  Linux

$ mkdir tmp/
$ sudo mount -o loop,offset=$[63*512] ./beagle_sd.img ./mountpoint
$ ls
board.dtb  boot.ini  boot.scr  boot.txt  MLO  u-boot.bin  uImage  uInitrd

$ sudo mount -o loop,offset=$[106496*512] /dev/loop0 tmp/
$ cd tmp
$ ls
bin   etc         lib         media  proc  selinux  tmp  vmlinuz
boot  home        lost+found  mnt    root  srv      usr
dev   initrd.img  md5sum.txt  opt    sbin  sys      var

$ sudo losetup -d /dev/loop0

此時,我們可以將已經編譯好的驅動模塊文件複製到該目錄下,重新啓動 QEMU 系統就可以使用 insmod 加載該驅動模塊了。

注意:

uImage 要根據你的驅動所使用的內核版本來替換,一般只需將 uImage 替換即可。

幾點說明

因爲網上有其他一些資料使用的是一些 linaro 中比較新的版本,但是推薦使用的linaro-media-create 的版本卻是很舊,我嘗試過 linaro-image-tools-0.4.8.tar.gz 版本來生成 beagle_sd.img 文件,結果很多腳本文件執行就會出錯。

參考資料

[1]. http://www.cnx-software.com/2011/09/26/beagleboard-emulator-in-ubuntu-with-qemu/
[2]. http://shortcircuits.io/uefi-with-beagleboard-using-qemu.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章