Non / proc dans une dissortingbution Linux embarquée basée sur Busybox

Je fais une dissortingbution Linux embarquée et ma carte est un Raspberry Pi. Ma version de kernel est 3.2.27 sans initramfs et mon système de files racine comme suit:

/lib /* contains kernel modules */ /bin /sbin /usr/bin /usr/sbin /* contains busybox utils binaries */ /usr/lib /* contains cross-comstackr tool chain libs */ linuxrc /* generated by busybox, kept in / */ /dev /* I have created console and ttyAM0 manually but added mode devices by udev */ /etc/init.d/rcS /* required by busybox init */ 

après l'amorçage du kernel je reçois une console (je ne sais pas si c'est console busybox ou non). J'ai peu de problèmes ci-dessous

  • Aucune information de process disponible (aucun file / dossier créé sous /proc ).
  • Quand j'utilise ps -e ça ne montre rien.

Pourquoi ce comportement inattendu se produit?

Après avoir initialisé et monté le système de files racine, Linux démarre /sbin/init qui continue avec les initialisations de l'espace user, y compris le assembly /proc

Très probablement votre rcS ou n'importe quelle configuration init lit ne le fait pas, et vous devez le dire.

Si vous avez une invite shell, vous pouvez monter /proc manuellement avec:

 mount -t proc p /proc 

Notez que le /proc doit exister avant de pouvoir y monter quelque chose. Vous devriez l'inclure dans votre image racine.

2) est très probablement dû à 1) – ps utilise /proc pour get des informations sur les process en cours d'exécution.

1) est soit parce que l'initialisation n'est pas censée le faire, soit parce qu'elle ne le fait pas. Vérifiez ce que la dissortingbution est supposée faire au démarrage – comment le système doit être mis en place.

Choses que vous pouvez essayer:

  • mount /proc , par exemple: mount -t proc proc /proc – le second argument est arbitraire (c'est ce qui montre la source du assembly). Vérifiez ce qui fonctionne avec PID = 1

  • vérifiez dans /proc/cmdline quels parameters votre kernel reçoit au démarrage. S'il contient init=... vous devrez peut-être le changer en /sbin/init ou le supprimer pour que le kernel essaie de résoudre l'init à exécuter lui-même. Vous devez le faire dans la configuration du bootloader (pour R-Pi c'est dans un file text sur la carte SD IIRC).

  • Vérifiez que l'exécutable d'initialisation désiré existe – Busybox a normallement des tonnes de liens symboliques pointant vers son binary afin que l'on puisse utiliser la command [args] plutôt que la busybox command [args] . Il se peut que vous manquiez ceux-là.

Montez la première chose sur votre /etc/inittab

Autrement dit, vous devriez commencer par inittab :

 ::sysinit:/bin/mount -t proc proc /proc 

Ceci est fait par Buildroot 2017.02.