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
/proc
). 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.