Forum Linux.embarqué Problème avec une image linux : kernel panic

Posté par  .
Étiquettes : aucune
0
13
avr.
2006
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  . Évalué à 0.

    Ca ressemble à un kernel qui n'est pas compilé pour supporter le filesystem que tu utilises sur la partition de boot ou sur /.
    Par exemple ça ferait ça si tu installais un kernel non compatible reiserfs pour booter sur une partition reiserfs.
    • [^] # Re: Filesystem

      Posté par  . Évalué à 1.

      Ca viendrai donc de mon image ?
      Je vais essayer d'en compiler une qui gère un maximum de filesystem

      Merci
      • [^] # Re: Filesystem

        Posté par  . Évalué à 3.

        euh.. could not find a ramdisk image, cela ne veut pas dire que ton initrd n'est pas un ram disk mais par exemple fait avec comme un ext2 ?

        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  . Évalué à 1.

          Petite question : quoi correspond ton /home/CD_DIST/* ?
          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  . Évalué à 2.

            une méthode pourrait être de monter ton image initrd d'en extraire les fichiers et de les mettres dans le repertoire que tu vas compresser.

            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  . Évalué à 1.

              Merci pour ta réponse, je vais aller regarder tout ça.

              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.