当前位置: 技术问答>linux和unix
linux 驱动中的probe疑惑
来源: 互联网 发布时间:2017-04-26
本文导语: 不知道有没有人遇到过这样的情况,在linux下编译的驱动make menuconfig选择相应的device支持,比如说USB support,而实际的硬件可能没有这个设备,在kenerl启动时会挂掉,下面附上相关的打印信息: [] ohci_init+0x60/0x358 [] ...
不知道有没有人遇到过这样的情况,在linux下编译的驱动make menuconfig选择相应的device支持,比如说USB support,而实际的硬件可能没有这个设备,在kenerl启动时会挂掉,下面附上相关的打印信息:
[] ohci_init+0x60/0x358
[] ohci_octeon_start+0x24/0x90
[] usb_add_hcd+0x32c/0x640
[] ohci_octeon_drv_probe+0x1b0/0x2e0
[] driver_probe_device+0xc8/0x240
[] __driver_attach+0xc0/0xc8
[] bus_for_each_dev+0x6c/0xa8
[] bus_add_driver+0x1d8/0x2c0
[] driver_register+0x88/0x190
[] ohci_hcd_mod_init+0x7c/0xc8
[] do_one_initcall+0x38/0x188
[] kernel_init+0x1c0/0x23c
[] kernel_thread_helper+0x10/0x18
Code: 30430010 10600069 00000000 c8480025 00000000 1460006a 00000000 0000010f
Disabling lock debugging due to kernel taint
Kernel panic - not syncing: Attempted to kill init!
如果在config中去掉这个USB设备就不会出现这个情况,现在不明白的是,既然没有这个设备驱动为什么还能probe到并且去初始化,还是说没有找到问题的根本点(这些执行步骤会有,是代码写得有问题?),哪位大虾可以指点一下,按道理,即使相关硬件没有,程序不应该会挂掉是不是?
[] ohci_init+0x60/0x358
[] ohci_octeon_start+0x24/0x90
[] usb_add_hcd+0x32c/0x640
[] ohci_octeon_drv_probe+0x1b0/0x2e0
[] driver_probe_device+0xc8/0x240
[] __driver_attach+0xc0/0xc8
[] bus_for_each_dev+0x6c/0xa8
[] bus_add_driver+0x1d8/0x2c0
[] driver_register+0x88/0x190
[] ohci_hcd_mod_init+0x7c/0xc8
[] do_one_initcall+0x38/0x188
[] kernel_init+0x1c0/0x23c
[] kernel_thread_helper+0x10/0x18
Code: 30430010 10600069 00000000 c8480025 00000000 1460006a 00000000 0000010f
Disabling lock debugging due to kernel taint
Kernel panic - not syncing: Attempted to kill init!
如果在config中去掉这个USB设备就不会出现这个情况,现在不明白的是,既然没有这个设备驱动为什么还能probe到并且去初始化,还是说没有找到问题的根本点(这些执行步骤会有,是代码写得有问题?),哪位大虾可以指点一下,按道理,即使相关硬件没有,程序不应该会挂掉是不是?
|
当 platform driver 和 platform device 的 .name 匹配时,probe 得以执行,与是否存在硬件设备无关。
|
挂掉肯定是代码健壮性问题,你这个就是初化设备的时候出错,你应该存在设备ohci_init。没有这个usb怎么工作啊。
|
+1 kernel 不会自行判断有什么硬件的。
|
感觉是USB的这个驱动初始化硬件失败了。并非没有硬件。
|
仅仅在make menuconfig里添加支持而没有在驱动代码里做对应的修改,所以挂掉了。楼主是在做内核移植 吗?