Estou tentando colocar meu próprio script init
em execução no hardware ARM e no Debian Jessie com o systemd. O conceito geral de inicialização e o script init
são quase idênticos a uma variante x86, o que funciona bem. Para ambos os hardwares, toda a imagem do cartão SD é pré-construída em um host x86.
Ao executar no hardware do ARM, tendo acesso ao console serial , vejo que meu script init
é executado corretamente até o ponto em que switch_root
é chamado:
exec switch_root -c /dev/console /newroot /sbin/init
Nada acontece depois disso. Nenhuma mensagem de erro é impressa - o que dificulta a localização do problema.
A linha de comando do kernel é ...
ro root=LABEL=IM_BOOT1 panic=10 mem=256M console=ttyS0,115200 systemd.log_level=debug
... e AFAIK isso deve fazer systemd
imprimir mensagens de depuração máximas. Infelizmente nada é impresso.
Qualquer ideia / dica que eu poderia fazer para entender o que poderia estar causando o congelamento, ou com outras palavras - entender o que está acontecendo?
O único detalhe estranho são alguns avisos no log do kernel antes chamando switch_root
:
<snip>
ext4: Unknown symbol jbd2_journal_errno (err 0)
ext4: Unknown symbol jbd2_journal_begin_ordered_truncate (err 0)
ext4: Unknown symbol jbd2_journal_flush (err 0)
ext4: Unknown symbol mb_cache_entry_find_next (err 0)
squashfs: version 4.0 (2009/01/31) Phillip Lougher
aufs 3.16-20150928
usbhid: Unknown symbol hid_output_report (err 0)
usbhid: Unknown symbol hidinput_count_leds (err 0)
usbhid: Unknown symbol hid_allocate_device (err 0)
usbhid: Unknown symbol hid_destroy_device (err 0)
usbhid: Unknown symbol hid_alloc_report_buf (err 0)
usbhid: Unknown symbol hid_set_field (err 0)
usbhid: Unknown symbol hid_check_keys_pressed (err 0)
usbhid: Unknown symbol hid_input_report (err 0)
usbhid: Unknown symbol hid_debug (err 0)
usbhid: Unknown symbol __hid_request (err 0)
usbhid: Unknown symbol hid_parse_report (err 0)
usbhid: Unknown symbol hid_add_device (err 0)
usbcore: registered new interface driver usbhid
usbhid: USB HID core driver
usb_storage: Unknown symbol scsi_report_device_reset (err 0)
usb_storage: Unknown symbol scsi_remove_host (err 0)
usb_storage: Unknown symbol scsi_report_bus_reset (err 0)
usb_storage: Unknown symbol scsi_sense_desc_find (err 0)
usb_storage: Unknown symbol scsi_eh_prep_cmnd (err 0)
usb_storage: Unknown symbol scsi_host_put (err 0)
usb_storage: Unknown symbol scsi_scan_host (err 0)
usb_storage: Unknown symbol scsi_is_host_device (err 0)
<snip>
... no entanto, estes módulos aparecem para funcionar bem. Eu não sei se isso está relacionado.
Alguns detalhes adicionais:
- A instalação da Debian é preparada usando
debootstrap
(o mesmo método funciona perfeitamente com x86)
- Kernel personalizado:
Linux (none) 3.16.7 #1 Mon Nov 16 08:32:55 UTC 2015 armv5tejl GNU/Linux
, corrigido com AUFS e árvore de dispositivos específica de hardware
- o Kernel e o root fs são criados com a ajuda do QEMU em um host x86
-
initramfs
inicializa com BusyBox , configura a raiz final do AUFS fs e finalmente invoca switch_root
. O mesmo método (quase 100% idêntico init
script) funciona bem em x86
- Posso executar um shell interativo pouco antes de executar
switch_root
e não consigo encontrar nada que não esteja funcionando como esperado nesse ponto