nand_flash,platform以及mtd驱动简析

最近开始看linux驱动代码,以前看过一些字符驱动的代码,好久不用又都忘了,或许把自己理解的东西写成日志印象会深一点吧.这次是从nand_flash驱动开始看起的,越看越深,越看越晕,其中设计到了platform平台架构,2.6内核以后好像都用这个架构写驱动了.还有mtd设备的驱动层,它是一个中间层,目的就是使nand_flash驱动写起来非常简单,但是它本身的代码却很复杂,也就是说写一个新的nand_flash驱动不必关心mtd驱动是怎么写的,你只需要提供给它它需要的数据结构即可.nand_flash驱动只是简单的调用一下mtd驱动提供的函数接口.

linux设备驱动模型,在我的理解来看,就是设备<----->总线<------>驱动三者之间的关系,platform驱动架构也是基于这三者关系的.首先向系统总线注册platform总线,结构体struct bus_type,然后是各种平台设备,平台驱动的注册.linux下先注册设备或先注册驱动是无关紧要的,当一个新的设备被注册就会到总线上去找相应的驱动,同样当一份驱动被注册就会到总线上去找设备.两者都是通过驱动程序中的probe函数完成的.在总线上会有一个driver_match_device函数来匹配两者,也就是说设备名称为什么一定要和驱动名称相同了.

nand_flash驱动(cpu:atmel_9g45)在平台设备注册时所用到的结构体和函数有:

struct resource :I/O资源 以及flag类型.

struct platform_device: 设备资源,设备私有数据.

struct mtd_partition:分区表信息

struct ek_nand_data: 设备私有数据 被传到platform_device结构的dev.platform中.

platform_device_register(dev) 向platform总线上注册platform设备

注册驱动是两个重要结构体:

struct nand_chip:flash的芯片类型,包涵对flash芯片的读写控制等操作.

struct mtd_info:每

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值