Kernel启动过程中被Stuck的调试

向自定义的开发板移植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。

Add:
还需要在bootargs中加入loglevel=9,确保debug信息能够输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值