組み込みLinuxカーネルの構築時にこれだけは知っておかなければならない項目

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の出力

redboot_ipaq.png

図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>


[ 次のページ | 前のページ | 目次へ ]
お問い合わせは info@embedded.jp まで