微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > [ARM笔记]驱动对设备的识别过程及实例——NAND Flash

[ARM笔记]驱动对设备的识别过程及实例——NAND Flash

时间:12-02 来源:互联网 点击:

中修改为“s3c2440-nand”,这个函数在include/arch/arm/plat-s3c24xx/s3c244x.c中定义如下:

59 void __init s3c244x_map_io(struct map_desc *mach_desc, int size)

...

68 s3c_device_i2c.name = "s3c2440-i2c";

69 s3c_device_nand.name = "s3c2440-nand";

70 s3c_device_usbgadget.name = "s3c2440-usbgadget";

71 }

有了NAND Flash设备,还要有NAND Flash驱动程序,内核针对S3C2410、S3C2412、S3C2440定义了3个驱动。它们在include/drivers/mtd/nand/s3c2410.c中的s3c2410_nand_init函数中注册进内核,如下所示:

890 static int __init s3c2410_nand_init(void)

891 {

892 printk("S3C24XX NAND Driver, (c) 2004 Simtec Electronics\n");

893

894 platform_driver_register(&s3c2412_nand_driver);

895 platform_driver_register(&s3c2440_nand_driver);

896 return platform_driver_register(&s3c2410_nand_driver);

897 }

其中的S3C2410_nand_driver结构是在include/drivers/mtd/nand/s3c2410.c中定义,如下所示:

857 static struct platform_driver s3c2410_nand_driver = {

858 .probe = s3c2410_nand_probe,

859 .remove = s3c2410_nand_remove,

860 .suspend = s3c24xx_nand_suspend,

861 .resume = s3c24xx_nand_resume,

862 .driver = {

863 .name = "s3c2410-nand",

864 .owner = THIS_MODULE,

865 },

866 };

可见,s3c_device_nand结构和s3c2410_nand_driver结构中的name成员相同,都是“s3c2410-nand”。platform_driver_register函数就是根据这点确定它们是匹配的,所以调用s3c2410_nand_probe函数枚举NAND Flash设备s3c2410_device_nand。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top