在 MINIX 中创建自定义 RAM 磁盘

Create a custom RAM disk in MINIX

所以我正在做一个项目,要求我在 MINIX 中创建一个 RAM 磁盘。题目如下:

Your task is to implement your own RAM disk which can be used as a location to store data where fast access is required. It should have read and write permissions for everybody and must be 10MB in size.

我正在努力寻找关于 MINIX 的这个主题的信息,所以我一直在努力完成许多其他 Linux 发行版的教程。

使用 this 教程,我在 MINIX 中完成了以下操作:

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

然后 mkfs -b 10240 -i 2000 -B 1024 /dev/ram0 产生错误:

mkfs: /dev/ram0: number of blocks too large for device.

即使我将 -b 参数设置为 1 也会出现这种情况。 当我键入 mkfs /dev/ram0 时,出现以下错误:

mkfs: this device can't hold a filesystem.

在教程中我可以看到作者在 grub.conf 中将 ramdisk 的大小增加到 16GB,但该文件不在 /etc.

任何帮助将不胜感激,因为我正在努力寻找有关 MINIX 的信息来完成这样的任务。

我想通了:

的第 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 用于 RAM_DEVKMEM_DEVBOOT_DEV,在 case FAST_DEV 下面添加 case FAST_DEV =26=]。这将允许 OS 以与 RAM_DEV.

相同的方式传输文件 to/from 我们的新设备

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

您会看到 main() 调用 fs_init(),后者又调用 load_ram()。在 load_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 */