Chinaunix首页 | 论坛 | 博客
  • 博客访问: 281039
  • 博文数量: 68
  • 博客积分: 3061
  • 博客等级: 中校
  • 技术积分: 652
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-27 11:39
文章分类

全部博文(68)

文章存档

2018年(1)

2017年(2)

2016年(1)

2014年(2)

2012年(6)

2011年(14)

2010年(38)

2008年(4)

我的朋友

分类: LINUX

2010-07-28 10:51:47

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.更详细的说明:
阅读(759) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~