Kernel启动过程中被Stuck的调试

来源:互联网 发布:销售客户软件 编辑:程序博客网 时间:2024/05/17 03:12

向自定义的开发板移植Kernel时,经常会遇到Kernel启动时卡住的问题,通常,由于无法获取足够的信息,调试比较费时。一般这种问题都出现在某个驱动初始化过程中,由于失败处理时的逻辑问题导致Kernel卡住,因此如果能够得到是哪个驱动初始化失败,就很容易定位问题。

1. 方案:

Kernel中,选项KALLSYMS可以将Kernel代码中的符号信息编译到Image中,同时,如果在Command Line中,传入initcall_debug选项,则Kernel启动过程中,就会打印出如下的Log:

24 msecs [ 2.237177] initcall acpi_button_init+0x0/0x51 returned 0 28 msecs [ 0.763503] initcall init_acpi_pm_clocksource+0x0/0x16c returned 0 32 msecs [ 0.348241] initcall acpi_pci_link_init+0x0/0x43 returned 0 33 msecs [ 0.919004] initcall inet_init+0x0/0x1c7 returned 0 33 msecs [ 5.282722] initcall psmouse_init+0x0/0x5e returned 0 54 msecs [ 2.979825] initcall e100_init_module+0x0/0x4d returned 0 71 msecs [ 0.650325] initcall pnp_system_init+0x0/0xf returned 0 91 msecs [ 0.872402] initcall pcibios_assign_resources+0x0/0x85 returned 0 187 msecs [ 4.369187] initcall ehci_hcd_init+0x0/0x70 returned 0 245 msecs [ 2.777161] initcall serial8250_init+0x0/0x100 returned 0 673 msecs [ 5.098052] initcall uhci_hcd_init+0x0/0xc1 returned 0 830 msecs [ 4.067279] initcall piix_init+0x0/0x27 returned 0 1490 msecs [ 8.290606] initcall ip_auto_config+0x0/0xd70 returned 0

这样,如果驱动卡在了某个Init函数中,则很容易就能定位。

2. 相关Config:

CONFIG_PRINTK_TIME & CONFIG_KALLSYMS,同时,由于Log数据量增加,可能需要加大printk的buffer大小,CONFIG_LOG_BUF_SHIFT 14->18。

原创粉丝点击