mtd 驱动的添加
时间:2010-07-28 来源:zhhsboy
1.向设备模型注册一个驱动
数据结构:
static struct platform_driver s3c2410_nand_driver = {
.probe = s3c2410_nand_probe,
.remove = s3c2410_nand_remove,
.suspend = s3c24xx_nand_suspend,
.resume = s3c24xx_nand_resume,
.driver = {
.name = "s3c2410-nand",
.owner = THIS_MODULE,
},
};
注册函数: platform_driver_register(&s3c2412_nand_driver);
2.static int s3c2410_nand_probe(struct platform_device *dev) ->s3c24xx_nand_probe(dev, TYPE_S3C2410) 在probe过程中,用clk_enable打开nand flash控制器的clock时钟。用request_mem_region去申请驱动所需要的一些内存等相关资源。然后,在s3c2410_nand_inithw中,去初始化硬件相关的部分,主要是关于时钟频率的计算,以及启用nand flash控制器,使得硬件初始化好了,后面才能正常工作。
然后申请包含了一个mtd设备和一个硬件芯片的结构体struct s3c2410_nand_mtd所需要的空间,调用s3c2410_nand_init_chip ,将芯片底层的驱动和mtd设备绑定。
我们所需实现的就是芯片底层驱动然后通过以上框架加入linux系统。
3.数据结构关系: mtd是加在硬件和文件系统之间一层。struct mtd_info是一个mtd设备的描述。struct nand_chip是一个具体的硬件。如s3c2410将有struct s3c2410_nand_mtd 结构来,包含mtd设备和nand_chip结构。 数据结构: /* overview of the s3c2410 nand state */
struct s3c2410_nand_info { /* mtd info */ struct nand_hw_control controller; struct s3c2410_nand_mtd *mtds; struct s3c2410_platform_nand *platform;
/* device info */ struct device *device; struct resource *area; struct clk *clk; void __iomem *regs; void __iomem *sel_reg; int sel_bit; int mtd_count;
enum s3c_cpu_type cpu_type; }; struct s3c2410_nand_mtd { struct mtd_info mtd; struct nand_chip chip; struct s3c2410_nand_set *set; struct s3c2410_nand_info *info; int scan_res; };
4.更详细的说明:http://bbs.sunplusedu.com/showtopic-5773.aspx
注册函数: platform_driver_register(&s3c2412_nand_driver);
2.static int s3c2410_nand_probe(struct platform_device *dev) ->s3c24xx_nand_probe(dev, TYPE_S3C2410) 在probe过程中,用clk_enable打开nand flash控制器的clock时钟。用request_mem_region去申请驱动所需要的一些内存等相关资源。然后,在s3c2410_nand_inithw中,去初始化硬件相关的部分,主要是关于时钟频率的计算,以及启用nand flash控制器,使得硬件初始化好了,后面才能正常工作。
然后申请包含了一个mtd设备和一个硬件芯片的结构体struct s3c2410_nand_mtd所需要的空间,调用s3c2410_nand_init_chip ,将芯片底层的驱动和mtd设备绑定。
我们所需实现的就是芯片底层驱动然后通过以上框架加入linux系统。
3.数据结构关系: mtd是加在硬件和文件系统之间一层。struct mtd_info是一个mtd设备的描述。struct nand_chip是一个具体的硬件。如s3c2410将有struct s3c2410_nand_mtd 结构来,包含mtd设备和nand_chip结构。 数据结构: /* overview of the s3c2410 nand state */
struct s3c2410_nand_info { /* mtd info */ struct nand_hw_control controller; struct s3c2410_nand_mtd *mtds; struct s3c2410_platform_nand *platform;
/* device info */ struct device *device; struct resource *area; struct clk *clk; void __iomem *regs; void __iomem *sel_reg; int sel_bit; int mtd_count;
enum s3c_cpu_type cpu_type; }; struct s3c2410_nand_mtd { struct mtd_info mtd; struct nand_chip chip; struct s3c2410_nand_set *set; struct s3c2410_nand_info *info; int scan_res; };
4.更详细的说明:http://bbs.sunplusedu.com/showtopic-5773.aspx
相关阅读 更多 +