2011年02月01日

KZM-A9-DualボードでeMMCからブートする

KZM-A9-Dualボードには約4GByteのeMMCがあります。そこからブートするためにeMMCに書きこむ方法を紹介します。



書き込むファイル

u-bootはeMMCから起動するために専用にビルドしたものを使います。KZM-A9-Dualボードに付属するDVDに入っているソースアーカイブでビルドすることができます。ファイル名は u-boot-emmc.bin です。

Linuxカーネルとルートファイルシステムは特別なものは必要ありません。SDカードやNFSでブートした時と同じものを使用します。

ルートファイルシステムはここではAndroidを使うことにします。/androidディレクトリに展開します。

つまり書き込むファイルは以下の3つ。

  • u-boot-emmc.bin
  • uImage
  • /android ディレクトリ

Ubuntuを起動する

eMMCのパーティションを分割したり、ファイルシステムを作るためにARMのUbuntuを使用します。

ARMのUbuntuのルートファイルシステムの作成方法は以前この記事で紹介しました。ARM Ubuntuのバージョンは10.04でも10.10でもどちらでもかまいません。

NFSで起動するのが便利だと思います。

書き込み用スクリプト

カレントディレクトリに u-boot-emmc.binとuImageを置き、/androidに Androidのルートファイルシステムを展開します。

そして以下のスクリプトを実行します。

write_emmc.sh

#!/bin/sh
set -x -e
UBOOT=u-boot-emmc.bin
UIMAGE=uImage
ROOT=/android
EMMC=/dev/mmcblk0

ls -l $UBOOT
ls -l $UIMAGE
ls -l $ROOT
ls -l $EMMC

# Delete partition table
dd if=/dev/zero of=${EMMC} bs=1024 count=1024

fdisk ${EMMC} << __END__
n
p
1

+512K
n
p
2

+6M
n
p
3


p
w
__END__

sleep 2
sync;sync;sync
mkfs.ext3 ${EMMC}p3
mount ${EMMC}p3 /mnt
cp -a $ROOT/* /mnt/
umount /mnt
dd if=$UBOOT of=${EMMC}p1
dd if=$UIMAGE of=${EMMC}p2
sync;sync;sync

echo "*** OK ***"

途中の空行にも意味があるので、このまま変更しないで使ってください。

$ sudo ./write_emmc.sh

このスクリプトで以下のことをしています。

  • 書き込むファイルが揃っていることを確認。
  • パーティションテーブルを全て削除。
  • fdiskコマンドでパーティションを作成。
    • p1: サイズ512KB。u-boot用
    • p2: サイズ6MB。kernel用
    • p3: 残り全て。ルートファイルシステム用。
  • p3にext3のファイルシステムを作成。
  • p3にルートファイルシステムをコピー。
  • p1にu-bootを書き込む。
  • p2にkernelを書き込む。

eMMCからのブート

KZM-A9-Dualボードのディップスイッチを以下のように設定します。

  • DSW1-3: ON
  • DSW1-4: OFF

これで電源を入れなおせばeMMCからブートします。

U-Boot 2009.03-rc1 (Jan 25 2011 - 14:33:43)

Booted Device: eMMC
Board: EM/EV ES2 (Rev.ffffff20)
Core:  1.15v
DRAM:  512 MB
Flash: 64 MB
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
Hit any key to stop autoboot:  0
## Booting kernel from Legacy Image at 40007fc0 ...
   Image Name:   Linux-2.6.29
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    3896448 Bytes =  3.7 MB
   Load Address: 40008000
   Entry Point:  40008000
   Verifying Checksum ... OK
   Loading Kernel Image ... OK
OK

Starting kernel ...

Linux version 2.6.29 (koba@koba-linux2) (gcc version 4.4.1 (Sourcery G++ Lite 2009q3-67) ) 
#1 SMP PREEMPT Tue Jan 25 14:44:09 JST 2011
CPU: ARMv7 Processor [411fc092] revision 2 (ARMv7), cr=10c57c7f
CPU: VIPT nonaliasing data cache, VIPT nonaliasing instruction cache
Machine: KZM9D
Memory policy: ECC disabled, Data cache writealloc
Built 2 zonelists in Zone order, mobility grouping on.  Total pages: 99314
Kernel command line: root=/dev/mmcblk0p3 noinitrd init=/init console=ttyS1,115200n8n androi
dboot.console=ttyS1 SELINUX_INIT=no mem=135M@0x40000000 mem=256M@0x50000000 rw 
video=qfb: ip=none rootfstype=ext3 rootwait
Unknown boot option `androidboot.console=ttyS1': ignoring
PID hash table entries: 2048 (order: 11, 8192 bytes)
Console: colour dummy device 80x30
Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
Memory: 135MB 256MB = 391MB total
Memory: 391936KB available (3520K code, 768K data, 128K init)
Calibrating delay loop... 1061.68 BogoMIPS (lpj=5308416)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
CPU1: Booted secondary processor
Calibrating delay loop... 1064.96 BogoMIPS (lpj=5324800)
Brought up 2 CPUs
SMP: Total of 2 processors activated (2126.64 BogoMIPS).
net_namespace: 312 bytes
NET: Registered protocol family 16
  ...


トラックバックURL

コメントする

名前
 
  絵文字
 
 
記事検索
最新コメント
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード