ARM用のU-bootをQEMUで動かす

ARM用のU-bootをUbuntu 9.04環境で動作するQEMUで動かします。QEMUでARMのVersatilePB(ARM Versatile Platform Board)のエミュレーションを行います。

LinkIconQEMUをインストールする
LinkIcontoolchainをインストールする
LinkIconU-Bootをビルドする

milk_btn_pagetop.png

 

QEMUをインストールする

QEMUのインストール

Ubuntu 9.04にQEMUをインストールします。
$ sudo apt-get update
$ sudo apt-get install qemu

QEMUがインストールされていることを確認します。
$ qemu
QEMU PC emulator version 0.10.0, Copyright (c) 2003-2008 Fabrice Bellard
usage: qemu [options] [disk_image]

'disk_image' is a raw hard image image for IDE hard disk 0

milk_btn_pagetop.png

 

toolchainをインストールする

toolchainとしてCodeSourcery ARM EABI toolchainを使用します。

CodeSourcery ARM EABI toolchainのダウンロード

CodeSourcery ARM EABI toolchainをダウンロードします。

odeSourcery > Sourcery G++ > Lite Edition > ARM
http://www.codesourcery.com/sgpp/lite/arm/portal/subscription?@template=lite

http://www.codesourcery.com/sgpp/lite/arm/portal/package7815/public/arm-none-eabi/arm-2010.09-51-arm-none-eabi.bin

arm-none-eabi/arm-2010.09-51-arm-none-eabi.bin を /usr/src にダウンロードします。
$ cd /usr/src
$ sudo wget http://www.codesourcery.com/sgpp/lite/arm/portal/package7815/public/arm-none-eabi/arm-2010.09-51-arm-none-eabi.bin

Ubuntuのシェル(dash)で処理できるようにします。
$ sudo dpkg-reconfigure -plow dash
Install as /bin/sh? No

arm-2010.09-51-arm-none-eabi.bin に実行権限を与えます。
$ sudo chmod +x arm-2010.09-51-arm-none-eabi.bin

CodeSourcery ARM EABI toolchainのインストール

CodeSourcery ARM EABI toolchainをインストールします。
インストール作業は全てデフォルトで進めます。
$ ./arm-2010.09-51-arm-none-eabi.bin

===============================================================================
Ready To Install
----------------

InstallAnywhere is now ready to install Sourcery G++ Lite for ARM EABI onto
your system at the following location:

   /home/ono/CodeSourcery/Sourcery_G++_Lite

PRESS  TO INSTALL:



===============================================================================
Installing...
-------------

 [==================|==================|==================|==================]
 [------------------|------------------|------------------|------------------]



===============================================================================
Installation Complete
---------------------

Congratulations! Sourcery G++ Lite for ARM EABI has been successfully installed
to:

   /home/ono/CodeSourcery/Sourcery_G++_Lite

PRESS  TO EXIT THE INSTALLER:
ono@ono-desktop:/usr/src$

PATHを設定します。
ホームディレクトリ配下にある .profileを編集します。
$ vi .profile

下記の1行を追加します。
export PATH=$HOME/CodeSourcery/Sourcery_G++_Lite/bin:$PATH

CodeSourcery ARM EABI toolchainインストール確認

gccのバージョン表示をしてインストールされていることを確認します。
$ arm-none-eabi-gcc -v

(省略)
gcc version 4.5.1 (Sourcery G++ Lite 2010.09-51)
$

milk_btn_pagetop.png

 

U-Bootをビルドする

uboot-mkimageのインストール

uboot-mkimage packageをインストールします。
$ sudo apt-get install uboot-mkimage

U-Bootソースコードの入手

U-Bootソースコードの最新版をダウンロードし展開します。

FTP directory /pub/u-boot/ at ftp.denx.de
ftp://ftp.denx.de/pub/u-boot/

ftp://ftp.denx.de/pub/u-boot/u-boot-2010.03.tar.bz2

u-boot-2010.03.tar.bz2 を ~/u-boot-201003 にダウンロードします。
$ mkdir ~/u-boot-201003
$ cd ~/u-boot-201003
$ wget ftp://ftp.denx.de/pub/u-boot/u-boot-2010.03.tar.bz2

ダウンロードした u-boot-2010.03.tar.bz2 を展開します。
$ tar jxvf u-boot-2010.03.tar.bz2
$ cd u-boot-2010.03

U-Bootのビルド

U-Bootをビルドします。

コンフィギュレーションを行います。
$ cd ~/u-boot-201003/u-boot-2010.03
$ make versatilepb_config ARCH=arm CROSS_COMPILE=arm-none-eabi-

ono@ono-desktop:~/u-boot-201003/u-boot-2010.03$ make versatilepb_config ARCH=arm CROSS_COMPILE=arm-none-eabi-
Configuring for versatile board...
Variant:: PB926EJ-S
ono@ono-desktop:~/u-boot-201003/u-boot-2010.03$

コンパイルとビルドを行います。
$ make all ARCH=arm CROSS_COMPILE=arm-none-eabi-
arm-none-eabi-ld: warning: /home/ono/CodeSourcery/Sourcery_G++_Lite/bin/../lib/gcc/arm-none-eabi/4.5.1/libgcc.a(_bswapsi2.o) uses variable-size enums yet the output is to use 32-bit enums; use of enum values across objects may fail
arm-none-eabi-objcopy -O srec u-boot u-boot.srec
arm-none-eabi-objcopy --gap-fill=0xff -O binary u-boot u-boot.bin
ono@ono-desktop:~/u-boot-201003/u-boot-2010.03$

コンパイル後バイナリイメージ u-boot.bin が作成されます。
u-boot.bin
ono@ono-desktop:~/u-boot-201003/u-boot-2010.03$ ls -l
合計 4356
-rw-r--r--   1 ono ono 2906445 2010-04-01 06:54 CHANGELOG
-rw-r--r--   1 ono ono  190034 2010-04-01 06:54 CHANGELOG-before-U-Boot-1.1.5
-rw-r--r--   1 ono ono   15951 2010-04-01 06:54 COPYING
-rw-r--r--   1 ono ono   12588 2010-04-01 06:54 CREDITS
-rw-r--r--   1 ono ono   19071 2010-04-01 06:54 MAINTAINERS
-rwxr-xr-x   1 ono ono   17533 2010-04-01 06:54 MAKEALL
-rw-r--r--   1 ono ono  125616 2010-04-01 06:54 Makefile
-rw-r--r--   1 ono ono  146978 2010-04-01 06:54 README
-rw-r--r--   1 ono ono   14864 2010-12-24 12:06 System.map
drwxr-xr-x   2 ono ono    4096 2010-12-24 12:05 api
drwxr-xr-x 275 ono ono   12288 2010-04-01 06:54 board
drwxr-xr-x   2 ono ono    4096 2010-12-24 12:05 common
-rw-r--r--   1 ono ono    7308 2010-04-01 06:54 config.mk
drwxr-xr-x  47 ono ono    4096 2010-04-01 06:54 cpu
drwxr-xr-x   2 ono ono    4096 2010-12-24 12:05 disk
drwxr-xr-x   3 ono ono    4096 2010-04-01 06:54 doc
drwxr-xr-x  25 ono ono    4096 2010-04-01 06:54 drivers
drwxr-xr-x   4 ono ono    4096 2010-04-01 06:54 examples
drwxr-xr-x  10 ono ono    4096 2010-04-01 06:54 fs
drwxr-xr-x  26 ono ono   12288 2010-12-24 12:04 include
drwxr-xr-x   2 ono ono    4096 2010-12-24 12:05 lib_arm
drwxr-xr-x   2 ono ono    4096 2010-04-01 06:54 lib_avr32
drwxr-xr-x   2 ono ono    4096 2010-04-01 06:54 lib_blackfin
drwxr-xr-x   4 ono ono    4096 2010-12-24 12:05 lib_generic
drwxr-xr-x   2 ono ono    4096 2010-04-01 06:54 lib_i386
drwxr-xr-x   2 ono ono    4096 2010-04-01 06:54 lib_m68k
drwxr-xr-x   2 ono ono    4096 2010-04-01 06:54 lib_microblaze
drwxr-xr-x   2 ono ono    4096 2010-04-01 06:54 lib_mips
drwxr-xr-x   2 ono ono    4096 2010-04-01 06:54 lib_nios
drwxr-xr-x   2 ono ono    4096 2010-04-01 06:54 lib_nios2
drwxr-xr-x   2 ono ono    4096 2010-04-01 06:54 lib_ppc
drwxr-xr-x   2 ono ono    4096 2010-04-01 06:54 lib_sh
drwxr-xr-x   2 ono ono    4096 2010-04-01 06:54 lib_sparc
drwxr-xr-x   2 ono ono    4096 2010-12-24 12:05 libfdt
-rwxr-xr-x   1 ono ono    2300 2010-04-01 06:54 mkconfig
drwxr-xr-x   3 ono ono    4096 2010-04-01 06:54 nand_spl
drwxr-xr-x   2 ono ono    4096 2010-12-24 12:05 net
drwxr-xr-x   3 ono ono    4096 2010-04-01 06:54 onenand_ipl
drwxr-xr-x   6 ono ono    4096 2010-12-24 12:06 post
-rw-r--r--   1 ono ono    1631 2010-04-01 06:54 rules.mk
drwxr-xr-x  10 ono ono    4096 2010-12-24 12:04 tools
-rwxr-xr-x   1 ono ono  383191 2010-12-24 12:06 u-boot
-rwxr-xr-x   1 ono ono   86276 2010-12-24 12:06 u-boot.bin
-rw-r--r--   1 ono ono     529 2010-12-24 12:06 u-boot.lds
-rw-r--r--   1 ono ono   96501 2010-12-24 12:06 u-boot.map
-rwxr-xr-x   1 ono ono  258904 2010-12-24 12:06 u-boot.srec
ono@ono-desktop:~/u-boot-201003/u-boot-2010.03$

U-Bootのシミュレーション

QEMUでU-Bootを実行します。
$ qemu-system-arm -M versatilepb -m 128M -nographic -kernel u-boot.bin

U-Bootプロンプトが表示されます。

ono@ono-desktop:~/u-boot-201003/u-boot-2010.03$ qemu-system-arm -M versatilepb -m 128M -nographic -kernel u-boot.bin


U-Boot 2010.03 (12月 24 2010 - 12:04:47)

DRAM:   0 kB
## Unknown FLASH on Bank 1 - Size = 0x00000000 = 0 MB
Flash:  0 kB
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
Net:   SMC91111-0
VersatilePB #

VersatilePB # help
?       - alias for 'help'
base    - print or set address offset
bdinfo  - print Board Info structure
bootm   - boot application image from memory
bootp   - boot image via network using BOOTP/TFTP protocol
cmp     - memory compare
cp      - memory copy
crc32   - checksum calculation
dhcp    - boot image via network using DHCP/TFTP protocol
erase   - erase FLASH memory
flinfo  - print FLASH memory information
go      - start application at address 'addr'
help    - print command description/usage
iminfo  - print header information for application image
loop    - infinite loop on address range
md      - memory display
mm      - memory modify (auto-incrementing address)
mtest   - simple RAM read/write test
mw      - memory write (fill)
nm      - memory modify (constant address)
ping    - send ICMP ECHO_REQUEST to network host
printenv- print environment variables
protect - enable or disable FLASH write protection
rarpboot- boot image via network using RARP/TFTP protocol
reset   - Perform RESET of the CPU
saveenv - save environment variables to persistent storage
setenv  - set environment variables
tftpboot- boot image via network using TFTP protocol
version - print monitor version
VersatilePB #

milk_btn_pagetop.png

ARM Versatile Platform Board

DesignARM - RealView Versatile/PB926EJ-S
http://www.designarm.com/products/arm-development-tools/realview-development-tools/realview-versatile-family/realview-versatilepb926ej-s.html

変更 2010.12.24
変更 2010.12.02
2010.11.19
milk_btn_pagetop.png