スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
webadm | 投稿日時: 2006-3-14 21:53 |
Webmaster 登録日: 2004-11-7 居住地: 投稿: 3107 |
vfatをroofファイルシステムに使う時の罠 最初に気づくべきだったが、vfatをrootファイルシステムに使おうとするとすぐに限界にぶつかる。
通常uClinuxのルートファイルシステムでは/sbinは/binのシンボリックリンクになっている、どちらのディレクトリからも同じバイナリが参照されるようにするためだ。 mount -t vfat /dev/hda1 /mnt cd /mnt mkdir bin cp /bin/* bin とここまでは順調だったが、 ln -s bin sbin とやったところエラーが出てシンボリックリンクが作成できない。 よく考えたらvfatにはシンボリックリンクという概念がないので作成できるはずもなかった。uClinuxの標準的なファイルシステムではあたりまえのように使われているのでこれは少しまずい。でも容量がいっぱいあるから必要なファイルをコピーしておけばこれはなんとかなる。 これでrootファイルシステムとして立ち上がることはするのだが、もうひとつ/dev配下のデバイスノードを作らないといけない。 これも cd /mnt mknod console c 5 1 とかやるとエラーが出る。 vfatにはデバイススペシャルファイルなどの概念はないのであった。 そこでdevfsがあるのかとひらめく。後でやり方を調べてみよう。 |
webadm | 投稿日時: 2006-3-16 3:00 |
Webmaster 登録日: 2004-11-7 居住地: 投稿: 3107 |
devfsを有効にすると__set_bitが未解決シンボルになる とりあえずmake menuconfigでdevfsを有効にしてビルドしてみた。
すると__set_g e2bc47e1860756a435e93604aa9bf095 7$ df827fd5e9727dec15fa22239bba383 32982f85d58cc2c6d34f4bd5c7132ae /1 6afd396ce6bbec1bd24de4886637b8 8帚 f86fee3cc1ae9f658539266d5810273 JL ia7f8c9e638af481664e5a35fb63097 i /be7cbb776425e0f7544c4af76e1d51 4l Df5da4cc33180d0280e656da5668f38 427968d81f0be7512ba3bfccd2b7fdc *$ I3a819ed3e4a78698aa0b6e6c3b35aa )s ;4c1f63e4a552be7457522ad8da63e8 7jT i8b05d582093aa60694b63240675114 X jb6f69332821147ff9e5a0f1bde8cfd 辟 d5d49735bbc97dff745b52915f0d22 6"$ |
webadm | 投稿日時: 2006-3-16 7:35 |
Webmaster 登録日: 2004-11-7 居住地: 投稿: 3107 |
inittabの変更が必要だった 以前は/etc/inittabを
ttySC1:linux:/bin/sh としていたのをとりあえず console:linux:/bin/sh に変えてshellが立ち上がるようになった。 引用: /> ls /dev devfsを使用した場合にはttySC1はttysc/1 にマップされるのでttySC1は使えなくなったのだった。 あとはuserlandのflatバイナリをもう圧縮する必要がないので非圧縮にしてビルドしなおしてftpでコピーすればコマンドの起動はすばやくなると思われる。さすがに圧縮イメージだと遅い。 |
webadm | 投稿日時: 2006-3-16 17:45 |
Webmaster 登録日: 2004-11-7 居住地: 投稿: 3107 |
空きメモリ量がかえって減っている VFATファイルシステムのHDDをrootファイルシステムにしてromfsを含まないカーネルのみロードして立ち上げても期待したような空きメモリーの増加が得られないことが判明。
ちょっとファイルをアクセスしただけで、空きが1MBを割ってしまうとはなさけない。 引用:
もしかしてvfatファイルシステムをmountするとFATテーブルとかをメモリ上で管理するためにごっそりカーネルメモリ消費量が増えているのだろうか。それだったらまだビットマップだけで済むext2ファイルシステムの方が効率的ではないのか。 真偽のほどは調査しないとなんとも言えないがあり得る話だ。 |
webadm | 投稿日時: 2006-3-17 19:40 |
Webmaster 登録日: 2004-11-7 居住地: 投稿: 3107 |
vfatがメモリを食うわけではないようだ もう一度romfsに戻して立ち上げてvfatのhddをmountする前と後でfreeメモリー残量を比較してみると、確かに多少はメモリを食うが気にするほどでもなく微量であった。カーネルのソースを見ると最大8ページ分しかFATはメモリ上にキャッシュしないようだし、結果はそれを裏付けていた。
むしろhddをアクセスした時に生じるバッファキャッシュの方が量的には多い。 気になるのはそうすると立ち上がった時点で利用可能なメモリが2796KBあったのに既にそのうちの1676KBが使われてしまっている点だろうか。 それとカーネルが1MBも占有するのも気になるところ。 psを入れて立ち上がった直後のプロセスリストを表示してみるとカーネルプロセスがほとんどでユーザーランドではinitとshellにpsコマンドという感じ。カーネルswapperとかが動いているけどuClinuxはswapをサポートしているのか? なら余っているHDDのスペースにswapパーティションを作ってswapに割り当ててやればメモリを無駄に塞いでいるユーザーランドのプロセスを追い出してくれるのだろうか? 調べてみないとなんとも。 でもswapをサポートしているならforkもサポートできるとは思うのだが。昔から元祖unixはswapをサポートしていたし、forkした子プロセスにメモリを割り当てられない場合にはswap領域に親プロセスのメモリ内容をコピーして後でメモリにswapinされて動くようにお膳立てしてくれたのが少ないメモリ量の時代でも端末を複数つないでマルチユーザーをサポートできたゆえんでもある。 uClinuxは組み込み用でHDDのような大容量の二次記憶装置が利用できないことを前提としているのでswapも働くかどうかも怪しいところではある。 |
webadm | 投稿日時: 2006-3-17 20:28 |
Webmaster 登録日: 2004-11-7 居住地: 投稿: 3107 |
swapはサポートされていなかった busyboxのmkswapやswaponoffを入れてやってみた。
fdiskで2番目のパーティションを切ってlinux swapタイプに設定。 mkswapでswapエリア初期化。 /> mkswap /dev/ide/host0/bus0/target0/lun0/part2 Setting up swapspace version 1, size = 271429632 bytes これはOK あとはswaponコマンドで利用開始するだけ /> swapon /dev/ide/host0/bus0/target0/lun0/part2 swapon: /dev/ide/host0/bus0/target0/lun0/part2: Unknown error 38 pid 30: failed 256 あら、error 38ってなんだろうと調べたら #define ENOSYS 38 /* Function not implemented */ やはりサポートされてませんでした。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
投稿するにはまず登録を | |