2015-08-24 1 views
0

Je réalise donc un projet qui nécessite de créer un disque RAM dans MINIX. La question est la suivante:Créer un disque RAM personnalisé dans MINIX

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.

Je me bats pour trouver des informations sur ce sujet Minix, donc j'ai essayé de travailler de nombreux autres tutoriels qui sont pour les distributions Linux.

En utilisant this tutoriel, je l'ai fait ce qui suit dans MINIX:

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

Puis mkfs -b 10240 -i 2000 -B 1024 /dev/ram0 rendements l'erreur:

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

Cela se produit même quand je fais le paramètre -b 1. Lorsque je tape mkfs /dev/ram0 une erreur indiquant ce qui suit apparaît:

mkfs: this device can't hold a filesystem.

Dans le tutoriel, je peux voir l'auteur augmenter la taille du disque virtuel à 16 Go dans grub.conf, mais ce fichier ne se trouve pas dans/etc.

Toute aide serait appréciée car j'ai du mal à trouver des informations sur MINIX en général avec des tâches comme celle-ci.

+0

doit vous « mettre en œuvre votre propre disque virtuel » avec votre propre code, ou utiliser ce qui est déjà là? Si vous n'écrivez pas votre propre code, cette question est hors de portée pour Stack Overflow. – Brad

+0

@Brad Ils n'ont pas spécifié. Serait-il possible pour moi d'implémenter ceci avec mon propre code, étant donné que je fais le module Systèmes d'exploitation (à l'université) depuis seulement un mois maintenant et que j'ai commencé à utiliser MINIX il y a 2 semaines. –

+0

Non, ce ne serait pas possible, désolé. Vous devriez savoir comment écrire vos propres modules de noyau. – Brad

Répondre

0

I figured it out:

Sur la ligne 43 du

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

ajouter #define FAST_DEV 6. Maintenant, nous avons un symbole pour représenter la mineure de notre nouvel appareil. Cela nous aide simplement à éviter les nombres magiques.

m_ioctl() dans

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

est codé en dur pour recevoir un message et de créer le dispositif de mémoire vive. Pour le rendre générique changer RAM_DEV (regardez à travers la fonction, il est là en tant que paramètre à une fonction) à m_ptr->DEVICE. RAM_DEV est le numéro de périphérique mineur du périphérique RAM et m_ptr->DEVICE est le numéro de périphérique mineur que la demande veut être créé (cela aura du sens dans un certain temps). En outre, à la ligne 28 de ce fichier, vous devez incrémenter la valeur de NR_DEVS pour permettre au programme de créer le nouveau périphérique que nous allons spécifier maintenant. Ensuite, autour de la ligne 143 dans la fonction m_transfer(), il y a un commutateur sur m_device pour le cas RAM_DEV, KMEM_DEV et BOOT_DEV, ajouter case FAST_DEV sous BOOT_DEV. Cela permettra au système d'exploitation de transférer des fichiers de/vers notre nouvel appareil de la même manière que pour RAM_DEV.

Dans

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

vous verrez que main() appels fs_init() qui à son tour appel load_ram(). Dans load_ram() est où le message (qui est reçu dans m_ioctl()) est construit et envoyé.Pour créer un message pour notre nouveau dispositif ajouter ce qui suit au début du fucntion:

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

recompiler maintenant:

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

Créer appareil rapide:

mknod /dev/fast b 1 6 

EDIT:

Clarification pour 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 
} 

Précisions pour l'instruction switch:

case RAM_DEV: 
case KMEM_DEV: 
case BOOT_DEV: 
case FAST_DEV: /* add this line */