AVISO: no kernel / irq / handle.c - depois de mudar o rootfs, mas por quê?

1

hoje mudei de uma imagem com initramfs para uma imagem com kernel e rootfs separados. Estas imagens são usadas para um Sistema Embarcado (ARM9 SAM9G25), que está rodando com um Linux 2.6.39. Durante a inicialização recebi o seguinte aviso, que não apareceu com o initramfs:

WARNING: at kernel/irq/handle.c:130 handle_irq_event_percpu+0x70/0x198()
irq 12 handler atmci_interrupt+0x0/0x6b0 enabled interrupts
Modules linked in:
Backtrace: 
[<c0024918>] (dump_backtrace+0x0/0x10c) from [<c01f5664>] (dump_stack+0x18/0x1c)
 r6:c005d558 r5:00000009 r4:c028fea8 r3:c02956bc
[<c01f564c>] (dump_stack+0x0/0x1c) from [<c0030f74>] (warn_slowpath_common+0x54/0x6c)
[<c0030f20>] (warn_slowpath_common+0x0/0x6c) from [<c0031030>] (warn_slowpath_fmt+0x38/0x40)
 r8:00000000 r7:00000000 r6:0000000c r5:00000001 r4:c7969f60
r3:00000009
[<c0030ff8>] (warn_slowpath_fmt+0x0/0x40) from [<c005d558>] (handle_irq_event_percpu+0x70/0x198)
 r3:0000000c r2:c025b447
[<c005d4e8>] (handle_irq_event_percpu+0x0/0x198) from [<c005d6b0>] (handle_irq_event+0x30/0x40)
[<c005d680>] (handle_irq_event+0x0/0x40) from [<c005f274>] (handle_level_irq+0xbc/0xe4)
 r4:c02976a8 r3:00020000
[<c005f1b8>] (handle_level_irq+0x0/0xe4) from [<c0021078>] (asm_do_IRQ+0x78/0xa8)
 r4:0000000c r3:c005f1b8
[<c0021000>] (asm_do_IRQ+0x0/0xa8) from [<c0021a74>] (__irq_svc+0x34/0x60)
Exception stack(0xc028ff48 to 0xc028ff90)
ff40:                   00000000 0005317f 0005217f 60000013 c028e000 c02ab1a4
ff60: c03b9480 c0291f0c 20000000 41069265 2001c2a8 c028ff9c 600000d3 c028ff90
ff80: c0022748 c0022754 60000013 ffffffff
 r5:fefff000 r4:ffffffff
[<c0022714>] (default_idle+0x0/0x44) from [<c0022908>] (cpu_idle+0x70/0xc8)
[<c0022898>] (cpu_idle+0x0/0xc8) from [<c01f37f4>] (rest_init+0x60/0x78) r5:c001d5c4 r4:c0290094
[<c01f3794>] (rest_init+0x0/0x78) from [<c00088c0> (start_kernel+0x23c/0x284)
[<c0008684>] (start_kernel+0x0/0x284) from [<20008038>] (0x20008038)
---[ end trace 45f8d0076fc9ced3 ]---

Eu tenho que dizer, o sistema não trava aqui e inicializa como o caminho normal e é utilizável no final (eu acabo no Busybox - a distro).

O que fiz: criei um cartão SD com 2 partições FAT32 de ~ 1 GB cada. No primeiro existem os bootloaders e o kernel e no segundo eu extraí o rootfs.tar, que foi gerado com a ajuda do Buildroot 2013.11.

A linha de comando do Linux é assim:

console=ttyS0,115200 root=/dev/mmcblk0p2 rootwait rw

(Eu não tenho certeza se isso pertence aqui, mas primeiro eu não pude nem inicializar os rootfs, já que ele não foi capaz de inicializar o mmcblk. Agora, com o rootwait funciona muito bem) .

A minha pergunta é : alguém sabe de onde vem este erro? Eu não encontrei nenhum tópico útil em nenhum lugar sobre isso. Eu gostaria de remover esse erro, porque acho que ele está perdendo um pouco de tempo durante a inicialização e esse é o meu objetivo real: manter o tempo de inicialização no menor tempo possível.

    
por user3085931 22.04.2014 / 11:42

1 resposta

1

Este é um bug em algum lugar no kernel. Não está diretamente relacionado às alterações do rootfs / initramfs. Pode ser devido a alguma outra mudança que você fez (você usou as mesmas fontes, a mesma configuração, o mesmo compilador?), Ou pode estar relacionado a algum problema de tempo que revelou um bug latente.

Este aviso vem de handle_irq_event_percpu e do manipulador de interrupções é para o controlador Atmel MMC . Provavelmente há um bug nesse código.

Mesmo que você não observe nenhuma consequência além do traço, esse tipo de aviso tende a indicar sérios problemas, que podem levar a dados corrompidos ou, pelo menos, a um travamento. A depuração não é trivial. Dado que este é um kernel bastante antigo, verifique se versões mais recentes deste driver possuem correções que poderiam ser relacionadas, e considere o uso de um kernel mais recente, se possível.

    
por 23.04.2014 / 04:00