ARM用のU-bootをQEMUで動かす
ARM用のU-bootをUbuntu 9.04環境で動作するQEMUで動かします。QEMUでARMのVersatilePB(ARM Versatile Platform Board)のエミュレーションを行います。
QEMUをインストールする
toolchainをインストールする
U-Bootをビルドする
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
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
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)
$
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 #
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