platform_driver_register 和 platform_driver_register 区别是什么???
这个目前是简单蛋疼的问题
最近读driver/mtd/nand/s3c2410.c nand flash的驱动,里面使用的platform_driver_register(&s3c2410_nand_driver)来注册驱动程序,又参考Documentation/driver-model/platform.txt文档说
platform_driver_register(struct platform_driver *drv)注册驱动程序时检查drv->driver.name 字段是否跟
platform_device_register(struct platform_device *pdev)注册的设备 pdev.name字段匹配,如果匹配则驱动和设备绑定在一起工作(不知道理解的对不对)
可不可以这样理解:这个驱动模型分为两部分,platform_device和platform_driver, platform_device主要负责硬件资源的分配(比如nand flash的分区信息),而platform_driver在注册时寻找到对应的device,两者合作才能对硬件进行驱动。
但是我试验在 driver/mtd/nand/目录下添加一个驱动文件(只调用了platform_driver_register,没有platform_device_register),按照我的理解没有调用platform_device_register进行设备注册,应该返回错误。但是编译成模块加载到内核中时却返回注册成功了
struct my_nand_driver =
{
.....
};
static int __init my_nand_init(void)
{
int ret;
printk("my NAND Driver\n");
ret = platform_driver_register(&my_nand_driver);
printk("platform_driver_register returns:%d\n", ret);//这个地方返回0
return ret;
}
static void __exit my_nand_exit(void)
{
platform_driver_unregister(&my_nand_driver);
}
module_init(my_nand_init);
module_exit(my_nand_exit);
请问是我哪些地方理解的不对呢?
如果我要在一个新的平台上开发nand flash驱动(内核中原来没有的,不是s3c2410这一类的), 那么包含platform_device_register的文件应该放在哪个目录下呢?