Forum Linux.embarqué Problème avec un ramdisk

Posté par .
Tags : aucun
0
6
sept.
2006
Bonjour,

tout d'abord excusez-moi si je me suis trompé de section mais je ne savais pas trop où poster ce sujet, étant donné que mon problème porte sur l'utilisation d'un ramdisk sur une carte ARM9.

Voici mon problème : j'ai installé un linux sur ma carte ARM9 donc, et je désire utiliser un initrd afin que la carte boote toute seule (pas de NFS pour aller chercher l'initrd sur le réseau). Le soucis est qu'apparemment l'exécutable que je met dans mon initrd pose problème car lorsque l'arborescence est chargée en mémoire vive, j'obtient des erreurs du type :
EXT2-fs error (device ram0): ext2_check_page: bad entry in
directory #103: rec_len is smaller than minimal - offset=0, inode=0,
rec_len=0, nam0

Ceci ne bloque pas le lancement mais lorsque j'essai de faire des commandes classiques comme ls, j'obtient des erreurs pour certains fichiers. Pire, si j'essai de lancer mon exécutable j'obtient un segmentation fault (alors que la première ligne de mon main est un affichage).

Ces problème disparaissent si je remplace mon exécutable par un code plus simple (du type "hello world").

Je pense que le problème vient de la taille de mon initrd. En effet, s'il dépasse, une fois compressé, 2Mo, le téléchargement du fichier sur la carte se passe mal car la taille du téléchargement est inférieure à celle de mon initrd.
J'ai essayé de modifier quelques paramètre de mon noyau (taille et nombre des ramdisk notamment) mais rien n'y fais.

Je trouve quand même bizarre de ne pas pouvoir utiliser un ramdisk de taille supérieure d'autant plus que je dispose de 32 Mo pour le téléchargement et de 16 Mo de mémoire flash!

Quelqu'un aurai-t-il une idée ?
Merci d'avance pour vos réponses.
  • # linuxrc

    Posté par . Évalué à 2.

    J'ai essayé de modifier quelques paramètre de mon noyau (taille et nombre des ramdisk notamment) mais rien n'y fais.

    dans le kernel c'est une taille par défaut qui est définie pour les ramdisk, pour créer un ramdisk à la taille voulue, il faut modifier ton /linuxrc du genre :
    mkfse2fs -vm0 /dev/ram0 3072
    pour un ramdisk de 3Mo
    • [^] # Re: linuxrc

      Posté par . Évalué à 1.

      Le problème c'est que j'utilise Busybox. J'ai fait un grep de "RAM" sur les sources mais je n'ai pas trouvé de résultat satisfaisants.
      • [^] # Re: linuxrc

        Posté par . Évalué à 1.

        J'ai survolé les sources de busybox mais je n'ai rien trouvé d'interressant.

        En fait je me disais qu'il serai peut-être plus propre d'utiliser JFFS2.
        D'après ce que j'ai lu ce système de fichier serai intégré au noyau depuis la version de dev 2.5.*. Vu que j'ai un noyau est 2.6.16, je pense qu'il n'y a pas de problème, mais je n'arrive pas à trouver l'option dans le menu de configuration !
        Dois-je patcher mon noyau ? Si oui, où puis-je obtenir ce patch car je n'ai pas réussi à le trouver.

        Sinon, après quelques tests supplémentaires, je pense que mon problème vient bien de la taille de l'initrd si elle dépasse 2Mo, et non des fichiers qui le compose.
        • [^] # Re: linuxrc

          Posté par . Évalué à 1.

          normalement, l'option jffs2 est dans la section filesystem du menu de configuration du noyau.
          • [^] # Re: linuxrc

            Posté par . Évalué à 1.

            J'ai regardé et re-gardé mais je n'arrive pas à la trouver !
            La seule option qui s'en reproche est 'JFS' (Journaled File System).
            Est-il nécessaire d'activer une autre option afin que celle-ci devienne visible ?
            • [^] # Re: linuxrc

              Posté par . Évalué à 1.

              J'ai essayé d'utiliser le système cramfs pour générer mon initrd.
              Cette fois-ci la taille est limitée à 4Mo (au dessus ça bugge) et je n'ai pas trouvé où modifier cette taille. J'ai essayé dans le menu de configuration du noyau, dans mon bootloader, rien.

              Je commence à désespérer :-(...

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.