linux mtd架构分析
结合LINUX MTD源代码,分析linux mtd的细节,如FLASH驱动、字符/块设备驱动、FTL\NFTL、文件系统。
xgbing
专注于嵌入式方向的软硬件设计与开发(ASM\C\C++,RTOS,Linux,android,以太网\嵌入式网络协议栈,蓝牙,WIFI,文件系统/嵌入式存储,显示\音频,单片机\DSP\ARM\Cortex,电路设计\PCB布板\硬件驱动\数字逻辑CPLD,FPGA\niosII),目前从事VirtualBox\qemu\KVM虚拟化研究工作。
展开
-
linux mtd
嵌入式系统的存储有很多不可靠之处。随着使用容量的增大,现在使用得最多的是nand flash。nand flash价格低廉,但它有很多不足之处。nand flash出厂就可能有坏块,随着使用时间的增长,坏块有可能越来越多。nand flash使用ECC校验算法,ECC在校验的同时可以纠正一位的错码。FLASH中的每个块是有使用限制的,大概使用寿命10万次。如果使用时每次仅对其中的几个块反复擦写,那原创 2014-03-25 09:36:52 · 3081 阅读 · 0 评论 -
yaffs2与mtd之间的连接
yaffs2工作在VFS和MTD之间。(1)移植yaffs2在终端执行:mkdir yaffs2_sourcecd yaffs2_sourcegit clone git://www.aleph1.co.uk/yaffs2yaffs2最新版本的源代码会下载到yaffs2_source目录中。假设我使用的LINUX源代码放在linux-2.6目录中。执行:./p原创 2014-03-04 21:15:51 · 3795 阅读 · 0 评论 -
yaffs2文件系统介绍
YAFFS意义为‘yet another flash file system’,是一个开源的文件系统。是专门为NAND闪存设计的,它的出现使得价格低廉的NAND闪存芯片具有了高效性和健壮性。 YAFFS文件系统性能优越且易于移植,已经成功应用于linux、uClinux和Windows CE等嵌入式操作系统上。 YAFFS是目前为止唯一一个专门为NAND flash设计的文件系统,目前有Y原创 2014-03-01 21:05:33 · 15345 阅读 · 1 评论 -
Readme-linux yaffs2
Welcome to YAFFS, the first file system developed specifically for NAND flash. 欢迎来到YAFFS,这是第一个专门为NAND flash特定开发的文件系统。 It is now YAFFS2 - original YAFFS (AYFFS1) only supports 512-byte page NAND an翻译 2008-07-16 16:13:00 · 3341 阅读 · 2 评论 -
FTL和NFTL---FLASH转换层
FTL(Flash Translation Layer)是nor flash转换层,NTFL(Nand Flash Translation Layer)是Nand Flash的转换层。 Flash是一种介质,它写入前要先擦除,但FLASH是有寿命的,它不能无限次执行擦除操作。在前面的代码文件Mtdblock.c中,它的写入操作仅仅是提供了一个缓冲操作。FTL和NFTL是一个文件系统和mt原创 2014-02-24 20:36:44 · 9563 阅读 · 4 评论 -
MTD块设备---mtd_blkdevs.c
(1)mtd块设备结构定义static struct block_device_operations mtd_blktrans_ops = { .owner = THIS_MODULE, .open = blktrans_open, .release = blktrans_release, .locked_ioctl = blktrans_ioctl, .getgeo原创 2014-02-21 16:04:03 · 3614 阅读 · 0 评论 -
mtd块设备缓冲操作---mtdblock.c
这个文件中并没有增加mtd块设备,mtd块设备的代码文件是Mtd_blkdevs.c。它的功能是为mtd块设备读写提供缓冲操作。驱动入口:static struct mtd_blktrans_ops mtdblock_tr = { .name = "mtdblock", .major = 31, .part_bits = 0, .blksize = 512, .o原创 2014-02-19 11:58:44 · 5550 阅读 · 0 评论 -
mtd字符设备(mtdchar.c)
Mtdchar.c是linux下字符设备驱动程序的实现:static const struct file_operations mtd_fops = { .owner = THIS_MODULE, .llseek = mtd_lseek, .read = mtd_read, .write = mtd_write, .ioctl = mtd_ioctl, .op原创 2014-02-15 14:54:24 · 6761 阅读 · 0 评论 -
mtd分区
mtd_part结构:/* Our partition node structure */struct mtd_part { struct mtd_info mtd; //分区的信息 struct mtd_info *master; //主分区 uint64_t offset; //该分区的偏移地址 int index; //分区号 struct list_head l原创 2014-02-15 14:33:43 · 5471 阅读 · 0 评论 -
Nandflash的驱动加载
分析at91sam9260ek的代码示范。(1)板级初始化。Board-sam9260ek.c中的初始化调用:static void __init ek_board_init(void){。。。代码略/* NAND */ ek_add_device_nand();。。。代码略}ek_add_device_nand()的代码:/* * NAND f原创 2014-02-15 14:16:45 · 3290 阅读 · 0 评论 -
Nor flash的探测
首先说明一下,笔者使用的linux源码的版本是2.6.30。 Map.h中定义了一个结构体:struct mtd_chip_driver { struct mtd_info *(*probe)(struct map_info *map);//探测函数 void (*destroy)(struct mtd_info *);//销毁 struct module *module原创 2014-01-18 16:39:05 · 3378 阅读 · 0 评论 -
mtd_info
mtd_info 用于描述MTD原始设备的数据结构是mtd_info,这其中定义了大量的关于MTD的数据和操作函数。每个MTD原始设备都有一个mtd_info结构(master),其中的priv指针指向一个map_info结构。每个分区被看作一个mtd_info。例如两个MTD原始设备,每个设备3个分区,系统中就有6个mtd_info,它们被放在mtd_table中。mtd_table(原创 2014-01-18 16:37:34 · 7302 阅读 · 2 评论 -
map_info
map_info结构体用于描述一个FLASH的信息。 它在map.h中定义:/* The map stuff is very simple. You fill in your struct map_info with a handful of routines for accessing the device, making sure they handle pagi原创 2014-01-18 15:58:58 · 2938 阅读 · 0 评论 -
FLASH的知识
传统的FLASH分为Nor falsh和Nand flash。(1)Nor flash Nor flash存储以块为单元,写入时必须先擦除,并且擦除和写入的速度都很慢。但nor fash具有SRAM接口,有单独的地址总线和地址总线,接口简单,就像是访问ROM一样,读取速度快,能随机访问存储单元。正是这些特性,所以nor falsh被广泛用来存储启动代码。Nor falsh的价格较贵原创 2014-01-18 00:15:08 · 9642 阅读 · 1 评论 -
MTD是干什么的
MTD(memory technology device 存储 技术设备 ) 是用于访问 memory 设备( ROM 、 flash )的 Linux 的子系统。 先来看一个图: FLASH是嵌入式设备最常用的介质,FLASH有一个特性,它不能像PC机使用的磁盘一样可以重复写一个单元的数据。FLASH必须事先擦除然后再写入。这个特性使得PC机上的文件系统如FAT/原创 2014-01-17 22:42:51 · 11818 阅读 · 1 评论