Linux en RAM
Le
pk
Bonjour,
Je travail actuellement sur le test d'un système Linux sur coldfire
5485.
J'utilise le BSP Linux, basé sur le noyau 2.6.10, fournit par
freescale, et leur carte dévaluation 5485.
Jusqu'à présent, je réalisait mes essais en montant le système de
fichiers root sur NFS ou en Flash (jffs2).
J'ai maintenant besoin d'utiliser un système _exclusivement_ en RAM
(noyau + Système de fichiers), mais je ne comprend pas bien comment
procéder
J'utilise le bootloader Colilo (dérivé de Lilo).
Dans les options de compilation du noyau, j'ai le choix, pour un
système de fichiers root en RAM, entre "cramfs" et "ext2.gz Ramdisk".
J'ai essayé d'utiliser "ext2.gz Ramdisk". La compilation me génère
alors le noyau "vmlinux.bin" (2.6Mo) et le système de fichiers
"rootfs.ext2.gz" (3Mo, 9Mo décompressé).
J'ai activé les supports suivants pour le noyau :
<*> RAM disk support
(5) Default number of RAM disks
(12288) Default RAM disk size (kbytes)
[*] Initial RAM disk (initrd) support
<*> Second extended fs support
[*] Ext2 extended attributes
<*> ROM file system support
[*] /dev file system support
[*] Virtual memory file system support
[*] tmpfs Extended Attributes
Ensuite, j'ai procédé de la façon suivante :
- placement du "rootfs.ext2.gz" en RAM (0x02000000)
- placement du noyau "vmlinux.bin" en RAM (0x1000)
- ligne de commande de colilo :
"root=/dev/ram0 rootfstype=ext2.gz initrd=0x02000000
ramdisk_size=12288 load_ramdisk=1 keepinitrd"
- lancement du noyau (g 0x2000)
"starting up linux rev 0.2: startmem 0xc022c000, size 125MB
[]
Memory: 127848k/131072k available (1568k kernel code, 1384k data, 80k
init)
[]
devfs: 2004-01-31 Richard Gooch (rgooch@atnf.csiro.au)
devfs: devfs_debug: 0x0
devfs: boot_options: 0x1
[]
RAMDISK driver initialized: 5 RAM disks of 12288K size 1024 blocksize
[]
VFS: Cannot open root device "ram0" or unknown-block(1,0)
Please append a correct "root=" boot option
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-
block(1,0)"
Pouvez-vous, svp, m'expliquer comment avoir mon système en RAM, qu'est
ce qui ne vas pas ici ? Comment indiquer le rootfs au noyau ?
Merci de votre aide,
Pk
Je travail actuellement sur le test d'un système Linux sur coldfire
5485.
J'utilise le BSP Linux, basé sur le noyau 2.6.10, fournit par
freescale, et leur carte dévaluation 5485.
Jusqu'à présent, je réalisait mes essais en montant le système de
fichiers root sur NFS ou en Flash (jffs2).
J'ai maintenant besoin d'utiliser un système _exclusivement_ en RAM
(noyau + Système de fichiers), mais je ne comprend pas bien comment
procéder
J'utilise le bootloader Colilo (dérivé de Lilo).
Dans les options de compilation du noyau, j'ai le choix, pour un
système de fichiers root en RAM, entre "cramfs" et "ext2.gz Ramdisk".
J'ai essayé d'utiliser "ext2.gz Ramdisk". La compilation me génère
alors le noyau "vmlinux.bin" (2.6Mo) et le système de fichiers
"rootfs.ext2.gz" (3Mo, 9Mo décompressé).
J'ai activé les supports suivants pour le noyau :
<*> RAM disk support
(5) Default number of RAM disks
(12288) Default RAM disk size (kbytes)
[*] Initial RAM disk (initrd) support
<*> Second extended fs support
[*] Ext2 extended attributes
<*> ROM file system support
[*] /dev file system support
[*] Virtual memory file system support
[*] tmpfs Extended Attributes
Ensuite, j'ai procédé de la façon suivante :
- placement du "rootfs.ext2.gz" en RAM (0x02000000)
- placement du noyau "vmlinux.bin" en RAM (0x1000)
- ligne de commande de colilo :
"root=/dev/ram0 rootfstype=ext2.gz initrd=0x02000000
ramdisk_size=12288 load_ramdisk=1 keepinitrd"
- lancement du noyau (g 0x2000)
"starting up linux rev 0.2: startmem 0xc022c000, size 125MB
[]
Memory: 127848k/131072k available (1568k kernel code, 1384k data, 80k
init)
[]
devfs: 2004-01-31 Richard Gooch (rgooch@atnf.csiro.au)
devfs: devfs_debug: 0x0
devfs: boot_options: 0x1
[]
RAMDISK driver initialized: 5 RAM disks of 12288K size 1024 blocksize
[]
VFS: Cannot open root device "ram0" or unknown-block(1,0)
Please append a correct "root=" boot option
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-
block(1,0)"
Pouvez-vous, svp, m'expliquer comment avoir mon système en RAM, qu'est
ce qui ne vas pas ici ? Comment indiquer le rootfs au noyau ?
Merci de votre aide,
Pk

Poser une question


Bonjour,
J'ai peut-être tres mal compris ce que tu veux faire, mais il me semble
que la RAM est quelquechose qui s'efface au moins à chaque coupure
d'alimentation. Ce qui veut dire qu'apres un cycle de mise hors tension
+ remise sous tension, ce qui est dans la RAM sera perdu.
Il te faudra donc un support moins volatile pour tout remettre dans la
RAM. Ce qui revient à utiliser autre chose que la RAM...
--
Huile Essentielle de Camphre http://www.huile-camphre.fr
Infogerance http://www.infogerance.us
(Serveurs, Postes de travail, Développement logiciel)
j'essaie de faire la même chose pour voir où pourrait se trouver le
problème mais j'ai pas le temps)
Bonjour,
Non je n'ai pas de initrd compilé, j'ai surement mal compris cette
notion ...
quand je travaillait avec un système de fichiers en Flash, j'avais la
ligne de commande suivante, et tout marchait très bien :
"set cl mac0 :04:9f:b5:69:3a root=/dev/mtdblock2 rootfstype=jffs2
noinitrd ip=none mtdparts=phys_mapped_flash:256k(Colilo),2816k(kernel),
3072k(user),-(others)"
En fait, je voudrait faire exactement la même chose, mais avec un
système de fichier en RAM ... sauf que je n'arrive pas à comprendre
comment faire pointer le noyau vers l'adresse où je charge mon système
de fichiers (dans mes tests un ext2.gz)...
En flash c'était plus simple, puisque je donnait le mapping, et je
savait donc mtdblock2 =0x....
Là j'ai des ramdisks ram0, ram1 et ram2 ... mais je ne sait pas à
quelles adresses physiques ils correpondent ...
au boot, j'ai la ligne suivante :
"starting up linux rev 0.2: startmem 0xc0204000, size 125MB"
ou encore :
"Memory: 128008k/131072k available (1424k kernel code, 1368k data, 80k
init)"
Je me suis dis que mon ram0 était peut-être en 0xc0204000, et j'ai
essayer d'y charger mon rootfs.ext2.gz, ou sa version décompressée
rootfs.ext2 ... sans succès ...
Je passe probablement à côté d'une notion essentielle ...
Merci de votre aide,
Pk
Quand tu montais le root dans la flash, le système était déjà présent
dans la flash. Y'avait qu'à démarrer init et c'était bon.
En RAM c'est plus compliqué : il faut charger le système voulu (depuis
une mémoire flash, depuis du nfs, etc, etc) avant de pouvoir le monter
et charger init et le reste.
Donc le principe est de construire un initrd qui contiendra un système
minimal capable d'aller chercher une image du système et de la mettre à
la bonne place (ici dans un ramdisk) et seulement ensuite de monter le
ramdisk et démarrer dessus.
Une recherche google avec les mots-clefs diskless et ramdisk peut aider,
aussi.
Mais je me demande autre chose : est-ce que je ne pourrai pas
reproduire les conditions du montage sur flash ?
Je veux dire par là que si je connaissais l'adresse physique ou
pointe /dev/ram0 (ce qui n'est pas le cas), je pourrai directement y
charger le système de fichier décompressé (rootfs.ext2) et passer en
ligne de commande quelque chose comme "noinitrd root=/dev/ram0
rootfstype=ext2" ... tout faux ?
Encore merci
Pk
On Apr 2, 4:04 pm, Samuel Colin