1

そのため、MINIX で RAM ディスクを作成する必要があるプロジェクトを行っています。質問は次のとおりです。

あなたの仕事は、高速アクセスが必要なデータを保存する場所として使用できる独自の RAM ディスクを実装することです。すべてのユーザーに読み取りと書き込みのアクセス許可が必要で、サイズは 10 MB である必要があります。

私は MINIX のこのトピックに関する情報を見つけるのに苦労しているので、Linux ディストリビューション用の他の多くのチュートリアルに取り組もうとしています。

このチュートリアルを使用して、MINIX で次のことを行いました。

mknod /dev/ram0 c 0 1
chmod 777 /dev/ram0

次にmkfs -b 10240 -i 2000 -B 1024 /dev/ram0、エラーが発生します。

mkfs: /dev/ram0: デバイスに対して大きすぎるブロック数。

-bこれは、パラメーター 1を作成しても発生します。入力mkfs /dev/ram0すると、次のようなエラーが表示されます。

mkfs: このデバイスはファイルシステムを保持できません。

チュートリアルでは、作成者が grub.conf で ramdisk のサイズを 16GB に増やしているのを見ることができますが、そのファイルは /etc にありません。

このようなタスクで一般的にMINIXに関する情報を見つけるのに苦労しているので、どんな助けでも感謝します。

4

1 に答える 1

1

私はそれを考え出した:

の 43 行目

/usr/src/include/minix/dmap.h

追加し#define FAST_DEV 6ます。これで、新しいデバイスのマイナーを表すシンボルができました。これは単にマジック ナンバーを回避するのに役立ちます。

m_ioctl()

/usr/src/drivers/memory/memory.c

メッセージを受信して​​ RAM デバイスを作成するようにハードコードされています。それを一般的な変更にするにRAM_DEVは(関数を調べてください。関数のパラメーターとしてそこにあります)m_ptr->DEVICERAM_DEVは RAM デバイスm_ptr->DEVICEのマイナー デバイス番号であり、リクエストが作成するマイナー デバイス番号です (しばらくすると意味がわかるでしょう)。また、このファイルの 28 行目で、NR_DEVSこれから指定する新しいデバイスをプログラムが作成できるように、 の値をインクリメントする必要があります。m_transfer()次に、関数の 143 行あたりでm_device、 caseのスイッチがオンRAM_DEVKMEM_DEVなり、その下BOOT_DEVに が追加されます。これにより、OS は の場合と同じ方法で、新しいデバイスとの間でファイルを転送できます。case FAST_DEVBOOT_DEVRAM_DEV

/usr/src/servers/fs/main.c

main()その呼び出しfs_init()がを呼び出すことがわかりますload_ram()。Inload_ram()は、( で受信されたm_ioctl()) メッセージが作成されて送信される場所です。新しいデバイス用のメッセージを作成するには、関数の先頭に次を追加します。

m_out.m_type = DEV_IOCTL;
m_out.PROC_NR = FS_PROC_NR;
m_out.DEVICE = FAST_DEV; /* minor of fast device, this is why we had to make m_ioctl() generic */
m_out.REQUEST = MIOCRAMSIZE;
m_out.POSITION = 10485760 /* size of 10MB in bytes */
s = sendrec(MEM_PROCNR, &m_out); /* this sends the message */

再コンパイルします。

cd /usr/src
make world
make install
and make all the directories that you worked in (just to be safe)
then shutdown

高速デバイスの作成:

mknod /dev/fast b 1 6

編集:

load_ram() の説明:

PRIVATE void load_ram(void)
{
    register struct buf *bp, *bp1;
    ...
    ...
    int s;

    /* add the code here */
    m_out.m_type = DEV_IOCTL;
    etc
}

switch ステートメントの説明:

case RAM_DEV:
case KMEM_DEV:
case BOOT_DEV:
case FAST_DEV: /* add this line */
于 2015-09-01T11:51:37.890 に答える