bonjour,
je dois actuellement développer des applis sur une carte à base d'un arm9 (c'est une KB9202).
Une image de linux est présente de base dessus mais elle ne me satisfait pas car elle ne possède pas de module gérant le port USB et les outils de connections fil. J'ai donc "Cross compilé" une nouvelle image compressée (zImage) que je télécharge ensuite sur ma carte. J'ai un problème lorsque je redémarre la carte avec cette image.
En effet, si la taille de ma nouvelle image est supérieure à celle qui était présente à la base, la trace m'affiche :
RAMDISK: Couldn't find valid RAM disk image starting at 0.
Kernel panic - not syncing: VFS: Unable to mount root fs on nknown-block(1,0)
Je pense que cela doit venir de mon initrd. Je suppose qu'il faut en créer un pour chaque image qu'on met sur la carte afin de préciser la taille de cette dernière. J'ai cependant crée un nouvel initrd grâce à mkinitrd mais rien à faire, j'ai toujours la même erreur.
Ca fait pas mal de temps que je suis dessus et ça commence sérieusement à me souler cette histoire :-(
Merci d'avance pour vos réponse
# Filesystem
Posté par mururoa69 . Évalué à 0.
Par exemple ça ferait ça si tu installais un kernel non compatible reiserfs pour booter sur une partition reiserfs.
[^] # Re: Filesystem
Posté par undine . Évalué à 1.
Je vais essayer d'en compiler une qui gère un maximum de filesystem
Merci
[^] # Re: Filesystem
Posté par hervé Couvelard . Évalué à 3.
pour faire un ramdisk avec init je fais un truc comme cela :
dd if=/dev/zero of=$tempfile bs=1k count=$ramdisk_size
mke2fs -b 1024 -m 1 -i 2048 -F $tempfile
mount -t ext2 -o loop $tempfile /home/point_montage
cp -Rdf /home/CD_DIST/* /home/point_montage (<< le contenu de mon ramddisk)
cd /home/point_montage
find . -print | cpio -o -H newc >/home/rootfs.cpio
cat /home/rootfs.cpio | gzip -v9 > initrd.img 2> /dev/null
umount /home/point_montage
et j'ai mon ramdisk
[^] # Re: Filesystem
Posté par undine . Évalué à 1.
Je suppose que c'est tous les fichiers que tu veut mettre sur ton ramDisk, mais le problème c'est que moi je ne sais pas lesquels je doit y mettre.
Je débute dans l'embarqué et je ne suis pas un expert linux donc j'ai un peut de mal avec les concepts liés au bootage de système (ramdisk, initrd, bootloader, ...) et vu que les doc fourni avec la carte sont un peut pourri, je rame.
[^] # Re: Filesystem
Posté par hervé Couvelard . Évalué à 2.
Ensuite, oui, il y a un initrd pour chaque image.
Le initrd est un 'mini système' avec les mêmes repertoire /etc /usr /sbin etc .... qu'un sytème et il 'aide' le noyeau avec les modules (il charge les modules nécessaires) par exemple si ext3 est en module, que le disque est en ext3, il ne peut pas trouver le module ext3 pour lire du ext3, DONC dans ce cas le module ext3 est chargé DANS le initrd. et ensuite il y a le fichier init qui se lance et s'exécute là ou tu fais ce que tu veux.
Ensuite, avec la config du noyeau (je sais plus ou) on peut choisir la forme de l'initrd soit ramdisk (l'avantage pour faire un live cd par exemple) car le système est en RAM, soit un autre type par exemple ext2 dans mon exemple, tu crées un espace disque que tu formates en ext2 (pour pouvoir y ecrire dessus) si tu le compresses directement avec gzip, tu as un initrd en ext2 MAIS dans mon cas, je le fais passer par cpio puis gzip et cela me donne un ramfs
Si tu veux approfondir cette zone de linux, je te conseille de te plonger dans mindi, la comprenette de ce que cela fait est lumineux.
hervé
[^] # Re: Filesystem
Posté par undine . Évalué à 1.
De mon coté je me suis un peut plus rensseigné sur le sujet et je vois maintenant un peut mieux à quoi sert le initrd.
Je ne pense pas que mon problème vienne de mon initrd car avec l'image de base, mon noyaux se lance sans problème. Il suffit en fait que je place dans la mémoire flash une image dont la taille est inférieur ou égale à celle qui était de base sur la carte (environ 857Ko).
D'après ce que j'ai compris sur initrd, je pense qu'il n'est pas nécessaire de changer l'initrd lorsqu'on change d'image. Dans mon cas je ne rajoute que les modules servant à la gestion des ports USB et des outils pour connections sans fils (wireless tools). Je ne pense pas qu'il faille modifier l'initrd pour cela.
La seule possibilité vient donc que je me plante lorsque je rajoute la gestion des ports USB et des wireless tools lors du 'make menuconfig'. Pourtant je ne fait pas beaucoup de manipulations :
- lors du 'make menuconfig', dans la catégorie 'USB support' , j'active l'option 'Support for Host-side USB' de sorte que le module soit installé de 'manière modulaire' (il sera lancé que lorsque c'est nécessaire)
- dans les options apparues, j'active l'option 'USB verbose debug messages'. Je ne peut la sélectionner qu'en 'built-in' et pas en modulaire comme la précédente.
- j'active aussi (de manière modulaire) les options 'OHCI HCD support', 'SL811HS HCD support' et 'USB Mass Storage support'
- dans la catégorie 'Networking support', je vais dans l'option 'Wireless LAN (non-hamradio)'
- j'active l'option 'Wireless LAN drivers (non-hamradio) & Wireless Extensions' (built-in obligé là aussi)
Et c'est tout. Je ne modifie que ces 6 options.
La seule chose qui pourrai faire bugger c'est peut-être d'activer en même temps les 2 options 'OHCI HCD support', 'SL811HS HCD support' mais ça m'étonnerai étant donné qu'elle seront implémentées de manière modulaire.
Je ne vois pas autre chose. Ai-je oublié d'activer des options ?
Je vais essayer de voir ce que cela donne en désactivant les options obligatoirement compilées en built-in (verbose pour l'USB+wireless tool).
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.