2016-08-18 1 views
1

Mon système (ARM32) démarre Linux via U-Boot. Le noyau reçoit console=ttymxc1,115200 en tant qu'argument de u-boot. Ensuite, il utilise un script shell avec switch_root (interprété par busybox) dans un initramfs pour initialiser le système de fichiers racine. En outre, ce script initramfs analyse la ligne de commande du noyau pour obtenir le bon console.Linux initramfs switch_root impossible de trouver la console utilisée par le noyau

Le problème est que switch_root est en cours d'impression à tty1. Néanmoins, le noyau utilise la bonne console, spécifiée dans ses arguments. Si je ne passe pas l'argument -c à switch_root il utilise également /dev/tty1, qui est l'affichage dans mon cas.

Est-ce que quelqu'un d'entre vous a une idée de comment je pourrais obtenir init (sysvinit) pour utiliser la console spécifiée dans les arguments du noyau?

est ici la source de script initramfs:

#!/bin/sh 

echo "init: rootfs setup" 

# mount temporary filesystems 
mount -n -t devtmpfs devtmpfs /dev 
mount -n -t proc  proc  /proc 
mount -n -t sysfs sysfs /sys 
mount -n -t tmpfs tmpfs /run 

read -r cmdline < /proc/cmdline 

# define filesystems 
ROOT_DEV="/dev/mydev" 
ROOT="/newroot" 

# mount rootfs 
mkdir -p ${ROOT} 
mount ${ROOT_DEV} ${ROOT} 

# get & create console 
CONSOLE=$(echo $cmdline) | sed 's/.*console=\(.*\),.*/\1/' 
mknod -m 644 ${ROOT}/dev/${CONSOLE} c 5 1 

# switch to new rootfs and exec init 
echo "init: rootfs successful mounted (${ROOT})" 
cd ${ROOT} 
exec switch_root -c /dev/${CONSOLE} . "/sbin/init" "[email protected]" 

Et voici les initramfs config.cfg

dir /bin 755 1000 1000 
dir /dev 755 0 0 
dir /mnt 755 0 0 
dir /proc 755 0 0 
dir /run 755 0 0 
dir /sys 755 0 0 
file /bin/busybox initramfs/busybox 755 0 0 
file /init initramfs/init 755 0 0 
nod /dev/console 644 0 0 c 5 1 
nod /dev/ttymxc1 644 0 0 c 5 1 
slink /bin/chroot busybox 777 0 0 
slink /bin/find busybox 777 0 0 
slink /bin/grep busybox 777 0 0 
slink /bin/mkdir busybox 777 0 0 
slink /bin/mknod busybox 777 0 0 
slink /bin/mount busybox 777 0 0 
slink /bin/sed busybox 777 0 0 
slink /bin/sh busybox 777 0 0 
+1

qui INIT utilisez-vous? systemd ou sysv-init? switch_root ne change pas de tty quand aucun '-c' n'est speficied, je pense que c'est' init' qui change le tty. –

+1

J'utilise sysvinit. Oui, je sais, donc j'ai ajouté l'argument '-c/dev/$ {CONSOLE}' ;-) – g0hl1n

Répondre

0

Enfin je trouve la solution (et l'erreur que je fait)!

Le périphérique de console a été créé avec les mauvais numéros majeurs/mineurs. Création avec le même que le noyau attribue à ttymxc * cela fonctionne:

mknod -m 644 ${ROOT}/dev/${CONSOLE} c 207 17