Linux内核的Nand驱动流程分析
时间:11-28
来源:互联网
点击:
- s3c_device_sdi.name="s3c2440-sdi";
- s3c_device_i2c0.name="s3c2440-i2c";
- s3c_nand_setname("s3c2440-nand");
- s3c_device_ts.name="s3c2440-ts";
- s3c_device_usbgadget.name="s3c2440-usbgadget";
- }
- staticstructplatform_device_ids3c24xx_driver_ids[]={
- {
- .name="s3c2410-nand",
- .driver_data=TYPE_S3C2410,
- },{
- .name="s3c2440-nand",
- .driver_data=TYPE_S3C2440,
- },{
- .name="s3c2412-nand",
- .driver_data=TYPE_S3C2412,
- },{
- .name="s3c6400-nand",
- .driver_data=TYPE_S3C2412,/*compatiblewith2412*/
- },
- {}
- };
- structbus_typeplatform_bus_type={
- .name="platform",
- .dev_attrs=platform_dev_attrs,
- .match=platform_match,
- .uevent=platform_uevent,
- .pm=&platform_dev_pm_ops,
- };
- intplatform_driver_register(structplatform_driver*drv)
- {
- drv->driver.bus=&platform_bus_type;
- if(drv->probe)
- drv->driver.probe=platform_drv_probe;
- if(drv->remove)
- drv->driver.remove=platform_drv_remove;
- if(drv->shutdown)
- drv->driver.shutdown=platform_drv_shutdown;
- returndriver_register(&drv->driver);
- }
- staticintplatform_match(structdevice*dev,structdevice_driver*drv)
- {
- structplatform_device*pdev=to_platform_device(dev);
- structplatform_driver*pdrv=to_platform_driver(drv);
- /*AttemptanOFstylematchfirst*/
- if(of_driver_match_device(dev,drv))
- return1;
- /*Thentrytomatchagainsttheidtable*/
- if(pdrv->id_table)
- returnplatform_match_id(pdrv->id_table,pdev)!=NULL;
- /*fall-backtodrivernamematch*/
- return(strcmp(pdev->name,drv->name)==0);
- }
- staticconststructplatform_device_id*platform_match_id(
- conststructplatform_device_id*id,
- structplatform_device*pdev)
- {
- while(id->name[0]){
- if(strcmp(pdev->name,id->name)==0){
- pdev->id_entry=id;
- returnid;
- }
- id++;
- }
- returnNULL;
- }
- (1)定义resource,保证可以以物理地址方式正确访问Nand寄存器。(默认有)
- (2)定义platform_device,这是内核记录的硬件信息,要注册到内核设备列表。
- (3)定义mtd_partition,设置Nand分区。
- (4)定义s3c2410_nand_set,枚举所有Nand芯片信息。
- (5)定义s3c2410_platform_nand,这是驱动程序初始化Nand是需要的数据,包括分区信息的和芯片时序等必要信息。
- (6)将s3c2410_platform_nand赋值给mtd_device->dev.platform_data。
- (7)将Nand设备结构注册到设备列表。
Linux内核Nand驱动流程分 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)