私はそれを考え出した:
の 43 行目
/usr/src/include/minix/dmap.h
追加し#define FAST_DEV 6
ます。これで、新しいデバイスのマイナーを表すシンボルができました。これは単にマジック ナンバーを回避するのに役立ちます。
m_ioctl()
の
/usr/src/drivers/memory/memory.c
メッセージを受信して RAM デバイスを作成するようにハードコードされています。それを一般的な変更にするにRAM_DEV
は(関数を調べてください。関数のパラメーターとしてそこにあります)m_ptr->DEVICE
。RAM_DEV
は RAM デバイスm_ptr->DEVICE
のマイナー デバイス番号であり、リクエストが作成するマイナー デバイス番号です (しばらくすると意味がわかるでしょう)。また、このファイルの 28 行目で、NR_DEVS
これから指定する新しいデバイスをプログラムが作成できるように、 の値をインクリメントする必要があります。m_transfer()
次に、関数の 143 行あたりでm_device
、 caseのスイッチがオンRAM_DEV
にKMEM_DEV
なり、その下BOOT_DEV
に が追加されます。これにより、OS は の場合と同じ方法で、新しいデバイスとの間でファイルを転送できます。case FAST_DEV
BOOT_DEV
RAM_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 */