linux注册设备驱动的理解

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的文件应该放在哪个目录下呢?




你可能感兴趣的:(linux注册设备驱动的理解)