Estou trabalhando em um sistema Linux embarcado (kernel-5.10.24) e estou tentando habilitar o initramfs em meu sistema.
Eu configurei o kernel da seguinte maneira,
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE="/home/t/target_rootfs"
CONFIG_INITRAMFS_ROOT_UID=0
CONFIG_INITRAMFS_ROOT_GID=0
CONFIG_RD_GZIP=y
CONFIG_RD_BZIP2=y
....
# CONFIG_BLK_DEV_RAM is not set
E target_rootfs
tem seguidores,
drwxr-xr-x 2 t t 4096 Dec 13 17:47 bin
drwxr-xr-x 4 t t 4096 Jun 28 06:23 dev
drwxr-xr-x 6 t t 4096 Dec 13 20:24 etc
drwxr-xr-x 3 t t 4096 Dec 13 17:47 lib
lrwxrwxrwx 1 t t 3 Oct 23 14:59 lib32 -> lib
lrwxrwxrwx 1 t t 11 Oct 23 15:01 linuxrc -> bin/busybox
drwxr-xr-x 2 t t 4096 Jun 28 06:23 mnt
drwxr-xr-x 2 t t 4096 Jun 28 06:23 opt
drwxr-xr-x 2 t t 4096 Jun 28 06:23 proc
drwxr-xr-x 2 t t 4096 Jun 28 06:23 root
drwxr-xr-x 2 t t 4096 Jun 28 06:23 run
drwxr-xr-x 2 t t 4096 Sep 19 18:58 sbin
drwxr-xr-x 2 t t 4096 Jun 28 06:23 sys
drwxr-xr-x 2 t t 4096 Jun 28 06:23 tmp
drwxr-xr-x 5 t t 4096 Dec 13 17:47 usr
drwxr-xr-x 3 t t 4096 Jun 28 06:23 var
A linha de comando do kernel é
console=ttyS0,115200 init=/linuxrc ubi.mtd=5 root=ubi0:rootfs rootfstype=ubifs rw flashtype=nand
Com as configurações acima, o sistema pode inicializar shell
no nand rootfs!
Agora, para validar se initramfs
o compilado no kernel está funcionando (ou sendo usado), fiz o seguinte.
- Tentei apagar a partição rootfs no MTD5 em FLASH
Esperando interromper a inicialização do sistema em initramfs
, mas entrei em pânico no kernel da seguinte maneira,
[ 0.715989] Kernel panic - not syncing: write error
[ 0.720880] Rebooting in 10 seconds..
- Então, no que criei
target_rootfs
e reconstruí o kernel (mantendo o rootfs não implantado), obtive o seguinte,init
ln -sf bin/busybox init
[ 5.266031] VFS: Cannot open root device "ubi0:rootfs" or unknown-block(0,0): error -19
[ 5.274324] Please append a correct "root=" boot option; here are the available partitions:
[ 5.282987] 1f00 1024 mtdblock0
[ 5.282992] (driver?)
[ 5.289753] 1f01 65536 mtdblock1
[ 5.289759] (driver?)
[ 5.296540] 1f02 195584 mtdblock2
[ 5.296545] (driver?)
[ 5.303320] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
[ 5.311876] Rebooting in 10 seconds..
Então, como validar o initramfs
construído no kernel?
Acho que posso responder parte da pergunta lendo o documento do kernel do ramfs rootfs initramfs
E diz,
Então, no meu primeiro teste, o kernel NÃO encontrou o
init
initramfs, então seguiu o caminho antigo. No meu segundo teste, o kernel encontrou oinit
initramfs, iniciou a execução e fez a inicialização.Aqui está o log que obtive do segundo teste após a implantação do rootfs.
Eu adicionei
printk
einit/main.c
parecia que primeiro o kernel rodava/init
a partir do initramfs e depois rodava/linuxrc
conforme especificado na linha de comando do kernel.Então agora a questão é quem montou o segundo rootfs e iniciou o
/linuxrc
? Minha suposição é que sim/init
, mas os logs do kernel mostraram quekernel
foi isso ......E como parar o sistema
initramfs
?