Como depurar o systemd “init” congelar durante a inicialização?

3

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
por Udo G 16.11.2015 / 12:00

1 resposta

0

Descobrimos que o Kernel estava faltando algumas configurações importantes, que são exigidas por systemd .

link mostra quais configurações de configuração do Kernel eram necessárias.

Uma vez configurado, systemd começou a trabalhar imediatamente.

    
por 10.12.2015 / 16:11