2011年01月25日

KZM-A9-DualボードでNFSブートする

KZM-A9-DualボードのubootではカーネルのイメージをNFSでロードすることができます。

昔はカーネルはtftpでロードして、ルートファイルシステムはNFSでマウントすることが多かったのですが、これだとNFSサーバとTFTPサーバの2つを設定する必要がありました。

カーネルもNFSでよくなったので、TFTPサーバが不要になりました。



NFSサーバにファイルを置く

NFSサーバの設定方法はこちらが参考になります。

NFSサーバの /export/android/root にルートファイルシステムを展開し、/export/android/boot にuImageを置きます。

  $ sudo mkdir -p /export/android/root
  $ sudo tar xvpf android-root.tar.bz2 -C /export/android/root
  $ sudo mkdir -p /export/android/boot
  $ sudo cp uImage /export/android/boot/

U-bootの設定

ターゲットのIPアドレスを192.168.1.100

NFS server のIPアドレスを192.168.1.26 とすると

 KZM-A9-Dual# setenv ipaddr 192.168.1.100
 KZM-A9-Dual# setenv serverip 192.168.1.26
 KZM-A9-Dual# setenv rootpath /export/android/root
 KZM-A9-Dual# setenv cfg_ddr mem=135M@0x40000000\ mem=256M@0x50000000
 KZM-A9-Dual# setenv nfsboot setenv bootargs root=/dev/nfs noinitrd init=/init cons
ole=ttyS1,115200n8n \$(cfg_ddr) rw nfsroot=\$(serverip):\$(rootpath),timeo=30 ip=\$(ipaddr):
\$(serverip):\$(gatewayip):\$(netmask):\$(hostname):eth0:off\;nfs /export/android/boot/uIm
age\;bootm
 KZM-A9-Dual# setenv bootcmd run nfsboot
 KZM-A9-Dual# saveenv

ブートログ


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

Booted Device: NOR Flash
Board: EM/EV ES2 (Rev.ffffff20)
Core:  1.15v
DRAM:  512 MB
Flash: 64 MB
In:    serial
Out:   serial
Err:   serial
Hit any key to stop autoboot:  0
DRIVER_VERSION : 110, DATECODE : 080408
LAN9x18 (0x92210000) detected.
Read mac address: 00:0A:A3:02:12:AF
start Auto negotiation... (take ~2sec)
Auto negotiation complete, 100BaseTX, full duplex
File transfer via NFS from server 192.168.1.26; our IP address is 192.168.1.100
Filename '/export/android/boot/uImage'.
Load address: 0x40007fc0
Loading: #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         ###############################################
done
Bytes transferred = 3896512 (3b74c0 hex)
## Booting kernel from Legacy Image at 40007fc0 ...
   Image Name:   Linux-2.6.29-00253-g00298d9-dirt
   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-00253-g00298d9-dirty (koba@koba-linux2) (gcc version 4.4.1 (Sourcery G
++ Lite 2009q3-67) ) #8 SMP PREEMPT Fri Jan 21 14:18:27 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: bootargs root=/dev/nfs noinitrd init=/init console=ttyS1,115200n8n mem
=135M@0x40000000 mem=256M@0x50000000 rw nfsroot=192.168.1.26:/export/android/root,ti
meo=30 ip=192.168.1.100:192.168.1.26::::eth0:off
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)
  ....

ビルドしたときに自動的に/exportのファイルを更新するようにしておけば、ビルドした後にすぐに実行してみることができます。SDカードなどの抜き差しが不要なので便利です。

2011.4.27 追記

ターゲット内の /system/etc/init.kzm9d.sh の中でdhcpサーバによるIPアドレスの取得を前提としているところがありました。今回の記事のようにIPアドレスをカーネルのブートパラメータで固定的に設定する場合には一番後ろの netcfg の行をコメントアウトしてください。

...
case ${ret} in
  0)
    insmod /lib/modules/pvrsrvkm.ko
    chmod 666 /dev/pvrsrvkm
    /system/bin/pvrsrvinit
    ;;
esac

#netcfg eth0 up dhcp

ソースツリーの中ではこのファイルは以下の場所にあります。

device/kmc/kzm9d/init.kzm9d.sh

この修正をしないと以下のように、一度NFSマウントに成功しながら途中で途切れてしまいます。

net eth0: SMSC911x/921x identified at 0xe0840000, IRQ: 167
IP-Config: Guessing netmask 255.255.255.0
IP-Config: Complete:
     device=eth0, addr=192.168.150.10, mask=255.255.255.0, gw=255.255.255.255,
     host=192.168.150.10, domain=, nis-domain=(none),
     bootserver=255.255.255.255, rootserver=192.168.150.1, rootpath=
Looking up port of RPC 100003/2 on 192.168.150.1
Looking up port of RPC 100005/1 on 192.168.150.1
VFS: Mounted root (nfs filesystem).
Freeing init memory: 128K
Warning: unable to open an initial console.
# enabling adb
adb_open
nfs: server 192.168.150.1 not responding, still trying
nfs: server 192.168.150.1 not responding, still trying
nfs: server 192.168.150.1 not responding, still trying
nfs: server 192.168.150.1 not responding, still trying
nfs: server 192.168.150.1 not responding, still trying
nfs: server 192.168.150.1 not responding, still trying
nfs: server 192.168.150.1 not responding, still trying
nfs: server 192.168.150.1 not responding, still trying
nfs: server 192.168.150.1 not responding, still trying
nfs: server 192.168.150.1 not responding, still trying



トラックバックURL

コメント一覧

1. Posted by 質問です   2011年02月15日 12:18
setenv cfg_ddr=mem... は = が不要ですか?
setenv nfsboot setenv bootargs bootargs root=... は bootargs がひとつ不要ですか?
2. Posted by koba   2011年02月15日 18:19
ご指摘の通りです。修正しました。

コメントする

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

QRコード
QRコード