首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

有个驱动加载的有关问题,请问一下

2012-04-27 
有个驱动加载的问题,请教一下。static struct device_driver s3c2410ts_driver {.name DEVICE_NAME,.bus

有个驱动加载的问题,请教一下。
static struct device_driver s3c2410ts_driver = {
.name= DEVICE_NAME,
.bus= &platform_bus_type,
.probe= s3c2410ts_probe,//这个函数什么时候被执行呢?
#ifdef CONFIG_PM
.suspend= s3c2410ts_suspend,
.resume= s3c2410ts_resume,
#endif
};




static int __init s3c2410ts_init(void)//这个函数在系统启动加载的时候被执行
{
int ret;

printk("s3c2410ts init\n");

  ret = driver_register(&s3c2410ts_driver);//问题,什么时候执行.probe= s3c2410ts_probe
if(ret)
printk("register %s driver failed, return code is %d\n", DEVICE_NAME, ret);
return ret;
}


[解决办法]
每当内核加载一个driver ,或者新注册一个device,都会在对应的bus上执行一次匹配(match)判断

如果device和driver匹配,就执行driver的probe
[解决办法]
platform_bus 是通过名字匹配的, 在注册驱动的时候,如果匹配成功就会调用 probe.

PS: 楼上的兄弟还在啊,呵呵。
[解决办法]
在你的 s3c2410ts_probe 函数里加一句 
dump_stack(); 就能看到完整的调用关系了。
[解决办法]
struct platform_device s3c_device_ts = {
.name= "s3c2410-ts", //跟name匹配的话,就会去probe
.id= -1,
.dev.parent= &s3c_device_adc.dev,
.num_resources= ARRAY_SIZE(s3c_ts_resource),
.resource= s3c_ts_resource,
};

热点排行