私はOSを開発しようとしていますが、ステップ0はext4パーティション(最初のLBAで指定)のファイル(inodeで指定)からステップ1をロードするブートローダーで始まります。もちろん、ブートする必要があり、QEMUを選択しました。何をすべきか?
これまでうまく機能するのは次のとおりです。
truncate -s64M /tmp/SomeVolume
/sbin/mke2fs -t ext4 -F /tmp/SomeVolume
yasm phase0.asm
dd if=phase0 of=/tmp/SomeVolume conv=notrunc
約64MBのボリュームを作成してext4でフォーマットし、最初の1024オクテットをPhase0で上書きしました(サイズは常に1024バイトです)。これは素晴らしい作品です。
しかし、もう少し現実的なシナリオに適しているかどうかをテストするために、適切に分割されたファイルを作成したいと思います。/sbin/cfdisk
私はボリュームファイルが利用可能であることを知っていますが、mke2fs
ファイルから範囲を選択できるパラメータはありません。
今知っていますループを利用したソリューションしかし、残念ながら私には機能しないようです(max_part
Debian jessieでは変更できないようです)。あるようだ他のモジュールが呼び出されます。nbd
ただし、モジュールと一緒にサーバーとクライアントがインストールされていません。そして、ユーザー空間で明らかにできることを行うには、ルートアクセスが必要であることは少し面白いです。
ユーザーとしてこれをどのように実行しますか?それとも、私が作成したext4形式のファイルの周りにMBR / GPTパーティションボリュームを構築する必要がありますか?
ベストアンサー1
長い旅行。しかし楽しみのために:
1.
一時イメージを作成します。
$ truncate -s64MiB tmp.img
2.
次のコマンドを使用して2つのパーティションを作成しますfdisk
。
少し詳しく説明していますが、大丈夫です。
$ fdisk tmp.img
最初のパーティション:
: n <Enter>
: <Enter> (p)
: <Enter> (1)
: <Enter> (2048)
: +40M <Enter>
2番目のパーティション:
: n <Enter>
: <Enter> (p)
: <Enter> (2)
: <Enter> (83968)
: <Enter> (131071)
私たちが書きたいものを印刷してください:
: x
: p
Nr AF Hd Sec Cyl Hd Sec Cyl Start Size ID
1 00 32 33 0 57 52 5 2048 81920 83
2 00 57 53 5 40 32 8 83968 47104 83
作成して終了します。
:w (Dont! forget ;-) )
40MiBと23MiBの2つのパーティションがあります。
81920 * 512 / 1024 / 1024 = 40MiB
47104 * 512 / 1024 / 1024 = 23MiB
3.
2 つのファイルシステムを作成します。
truncate -s40MiB ext4.img
truncate -s23MiB ext3.img
mke2fs -t ext4 -F -L part_ext4 ext4.img
mke2fs -t ext3 -F -L part_ext3 ext3.img
4.
すべて一緒に縫います。
2048*512
一時イメージから最初のバイトを抽出します。
dd if=tmp.img of=disk.img bs=512 count=2048
それらを結合しなさい:
cat ext4.img ext3.img >> disk.img
美しい。