在MINIX中创建自定义RAM磁盘

时间:2015-08-24 18:46:08

标签: minix ramdisk

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

  

您的任务是实现自己的RAM磁盘,可以用作   存储需要快速访问的数据的位置。应该有   每个人的读写权限,大小必须为10MB。

我很难为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:设备的块数太大。

即使我创建-b参数1,也会发生这种情况。 当我输入mkfs /dev/ram0时会出现错误,说明以下内容:

  

mkfs:此设备无法保存文件系统。

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

任何帮助都会受到赞赏,因为我一直在努力寻找有关MINIX的信息。

1 个答案:

答案 0 :(得分:0)

我明白了:

的第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下面添加BOOT_DEV {1}}。这将允许操作系统以与RAM_DEV相同的方式将文件传输到新设备或从我们的新设备传输文件。

  

/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 */