3. RedBootについて
では、組み込みシステムにすでに実装されているカーネルをアップデートするには、どのような仕組みを用意すればよいのでしょうか? オープンソースの世界では、すでにその仕組みが用意されています。それが、Red Hat社が開発し、リリースしているRedBootです。
3.1 RedBoot
RedBootは、ARM, x86, SuperH, PowerPC, MIPS, AM3xなどに対応した、ブートローダ兼ROMモニタです(図7)。ライセンスは、Red Hat eCos Public Licenseを採用しておりロイヤリティは一切発生しません。製品出荷時のファームウェアとして出荷しても何ら制限を受けないライセンス形態のため、すでに世界中で実際の製品に幅広く採用されています。開発時には、シリアル接続またはEthernet接続でLinuxのカーネルイメージやファイルシステムのイメージをダウンロードすることが出来ます。また、telnet接続もサポートされていますので、システムが存在する現場にいなくてもリモートでFlash ROMの内容をチェックしたり、カーネルイメージをアップデートすることが可能です。これらを実現するために、RedBootには様々なコマンドが用意されており、それらはhelpコマンドで表示させることが出来ます(図8)。
図7. RedBoot for iPAQの出力
図8. RedBootのコマンド
RedBoot> help
Manage machine caches
cache [ON | OFF]
Compute a 32bit checksum [POSIX algorithm] for a range of memory
cksum -b <location> -l <length>
Display (hex dump) a range of memory
dump -b <location> [-l <length>]
Query and/or set the EGPIO status
egpio [-s bits] [-c bits]
Execute an image - with MMU off
exec [-w timeout] [-b <load addr> [-l <length>]]
[-r <ramdisk addr> [-s <ramdisk length>]]
[-c "kernel command line"] [<entry_point>]
Manage FLASH images
fis {cmds}
Manage configuration kept in FLASH memory
fconfig [-l] [-n] [-f] | nickname [value]
Execute code at a location
go [-w <timeout>] [entry]
Query and/or set the GPIO status
gpio [-s bits] [-c bits]
Help about help?
help [<topic>]
Load a file
load [-r] [-v] [-d] [-h <host>] [-m {TFTP | xyzMODEM}]
[-b <base_address>] <file_name>
Set a memory location
mem [-h|-b] [-a <address>] <data>
Converts a virtual to a physical address
physaddr <address>
Network connectivity test
ping [-v] [-n <count>] [-l <length>] [-t <timeout>] [-r <rate>]
[-i <IP_addr>] -h <IP_addr>
Reset the system
reset
Display RedBoot version information
version
3.2 RedBootを使用したカーネルのブート
Flash ROMに焼いたカーネルイメージをロードし、カーネルパラメータを与えてブートさせることが出来ます(図9)。また、自動実行スクリプトもサポートされていますので、実際の製品では自動実行によりユーザーが電源投入後すぐにLinuxカーネルがブートするように設定出来ます。
図9. iPAQでのLinuxのブート例
RedBoot> fis load Linux RedBoot> ex -b 0x100000 -l 0x80000 -c "noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySA0,38400" -w 5
3.3 RedBootを使用したカーネルのアップデート
Flash ROMに格納されているカーネルイメージ(図7を参照)は、fisコマンドによりロック解除、削除、新規の書き込み、ロックが出来ます(図10)。
図10. fis コマンドの使い方
RedBoot> fis
*** invalid 'fis' command: too few arguments
Usage:
fis create -b <mem_base> -l <image_length> [-s <data_length>]
[-f <flash_addr>] [-e <entry_point>] [-r <ram_addr>] [-n] <name>
fis delete name
fis erase -f <flash_addr> -l <length>
fis free
fis init [-f]
fis list [-c] [-d]
fis load [-d] [-b <memory_load_address>] [-c] name
fis lock -f <flash_addr> -l <length>
fis unlock -f <flash_addr> -l <length>
fis write -f <flash_addr> -b <mem_base> -l <image_length>