linux-2.6.22.6内核nand flash框架分析

这篇具有很好参考价值的文章主要介绍了linux-2.6.22.6内核nand flash框架分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

内核启动时会在串口打印nand flash的相关信息,通过该信息可定位到内核自带的nand flash相关驱动代码。

例如串口打印S3C24XX NAND Driver,搜索该字符串可找到/home/book/work/linux/linux-2.6.22.6/drivers/mtd/nand/s3c2410.c这个文件,这个就是nand flash驱动代码文件。

从该文件的s3c2410_nand_init函数分析,通过总线设备驱动模型可知道最终会调用到s3c2412_nand_probe函数,s3c2412_nand_probe的函数调用层次结构如下:


```c
s3c2410_nand_inithw
s3c2410_nand_init_chip
nand_scan //在drivers/mtd/nand/s3c2410.c通用文件里
	nand_scan_ident
		nand_set_defaults
		nand_get_flash_type
			chip->select_chip(mtd, 0);
			chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1);
			*maf_id = chip->read_byte(mtd);
			dev_id = chip->read_byte(mtd);	
			//读出设备id后,后定义好的设备信息数组比较
			for (i = 0; nand_flash_ids[i].name !=NULL;i++{
					if (dev_id == nand_flash_ids[i].id) {
						type =  &nand_flash_ids[i];
						break;
					}
				}
	nand_scan_tail
		mtd->erase = nand_erase;
		mtd->read = nand_read;
        mtd->write = nand_write;
s3c2410_nand_add_partition
	add_mtd_partitions
		add_mtd_device 
			//mtd_notifiers被register_mtd_user设置,
			//register_mtd_user被mtd_blkdevs.c和mtdchar.c调用
			list_for_each(this, &mtd_notifiers) { 
			struct mtd_notifier *not =  list_entry(this,struct  mtd_notifier, list);
			       //这里最终会调用到notifier和blktrans_notifier里的mtd_notify_add和blktrans_notify_add方法,分别对应字符设备和块设备
					not->add(mtd); 
					}
			//先看mtd_notify_add,字符设备很简单,如果有设备注册,就会创建两个以mtd开头的设备文件
			mtd_notify_add
				class_device_create
				class_device_create
			//再看blktrans_notify_add
			blktrans_notify_add
			    //blktrans_majors被register_mtd_blktrans设置,register_mtd_blktrans被mtdblock.c和 mtd_blkdevs.c调用
				list_for_each(this, &blktrans_majors) {
				struct mtd_blktrans_ops *tr = list_entry(this, struct mtd_blktrans_ops, list);
	            //这里最终会调用mtdblock.c的mtdblock_add_mtd
				tr->add_mtd(tr, mtd);
		    }
			//分析mtdblock_add_mtd
		mtdblock_add_mtd
			add_mtd_blktrans_dev
				alloc_disk  //这里才是块设备驱动开发正在流程,分配gendisk,设置gendisk,添加gendisk
				add_disk

linux-2.6.22.6内核nand flash框架分析
总结:块设备和字符设备这两类存储类驱动最终都会用到nand_scan_tail里面构造的mtd_info信息,最终的的读写函数都会定位到mtd_info的具体函数,不过块设备更复杂,分层更多,它主要分为硬件层、nand协议层和块设备层,硬件层知道怎样发命令,需要构造nand_chip结构体,协议层知道要发什么来操作。主要构造mtd_info结构体,块设备层使用mtd_info信息,并用电梯调度算法进行优化。文章来源地址https://www.toymoban.com/news/detail-511105.html

到了这里,关于linux-2.6.22.6内核nand flash框架分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • linux内核启动分析(三)

    我们前面看了start_kernel的一些函数,现在我们继续追setup_arch: setup_arch函数主要是处理cpu体系相关架构,我们是arm64平台,这个函数处理arm64的一些初始化,主要包括: 初始化内核的mm结构体的代码段、数据段和栈的结束地址; 调用函数early_fixmap_init进行早期固定映射初始化;

    2023年04月20日
    浏览(44)
  • Linux内核移植:内核的启动过程分析、启动配置与rootfs必要文件

     内核启动通常包括4个阶段: iROM代码启动(BIOS启动)。开发板上电后,先执行内部iROM中的固化代码,类似于BIOS,执行通电自检和初始化过程,包括初始化CPU、存储器、时钟、总线等一些必要的硬件资源。 启动引导加载程序BootLoader。根据启动引脚的电平,读取相应的存储

    2024年02月13日
    浏览(145)
  • Linux内核4.14版本——drm框架分析(1)——drm简介

    目录 1. DRM简介(Direct Rendering Manager) 1.1 DRM发展历史 1.2 DRM架构对比FB架构优势  1.3 DRM图形显示框架  1.4 DRM图形显示框架涉及元素 1.4.1 DRM Framebuffer 1.4.2 CRTC 1.4.3 Encoder 1.4.4 Connector 1.4.5 Bridge 1.4.6 Panel 1.4.7 Fence 1.4.8 Plane 1.4.9 小结 2. DRM驱动框架 2.1 DRM驱动对象介绍 2.2 DR

    2024年02月02日
    浏览(37)
  • Linux内核4.14版本——drm框架分析(7)——用户态和内核态间的交互

             驱动会注册一个支持KMS的DRM设备时,会在/dev/drm/下创建一个card%d文件,用户态可以通过打开该文件,并对文件描述符做相应的操作实现相应的功能。该文件描述符对应的文件操作回调函数(filesystem_operations)位于drm_driver中,并由驱动程序填充。典型如下:      

    2024年02月09日
    浏览(58)
  • [NAND Flash 6.4] NAND FLASH基本读操作及原理_NAND FLASH Read Operation源码实现

    依公知及经验整理,原创保护,禁止转载。 专栏 《深入理解NAND Flash》 返回总目录 ​全文 6000 字 内容摘要 NAND Flash 引脚功能 读操作步骤 NAND Flash 中的特殊硬件结构 NAND Flash 读写时的数据流向 Read 操作时序 读时序操作过程的解释 Read 操作实战流程设计 NAND Read 源码 前言 上面

    2024年01月19日
    浏览(36)
  • [NAND Flash 6.3] NAND FLASH基本编程(写)操作及原理_NAND FLASH Program Operation 源码实现

    依公知及经验整理,原创保护,禁止转载。 专栏 《深入理解NAND Flash》 返回总目录 全文 3244 字 ​ 前言 使用的 NAND FLASH 的硬件原理图,面对这些引脚,很难明白他们是什么含义,下面先来个热身: 问1. 原理图上 NAND FLASH 只有数据线,怎么传输地址? 答1. 在 DATA0~DATA7 上既传

    2024年01月19日
    浏览(33)
  • [NAND Flash 3.2] 3D NAND 工艺与发展前沿

    依公知及经验整理,原创保护,禁止转载。 专栏 《深入理解NAND Flash》 全文 6200 字,​ 2023.12.12 更新 3D NAND, 也叫做 Sumsung V-NAND, 是一种高密度闪存。 以前,把NAND闪存颗粒,直接平铺在SSD固态硬盘电路板上,叫2D技术。后来,厂家为节约成本,节省空间,像建高楼一样,一层

    2024年02月04日
    浏览(32)
  • Nor Flash和Nand Flash的区别——笔记

    NorFlash: 串行存储器、读取速度比较快(比NandFlash快),适合用于存储程序代码和执行代码,但NorFlash写入速度比较慢、容量比较小。 数据线和地址线是分开的。 NandFlash: 并行存储器、写入速度比较快(比NorFlash快)、容量比较大,适合用于存储大量数据。但NandFlash读取速度

    2024年02月08日
    浏览(31)
  • [NAND Flash 6.6] NAND FLASH Multi Plane Program(写)操作_multi plane 为何能提高闪存速度

    依公知及经验整理,原创保护,禁止转载。 专栏 《深入理解NAND Flash》 返回总目录 Multi Plane 简介 Multi Plane Program 时序图 Multi Plane 提速机理 Multi Plane Program 状态检查 前言 上一篇我们介绍了 NAND FLASH 基本编程(写)操作及原理_ NAND FLASH Program Operation 源码实现。这只是一次对单

    2024年02月01日
    浏览(44)
  • stm32读写nand flash

    目前我在使用stm32f407ZGT6来读写三星的nand flash【K9F1G08U0E】。 板子我是在这里买的 【STM32F407ZGT6最小系统板/核心板/转接板/开发板/加128M FLASH】 他上面可以选装一个K9F1G08U0E。 针对这个nand flash,可以选择采用stm32的FSMC来进行读写。 stm32的程序我是stm32cubeide来编写的,感觉挺方便

    2024年02月11日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包