歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Linux下的nandflash驅動分析(1)——基於S3C6410平台

源碼主要在S3c_nand.c (linux2.6.28\drivers\mtd\nand)文件中。

相關閱讀:

Linux下的nandflash驅動分析(1)——基於S3C6410平台 http://www.linuxidc.com/Linux/2012-05/61439.htm

Linux下的nandflash驅動分析(2)——基於S3C6410平台 http://www.linuxidc.com/Linux/2012-05/61544.htm

Linux下的nandflash驅動分析(3)——基於S3C6410平台 http://www.linuxidc.com/Linux/2012-05/61545.htm

1、模塊加載和卸載

module_init(s3c_nand_init);
module_exit(s3c_nand_exit);

static void __exit s3c_nand_exit(void)
{
platform_driver_unregister(&s3c2450_nand_driver);
platform_driver_unregister(&s3c6400_nand_driver);
platform_driver_unregister(&s3c6410_nand_driver);
platform_driver_unregister(&s5pc100_nand_driver);
}

static int __init s3c_nand_init(void)
{
printk("S3C NAND Driver, (c) 2008 Samsung Electronics\n");

platform_driver_register(&s3c2450_nand_driver);
platform_driver_register(&s3c6400_nand_driver);
        platform_driver_register(&s3c6410_nand_driver);我們關系的部分
        return platform_driver_register(&s5pc100_nand_driver);
}

對應的platform_device如下所示:

static struct resource s3c_nand_resource[] = {
[0] = {
.start = S3C64XX_PA_NAND,
.end   = S3C64XX_PA_NAND + S3C64XX_SZ_NAND - 1,
.flags = IORESOURCE_MEM,
}
};

struct platform_device s3c_device_nand = {
.name  = "s3c-nand",
.id  = -1,
.num_resources = ARRAY_SIZE(s3c_nand_resource),
.resource  = s3c_nand_resource,
};

對應的platform_driver如下所示:

static struct platform_driver s3c6410_nand_driver = {
.probe = s3c6410_nand_probe,
.remove = s3c_nand_remove,
.suspend = s3c_nand_suspend,
.resume = s3c_nand_resume,
.driver = {
.name = "s3c6410-nand",
.owner = THIS_MODULE,
},
};

有沒有感覺到上面有什麼不對?平台設備的驅動名和設備名應該是一樣的,可現在不一樣了。不過在下面這個函數中:進行了修正。

static void __init smdk6410_map_io(void)
{
s3c_device_nand.name = "s3c6410-nand";

        ...............

}

Copyright © Linux教程網 All Rights Reserved