【问题标题】:Create a custom RAM disk in MINIX在 MINIX 中创建自定义 RAM 磁盘
【发布时间】:2015-08-24 18:46:07
【问题描述】:

所以我正在做一个需要我在 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 的一般信息以完成此类任务。

【问题讨论】:

  • 您必须用自己的代码“实现自己的 ramdisk”,还是使用已有的代码?如果您不编写自己的代码,则此问题超出 Stack Overflow 的范围。
  • @Brad 他们没有指定。考虑到我(在大学里)做操作系统模块只有一个月,两周前开始使用 MINIX,我是否可以用我自己的代码来实现它。
  • 不,这不可能,抱歉。您必须知道如何编写自己的内核模块。
  • 那么我确定他们的意思是使用现有的东西。 :-) 明天与讲师交谈时我会报告。

标签: minix ramdisk


【解决方案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 开关,用于 RAM_DEVKMEM_DEVBOOT_DEV,在 BOOT_DEV 下方添加 case FAST_DEV。这将允许操作系统以与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 */

【讨论】:

    猜你喜欢
    • 2018-02-23
    • 2012-12-29
    • 2012-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    • 2018-04-14
    相关资源
    最近更新 更多