一、主要结构体

   1、mtd_info,主要是描述MTD原始设备层中的设备或分区,

  2、mtd_part,表示一个分区,用里面的主mtd_info和本分区mtd_info描述分区,

  3、mtd_partition,描述分区表,相当于dts中的分区信息,在BSP板中也定义,

  4、map_info,norflash的硬件描述,

  5,nand_chip,nandflash的硬件描述,

二、几个重要的函数

  1、int add_mtd_device(struct mtd_info *mtd);注册mtd设备

  2、int del_mtd_device(struct mtd_info *mtd);注销mtd设备

  3、add_mtd_partition(struct mtd_info *master,struct mtd_partition *parts,int nbparts);根据parts中的分区信息和数量nbparts和master主分区进行分区注册,里面会生成mtd_part结构体并多次调用add_mtd_device进行注册设备。

  4、del_mtd_partitions(struct mtd_info *master);删除所有分区,包括主分区和分区,会多次调用del_mtd_device;

  5、struct mtd_info *do_map_probe(const char *name,struct map_info *map);根据map和名字name探测针对NOR flash的mtd_info,因为NORflash的驱动按照标准是统一的。

  6、parse_mtd_partitions();探测分区上是否已经有分区

  7、int nand_scan(struct mtd_info *mtd,int maxchips);根据mtd中的priv指定的nand_chip探测nandflash具体驱动并初始化mtd。

三、NORFLASH驱动流程

  

  1、初始化map_info

  2、do_map_probe()得到mtd_info

  3、parse_mtd_partitions()得到mtd_partitions

  4、add_mtd_partitions();

  5、del_mtd_partitions();

  6、map_destory()释放mtd_info

四、NANDFLASH驱动流程

  1、初始化mtd_info,其priv指向nand_chip

  2、初始化nand_chip中的hwcontrol()、dev_ready()、chip_delay();eccmode等

  3、初始化nandflash io 接口状态

  4、nand_scan()填充mtd_info

  5、add_mtd_device()/add_mtd_partitions()

  6、nand_release()

linux中MTDflash设备驱动大概的更多相关文章

  1. Linux中总线设备驱动模型及平台设备驱动实例

    本文将简要地介绍Linux总线设备驱动模型及其实现方式,并不会过多地涉及其在内核中的具体实现,最后,本文将会以平台总线为例介绍设备和驱动程序的实现过程. 目录: 一.总线设备驱动模型总体介绍及其实现方 ...

  2. Linux中LCD设备驱动-framebuffer(帧缓冲)【】

    转自:https://blog.csdn.net/linux_devices_driver/article/details/7079442 1.framebuffer 帧缓冲     帧缓冲(fram ...

  3. 芯灵思SinlinxA33开发板 Linux平台总线设备驱动

    1.什么是platform(平台)总线? 相对于USB.PCI.I2C.SPI等物理总线来说,platform总线是一种虚拟.抽象出来的总线,实际中并不存在这样的总线. 那为什么需要platform总 ...

  4. Linux下 USB设备驱动分析(原创)

    之前做过STM32的usb HID复合设备,闲来看看linux下USB设备驱动是怎么一回事, 参考资料基于韦东山JZ2440开发板,以下,有错误欢迎指出. 1.准备知识 1.1USB相关概念: USB ...

  5. Linux和Windows设备驱动架构比较

    毕业后一直在学操作系统, 有时候觉得什么都懂了,有时候又觉得好像什么都不懂,但总体来说自认为对操作系统实现机制的了解比周围的人还是要多一些.去年曾花了几个星期的晚上时间断断续续翻译了这篇对Linux和 ...

  6. Linux的总线设备驱动模型

    裸机编写驱动比较自由,按照手册实现其功能即可,每个人写出来都有很大不同: 而Linux中还需要按照Linux的驱动模型来编写,也就是需要按照"模板"来写,写出来的驱动就比较统一. ...

  7. Linux高级字符设备驱动

    转载:http://www.linuxidc.com/Linux/2012-05/60469p4.htm 1.什么是Poll方法,功能是什么? 2.Select系统调用(功能)      Select ...

  8. Linux实现字符设备驱动的基础步骤

    Linux应用层想要操作kernel层的API,比方想操作相关GPIO或寄存器,能够通过写一个字符设备驱动来实现. 1.先在rootfs中的 /dev/ 下生成一个字符设备.注意主设备号 和 从设备号 ...

  9. Linux中块设备驱动程序分析

    基于<Linux设备驱动程序>书中的sbull程序以对Linux块设备驱动总结分析. 開始之前先来了解这个块设备中的核心数据结构: struct sbull_dev {         i ...

随机推荐

  1. 编程入门视频【 Python、PHP、ThinkPHP、Laravel、Mysql、微信小程序】

    免费分享 Python.PHP.ThinkPHP.Laravel.Mysql.微信小程序等学习视频 点击进入搜刮 免费分享 Python.PHP.ThinkPHP.Laravel.Mysql.微信小程 ...

  2. Django之auth模块

    http://www.cnblogs.com/liwenzhou/p/9030211.html 1.首先导入auth模块 from django.contrib import auth 2.创建aut ...

  3. Encode and Decode TinyURL

    TinyURL is a URL shortening service where you enter a URL such as https://leetcode.com/problems/desi ...

  4. sea.js 个人入门

    玉伯 : http://seajs.org/docs/ 说这两个JS 必须提到AMD.commonjs两种不同的规范: 奇舞团:http://www.75team.com/archives/882 知 ...

  5. tengine2.2.3报错502的The proxy server received an invalid response from an upstream server问题处理

    tengine2.2.3报错502的The proxy server received an invalid response from an upstream server问题处理 现象:访问订单的 ...

  6. mysql修改字符集

    文章链接:https://www.cnblogs.com/hubavyn/p/4359315.html mysql修改表.字段.库的字符集(转) 原文链接:http://fatkun.com/2011 ...

  7. jxl应用事例

    实例中主要目的是解析jxl使用流程以及jxl绘制Excel的写法思路,代码掩去了项目中的真实数据,请根据需求酌情修改,如果有帮助到有需要的人,不胜欢喜. Dao层为查询数据库,返回list数据,此处省 ...

  8. docker 搭建以太坊私有链搭建

    最近区块链,火得不行,身边也有朋友准备玩这个,说是搭了一个星期,没有把环境搭建起来,叫我帮忙看看环境怎么搭建 于是我找到了官方的地址 https://github.com/ethereum/go-et ...

  9. Python学习计划

    ---恢复内容开始--- Python学习计划   https://edu.csdn.net/topic/python2?utm_source=blog4   匠人之心,成就真正Python全栈工程师 ...

  10. 设计模式学习之享元模式(Flyweight,结构型模式)(20)

    转:http://terrylee.cnblogs.com/archive/2006/03/29/361767.html 摘要:面向对象的思想很好地解决了抽象性的问题,一般也不会出现性能上的问题.但是 ...