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