18日目 その1
あまり書くことがなかったので、前回の5日目からいっきに飛んで18日目dirコマンド。
OS自作本の中ではFDをFAT12でフォーマットしてbootpackのイメージとかはそこにファイルとして保存してたので、dirコマンドではFDイメージを素直にFAT12と解釈して読み込むという実装になっている。
しかし自分は今までイメージを直接FDに書きこんできたため、要はFAT12を前提としているOS自作本のままのdir実装は使えない。さてどうしたもんか…
いまからFAT12に変更するのはあまりおもしろくないし、せっかくLinux上で作ってるのでなんかソレっぽい方法を取りたいってことで、以下の方針に決定。
さっそくext2イメージの作成から。
まずは100kB程度のファイルを作成。
$ dd if=/dev/zero of=root_fs bs=1k count=100 100+0 records in 100+0 records out 102400 bytes (102 kB) copied, 0.000674 seconds, 152 MB/s
root_fsという名前の102kBゼロ埋めファイルができました。
つぎにファイルをext2でフォーマット
$ /sbin/mke2fs root_fs mke2fs 1.39 (29-May-2006) root_fs is not a block special device. Proceed anyway? (y,n) y Filesystem label= OS type: Linux Block size=1024 (log=0) Fragment size=1024 (log=0) 16 inodes, 100 blocks 5 blocks (5.00%) reserved for the super user First data block=1 1 block group 8192 blocks per group, 8192 fragments per group 16 inodes per group Writing inode tables: done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 21 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
今回はブロックサイズその他のオプションはすべてデフォルト値に。
カレントディレクトリにmntというディレクトリを掘ってそこにroot_fsをループバックマウント。
$ mkdir ./mnt $ mount -o loop root_fs ./mnt
dfでみると確かにマウントされてるのがわかる。
(ここでは/tmp以下で上記操作をおこなった)
$ df (中略) /tmp/root_fs 93 14 74 16% /tmp/mnt
あとは./mntに好きなようにファイルを格納してやればOK