PocketLinux User's Guide <author>神木一也, <tt/kamiki@geocities.com/ <date>v0.2/PLP1.0.0, Oct. 3, 1999. <abstract> この文書は PocketLinux 固有のユーザーインターフェース及び カーネルコンフィギュレーションについて説明したものです。 PLP 1.0.0 として定義されるはずのものですが、 パッチ <tt/linux-2.0.37p3a-mg0829 (0829 版)/ 現在、未実装なものを含んでいます。 </abstract> <toc> <sect>概要 <p> Mobile Gear MC-MK32 (MK12, MK22, for DoCoMo) は ほぼ IBM-PC/AT に互換ですが、 ディスプレイ周りなどが微妙にアーキテクチャが異なります。 このため MK32 上で linux を動かすには、これらのデバイス分について 書き直したカーネルが必要です。 また MobileGear はハードディスクを持たず、PCMCIA スロットを一つだけもちます。 ここに ATA カードを挿してハードディスクの代りとしますが、 linux カーネルは pcmcia デバイスを直接はサポートせず pcmcia-cs に任せており、 pcmcia-cs を使えるようにするために initrd という仕掛けを利用しています。 ひとたび linux が立ち上がれば、ATA カードを使わず ramdisk のみで使うシステムにも出来、 この場合には PCMCIA スロットは LAN カードなどのために利用することもできます。 <sect1>Mobile Gear というアーキテクチャ <p> Mobile Gear MC-MK32 はほぼ IBM-PC に互換であり、 <itemize> <item> CPU: i486SX25 16MHz <item> メモリ: 8.5M バイト <item> ディスプレイ: 640x240 グレースケール 4 階調 <item> サウンド: 10bit DAC <item> PC カード: PCMCIA II x 1 <item> シリアル: シリアル x 1, モデム(max 14400 bps) x 1, IrDA(ver. 1.0) x 1. <item> APM: 16bit APM BIOS ver. 1.0 </itemize> という資源を有します。 IBM-PC との違いは次の通り。 <descrip> <tag/ブートシーケンス/ ブートディスクの MBR には 通常のブートマーカ(55AA) 以外に専用のブートマーカが書かれている必要があります。 このブートマーカは disk partition table の 4 つ目を破壊するため、 PocketLinux のブートディスク (ATA カード) では基本パーティションは 3 つまでです。 この専用ブートマーカは LILO による bootloader 登録後、rdev することで付けることができます。 <tag/ディスプレイ/ TEXT VRAM を持っていません。Graphics Video RAM の配置は比較的素直ですが 従来のどの IBM-PC Graihpcs Adapter とも互換性がありません。 PocketLinux では自力でフォント展開するドライバが組みこまれています。 <tag/キーボード/ キーボード配列はほぼ旧 JIS 配列になっていますが、 scancode は 106jp と部分的に互換性がありません。 ハードウエア的にも、 IBM-PC/AT でも XT でもありません。 また、ハードウエアレベルではキーリピート/ディレイが固定(18.5cps, 500ms)です。 PocketLinux ではキーリピート/ディレイについては kernel 側でソフト的に発生させることができます。 <tag/サウンドポート/ 10bit DAC を経由して出力します。DMA や割り込みはありません。 モデムポートとの間に干渉がみられ、 モデムポート利用時はサウンドの音が小さくなります。 pcsnd-1.2 を改造したドライバが組み込まれていますが、 0704 現在 8 bit 分のみ(16 bit PCM も 8 bit 化して出力)有効になっています。 <tag/モデムポート/ 8250 相当です。圧縮やエラー訂正のためのハードウエア支援はありません。 割り込みは IRQ 9 に固定されています。 現在モデムとしては使えますが、圧縮/エラー訂正はサポートされていません。 <tag/APM/ APM specification ver. 1.0 ですが、32bit BIOS は持っていません。 電池電圧の取得、CPU 速度の変更は可能ですが、 内部的に standby mode を持っていません。 現在ハードウエアを叩いて情報を直接得て BIOS を emulate しています。 <tt>/proc/apm</tt> よりも詳細な情報を取得するために <tt>/proc/necmg</tt> が実装されています。 <tag/フォント/ JIS X 0201 として 6x12, 8x16, 12x24, 8x8, JIS X 0208 として 12x12, 16x16, 24x24 を ROM に持っています。 <tag/ROM ディスク/ MS-DOS の FAT 互換の ROM ディスクが一つあります。 またその中に doublespace 互換の圧縮ドライブが 2 つ入っています。 0704 から doublespace patch(dmsdos) が入り、 圧縮ドライブへのアクセスが可能になりました。 <tag/IrDA ポート/ 専用カスタム LSI のようです。16550A 互換 dongle として扱われます。 割り込みは IRQ 4 に固定されており、 IrDA (<tt>/dev/ttyS1</tt>) とシリアルポート (<tt>/dev/ttyS0</tt>) は同時には使えません。 0829 版で IrCOMM, IrLAN がサポートされました。 linux-ir-1998-10-21 のモジュールを使います。 </descrip> <sect>Kernel の構築 <p> カーネルの標準的な version の呼び名は linux-X.X.Xyyy-mgZZZZ です。 埋め込まれた数字はそれぞれ <descrip> <tag/X.X.X/ オリジナルの linux kernel の version です。 いまのところ 2.0.37 〜 2.0.38 になります。 <tag/yyy/ MobileGear に依存しないパッチがあたっている状態を表します。 2.0.3x の場合、現在 e2compr, dmsdos, pcsnd の 3 つのパッチと、 この 3 つのパッチがあたりそこなった部分を修正する補助パッチが一つあたっていて 'p3a' となっています。 ソースのページには yyy に相当するパッチを一気にあてるパッチが 便宜的に用意されていますが、正規のパッチを順にあててつくることもできます。 <tag/ZZZZ/ MobileGear 固有のパッチのリリース月日。 パッチの内容については history を参照してください。 この数字をもって ZZZZ 版、などと呼ぶことがあります。 </descrip> をあらわします。 したがって MobileGear 用 kernel source は、 linux-X.X.X に yyy のパッチと ZZZ のパッチをあてて作る必要があります。 linux-2.0.37p3a-mg0828 の場合について示すと、 <enum> <item> linux-2.0.37 を展開する。 <item> <tt/patch-2.0.37p1-3.diff/ をあてる。linux-2.0.37p3 になります。 ここで <tt/patch-2.0.37p1-3.diff/ をあてるかわりに <enum> <item> e2compr-0.3.9-patch-2.0.35, <item> dmsdos-0.9.2.1, <item> pcsnd-1.2 </enum> に含まれるカーネル用パッチを、この順にあてることでも同じ linux-2.0.37p3 をつくることができます。 <item> つぎに <tt/patch-2.0.37p3a.diff/ をあてる。 linux-2.0.37p3a になります。 <item> さらに <tt/linux-2.0.37p3a-mg0828.diff/ をあてる。linux-2.0.37p3a-mg0828 になります。 </enum> 0829 版としては <tt/linux-2.0.37p3a-mg0829.diff/ は用意されておらず、 0828 版からの差分の <tt/linux-2.0.37p3a-mg0828-0829.diff/ しか用意されていません。 この場合、いったん 0828 版を上記手順でつくりあげた後に、 <quote> さらに <tt/linux-2.0.37p3a-mg0828-0829.diff/ をあてる </quote> 必要があります。 オリジナルカーネルに 2.0.37 でなく 2.0.38 のカーネルをつかっても以上の手順で 正常にパッチがあたり、出来上がったカーネルを "linux-2.0.38p3a-mg0828" と呼びます。 Development kernel は以上の形式ですが、stable kernel は便宜のため <quote> linux-X.X.X-mgW.W.W </quote> を名乗っているものがあります。 yyy, ZZZ のパッチをすべて含んだパッチで、この場合は linux-X.X.X に このパッチのみをあてることでカーネルをつくることができます。 <sect>Kernel configuration 概観 <p> PocketLinux パッチをあてた時に追加されたか、あるいは意味が変化した コンフィギュレーションの一覧です。 <sect1>NEC MobileGear Specific devices <p> <descrip> <tag/NEC MobileGear facility (デフォルト : 'y')/ MobileGear 用の kernel を build します。必ず 'y' にして下さい。 これを 'n' にすると MobileGear 固有のパッチの影響は全て取り除かれますが、 e2compr, dmsdos, pcsnd など<em/汎用のパッチは当たったまま/ になります。 これらについては FileSystem や Sound の config で取り除くなり適切に組み込むなり する必要があります。 <tag/C: romdisk (m)/ MG-DOS でのいわゆる C: ドライブを読めるようにします(<tt>/dev/romc</tt>)。 実際にマウントして使うには msdos fs が使えるようになっている必要があります。 DoubleSpace ドライブである I:, J: を読む場合には さらに loopback device と <tt/dmsdos.o/ も必要になります。 <em/<tt/dmsdos.o/ 自身はカーネルには含まれていません。/ dmsdos パッケージから build するか、dmsdos.o バイナリを (カーネルとは別に) PLP のソースのページから get しなければなりません。 <tag/Japanese console (y)/ Native console で日本語を使えるようにします。 コンソールサイズの default は 106x20 (6x12 font) になります。 <tag/Color emulated console (n)/ コンソールでのテキスト属性を CGA コンソールと合わせます。 default では MGA と一致しています。CGA に合わせることで MobileGear の 2bpp を全て使った文字表現ができるようになりますが、そのかわり boldface と normalface の混在ができなくなります。 <tag/Bold face support/ Bold Face を表現できるようにします。 それぞれの内容については後述します。 Ctrl + 前頁によってコンソールの default の文字を boldface にすることもできます。 <tag/Powerkey extension (n)/ 電源キー + ??? に(suspend/resume 以外の)別な機能を割り当てます。 Ctrl + Powerkey のみが実装されています。 <tag/Power off (Ctrl + Powerkey) (n)/ Ctrl + 電源キーで (suspend でなく)電源を OFF します。 <tag/NEC MG keyboard type (NEC)/ デフォルトのキーボードマップを選択します。実際の配列については後述します。 なお、None を選択したからといってカーネルサイズが小さくなったりはしません。 <itemize> <item>NEC: キートップ刻印にあわせたもの。 <item>US: Linux のデフォルトから function キーのずれを直し、 NUM LOCK 時に 「,」「=」を使えるようにしたもの。 <item>J31: 旧 J3100 キーボード配列。 NUM LOCK の動作、Ctrl+ F9/F10 の動作は US: に同じです。 開発者版系列ではテストに使われているので予告も事後アナウンスも無しに 微妙に仕様が変更されている場合があります。 <item>None: もともとの linux のマップそのまま。 本当にそのままなので Ctrl+ F9/F10 では LCD 濃度は変わりません。 また、他の配列と異なり刻印の F1 が OS 上の F2 となるなど function key が一つずつずれています(AP切替が F1 です)。 </itemize> NEC, US, J31 の場合、ctrl + 特殊キーによって以下の動作をさせることができます。 <itemize> <item>Ctrl + F9: 液晶表示を薄くします。 <item>Ctrl + F10: 液晶表示を薄くします。 <item>Ctrl + 次頁: 106x20 ←→ 80x15 の間でコンソールモードをトグルします。 <item>Ctrl + 前頁: Normal face ←→ Bold face の間でコンソールのフォントをトグルします。 </itemize> <tag/NEC MG Software kbdrate support (y)/ MobileGear のキーボードの delay/repeat rate は固定(500ms,18.5cps) になっています。 キーボードの delay/repeat をソフトウエア的に実現することで可変になりますが、 キーボードが RAW モードの時は影響しません。18.5cps, 500ms のままです。 <tag/ Default repeat rate (25 cps)/ 1 秒あたりのキー反復量を設定します。 内部的にはキー反復までの時間を 10ms 単位で設定しています。 33cps(= 30ms), 25cps, 20cps, 16cps, 14cps, 12cps, 11cps (= 90ms) 〜 2cps が使えます。 <p> なお、'NEC MG Software kbdrate support' が 'n' の時の キーリピートは 18.5cps になっています。 <tag/ Default delay (250 ms)/ キーディレイ(キーを押してからリピート開始までの時間) を設定します。 10ms ステップです。また 500ms 以上はテストしていません。 150ms 〜 1000ms が設定できます。 <p> なお、'NEC MG Software kbdrate support' が 'n' の時の キーディレイは 500ms になっています。 <tag/Automatic CPU speed management (y)/ CPU 負荷、バッテリの状態などによって CPU クロックを制御します。 'n' にすると常に 16MHz になりますが、'y' にすると 2 〜 25MHz の間で設定することができます。 <tag/Usable Maximum clock (FASTEST mode)/ CPU のクロックの上限を定義します。 このクロックに達するのは、デフォルトでは AC アダプタを繋いだ時か、 シリアル、モデム、サウンド等のデバイスを使っている間か、 カーネルによるスクリーン描画が発生している時か、 e2compr の伸長をしている時です。 25MHz は本来のスペック(16MHz) を上回るクロックであり、 一部のロットでは<em/正常に動かないものもある/ようです。 <tag/Normal mode (12, 16 or 25MHz)/ 標準のクロックを定義します。 普通のプロセスは、このクロックで動きます。 <tag/IDLE mode (2,3,4,6,8,12,16,25MHz)/ APM が IDLE call した時のクロック。 通常、kernel が hlt に入っている間のクロックです。 周辺デバイスも CPU クロックに同期して動いているので消費電力を下げることが できますが、あまりクロックを下げるとキーボードを叩いてから normal mode に復帰するのに時間がかかるようになります。 Software kbdrate support を 'y' にし、かつ比較的高速で repeat している場合、 repeat がうまく動かなくなるかもしれません。 <tag/Misc control device (m)/ /proc/necmg をサポートします。電池電圧、現在の CPU クロック、 現在のコンソールのフォントサイズ、などが読み出せるようになります。 <tag/NEC MG DEBUG(and experimental code) (n)/ DEBUG メッセージを console 等に出します。 'n' を推奨します。 <tag/Serial echo debug (n)/ Console message をシリアルポートにも出します。 <tag/Frame Buffer iocrl support (y)/ フレームバッファ <tt>/dev/mgfb</tt> を 2.2.x の FrameBuffer Device と互換にします。 <tag/Shrink font support (n)/ 6x8 フォントをサポートします。106x30 モードのコンソールが使えるようになります。 </descrip> <!-- 以下は 0704 で config としては固定されました。 変えるには <tt>include/linux/necmg.h</tt> の当該部分を書き換える必要があります。 <descrip> <tag/new Japanese console (y)/ 日本語 2 byte 文字の右側にカーソルを置こうとしても正しく表示します。 JIS X 0208 第 1 オクテットと第 2 オクテットを区別するフラグが TEXT VRAM に書き込まれるため、VRAM の使い方に従来と互換性が無くなります。 0704 から Japanese console 時のデフォルトになりました。 <tag/Allow drawing fonts without 4 pixels boundary (y)/ 106x20 など、バイトバウンダリでないフォント配置を使うコンソールを 使えるようにします。 0704 から Japanese console 時のデフォルトになりました。 なお、これを外すと console は 80x20 になります。 <tag/NEC MG code diet level (3)/ カーネルサイズと速度のトレードオフを変えます。数字が大きいほど カーネルサイズは小さく(遅く)なります。 0704 から <tt>include/linux/necmg.h</tt> 内で 3 に固定されています。 <tag/Standby mode (Shift + Powerkey) (n)/ Shift + 電源キーで (suspend でなく) standby モードに入ります。 まだ実装が中途半端なので復帰できません。 ここでいう standby モードとは、LCD OFF、タイマ OFF、シリアル OFF、 CPU freq 最低(約 300kHz)で HLT、ATA ON のモードを指します。 <tag/New APM functions (n)/ APM アイコンを表示するためのオプション。実装されていません。 <tag/Auxiliary display driver (n)/ ディスプレイドライバにアクセラレータを組み込みます。現在、最初から 組み込まれている acceleration しかないので 'y' にしても仕方ありません。 </descrip> --> <sect1>General setup <p> 2.0.36 は APM の configration が Character device のところに入っていますが、 2.0.37 以降では General Setup に移りました。 <descrip> <tag/Advanced Power Management BIOS support (y)/ APM を有効にします。かならず 'y' にしてください。 <tag/Enable PM at boot time (n)/ この項はモバイルギアでは無視されます。 'n' にしても boot time から APM は有効になっています。 <tag/Make CPU Idle calls when idle (y)/ CPU が IDLE に入ろうとする時(= hlt する時) CPU 動作周波数を IDLE mode で設定された値にします。 'n' の場合、hlt に入る時も標準クロックのままになります。 <tag/Enable console blanking using APM (y)/ スクリーンを blank にする時、LCD そのものを OFF するようにします。 <tag/Power off on shutdown (y)/ shutdown -h で電源を OFF するようにします。 <tag/NECMG Suspend on battery empty (n)/ バッテリが消耗した時に自動的に suspend します。 <tag/Notify battery change inquisitive (n)/ バッテリ電圧の 0.01V 単位の変動まで報告するようにします。 ユーザープロセスから power management を細かくカスタマイズするために用意されていますが、'n' で十分でしょう。 'n' の場合、<tt>/proc/apm</tt> の battery status が変化した時のみ notify が出るようになります。 </descrip> <!-- 以下は NECMG Specific devices で 'NEC MG DEBUG(and experimental code)' を 'y' にした場合にのみ現われます。 <descrip> <tag/NEC MG APM emulation rev. 1.1 (n)/ APM BIOS エミュレーションを APM rev. 1.1 相当にします(デフォルトは 1.0 です)。 詳細なバッテリ容量の取得の際に APM revision をみているアプリのためにあります。 'n' にしておくことを推奨します。 <tag/NEC MG greedy standby mode (n)/ Standby mode の動作傾向を電池保存的な方向にふります。 未実装です。 <tag/NEC MG use old APM functions (n)/ 0514 の時の APM 機構を使うようにします。 動作比較のためにのみあります。'n' にしてください。 </descrip> --> <sect1>Floppy, IDE, and other block devices <p> <descrip> <tag/Loopback device support (m)/ MG-DOS でいう I:, J: を読む場合に必要です。 なお、initrd ファイルの中を触る時のために MobileGear 上か母艦上で loopback device をサポートしておくことを強く推奨します。 </descrip> <sect1>Filesystems <p> 0704 以降のカーネルには e2compr (ext2 用圧縮ファイルシステム) が標準で入り、 これにあわせて 0704 以降に公開される PLP の initrd, rootdisk の一部は e2compr(圧縮アルゴリズムは lzrw3a) がかかった ext2 fs が使われています。 組み合わせる initrd, rootdisk との対応に注意してください。 <descrip> <tag/Minix fs support (m)/ 0614 あたりまで minix fs が PocketLinux の標準の filesystem でしたが、 今は使われていません。 'm' か 'n' で十分です。 ただ e2compr を使わない ext2 fs を使うくらいなら minix fs のほうが何かと資源的に得です。 <tag/Ext2 file compression (y)/ ext2 fs support を 'y' にする場合はこの項を 'y' にしておくことを推奨します。 gzip compression を入れないかぎり、カーネルサイズの増大は ほとんどありません。 <tag/lzv1 algorithm (n)/ 最も速く、かわりにあまり小さくなりません。 <tag/lzrw3a algorithm (y)/ コアパッケージ mizuka の initrd で使われています。 Ext2 file compression を使う場合にはこれを 'y' にすることを推奨します。 <tag/gzip algorithm (n)/ 本来 e2compr での標準なのですが、カーネルサイズの増大が激しい (約 50kB) ので PocketLinux では外しておくことを推奨します。 <tag/bzip2 algorithm (n)/ モバイルギアの 486SX 程度で bzip2 をランタイム圧縮に使うといった無謀なことは止めましょう。 'n' を推奨します。 <!-- <tag/NEC MG 25MHz mode in compress (n)/ compression 部分で CPU を 25MHz 駆動します。 もっとも compress() を 25MHz 駆動することでパフォーマンスが稼げるようなところを 圧縮するものではありません。 <tag/NEC MG 25MHz mode in uncompress (y)/ uncompression 部分で CPU を 25MHz 駆動します。 libc 等よく展開されるものを圧縮する場合は 'y' にするとパフォーマンスが 稼げますが、overclock には違いないので 'n' にしておくことを推奨します。 --> <tag/MSDOS filesystem support (m)/ DOS でいう C:, I:, J: を読む場合に必要です。 </descrip> <sect1>Sound <p> PC のスピーカーを PCM 変調によって演奏に使う pcsnd モジュールを改変して Mobile Gear 用のサウンドを実現しています。 このため config が pcsnd と共有されていますが、 'NEC MobileGear facility' が 'y' の場合には 'NEC MG Sound device' を 'y/m/n' しますが、 'NEC MobileGear facility' が 'n' の場合には 'PC-Speaker and DAC driver support' を 'y/m/n' するようになっています。 <descrip> <tag>NEC MG Sound device / PC-Speaker and DAC driver support (m)</tag> 内蔵音源(<tt>/dev/pcsp</tt>) を有効にします。 Sampling rate は 22.09kHz が上限ですが、 実用上は 11.05 kHz あたりまでのようです。 これ以上ではフラッシュカードへのアクセス時に雑音が入ります。 </descrip> <sect>モジュールの構築 <p> 標準のコアパッケージには以下のものはすべてバイナリで含まれています。 しかしモジュールの一部はカーネルに強く依存するため、 カーネルを再構築した際には、それに合わせてつくりなおさなければなりません。 <sect1>pcmcia-cs <p> PCMCIA スロットへのアクセスを担当します。 PocketLinux では必須です。 3.0.9 以降で動作しますが、3.0.12 以降が望ましいです。 pcmcia-cs を再構築する必要があるのは、 <itemize> <item> オリジナルカーネルの version が上がった時 <item> SCSI 用のモジュールを必要とする時 <item> バイナリパッケージには含まれていないモジュールを必要とする時 </itemize> の三つの場合があります。 1, 3は当然として、2 の理由は、バイナリパッケージの pcmcia-cs は SCSI を外して構築されているからです。 ソース展開後、make config ; make all します。 大抵の場合、母艦からのクロスインストールになるでしょう。 この場合 make config 時に注意すべきものは 3 つあります。 <descrip> <tag/kernel source/ PocketLinux kernel source のトップディレクトリを指示してください。 <tag/target install directory/ cardmgr などを install する先のディレクトリ。このディレクトリを root directory と見なした時の <tt>/etc/pcmcia, /sbin, /usr/bin</tt> などに関連ファイルがインストールされます。 PocketLinux 用のルートディスクの mount point を指示してください。 <tag/module install directory/ target install directory を root directory と見なした時の 'module install directory' に modules がインストールされます。デフォルトの <tt>/lib/modules/`uname -r`/</tt> のままで かまわないはずです。 <tag/System V init script layout/ n のままで良いでしょう。 </descrip> <sect1>e2compr <p> ext2 の圧縮ファイルシステムを担当します。 コアパッケージ 'mizuka' では必須になりますが、'akane' などでは 必ずしも必要ありません。 現在のところ e2compr-0.3.9-patch-2.0.35 が使われています。 e2compr をカーネルとは別に再構築する必要があるのは、 <itemize> <item> e2compr の version が上がった時 </itemize> だけでしょう。 e2compr のカーネル依存部分はすべてカーネルに含まれており、 カーネル自身を再構築した段階で e2compr も再構築されます。 e2fsck や chattr などのユーティリティはカーネルではなく ancillary-981212 に含まれていますが、こちらはカーネルを rebuild しても つくりなおす必要はありません。 <sect1>dmsdos <p> MSDOS の圧縮ファイルシステムを担当します。 いわゆる I:, J: ドライブにアクセスする時に必要です。 dmsdos をカーネルとは別に再構築する必要があるのは、 <itemize> <item> オリジナルカーネルの version が上がった時 <item> dmsdos の version が上がった時 </itemize> ですが、現在すでに warning がでる位で I:, J: へのアクセスには支障がないようなので、 2. のケースで再構築する必要はおそらくないでしょう。 dmsdos の再構築の場合、kernel tree は <tt>/usr/src/linux</tt> 下にある必要があります。 再構築の前に母艦用のソースツリーを避けて symlink するか、コピーするかしておいて 下さい。 また make all すると多くの場合、kernel に dmsdos パッチをあてようとします。 <tt/patch-2.0.37p1-3.diff/ は dmsdos パッチを含んでいますので、 こちらを既にあてている場合には make all してはいけません。 カーネルソースツリーを <tt>/usr/src/linux</tt> に移した後、 dmsdos のソースを展開し、cd src; make dmsdos.o します。 このあと <tt/dmsdos.o/ を <tt>/lib/modules/`uname -r`/misc</tt> にコピーして depmod -a しておいてください。 <sect1>pcsnd <p> モバイルギアのサウンドを担当します。 カーネル依存部分はすべてカーネルに含まれるため、カーネルの再構築後に pcsnd のために何かする必要はありません。 <sect1>linux-ir <p> モバイルギアの IrDA ポートを駆動するには linux-ir-1998-10-12 が必要です。 カーネル依存部分、非依存部分すべてこちらに含まれます。 現在 linux-ir の開発は停止し、irda-util に移行しているため、 オリジナルカーネルの version が上がった時に再構築する以外は これをつくりなおす必要はないでしょう。 ソースのうち <tscreen><verb> #include <ioctls.h> </verb></tscreen> となっているものを <tscreen><verb> #include <asm/ioctls.h> </verb></tscreen> に書き換えます。 さらに Makefile の <tscreen><verb> MODVERSIONS = -DMODVERSIONS -include /usr/src/linux/include/linux/modversions.h </verb></tscreen> の項をコメントアウトします。これは PocketLinux カーネルを構築する時にデフォルトでは 'Set version information on all symbols for modules' を 'n' にしているためで、 'y' にしている場合にはコメントアウトする必要はありません。 同じく Makefile の <tscreen><verb> drivers: Makefile </verb></tscreen> を <tscreen><verb> drivers:: </verb></tscreen> に書き換えます。このあと make depend; make all して IrDA modules が完成します。 make install すると <tt>/usr/sbin, /etc/irda, /lib/modules/`uname -r`/net/</tt> に直接インストールしようとします。 クロスインストールのことは配慮されていないので注意してください。 もっとも 2.0.x の母艦で IrDA を使うことは普通ないので、そのままインストールして <tt>/lib/modules/`uname -r`/net/ir*</tt> を MobileGear 側に移すという程度でもかまわないでしょう。 <sect>ブートまでの設定 <p> PocketLinux は initrd という仕掛けを経由してブートします。 また、設定の多くはカードが母艦に繋がった段階で行なわれます。 普段から linux を使っていてもあまり気にしたことのない設定があらわれます。 詳細は ext-root-mini-HOWTO を参照してください。 この章ではモバイルギア特有のものについて説明します。 <sect1>LILO の設定 <p> PocketLinux の場合、 初めて LILO を設定するマシンと、LILO によって起動されるマシンが異なる、 という点に難しさがあります。 以下は PocketLinux 用 <tt>/etc/lilo.conf</tt> の一例 ( akane 用) です。 <code> # LILO configuration file # generated by 'mglilo ver. 0.4' # # Start LILO global section boot = /dev/sdc # serial=0,9600n8 disk = /dev/sdc bios=0x80 heads=4 sectors=32 cylinders=491 #compact # faster, but won't work on all systems. # delay = 5 # End LILO global section # Linux bootable partition config begins image = /boot/zImage label = linux append = "ide0=noprobe ide1=noprobe" # fstype = ext2 root = /dev/hda2 initrd = /boot/initrd read-only # Linux bootable partition config ends </code> boot, disk が <tt>/dev/sdc</tt> になっていますが、これは手元の環境ではカードを母艦で マウントした時に <tt>/dev/sdc</tt> に見えるからです。 多くの場合、<tt>/dev/hdc</tt> や <tt>/dev/hde</tt> に見えるでしょう。 lilo -r で lilo を設定する場合には、<em/boot, disk には母艦でのカードのデバイス名を指定します。/ <tscreen><verb> # mount -t ext2 /dev/sdc1 /mnt # lilo -r /mnt </verb></tscreen> などとして lilo を設定します。 注意点は二つ。 <descrip> <tag/root 項/ モバイルギアでの / パーティションは 3 箇所で指定可能です。 いずれの場合も / として指定するのはモバイルギアが立ち上がった時の デバイス名になります。<em/母艦での名前ではありません。/ <descrip> <tag/linuxrc/ この中の <tt>/proc/sys/kernel/real-root-dev</tt> への代入による指定。 これが最優先になります。 これを省略し、lilo.conf に / パーティション指定を任せた場合、まれに / の remount に失敗して read-only のままになってしまうことがあるようです。 <tag/lilo.conf/ この中の <tt>"root ="</tt> による指定。 lilo.conf 内で指定した場合、linuxrc を読みにいかないことがあるようです。 <tag/zImage/ rdev zImage による指定。linuxrc, lilo.conf に何も指定しないとき、 カーネル内で指定された / が使われます。 </descrip> mizuka など ramdisk を(最終的な) ルートパーティションにする場合には "root = /dev/ram0" を設定して下さい。この場合は linuxrc は使われず、 直接 init が立ち上がります。 <tag/append="ide0=noprobe" 項/ 無くても動くものもありますが、 あって困る副作用は無いので、念のためつけておいてください。 </descrip> <sect1>mglilo <p> <sect2>mglilo とは <p> mglilo は母艦からモバイルギアのカード用の lilo の設定をする簡単なスクリプトです。 <verb> [usage] mglilo [-d] [-r path] [-k zImage] [-l lilodir] [-i initrd] [-g C/H/S] [-v] device [option] -d デバッグモード。カードに何も書き込みません。 -r / partition を指定します。 -k 母艦上の zImage のパスを指定します。 -l モバイルギアパッチのあたった lilo ソースディレクトリを指定します。 -i 母艦上の initrd, initrd.gz のパスを指定します。 -g カードのジオメトリを直接指定します。 -v verbose option. </verb> カードに lilo を移し、ジオメトリを取得して etc/lilo.conf をつくり、lilo -r という動作をします。 <sect2>mglilo の使い方 <p> <enum> <item> mglilo を パッチをあてた lilo ディレクトリに置く。 <item> 適当にフラッシュカードを ext2 or minix で mkfs し、 上記パッチをあてた kernel から make した zImage を カードの boot/zImage にコピー。 <item> initrd.gz もカードの boot/initrd.gz へ。 <item> lilo ディレクトリにうつって su root し、 <tscreen><verb> # ./mglilo カードデバイス(eg. /dev/hde) </verb></tscreen> する。 </enum> として使いますが、詳細は mglilo の<url url="../src/mglilo" name="ソース">を参照してください。 <sect1>モバイルギアのブートマーカ <p> 一般に PC 用のハードディスクの BR (boot record) の最後は 0x55 0xAA になっています。 PC の BIOS は、ここが 0x55 0xAA になっている BR を正常な PC の boot record とみなして実行します。 モバイルギアの場合、ATA カードの MBR (master boot record) の最後が '55AA' になっているだけでは カードの BR を読み込みません。 55AA の直前の 2 バイトが 0x4e 0x53 になっている場合にのみ、boot record と解釈します。 DOS 化モバイルギアでの carb は、この位置に 4e 53 を書き込んだり外したりするソフトですが、 同じことは linux からでも必要です。 まず、 major 78, minor 83 なる blk device の /dev/necmg を母艦につくります。 <tscreen><verb> % ls -l /dev/necmg brw-r--r-- 1 root root 78, 83 Mar 4 22:34 /dev/necmg </verb></tscreen> です。ここでフラッシュカードのデバイスが /dev/sdc とすれば <tscreen><verb> rdev /dev/sdc /dev/necmg </verb></tscreen> とすると、カードに上記のマーカが書き込まれます。 rdev は本来 / partition の位置や ramdisk のサイズなどを zImage に書き込むプログラムですが、 zImage 上の / partition を指定する位置がちょうど上記マーカの部分にあたっているので、 代用してしまっています。 一般の PC の場合、MBR 上のこのマーカの位置は partition table の 4 つ目の最後の 2 バイトにあたります。 このため、マーカを書き込むと 4 番目のパーティション(のサイズの項)が破壊されるので、 <em/モバイルギアではカードには基本パーティションは 3 つしか置けません。/ linux が起動し、カードのパーティションテーブルを認識した際に <tscreen><verb> Partition check: hda: hda1 hda2 hda4 </verb></tscreen> などと存在しない筈の hda4 が見えているのはマーカのためです。 fdisk では、そのまま p としたのでは hda4 は見えませんが、x で expert mode に入ったのちに p とすると hda4 が空 (すべてのバイトがゼロ) ではないことが確認できます: <tscreen><verb> Command (m for help): x Expert command (m for help): p Disk /dev/sdc: 4 heads, 32 sectors, 491 cylinders Nr AF Hd Sec Cyl Hd Sec Cyl Start Size ID 1 00 1 1 0 3 32 80 32 10336 82 2 80 0 1 81 3 32 490 10368 52480 83 3 00 0 0 0 0 0 0 0 0 00 4 00 0 0 0 0 0 0 01314062336 00 Expert command (m for help): q </verb></tscreen> <sect1>initrd ファイルの設定 <p> initrd は原則として内容を触るべきではありませんが、 / partition の位置の設定は initrd の中で行なうのが確実ということもあって akane のデフォルトでは initrd 内で /dev/hda2 を指定しているので、 /dev/hda1 などを / にしたい場合には initrd (のうちの linuxrc) の内容を書き換える必要があります。 もっとも、これもカードの partitioning のほうで /dev/hda1 を / にするのでなく、/dev/hda2 を / にするようにしたほうがトラブルは少ないでしょう。 また、pcmcia-cs を再構築した際には initrd 内に含まれる pcmcia-cs も書き換える必要があります。 <sect2>initrd のマウント <p> Linux が立ち上がる時、initrd ファイルは gzip 圧縮されていても構わないことになっていますが、 mizuka では圧縮しませんし、akane も MK32 の場合は圧縮する意味はほとんどないようです。 initrd ファイルは圧縮して <tt/initrd.gz/ の形で rootdisk の <tt>/boot/</tt> に収められています (mizuka では <tt/initrd/ のままの形で <tt>/boot/</tt> に置かれています)。 母艦が loopback filesystem をサポートしているなら、 <tscreen><verb> # zcat < initrd.gz > /tmp/initrd # mount -t ext2 /tmp/initrd /mnt -o loop </verb></tscreen> として /mnt にマウントできるでしょう。initrd の customization が終わったら <tscreen><verb> # sync # umount /mnt # gzip -9 < /tmp/initrd > initrd.gz </verb></tscreen> として圧縮し、initrd.gz に上書きします。 実際に書き換える可能性があるのは initrd 内の pcmcia-cs と linuxrc でしょう。 <sect2>linuxrc スクリプト <p> linuxrc は(コアパッケージ mizuka など少数の例外を除いて) initrd を ramdisk にコピーし、 これを / として linux が起動した時に最初に実行するスクリプトです。 / に置かれていて、以下のような内容になっています (akane 用)。 <code> #!/bin/sh # Should be either i82365 or tcic PCIC=i82365 # Put socket driver timing parameters here PCIC_OPTS= # Put pcmcia_core options here CORE_OPTS= mount -t proc /proc /proc echo "" echo "==== initrd: starting PCMCIA services ====" echo "" PC=/lib/pcmcia insmod $PC/pcmcia_core.o $CORE_OPTS insmod $PC/$PCIC.o $PCIC_OPTS insmod $PC/ds.o if [ "$DEBUG" != "" ] ; then V=-v ; fi cardmgr $V -q -o -c /etc -m /lib -s /tmp/stab -p /tmp/pid # sleep 15 echo "" echo "go /dev/hda2 ...." echo "0x0302" > /proc/sys/kernel/real-root-dev umount /proc </code> このスクリプトの場合、pcmcia-cs の各ファイルは pcmcia ide に関するごく少数のファイルだけということもあって 通常の /lib/modules/`uname -r`/pcmcia/ ではなく /lib/pcmcia 下に置かれることを仮定しています。 最後から 2 行目の <quote> echo "0x0302" > /proc/sys/kernel/real-root-dev </quote> は本当の / partition を定め、この場合は /dev/hda2 (major = 3, minor = 2) になります。 ところで、 一部のカードでは pcmcia-cs のリセットが間に合わず、/ の remount に失敗することがあります。 この場合は <quote> # sleep 15 </quote> のコメントをはずしてみてください。 <!-- <sect2>initrd をフルスクラッチから構築する <p> 一から initrd ファイルをつくるのは多くの場合は時間と労力の無駄なので 他人の作った initrd を元に改変して使うようにしましょう。 pcmcia-cs に含まれる pcinitrd は initrd の雛型をつくるスクリプトです。 詳細は man pcinitrd し、実際に作る場合には ext-root-mini-HOWTO を参考にしてください。 --> <sect>PocketLinux 固有のデバイスファイル <p> <sect1>/dev/mgfb <p> <tscreen><verb> crw-rw-rw- 1 root root 29, 0 Mar 16 22:34 mgfb crw-rw-rw- 1 root root 29, 0 Mar 16 22:34 fb0 </verb></tscreen> フレームバッファです。MGL が使用します。 書き込みは 1 つのプロセスからしか許可されません。 <sect1>/dev/mgfont <p> <tscreen><verb> cr--r--r-- 1 root root 58, 0 Mar 22 22:56 mgfont cr--r--r-- 1 root root 58, 0 Mar 22 22:56 mgfont0 cr--r--r-- 1 root root 58, 1 Mar 22 22:56 mgfont1 cr--r--r-- 1 root root 58, 2 Mar 22 22:56 mgfont2 cr--r--r-- 1 root root 58, 3 Mar 22 22:56 mgfont3 cr--r--r-- 1 root root 58, 4 Mar 22 22:56 mgfont4 cr--r--r-- 1 root root 58, 5 Mar 22 22:56 mgfont5 cr--r--r-- 1 root root 58, 6 Mar 22 22:56 mgfont6 cr--r--r-- 1 root root 58, 7 Mar 22 22:56 mgfont7 cr--r--r-- 1 root root 58, 3 Mar 22 22:56 mgfonts </verb></tscreen> 内蔵フォントです。MGL はこのうち mgfonts を使用します。 <itemize> <item> mgfont0: clB8x8 のフォント。コンソールで使用。 <item> mgfont1: 8x8 の ank な内蔵 ROM フォント。 <item> mgfont2: 6x12 の ank な内蔵 ROM フォント。 <item> mgfont3: 12x12 の JIS X 0208 な内蔵 ROM フォント。 <item> mgfont4: 8x16 の ank な内蔵 ROM フォント。 <item> mgfont5: 16x16 の JIS X 0208 な内蔵 ROM フォント。 <item> mgfont6: 12x24 の ank な内蔵 ROM フォント。 <item> mgfont7: 24x24 の JIS X 0208 な内蔵 ROM フォント。 <item> mgfonts: 内蔵 ROM フォント全体(mgfont0 は含みません)。 </itemize> 将来、mgfonts の minor number は変更されるかもしれません。 また、font0 とそれ以外では内部フォーマットが違います。 ioctl を叩けば font metric を知ることができますが、詳細はソースツリーの drivers/necmg/mgfont.c を参照してください。 <sect1>/dev/romc <p> <tscreen><verb> br--r--r-- 1 root root 57, 0 Mar 19 22:22 romc br--r--r-- 1 root root 57, 0 Mar 22 22:57 romdisk </verb></tscreen> MG-DOS でいう C: ドライブです。 <tscreen><verb> # mount -r -t msdos /dev/romc /dos/c </verb></tscreen> すると C: を読むことができます。I:, J: を読むには、C: を読めるようにした後にさらに <tscreen><verb> # insmod dmsdos # mount -r -t msdos /dos/c/dblspace.001 /dos/i # mount -r -t msdos /dos/c/dblspace.002 /dos/j </verb></tscreen> などとします。 <sect1>/proc/apm <p> APM BIOS rev. 1.0 相当です。 PocketLinux 使用時のバッテリ電圧変化の様子については <url url="../src/index2.html#graph" name="グラフ">を参照してください。 以下の閾値は、この実験グラフに基づいて設定されています。 <sect2>Battery critical notify (自動 suspend) <p> 電圧が 2.3V を切ると Battery critical notify イベントが発生します。 この時カーネルの config で auto suspend を 'y' にしていると 自動的に suspend に入ります(system suspend notify)。 PocketLinux の場合、2.3V を割ると auto supend を 'n' にしてあっても 最短で 20 分ほどで落ちると思われます。 参考までに、落ちる時のバッテリ電圧は 2.0V です。 <sect2>Battery low notify <p> 電圧が NiMH の場合で 2.37V, アルカリ電池の場合で 2.40V を切ると Battery low notify イベントが発生します。 グラフを参照すると分かりますが、この Battery low notify が出た時点で バッテリはかなり消耗しています。連続して使い続けるなら 1 時間ほどで critical notify (auto suspend のレベル) に入るでしょう。 <sect2>Battery life <p> モデムを使うか使わないかでバッテリの持ちは大きくかわります。 このため、モデムを使っている時と使っていない時とでは バッテリ余力の計算方法が違いますが、あくまで参考程度に考えてください。 <sect1>/proc/necmg <p> /proc/apm のフォーマットは定められているため、バッテリ電圧そのものは /proc/apm からは 読みだせません。バッテリ電圧の他、PocketLinux 特有の情報を引き出すために /proc/necmg があります。 1003 版では以下のようなフォーマットになっています: <tscreen><verb> # cat /proc/necmg Installed device :0000 Powered device :0002 Current batt level :0103 (2.61) Current batt voltage :2.59 - 2.63 Current CPU clock :25.0 (25.0, 0) CPU Turbo Mask :0b66 CPU Normal Mask :0000 Font Width : 6 Font Height :12 Kbdrate delay :250 Kbdrate repeat :25.0 </verb></tscreen> <descrip> <tag/Installed device/ APM が監視すべきデバイスのうち、install (insmod) されているものを表します。 ビット毎にデバイスが定まり、 <verb> SUSPEND 0x0001 AC 0x0002 SCROLL 0x0004 COMPRESS 0x0010 UNCOMPRESS 0x0020 USERPROCESS 0x0040 SERIAL 0x0100 MODEM 0x0200 IRDA 0x0400 SOUND 0x0800 </verb> となっています。詳細は PocketLinux Technical Guide を参照してください。 <tag/Powered device/ APM が監視すべきデバイスのうち、現在駆動されているものを表します。 <tag/Current batt level/ APM BIOS の BX 値そのものと、現在のバッテリ電圧(V) です。 <tag/Current batt voltage/ 最近の最低電圧と最高電圧です。 定義は PocketLinux Technical Guide を参照してください。 おおむねカードにアクセスするなど重負荷時の電圧と、無負荷時の電圧に対応します。 <tag/Current CPU clock/ 現在の CPU クロック(MHz) です。 カッコ内は現在のマスタークロックと分周値をあらわし、 <quote> CPUクロック = マスタークロック / (2^分周値) </quote> の関係にあります。 <tag/CPU Turbo Mask/ APM が監視すべきデバイスのうち、mask に対応するビットが立っている時に CPU を config で指定した最速クロックで駆動します。 <tag/CPU Normal Mask/ 現在は使われていません。 <tag/Font Width/ 現在のコンソールの ASCII font の幅(pixel 単位) です。 <tag/Font Height/ 現在のコンソールの ASCII font の高さ(pixel 単位) です。 <tag/Kbdrate delay/ キーボードリピートの遅延(最初のキーからリピート開始まで)です(ms 単位)。 <tag/Kbdrate repeat/ キーボードリピート速度(リピート間隔)です(cps 単位)。 </descrip> <sect>コアパッケージ "mizuka"<p> Ramdisk を / とし、カードを /usr/local/ にするコアパッケージです。 普段はカードを /usr/local にマウントして使い、 LAN に繋ぎたい時だけカードを切り離して使うことを想定したものです。 <sect1>Requirements<p> 2.0.38 版はまだ用意されていません。自力構築する必要があります。 <descrip> <tag/<url url="../src/zImage-0804" name="zimage-0804">/ カーネル(linux-2.0.37p3a-mg0804)。 <tag/<url url="../src/modules-0804.tar.gz" name=modules-0804.tar.gz>/ 上記カーネルの modules. <tag/<url url="../initrd/mizuka-0.9.gz" name=mizuka-0.9.gz>/ Initrd. <tag/<url url="../initrd/mizuka-0.9.tar.bz2" name=mizuka-0.9.tar.bz2>/ Rootdisk. </descrip> これ以外にモバイルギア対応化 LILO や mglilo などが要るのは他のケースと同様です。 ここでは mizika 特有の事項のみ説明します。 <p> なお initrd の mizuka-0.9.gz は /bin, /sbin, /etc, /itemb が e2compr の lzrw3a で圧縮されているため、 組み合わせるカーネルではかならず ext2 file comverbssion, lzrw3a algorithm, indirect cluster bitmap を 'y' にしなければなりません。 上述カーネルでは 'y' になっています。 <sect1>Install 前のカードの準備<p> mizuka-0.9 が期待するカードの構造は、 <descrip> <tag>/dev/hda1</tag> 使用せず。 <tag>/dev/hda2</tag> ext2 で mkfs されている。boot partition 兼 /usr/local. 10 M バイト以上必要。 <tag>/dev/hda3</tag> swap 用。mkswap されていること。 </descrip> となっています。 <tt>/dev/hda1</tt> は使われていません。 この部分に / partition を用意することで mizuka, akane の dual boot に対応させることが予定されているからです。 <sect1>カード上への構築<p> mizuka-0.9.tar.bz2 を ext2 で mkfs した /dev/hda2 に展開します。 <tscreen> # bzip2 -d < mizuka-0.9.tar.bz2 | tar -xpC /flash </tscreen> 必要空き容量は 10 Mbytes 弱、少なくとも 15 Mbytes あることが好ましいです。 この時カードのデイレクトリ配置はおおむね以下のようになっています。 <tscreen><verb> bin/ boot/ canna/ dev/ etc/ emacs/ home/ lib/ mgl/ modules/ 2.0.37/ block/ fs/ misc/ net/ pcmcia/ sbin/ usr/ sbin/ var/ </verb></tscreen> boot/, dev/, etc/, usr/sbin/ 以外のディレクトリは起動後 /usr/local に mount されてはじめて意味をもちます。 立ち上がるまでに必要なのは boot, dev, etc くらいでしょう。 <p> さて、次に boot/ に mizuka-0.9.gz を gunzip して initrd という名で置きます。 <tscreen> # zcat mizuka-0.9.gz > boot/initrd </tscreen> かつての akane, mayu などでは圧縮して(/boot/initrd.gz にして)置いていますが mizuka では使用中に initrd の中身を書き換える可能性があります。 直接 loopback mount するために伸長しておくほうが便利でしょう。 なお mglilo は ver. 0.4 から非圧縮 initrd に対応しました。 <p> lib/modules/2.0.37/ 以下に modules-0804.tar.gz を展開して置きます。 modules はカードの lib/modules/ 以外に ramdisk の /lib/modules にも置かれています(こちらは mizuka-0.9.gz に含まれる)。 そのため、modules を新しく compile しなおした場合は両方に install する必要があります。 <p> ここでカードの etc/lilo.conf の root= を root=/dev/ram0 と書き換え、 カードをモバイルギアに挿して linux を起動します。 ここで root で login したのち <tscreen><verb> # connect </verb></tscreen> すればカード(/dev/hda2)を /usr/local に、 boot に使ったカードの initrd を /initrd に mount し、background で cannaserver が立ち上がるはずです。 <p> ディレクトリ構造 <tscreen><verb> / ......... / は本体 ramdisk の /dev/ram0 bin/ dev/ dos/ c/ ......... いわゆる MG-DOS の C: (/dev/romc) i/ ......... 同 I: (/dos/c/dblspace.001) j/ ......... 同 J: (/dos/c/dblspace.002) etc/ home/ initrd/ ......... カードの boot/initrd が loopback で bin/ . マウントされています。 dev/ . dos/ . 当然ながら / と同じディレクトリを etc/ . 持っています。 home/ . 次回の boot 時に /etc の変更を反映させ initrd/ . たいなら、/initrc/etc のほうを lib/ . 変える必要があります。 mnt/ sbin/ tmp/ usr/ var/ lib/ modules/ 2.0.37/ fs/ ......... modules は ATA カードを抜いた状態で misc/ . 使う可能性のあるものだけが pickup して net/ . ここに置かれている。自分が使うものを pcmcia/ . あらたに選んで置き直すべきです。 mnt/ sbin/ tmp/ usr/ lib/ local/ ........ /usr/local はカードの /dev/hda2. bin/ canna/ etc/ ........ ここに "/usr/local/etc/lilo.conf" が emacs/ . ありますが、消してはいけません。 home/ . これは本物の lilo.conf です。 lib/ mgl/ modules/ sbin/ var/ </verb></tscreen> <sect1>カードの挿抜<p> 問答無用でいきなりカードを抜き挿ししてはいけません。 <enum> <item> カードに書き込んだ(ことになっている)データがまだ実際には 書き込まれていないかもしれない。 <item> カード上のファイルやディレクトリにアクセスしているかもしれない。 具体的には、card 上の cannaserver が裏で動いているし、 emacs はカード上 (/usr/local/bin/emacs) にあるので emacs を立ち上げたまま カードを抜くと、ことによると emacs が壊れる。 <item> カードを射してある状態では /usr/local/lib のライブラリの存在を ld.so は知っている。カードを抜くまえに /etc/ld.so.conf を書き換えて ldconfig してやらないといけない。 </enum> という訳で ATA カードを抜く前に disconnet, ATA カードを挿した後に connect コマンドを使います。 じつは connect は pcmcia-cs で auto run させるべきかもしれませんし、 将来そうなるかもしれませんが、今のところは connect と disconnect で使い方を対称的にするためだけに auto run させていません。 LAN カード等を挿した時には connect する必要はありませんが、 こちらも将来 lan-connect のようなコマンドが用意されるかもしれません。 <p> connect, disconnect ともまだ完全ではありません、というより単に cannaserver と swap を切り離したり繋いだりするだけなので、/usr/local/bin 以下を使っている最中に disconnect してもちゃんとカードを抜いていい状態になったりはしません。 <p> 特に、比較的古い mount/umount を使っていると <em/loopback modules が外れなくなることがあります。/ 新しい、loopback option に対応した mount/umount command を使うように してください。 <p> # cat /sbin/connect <tscreen><verb> #!/bin/sh swapon /dev/hda3 mount /usr/local /usr/local/sbin/depmod -a insmod /usr/local/lib/modules/2.0.37/block/loop.o mount /initrd cd /etc rm ld.so.conf ln -sf ld.so.connect ld.so.conf ldconfig /usr/local/canna/bin/cannaserver </verb></tscreen> <p> # cat /sbin/disconnect <tscreen><verb> #!/bin/sh sync kill `ps axw | grep cannaserver | grep -v grep | /usr/local/bin/awk '{print \$1;}'` swapoff /dev/hda3 umount /initrd rmmod loop cd /etc rm ld.so.conf ln -sf ld.so.disconnect ld.so.conf ldconfig umount /usr/local </verb></tscreen> <p> /usr/local 下のコマンドをあらたに daemon にして使う場合には connect, disconnect とも適切に書き直さなければならないのは当然です。 これも将来、mizuka での設定コマンドが用意されると思います。 <sect1>modules と各資源<p> mizuka では ramdisk によって実メモリが圧迫される分、 module として切り離すことができる部分は徹底してカーネルから切り離されています。 立ち上がった時点で 4.7 Mbytes のフリーメモリが残っているので 余裕があるといえばありますが、 LAN カードを挿したりした状態では swap がとれないことに注意してください。 また、このメモリには ramdisk 分が含まれているようです。 <p> 具体的には <itemize> <item> シリアル、PPP 関連として serial, ppp, slhc, bsd_comp が、 <item> MG-DOS ドライブアクセス用として mgdisk, nls, fat, msdos, loop, dmsdos が、 <item> サウンド用として pcsnd が、 <item> LAN (NFS) として nfs が、 <item> カーネル情報監視モジュールとして mgproc が、 </itemize> それぞれ modules として切り離されているため、各資源を使う前には適切なものを modprobe してやらねばなりません。 <p> いちばん階層が深いのは J: ドライブなので、これについて説明します。 <p> C:, J: へのアクセスはカードが挿さっていない状態で使う可能性は ほとんどないし、いずれにせよカードを挿した状態で mount できればカードを抜いても問題ないので、 関連 modules はカードに置かれています。 <p> <tscreen><verb> # cd /usr/local/lib/modules/2.0.37 # insmod misc/mgdisk.o /* これで C: が使えるようになる。 */ # insmod misc/nls.o # insmod misc/fat.o # insmod misc/msdos.o /* msdos fs を mount するには この三つが必要 */ # mount -r -t msdos /dev/romc /dos/c /* 実際には /etc/fstab にも設定がある。*/ # insmod block/loop.o # insmod misc/dmsdos.o /* 圧縮ドライブを mount するには この二つが必要 */ # mount -r -t msdos /dos/c/dblspace.002 /dos/j -o loop /* 実際には /etc/fstab にも設定がある。*/ </verb></tscreen> J: の実態は C: にある dblspace.002 なので J: を mount するには C: を先に mount しなければなりません。 <p> 実際には適切に depmode -a してあれば <tscreen><verb> # depmod mgdisk # depmod msdos # mount /dos/c # depmod dmsdos # mount /dos/j </verb></tscreen> で良いはずです。 <sect1>運用上の注意事項<p> <sect2>ramdisk を / としているために<p> / が ramdisk に置かれているため電源断で内容がクリアされてしまいます。 普段は suspend, resume を使っていること、~/ などの backup/restore の負荷が重いために connect, disconnet では<em>~/ の backup/restore をしていません。</em> 実用上は ~user/ の代りに /usr/local/home/user/ が使われるはずであり、 ~/ には .emacs などの設定ファイルのみになるだろうということもありますが。 <p> もし .emacs や、あるいは /etc の下を変更する場合には直接書き換えてはいけません。 書き換えた結果を次回の boot 時にも有効にしたいなら かならず <tt>/initrd/</tt> 下の対応ファイルを書き換えるべきです。 また、書き換えたあとで <tscreen><verb> # /usr/local/sbin/lilo -r /usr/local </verb></tscreen> しておく必要があるかもしれません。 理論上はしなくても大丈夫な筈だけども、見落としがあるといけないので記しておきます。 <sect2>PPP と LAN カードの routing の衝突<p> デフォルトでは PPP も pcmcia-cs LAN もどちらも動き出すと default route を自分のほうに向けようとします。 このため、 たとえば LAN カードの default route が宣言されている状態で PPP を発信すると PPP の default routing の setup のところで route がおかしくなってしまいます。 LAN カードを挿してある場合には PPP 発信する前に default route を削除するか LAN 向け専用に宣言するかしなければなりません。 <sect1>特徴、特長、欠陥、バグ<p> <descrip> <tag/活線挿抜可能/ もっとも connect/disconnect の運用の負担はけっこう重いかもしれません。 <tag/省電力/ 必要なものは本体に入っているため、カードへのアクセスは少ないです。 </descrip> デメリットは以下のようなものでしょうか。 <itemize> <item> 遅い。/lib/ を圧縮してしまっているため、 uncomverbss 時 25MHz で動かしても体感でワンテンポほど遅いです。 <p> ディスクキャッシュが効いている間は問題ないのですが、 swap を使わずに運用し、キャッシュメモリが減るにつれ みるみるうちに遅くなっていきます。ここで swapon すると一気に軽くなるあたり、 キャッシュの支配力はかなりのものがあります。 <item> 狭い。/var が 400 - 600kB ほどです。このため、数百キロバイト級の メールを受信/送信することは困難でしょう。 ATA カードをつけたままでいいなら 一時的にカードに /var を symlink する手もあるにはありますが ... <item> 危ない。e2compr はおおむね実用に使えていますが、e2fsck だけは問題が残っているようです。 とくに kernel config で indirect bitmap を 'y' にした状態で initrd が出来上がっているので、e2compr patch のあたっていない普通の e2fsck で initrd を fsck してはいけません。確実に壊れます。 <p> /bin, /sbin, /etc, /lib とほとんど書き換えることのないディレクトリ下のみ 圧縮しているのは e2fsck を掛けて壊れるのは圧縮されたファイルに限るからで、 復旧を容易にした意味があるのですが、 e2compr patch のあたっている e2fsck でも initrd に対しては できるだけ fsck するべきではないようです。 <item> 煩わしい。カードの disconnect/connect で cannaserver などは一度 kill されて、 そしてもう一度たちあがるという action をします。 <p> cannaserver と交信する /bin/ng は disconnect/connect の最中でも立ち上がったままに できるますが、ふたたび connect したあとには cannaserver との通信ができなくなっています。 当然といえば当然ですが、ng も立ち上げ直さなければなりません。 </itemize> <sect>コアパッケージ "akane"<p> <sect>コアパッケージ "mayu"<p> <sect> PocketLinux 固有のキー操作 <p> <sect1>液晶濃度の変更 <p> None 以外のキーボード配列では Ctrl + F9, Ctrl + F10 で液晶の濃度を変えることができます。 <sect1>コンソールサイズの切替え <p> <sect> シリアルデバイス <p> <sect1>モデムポートと PPP <p> <sect1>シリアルポート <p> <sect1>IrDA ポート <p> </article>