Ubuntu Weekly Recipe

第69回 GW特別企画・電源プラグ型コンピューターSheevaPlugの使い方(1):基礎編

この記事を読むのに必要な時間:およそ 7 分

SheevaPlug(Plug Computer)とPCの違い

“SheevaPlug⁠を使う上では,PCとの違いを幾つか意識しなくてはいけません。実際に触りながら(+Marvell社が用意しているドキュメントを読んで)把握していくべきですが,ここでは最低限,⁠これまでPCだけを触ってきた人」が戸惑わない程度の情報をまとめておきます。

おそらく,この項目のほとんどは,この場では把握しきれない事柄です。一度セットアップを完了してから読み直すのが良いと思われます。

CPUがARM

SheevaPlugのCPUはARM(いわゆるARMEL扱い)ですので,x86のバイナリを動作させることはできません。言い換えれば,バイナリだけが提供されるソフトウェア,たとえばAdobe ReaderやSkypeなどは,ベンダーからARM用バイナリが提供されない限り利用できません。

ソースもセットで提供されるソフトウェア,つまり「フリーソフトウェア」については,x86環境と同じように利用することができます。aptなどのインターフェースでパッケージをダウンロードしてインストールすることも可能です。

「BIOS画面」の違い

SheevaPlugには,x86プロセッサでお馴染みの「BIOS画面」はありません。x86マシンでは最低限のブートデバイスの選択などをBIOS上で行いますが,SheevaPlugではuBootを用います(起動画面では「Marvell uBoot」と表示されますが,中身はDas U-Bootそのものです。ここでは「uBoot」と表記しますが,一般的には「U-Boot」とするのが普通でしょう)⁠

uBootは厳密にはBIOSとしてだけではなく,LILOやGRUBなどと同じブートローダとしての役割も果たしますので,直接「置き換え」と認識するのは望ましくありませんが,ごく普通にSheevaPlugを使う上では,⁠CLI(Command Line Interface)で操作を行う,BIOSとGRUBを足したものもの」と思っておけば良いでしょう。

カーネルの置き場所

x86マシンでは/bootにカーネルのinitrdイメージを配置し,GRUBなどのブートローダからこれらをキックして起動しますが,uBootを採用したコンピューターでは,フラッシュメモリ上にuImage用の領域を確保し,そこに起動用イメージを配置して,uBootからuImageの格納されたアドレスを指定して起動します。これも一般的なx86コンピューターとは異なる箇所です。

ブート指定が独特

前述の通り,uBootにuImageのアドレスを与え,さらにカーネルオプションやフラッシュメモリの配置なども指定して起動パラメータとします。典型的な起動オプションは以下のようになります。

setenv bootcmd 'nand read.e 0x800000 0x100000 0x400000; bootm 0x800000'
setenv bootargs 'console=ttyS0,115200 mtdparts=nand_mtd:0x100000@0x000000(u-boot),0x400000@0x100000(uImage),0x1f800000@0x500000(rootfs)rw root=/dev/mtdblock2'
boot

以下のような,GRUBに与える形での典型的な起動オプションに比べると面食らうかもしれません。

kernel          /boot/vmlinuz-2.6.24-12-generic root=UUID=1c54dac3-3197-4814-9e04-971753cade1c ro quiet splash locale=ja_JP
initrd          /boot/initrd.img-2.6.24-12-generic

モニタ出力がない

SheevaPlugにはモニタ出力にあたるものがありません。このため,ディスプレイにつないで何かを表示させることは(標準では)できません。第66回で紹介したヘッドレス構成(RS-232Cにカーネルのメッセージを出力し,コンソールも提供する設定)が必須となります。なお,配布されているUbuntuイメージではすでにこれらの設定は行われています。

内蔵ストレージがNANDフラッシュである

512MBの内蔵フラッシュが搭載されていますが,これらはNANDフラッシュが「生」の状態で提供されます。一般的なx86環境では,NANDフラッシュで構成されたデバイス(=SDカードやUSBメモリ,SSDなどなど)へアクセスする際はインテリジェントなコントローラ注8を経由するので,⁠生」の状態のNANDフラッシュにアクセスする必要が生じることはありません。ですが,SheevaPlugではあくまで「生」のまま与えられるため,普通のストレージ領域として考えることはできません

/dev/mtd2や/dev/mtdblock2などといったデバイスノード注9経由でNANDフラッシュへアクセスすることは可能ですが,これらの領域ではext3やext4,FAT32などのファイルシステムは使えません。JFFS2やUBIFSなどの,NANDフラッシュで使うために設計されたファイルシステムを使います。

また,NANDフラッシュにはuBootやuImageも格納されるため,512MB全体をデータ領域として使うことはできません。

注8
一般的なNANDフラッシュは,⁠出荷時点で一定率の不良アドレスを含んでいる」⁠書き換え回数に上限があるため,繰り替えし同じアドレスにアクセスすると壊れる」という特性を持っています。NANDフラッシュの「インテリジェントな」コントローラは,こうした問題点をシステム側から意識せずに扱えるようにするため,⁠不良アドレスが含まれる領域は利用しない(バッドブロックの管理)⁠同じ箇所を繰り替えし書き換えないようにする(ウェアレベリング)⁠NAND特有のアクセス特性を考慮し,書き込みを制御する」といった機能を備えています。このあたりのほとんどはドライバや専用のファイルシステムが行いますのでユーザーは意識する必要はありませんが,逆に言えば,専用のファイルシステム(本文で出てくるJFFS2やUBIFS)を使うことは必須です。
注9
LinuxではNANDフラッシュへのアクセスのために,MTD(Memory Technology Devices)ドライバを用います。MTDドライバはバッドブロックの管理など,基本的な機能を有しています。

著者プロフィール

吉田史(よしだふみひと)

Ubuntu Japanese Team Member株式会社創夢所属。システム管理を中心にWindows/PC Unixを併用している。Ubuntu Japanese Teamではパッケージサーバの管理や翻訳などの作業を担当。

コメント

コメントの記入