OpenVINOTM,给你看得见的未来!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 请amine帮忙,找一篇关于FlashFileSystem的旧贴

共3条 1/1 1 跳转至

请amine帮忙,找一篇关于FlashFileSystem的旧贴

菜鸟
2002-07-09 07:15:00    评分
我记得在老站上看到过一篇amine转贴的关于FlashFileSystem的大讨论,里面有涉及到Flash硬件、Block Device、File System的层次关系以及DiskOnChip等内容,好像是从某bbs上转过来的,很长. 现在又要作系统设计了,想再把这篇看一下,麻烦amine帮忙找找,或者别人谁保存的有请贴一下,谢谢.



关键词: amine     帮忙     一篇     关于     FlashFileS    

工程师
2002-07-09 18:42:00    评分
2楼
Unix编程 工程师 来自: 发表总数:12 查看   短消息   电子邮件   引用   回复     -------------------------------------------------------------------------------- 发信人: Luther (天语☆血淹键盘), 信区: Embedded 标 题: Re: flash 文件系统(2) 发信站: UNIX编程 (Mon Apr 1 00:01:13 2002) , 转信 我支持你的说话,对文件系统争论,首先你必须对文件系统比较了解。Flash用Ext2做文件系 统绝对是一个错误,flash与一般的storage不同。我现在就在用JFFS文件系统做embed syst em。 ------------------------------------------------------------------------------ 既然老兄有此血气,我无话可说。因为我们的硬件工程师已经屏蔽了很多硬件信息, 我也主要从软件的角度看FLASH。 NAND,NOR,AND是FLASH的(??)技术,各大FLASH厂商根据这些技术制造FLASH。 FTL(Flash Translation Layer),NFTL(NAND Flash Translation Layer)顾名思义是 传输层的东西。软件从这层编写驱动。 CFI(Common Flash Interface)是一个通用接口。因为FLASH五花八门,接口繁多。因此AMD 提出,Intel等一些大的FLASH厂商共同制定的接口层。目前的FLASH大多支持这个接口, 如果用这个接口编写驱动,也可以适应很多FLASH。因此选择上应该优先考虑这个接口。 这个规范可以从AMD和INTEL的网站上下载。也可以找google。 MTD(Memory Technology Device)是"Linux subsystem for memory devices, especially Flash devices."."The aim of the system is to make it simple to provide a driver for new hardware, by providing a generic interface between the hardware drivers and the upper layers of the system."(这些是抄袭得来的) MTD驱动FLASH成功后,就可以为Linux提供两层接口。 mknod mtd0 c 90 0 mknod ftla b 44 0 mtd(memory technology device) ftl(flash translation layer) 实际驱动FLASH的是mtd设备,但却是char device。给文件系统用的是fla,block device。 也就是ftl建立在mtd之上。为什么mtd要设计为char device,而不直接设计为block device ? 我一直没有找到明确的答案。据说是在UNIX上,char device的效率比block device的要 好。因此格式化Flash Disk: ftl_format /dev/mtd0 创建文件系统: mkfs /dev/ftla 做一个文件系统要分两步走,真麻烦。这些工具和用法可以从MTD中得到。 block device建立好后,就可以建立文件系统。普通的文件系统,如ext2,FAT等都可以按照 以前的方式建立和使用。 JFFS(Journaling Flash File System) is the Journaling Flash File System developed by Axis Communications in Sweden, aimed at providing a crash/powerdown-safe filesystem for disk-less embedded devices. 也就是,JFFS是为FLASH定制的文件系统,换句话说,JFFS和FLASH的驱动捆绑紧密。JFFS1 实现了日志功能,JFFS2实现了压缩功能。但JFFS这种文件系统多次增删文件后,性能下降 得比较明显。同时JFFS2的驱动还没有稳定,时不时出patch。目前handhelds为IPAQ所做 的familiar项目就是采用JFFS2。我看这些用户既是普通用户,也是这些项目的开发者。 所以是否使用JFFS2,就看用户的胆量了。对用户存储数据的分区,建议慎重考虑。 JFFS不能直接在分区上建立文件系统,只能建立文件系统映象。因此有些麻烦。这些在MTD 的文档里都有讲述。 所有文档,都可以在Internet上找到。 如果关心FLASH的硬件层,可以在AMD,INTEL等一些FLASH厂商的网站找到。这些资料太多, 需要自己分类整理。 编译kernel时,选择MTD模块,在里面的HELP有一些简单解释。 MTD的网站: http://www.linux-mtd.infradead.org/ 里面的MTD API documentation和mtd-jffs-HOWTO对于软件开发很有帮助。其它链接也是 很重要。 JFFS Home Page http://developer.axis.com/software/jffs 还有DOC/DOM/CF这些都是对FLASH的封装,使这些FLASH的使用对软件来说和硬盘相似。现在 还有USB电子盘,也是类似。DOC用ISA总线,DOM/CF用IDE,USB电子盘用USB。这些封装后, 写速度慢一些,DOC 512kb/s, USB 600kb/s,IDE接口,没有测过,理论可以达到IDE总线 速度,因此感觉比DOC快些。DOC可以用MSYS或MTD的驱动,USB在Linux已经支持,DOM/CF用 IDE驱动,使用最简单。 ------------------------------------------------------------------------------ 我倒是觉得,在ram里设置一个flash的cache,cache为write-back类型的。 其实,对于nand和nor工艺的flash,保证写操作均匀地分布在整个flash地址空间上,实现大 不相同。nand flash的一个page往往不止512字节,大概有26个多余字节(必须通过使能spar e enable来访问)可以存储写次数等meta data,所以完全可以容易地实现均匀写操作;但是 nor flash就麻烦不少。 *********************************** 我歌我哭我笑我再默然沉睡... ------------------------------------------------------------------------------ 首先多谢大虾指点,在下不胜感激! 其次仍有一些东西不是太清楚,请看看我的理解是否正确: NAND,NOR是制作Flash的工艺 CFI,JEDEC是flash硬件提供的接口,linux通过这些用通用接口抽象出MTD设备。 JFFS可以建立在MTD设备上,而DOC可以通过NFTL建立JFFS(对DOC的概念我仍不太清楚) DOC和MTD处于同一层么?还是应该算和CFI处于同一层(或者是NAND)? 此外我对传输层(NFTL)的概念不是太理解。 而EXT2可以直接建立在DOC上。 关系如下:(因为空格会被忽略,所以用划线“-"代替) --EXT2------JFFS -----\-------/--\ ------\---NFTL--\ -------\--/-------\ -------DOC------- MTD ------------------ /-- \ -------------- CFI-- JEDEC 谢了先! J'accuse!!!!!!! ------------------------------------------------------------------------------ 做FLASH驱动是去年的事了。当时有很好的硬件工程师的支持,因此对硬件没有多少关心。 现在也忘得差不多了。请人补充吧。我不了解JEDEC,因此在下图没有位置。 这是从linux软件的角度看FLASH: ------C runtime(glibc 2.x)------------------------------ ------kernel interface(system call)--------------------- ------Filesystem(ext2, FAT, JFFS/JFFS2)----------------- ------MTD(/dev/fla?, block device)---------------------- ------MTD(/dev/mtd?, char device)----------------------- ------Translation Layer(CFI, FTL, NFTL)----------------- ------NAND, NOR, AND------------------------------------ ------Hardware level, FLASH(raw flash, DOC/DOM/CF)------ 说明: 1、我常用DOC,因此有些想当然大家也知道了。DOC(Disk On Chip)是M-SYSTEM公司的专利 产品,是对FLASH的封装。这东西卖得相当贵,主要原因就是flash controller有专利。 DOM(Disk On Module), CF(Compact Flash),DOC都是FLASH的封装。 2、其实如果从新编写FLASH驱动程序,还是需要知道NAND, NOR, AND这些硬件特性的, 需要编写这方面的代码。因此图中多了一层。 3、在CFI大大流行之后,可以认为CFI比FTL, NFTL高半层。编写驱动时,有时需要编写 CFI, FTL, NFTL的代码,如raw flash, DOC。有时不需要,如DOM/CF,它们的controller 已经完全处理了。传输层(FTL)简单地说,就是设备间数据交换的协议。这里就是CPU和 FLASH如何交换数据。 4、文件系统是建立在块设备上面,应该是抽象的和可移植的。但JFFS知道自己只建立在 MTD模块上,知道MTD模块中的数据结构,因此捆绑得很紧密。 -- 路的盡頭是天涯,話的盡頭是劍。 ※ 来源:.UNIX编程WWW apue.dhs.org. [FROM: 211.101.140.97] -------------------------------------------------------------------------------- 编辑 发表於:2002-04-02 - 23:00:44 IP: 210.53.80.18 Unix编程 工程师 来自: 发表总数:12 查看   短消息   电子邮件   引用   回复     -------------------------------------------------------------------------------- 张贴者: shuyong (member) 张贴日期 03/27/02 03:17 PM 拜托认真学一点技术,不要哗众取宠,误导观众。 大部分外存文件,系统是构建在块设备或有块设备特性的文件上,如loopback。 这些文件系统并不关心底层的物理设备管理的问题,这是块设备驱动的事情。 所以这是一个已经纳入现有技术体系的问题,不需要什么新的技术,只需要 把FLASH的驱动制作成BLOCK DEVICE就可以了。JFFS的文件系统有些特殊,但原理 是一样的。 另外:可重入的文件系统是什么概念? ----------------------------------------------------------------------------- 张贴者: smile_tree (newbie) 张贴日期 03/27/02 04:03 PM haha 我可不想哗众取宠啊! 遗憾的是如果想link ext2和flash driver现在只有这样的方法了. 可重入的文件系统: 指flash 和ext2 的接口(layer interface) flash driver可以解决重入问题就好啊, 那就不需要这个了; 不过可以重入的flash driver还没有啊! jffs 是不可以link到ext2的,只能link到VFS下. 再说重入问题: 这和flash driver有关,不过... Intel 自己的 flash 文件系统driver就有不可重入(signa l task) 和可以重入的(multitask, 如用于CE的) 莫非Intel在当裘千尺? 需要说明的是, 在link到ext2时, layer interface 如果要加, 重入就是要考虑的.如果象I DEdisk driver那样不加 layer interface, 又会有其它的问题啦. 具体比如 flash 写时可以读,erease等... ----------------------------------------------------------------------------- 张贴者: shuyong (member) 张贴日期 03/27/02 06:12 PM 我只想再重复一次,EXT2/EXT3这样的文件系统并不知道底层的物理设备如何管理。 也就是,EXT2可以建立在任何一种块设备上,它不知道这个块设备是IDE、SCSI还是 FLASH设备,甚至是另一个文件系统的大文件或者是网络块设备。因此对于FLASH, 只要在/dev实现了块设备驱动,就可以使用EXT2文件系统,不需要你所说的那些 玄而又玄的东西。 JFFS和EXT2是同一层次的东西,当然是不可以link到ext2的。JFFS有些特殊,和FLASH 设备捆绑得比较紧密,只可以使用在FLASH上。但使用了JFFS,就没有必要使用EXT2了。 至于可重入问题,每一种不可共享的资源都必须考虑的问题。我不理解你在这里特别 提出的意义。总之,操作系统总会有一层处理不可共享的资源的共享问题。在文件 系统,我看大多在块设备一层。 ----------------------------------------------------------------------------- 张贴者: nxin (member) 张贴日期 03/27/02 07:42 PM 在flash上装ext2文件系统早有人做过吧,听过FTL吗?不过这样效率不高,没什么好玩的。 即使不用文件系统,flash驱动也得考虑可重入啊,不懂你得意思。 ----------------------------------------------------------------------------- [回应这篇文章] 回复 张贴者: Eros76 (newbie) 张贴日期 03/27/02 10:34 PM 是啊,什么可重入?据说FLASH提供了两个读写保护的脚吗?只要正确的设置读写模式,爱读 就读,要写就写,倒是有效率问题。 FLASH是块操作的,需要整块读写,这点也不难实现。 ----------------------------------------------------------------------------- 张贴者: calfe (newbie) 张贴日期 03/28/02 09:23 AM 问题似乎没有smile_tree想的那么复杂,但也没有你想的那么简单。假设flash的块设备驱动 程序已经有了。你怎么在flash上实现ext2文件系统?嵌入式系统毕竟不象pc机那样,可以通 过mkfs命令。可是在你的嵌入式系统中如何实现?小生失礼了。 我就这么点道行,可是我还想飞 $¥*@* ----------------------------------------------------------------------------- 张贴者: smile_tree (newbie) 张贴日期 03/28/02 09:35 AM 1. flash link到ext2的目的是: 解决 j'2ffs的 performance不好的问题. j2ffs的文件组织 方式决定效率不高,其owner在mail中承认; 2.不一定要考虑重入:或说重入保护不是必须的 ----------------------------------------------------------------------------- 张贴者: smile_tree (journeyman) 张贴日期 03/28/02 09:39 AM 1不用重复在linux device driver上看到的话了 只问你:对于FLASH,怎样在实现块设备驱动? 2jffs使用后,不是没有必要使EXT2, 而是使不了 ----------------------------------------------------------------------------- 张贴者: smile_tree (journeyman) 张贴日期 03/28/02 09:49 AM 在向flash的一个块中的一个byte写入也会使整块进入"block-不可读"状态, ----------------------------------------------------------------------------- 张贴者: nxin (member) 张贴日期 03/28/02 10:00 AM linux >= 2.4.10 已经实现了Flash上的块设备驱动,基本没什么需要再做的,不想用JFFS, 用ext2也可以,甚至FAT也没问题吧。我觉得ext2是面向大容量磁盘的,虽然也能用于别的地 方,但不一定合适,比如Flash。 ----------------------------------------------------------------------------- 张贴者: tpu (newbie) 张贴日期 03/28/02 10:03 AM 不理解你的话。 难道你没用过mtdblock driver吗?它就是一个标准的块设备, 只要将ext2的image写进去就可以用了。 ----------------------------------------------------------------------------- 张贴者: Henaldo_0 (journeyman) 张贴日期 03/28/02 10:43 AM 我觉得这个东西到不是什么问题。 现在的问题是对flash这种硬件你们想得过于简单。不知 道你们了不了解ext2文件系统,如果按照ext2文件系统,可以在改写一个块中的某一个字节 时,先将这个块中的数据拷贝,然后erase这个块,然后再写,本身,这其中需要花费差不多 1秒的时间,然后,我们应该考虑损耗问题,不要忘了flash设备本身只有10万次的刷新,实 际应用中可能只有2~3万次吧。 ----------------------------------------------------------------------------- 张贴者: Eros76 (newbie) 张贴日期 03/28/02 10:49 AM 嘿,在PC上用mkfs做好ext2然后写进flash,这样不就可以在flash上用ext2了吗? ----------------------------------------------------------------------------- 张贴者: Eros76 (newbie) 张贴日期 03/28/02 10:52 AM 如果只是读的话,不会增加刷新损耗吧? ----------------------------------------------------------------------------- 张贴者: nxin (member) 张贴日期 03/28/02 11:00 AM 应该不会的,所以我觉得用什么文件系统要根据应用选择,比如只读文件系统用cramfs就不 错。 ----------------------------------------------------------------------------- 张贴者: Henaldo_0 (journeyman) 张贴日期 03/28/02 01:03 PM 只读是没什么损耗的,但实际上主要是用来存储。/ ----------------------------------------------------------------------------- 张贴者: smile_tree (journeyman) 张贴日期 03/28/02 01:36 PM 只读就用Rom吧, 比flash便宜多了 ----------------------------------------------------------------------------- 张贴者: calfe (newbie) 张贴日期 03/28/02 01:47 PM 能具体说一下吗?你实现了吗? 我就这么点道行,可是我还想飞 $¥*@* ----------------------------------------------------------------------------- 张贴者: calfe (newbie) 张贴日期 03/28/02 01:51 PM 其实我当时写过flash做为字符设备的驱动。在实现同步的时候,使用内核信号量进行down和 up操作就行了。 我就这么点道行,可是我还想飞 $¥*@* ----------------------------------------------------------------------------- 张贴者: smile_tree (journeyman) 张贴日期 03/28/02 01:51 PM 补充一下: 改写时可以: 1.块中的数据拷贝,加上你改写的,找一个新块copy 2.原块标记为废块 3.找机会把废块erease ----------------------------------------------------------------------------- 张贴者: calfe (newbie) 张贴日期 03/28/02 02:09 PM >>>linux >= 2.4.10 已经实现了Flash上的块设备驱动,基本没什么需要再做的, 有吗?我看的就是2.4.10呀,没发现上面有flash的块设备呀,当然我看过有flash的字符设 备的驱动。 还请老兄指点一下具体位置。 我就这么点道行,可是我还想飞 $¥*@* ----------------------------------------------------------------------------- 张贴者: nxin (member) 张贴日期 03/28/02 02:22 PM drivers/mtd目录下,特别是mtdblock.c ----------------------------------------------------------------------------- 张贴者: shuyong (member) 张贴日期 03/28/02 05:00 PM 1、我是有一本linux device driver,但我到现在还没有把它看完。所以当我知道我的 观点居然符合高手的说法,不禁有些欣欣然。但这实在是一个很基本的概念。如果连这都 不清楚,如何做文件系统?如果你不知道MTD模块,恐怕要停下来好好看看别人的成果再 前进了。 2、JFFS和EXT2是同一层次的东西。用了一个就不能、也没有必要使用另一个了。请你从 最简单的角度看待文件系统,不要把事情搞复杂了。JFFS从实现的构架看,和底层的FLASH 块设备驱动联系得太紧密,不符合UNIX的设计哲学。但从FLASH特定的设备上看,却是一个 相当好的设计。 3、大家现在的模糊点可能在存储设备的分区上。PDA没有分区表。但我们也不必依赖分区 表,爱怎么分就怎么分,IPAQ的KERNEL就给了一个范例。 另外,我在FLASH上使用过CRAMFS,JFFS和EXT2,对文件系统没有什么需要修改的地方。下 一步可能会对DOC使用JFFS,可能需要做一些工作,但大部分还是在BLOCK DEVICE。 ----------------------------------------------------------------------------- 张贴者: smile_tree (journeyman) 张贴日期 03/28/02 06:15 PM 1.我已经说过是抛砖, 但我就是讨厌有人自认高手用教训人的口吻说话; 我只是回答一下问 题,你了解多就请也回答人家的问题好了; 如果你觉得MTD 可以解决的问题,告诉calfes同志 吧; 至于linux device driver, 我提的那本不是经典的那本, 而是少儿linux 卡通书, 对不起让 你感情浪费了 2.至于jffs,cramfs, Redboot我也用过,没有觉得难用. 3. JFFS的performance 问题在于文件多次update后,由于PDA上长会有embedded DB, DB的文 件操作频繁,就会感觉不好. 4. 我的方案要加一个layer interface但我觉得这样彻底解决问题. 5. 我开始也是从最简单的角度看待文件系统的, 只是后来在tuning 系统时才开始深入,因此 还算不上什么; 我只是觉得MTD不能很好解决这个问题.如果觉得我说得复杂, 我有没有强逼 你使,那么你何不使使简单,效率高的方法? ----------------------------------------------------------------------------- 张贴者: shuyong (member) 张贴日期 03/28/02 10:34 PM 1、没想到一不小心就刺激到一个高手高贵的自尊。没有人认为我是一个高手,我也不认为 我是一个高手。我只是解决了一些问题。那些少儿linux 卡通书, 我是没有看过,看来是 浪费感情了。至于calfes的问题,我可以把相应的思路说出来,但我决不会具体帮助他把 东西做出来,否则这就是我的项目了,那就是职责不清了。 2、jffs,cramfs这些文件系统本来就是很容易使用的东西,我没有说它们难以使用,只是 说它们使用很简单,不要考虑太多的复杂问题。Redboot没用过,因为目前的项目里还没有 使用它的需求,因此不知道是否难用. 3、FLASH最大的问题是寿命,JFFS也有performance问题。这一般可以在block device之下 和JFFS之上增加layer interface。在block device中,没有人规定往偏移100的地方写 一个字节时,block device一定要在物理设备的偏移100的地方写数据。MSYS的DOC这种 东西的好处就是在底层使用了随机选块写的技术,使得整个FLASH均匀地消耗寿命。如果 自己在FLASH上编写驱动,这是首先考虑的问题。至于效率问题,不同的应用有不同的选择。 如果是数据库服务器使用的文件系统,恐怕EXT2和JFFS都不能胜任。这时需要为数据库 提供相应的文件系统。这方面的资料不多,还是有一些。但是PDA上会有embedded DB, 这种PDA应用在什么场合?用户是如何使用PDA?DB的文件操作有多频繁,这PDA是一个不停 运转的数据库服务器?现有的文件系统哪里不符合需求?改进方案是什么?从新设计一个 文件系统的成本是多少?这些不是凭感觉就能解决问题的。回过头看看你的回答: >Step2 make linux ext2 know your flash filesystem。 >step2.1: 使你的flash块设备驱动采用类bitmap方式管理固定大小块 这本来是block device要解决的问题,EXT2不需要知道这些。回看你的题目: >在flash上实现ext2文件系统的思路 这就偏离方向了。再有 >Step 4 一个非重入的ffs >step 5 一个实时的ffs >实时的,可重入的,加入ext2/3的ffs 我还是弄不清楚这种文件系统的含义。你可能是把文件系统和驱动实现弄混淆了。文件系统 通俗地说,就是数据存放在外存的格式。不同的实现有不同的效果。最好的效果就是给系统 提供最大总体效率地、并发地操作。比如,对于FAT的文件系统,DOS的驱动就没有并发,而 LINUX的可以有并发。但实时系统又是另外的要求,对于实时任务的I/O操作,要同时保证或 预留CPU资源和I/O带宽给这个实时任务,以保证实时需求。所有这些,和文件系统没有多少 直接的关系。所以建议你的题目是: 在flash上数据的高效应用 1、实现flash块设备驱动程序。 1.1、查看MTD是否支持现有FLASH。 1.2、不支持则查看这FLASH是否支持CFI。 1.3、不支持则查看这FLASH在MTD中是否有类似的接口(今后的驱动模板)。 1.4、不存在则查看block device的编程方案。 1.5、重点算法和实现是在FLASH上的随机选块写数据。 1.6、不论1.1支持还是进入1.4方案,提交<<编写FLASH的块设备驱动的可行性报告>>,并实 现。 报告内容包括:对FLASH直接编写块设备和在MTD接口编写驱动,估计效率,测试方案与成本 的 对比分析。 2、在flash块设备驱动程序上测试EXT2,FAT或其它文件系统。如果是MTD方案,还需测试JF FS。 3、应用对文件系统的要求 3.1、应用场合。I/O速度和频率。 3.2、提交分析报告。 3.3、提交<<针对项目应用的现有支持的文件系统的测试方案>>,并测试。 3.4、如果测试通过,则选择一种能满足其它需求的,成本最低的文件系统。 3.5、否则,提交<<编写新的文件系统的可行性方案>>,并实现。为性能可以考虑和flash 块设备驱动程序紧密捆绑。 4、应用对I/O速度和频率的优化。 4.1、提交优化方案并测试。内容包括CACHE算法,搜寻算法,为FLASH考虑的最小修改量 算法,实现3.5时的绑定算法。 4.2、灾难发生时的数据可靠性。 4.3、灾难发生后的数据恢复。 5、应用对实时的要求。 5.1、如果需要实时操作系统,选择或实现一个实时操作系统,报告。 5.2、第一条到第五条在这个实时操作系统上实现的可行性,报告。 6、项目的其它技巧。如:如何生成、配置、下载和调试IMAGE等等。 还好,你没有在我这里干活,否则你的项目太容易被CANCEL了。还有,讨论技术问题不必 发脾气。不论你是不是高手,你的思路已经误导别人,我可以指出来。不论你发不发脾气, 文件系统都是可以简单的应用,我正在使用的方案没有变化。如果发脾气可以解决问题, 恐怕我的脾气比火焰山还要厉害。 ----------------------------------------------------------------------------- 张贴者: smile_tree (journeyman) 张贴日期 03/29/02 12:42 AM 1。那些linux卡通,我正在看,因为有人上来张口就说“拜托认真学一点技术,不要哗众取 宠,误导观众”,我水平很低,从卡通看起吧 2。MSYS真让人崇拜啊, 已经2002年了连随机选块写都有。 不过我看1998年的一个ffs ref erence code 时, 不知怎么也有这个东西, 3。EmbeddedDB 和 DBserver( 就是你的”数据库服务器“)是很不同的东西,有兴趣可以 参考一下相关的website, 如RDM 4。无论如何,总要维护flash物理块和逻辑块的映射表,谁维护呢?(1)用 flash block driver(2)用一个在block driver和ext2之间的layer 如此而已吧;此外有些动作, 如 w rite 引起的相关动作(copy erease then write 或applyblock,copy+write ,erease l ater),随机块分配,写log或定义flag 用于 restore。。。 这些动作同样是(1)用 fla sh block driver(2)用一个在block driver和ext2之间的layer, 如果用方法2,相应的要有和ext2的interface; 对于方法1,我的flash block driver是比较低级的,没有完全满足要求,既然要改,不如用 方法2了 DOC 我没有接触过, 我认为DOC厂商也是在低级的flash block driver上和ext2,FAT下添加 了类似我的方法2的layer;(从"MSYS的DOC这种东西的好处就是在底层使用了随机选块写的 技术,使得整个FLASH均匀地消耗寿命"猜的,DOC应该是在write执行时作的,不知对不对, 或者DOC使用其他方法?) 5。为何说jffs2 的performance不好? 因为它比较特殊的组织形式。具体看一下它的maill ist上面有讨论。不过综合起来, jffs2还是满足大多数应用的, red hat的嵌入版好像也使 它 6。“使你的flash块设备驱动采用类bitmap方式管理固定大小块“有错吗?你仔细看看, 我 写的”flash块设备驱动“和你以为的”ext2“一样吗? 7。”Step 4 一个非重入的ffs “ 对于global变量时,某些flashdriver default认为运行 环境单thread没有维护。不过DOC好像维护了,所以你没有听说过这个问题 8。实时OS和实时flash filesystem的关系, 参见intel 的专为vxworks开发的 flash文件系 统FDI文档吧。懒得给你扫盲。 9。你在最后写的只是feasibility report, 我可是连 requirement doc和design doc 都写 了,而且你的report胡搅了feasibility 和一部分requirement的内容,属于不合格 10。 flash的 restore是另一个话题,你在和客户讨论时经常提起是吧?这方面Intel 和 j ffs的doc和code都说的不少了。 10。。。。,关于你最后的话,我懒得理你。 到这里来只是为了寻找更多的朋友,我一直认为linux是一个平等的世界,以前作windows , 有些”高手“的态度让我讨厌,这也是喜爱linux的原因之一吧。 免费送你一句话: 有了open的OS,还要有open的心;有了open的心,才是linuxer ----------------------------------------------------------------------------- 张贴者: zeuszj (member) 张贴日期 03/29/02 09:02 AM 能把下面几个词的含义和联系说一下吗?(主要是联系,分层什么的) NAND,NOR,NFTL,FTL,MTD,DOC,CFI,JEDEC,JFFS 谢了先! J'accuse!!!!!!! ----------------------------------------------------------------------------- 张贴者: shuyong (member) 张贴日期 03/29/02 12:08 PM 这些概念,我知道得很模糊,还是找一个专业人士给你解释吧。我现在发帖子还得环视左右 , 免得高手的板砖飞来。 ----------------------------------------------------------------------------- 张贴者: shuyong (member) 张贴日期 03/29/02 12:10 PM 1、现在的高手怎么好象有点偏执。我只是举了DOC的例子,说明对FLASH的驱动要考虑的 一个问题。怎么就成了我对MSYS崇拜得不得了。然后一棍子打下来,说老子98年就知道了, 来崇拜我吧。我2000年才进入IT业,不是高手,我只需要我解决问题的时候,我掌握了解决 问题的方法。 2、你对DOC的猜测基本正确。但它是在block device的最底层实现随机选块写的技术。这 也是我们之间的分歧所在。 3、在block driver和ext2之间的layer,我认为属于block device的范围。包括你第6、7点 的 内容,可以放在block device的上层。而你认为属于ext2的范围。如果连design doc 都写 了,那就把它好好实现吧。 4、我的方案可以更换文件系统。而你的方案是用ext2做模板,用JFFS的思路实现另一个 JFFS文件系统。 5、我不认为JFFS是一个好的文件系统,虽然对于FLASH是一个比较好的实现。所以现有的 项目能用就用。不能用的,我会选用别的方案,而不是JFFS的思路。JFFS的的performance 不好,我一直在跟踪和等待别人给我解决了。懒人自有懒福。 6、看来你还没有了解实时OS的概念。实时OS为了实时需求,对外存的数据组织会有要求。 但实时文件系统确实是一种未知名的叫法,尽管它出现在INTEL的文档里。有时间为大家 讲解讲解?不必为了我。 7、我匆匆写成的建议,当然不及你深思熟虑,连 requirement doc和design doc 都写了 要完美。同时,没有requirement哪来feasibility?所以我杜撰了一些requirement,所以 我的建议胡搅了feasibility 和一部分requirement的内容,属于不合格很正常。但我看 你没有为你的需求做好准备,否则你贴出的思路就不会那样模糊,那样让人产生歧异,让人 无法实施。 8、我现在是在用open的OS,但确实没有open的心。不是linuxer,那也就算了。因为在中国 的opensource里面,有太多的是是非非,七情六欲。以后有时间和机会,我会申请做DEBIAN 的开发人员。而各个高手们,上来就抛出一块砖,到处乱支着。等人有疑问了,就给我准备 大砍刀。这也算是open的心了。 -------------------------------------------------------------------------------- 编辑 发表於:2002-04-02 - 22:56:48 IP: 210.53.80.18 Unix编程 工程师 来自: 发表总数:12 查看   短消息   电子邮件   引用   回复     -------------------------------------------------------------------------------- 信人: Luther (天语☆血淹键盘), 信区: Embedded 标 题: 在flash上实现ext2文件系统的思路(1) 发信站: UNIX编程 (2002年03月29日09:25:46 星期五), 转信 文章标题 在flash上实现ext2文件系统的思路(1) 回复 张贴者: smile_tree (newbie) 张贴日期 03/27/02 11:15 AM 在flash上实现ext2文件系统的思路(1) 这是一个很新的问题, (意思是国外也没有很多人尝试,找形成文档很困难),我来试着抛 砖吧, Step1: 有了flash块设备驱动程序先! (没有这个就不用谈了.不过硬件设备商都提供) Step2 make linux ext2 know your flash filesystem: step2.1: 使你的flash块设备驱动采用类bitmap方式管理固定大小块(不是jffs的方式) step2.2: 实现ext2的interface,这是要自己实现的了;如同实现新的layer interface;有了step2 .1,会容易不少 作完这个,已经完成70%了; Step3 make image 第一次flash上是没有文件系统的, 需要先用ramdisk启动,再生成一个没有ramdisk 的image , (麻烦!) 这样就有了一个image, 但... 工作还远远没有结束... Step 4 一个非重入的ffs step 5 一个实时的ffs 其实只要再等一年, 就会有一个国际flash巨头为大家发布实时的,可重入的,加入ext2/3的f fs 所以给j2ffs解决performance的时间只有一年了,haha -- 路的盡頭是天涯,話的盡頭是劍。 ※ 来源:·UNIX编程 apue.dhs.org·[FROM: 166.111.160.6] Edited by - unix编程 重新编辑於 2002-04-02 22:36:03 -------------------------------------------------------------------------------- 编辑 发表於:2002-04-02 - 22:33:33 IP: 210.53.80.18 amine 版主 来自: 发表总数:519 查看   短消息   电子邮件   引用   回复     -------------------------------------------------------------------------------- 3. 嵌入式FLASH文件系统〔FFS〕的要求 由于嵌入式系统的应用环境以及Flash芯片的特性,对文件系统一般有如下要求: 掉电安全[crash/powerdown-safe]: 嵌入式系统一般运行环境比较恶劣,但要求较高的可靠性.这就对Flash文件系统提出了较高的要求,无论程序崩溃或系统掉电,都不能影响文件系统的一致性和完整性。文件系统的写入,垃圾回收等操作对系统异常中止都非常敏感,极易造成数据丢失和数据垃圾。在文件系统设计和选用时应多加考虑。 平均使用[wear-leveling]:如上所说,Flash扇区的擦除次数都有限制,文件系统对Flash的使用必须充分地考虑该特性,最好能均匀使用Flash的每个扇区,以延长Flash的使用寿命。 高效垃圾回收[garbage collection]: 任何存储器在分配使用一段时间之后,都会出现空区和碎片数据,这就需要进行垃圾回收,以保证存储器空间的高效使用。而Flash擦除以扇区为单位,垃圾的回收也应以扇区为单位,先移动扇区数据,再擦除整个扇区。 低空间消耗[Low OverHead]:Overhead指文件系统管理结构在Flash存储器上的空间消耗,这部分空间用于文件系统建立,而不能用于实际数据的存储。因为一般嵌入系统中存储器空间有限,低Overhead,可以提高有用数据存储空间。 -------------------------------------------------------------------------------- 编辑 发表於:2002-04-02 - 03:46:06 IP: 210.53.80.18 amine 版主 来自: 发表总数:519 查看   短消息   电子邮件   引用   回复     -------------------------------------------------------------------------------- 太好拉, 多交流, 我正想用JFFS的思想自己重写一个文件系统, 可以方便移植到各种OS下, 比如psos,ucos... -------------------------------------------------------------------------------- 编辑 发表於:2002-03-28 - 10:23:33 IP: 211.97.214.52 stonehill 工程师 来自: 发表总数:11 查看   短消息   电子邮件   引用   回复     -------------------------------------------------------------------------------- 错了,是AMINE兄,呵呵 -------------------------------------------------------------------------------- 编辑 发表於:2002-03-28 - 05:38:42 IP: 204.101.36.132 stonehill 工程师 来自: 发表总数:11 查看   短消息   电子邮件   引用   回复     -------------------------------------------------------------------------------- Amanie兄, 我们公司的产品中有一个简单的FLASH文件系统,我这几天可以读一下代码,回头和大家一起讨论 -------------------------------------------------------------------------------- 编辑 发表於:2002-03-28 - 05:37:20 IP: 204.101.36.132 amine 版主 来自: 发表总数:519 查看   短消息   电子邮件   引用   回复     -------------------------------------------------------------------------------- 读不成功的可能性较小, 用校验码保证正确 写不成功可以"重试"解决 Flash驱动很简单, JFFS都有, 没有大量工作, 只需重新编址 -------------------------------------------------------------------------------- 编辑 发表於:2002-03-24 - 13:36:17 IP: 210.53.80.18 aqian 高级工程师 来自: 发表总数:113 查看   短消息   电子邮件   个人主页   引用   回复     -------------------------------------------------------------------------------- FFS的移值是不是得写一些和flash存储器相关得驱动函数? -------------------------------- 天外有天 -没错 山外有山 -没问题 我外有你 -Certainly 你中有我 -哇塞,怎么可能哦? -------------------------------------------------------------------------------- 编辑 发表於:2002-03-24 - 12:10:27 IP: 211.97.214.52 aqian 高级工程师 来自: 发表总数:113 查看   短消息   电子邮件   个人主页   引用   回复     -------------------------------------------------------------------------------- 谢谢amine的建议; 一开始我觉得写一个Flash文件系统挺简单的,现在自己写的时候才知道完全不是那么回事,难得很哦:(我发觉最讨厌的就是Flash那鬼东西写挺麻烦的,要读出一个扇区然后擦除之后在可以写,好烂费时间啊;还有就是总体规划更是一个头疼的事情,昨天晚上和我一个同事讨论“样判断一个块是坏”的问题的时候,总是觉得一次读写不成功就认为它是坏的的原则不好,觉得可惜,可是有没有什么好办法来解决这个问题。 Edited by - aqian 重新编辑於 2002-03-22 14:11:01 -------------------------------- 天外有天 -没错 山外有山 -没问题 我外有你 -Certainly 你中有我 -哇塞,怎么可能哦? -------------------------------------------------------------------------------- 编辑 发表於:2002-03-22 - 14:09:20 IP: 211.97.214.52 amine 版主 来自: 发表总数:519 查看   短消息   电子邮件   引用   回复     -------------------------------------------------------------------------------- 我建议不要自己从头作, 而应借用成功的设计和代码 这样才能有效率和质量 -------------------------------------------------------------------------------- 编辑 发表於:2002-03-22 - 09:11:38 IP: 211.97.214.52 aqian 高级工程师 来自: 发表总数:113 查看   短消息   电子邮件   个人主页   引用   回复     -------------------------------------------------------------------------------- 我现在就想在AM29F400B Flash芯片上实现一个文件系统,而且工作正在进行;当然是那种和差劲的那种,还请大家多指点! -------------------------------- 天外有天 -没错 山外有山 -没问题 我外有你 -Certainly 你中有我 -哇塞,怎么可能哦? -------------------------------------------------------------------------------- 编辑 发表於:2002-03-22 - 08:59:03 IP: 211.97.214.52 amine 版主 来自: 发表总数:519 查看   短消息   电子邮件   引用   回复     -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- 此文由stonehill发表。 做一个多线程安全的文件系统需要考虑的东西还是很多的.需要维护很多数据结构. 单纯对FLASH中存放文件做生成删除读与写是很容易的事情. -------------------------------------------------------------------------------- 线程安全是个问题, 而由于Flash存储器芯片的特性, 如大扇区, 有限擦除次数等 Flash文件系统有更特殊的要求: 如掉电安全, 均匀使用等 是不是我把问题想得太复杂拉, 不知你的简洁方案如何实现的, 是否可以教我, 大家一起讨论讨论 Thanks Edited by - amine 重新编辑於 2002-03-22 08:45:13 -------------------------------------------------------------------------------- 编辑 发表於:2002-03-22 - 08:44:45 IP: 211.97.214.52 stonehill 工程师 来自: 发表总数:11 查看   短消息   电子邮件   引用   回复     -------------------------------------------------------------------------------- 做一个多线程安全的文件系统需要考虑的东西还是很多的.需要维护很多数据结构. 单纯对FLASH中存放文件做生成删除读与写是很容易的事情. -------------------------------------------------------------------------------- 编辑 发表於:2002-03-22 - 01:55:20 IP: 204.101.36.132 amine 版主 来自: 发表总数:519 查看   短消息   电子邮件   引用   回复     -------------------------------------------------------------------------------- . Flash存储器特点 在嵌入式系统中一般使用NOR技术的Flash存储器,既可存储数据,还可存放直接执行的代码。而这种Flash存储器不象普通的块设备。它不能对同一内存地址写入两次,而必须先进行耗时的擦除操作,而且一次擦除一个扇区,扇区大小一般为64K字节。这就是为什么需要为Flash存储器开发专用的文件系统,而不能使用已有的文件系统。 扇区完全擦除后,所有位都变为‘1’;在写入操作时,可使必要的位从‘1’变为‘0’。但是要让位从‘0’变为‘1’,就需要再进行擦除操作。擦除操作比较耗时,一般需要1-2秒,甚至最大要10秒。对于实时系统来说,肯定不能进行忙等待擦除完成。在RTOS中,可以延时系统调用完成查询等待。另外需要提醒一点,在Flash存储器进行擦除操作时,不能再进行正常的读取操作,这需要启动擦除的任务在操作期间独占该设备,操作完成后再释放掉,这可由信号量(semaphere)来完成互斥独占,若在中断中也有访问Flash的代码,还需屏蔽中断,但实时系统一般不允许。 NOR型Flash每个扇区的擦除次数都有限制,一般10万次-100万次。而写入操作对Flash损耗不大,一般没有次数限制。 Flash存储器接口还有两个标准:CFI和JEDEC。CFI为公共Flash接口[Common Flash Interface],用来帮助程序从Flash芯片中获取操作方式信息,而不用在程序中硬编码Flash的ID。具体请参考文献[1],[2]。JEDEC用来帮助程序读取Flash的制造商ID和设备ID,以确定Flash的大小和算法,如果芯片不支持CFI,就需使用JEDEC了。 Flash存储器的扇区过大,是实现文件系统的最大障碍。而小扇区Flash可更方便地实现文件系统,如SST的SST29SF040,ATMEL的AT29BV040等。这种Flash很类似磁盘,可方便地实现定位置文件分配表的文件系统,如DOS文件系统。但这对频繁写入数据的应用来说仍存在缺陷,文件分配表的频繁改写会很快损坏其存放扇区。另外这种Flash未普遍使用,字节写入也较慢。 -------------------------------------------------------------------------------- 编辑 发表於:2002-03-21 - 20:25:02 IP: 210.53.80.18 amine 版主 来自: 发表总数:519 查看   短消息   电子邮件   引用   回复     -------------------------------------------------------------------------------- 最近刚移植了elinux下的JFFS[Journal Flash File System], 有点心得, 感兴趣的可以一起讨论. 最新的JFFS/JFFS2的源代码在最新的Linux[2.4.10]内核中有. -------------------------------------------------------------------------------- 编辑 发表於:2002-03-15 - 23:28:48 IP: 210.53.80.18 老猫 工程师 来自: 发表总数:28 查看   短消息   电子邮件   引用   回复     -------------------------------------------------------------------------------- 说得好,现在手机上也有很多在用Flash 文件系统了。 -------------------------------- 猫眼看天,仅供参考 -------------------------------------------------------------------------------- 编辑 发表於:2002-03-15 - 22:09:16 IP: 211.162.33.85 aqian 高级工程师 来自: 发表总数:113 查看   短消息   电子邮件   个人主页   引用   回复     -------------------------------------------------------------------------------- 版主啊:哪里有免费的、代码公开的、Flash文件系统可以下载啊?我要把它加到uC/OS中去看看,我的那个板子上有256K双字,你看做一个Flash系统行不行?我们公司好像再用一种Flash卡,那上面的文件系统好像使自己变得,可惜我们不是一个部门的,否则可以拿来看看:( -------------------------------- 天外有天 -没错 山外有山 -没问题 我外有你 -Certainly 你中有我 -哇塞,怎么可能哦? -------------------------------------------------------------------------------- 编辑 发表於:2002-03-15 - 18:07:51 IP: 211.97.214.52 amine 版主 来自: 发表总数:519 查看   短消息   电子邮件   引用   回复     -------------------------------------------------------------------------------- http://embedded.linuxjournal.com/magazine/issue04/4678/ Flash Filesystems for Embedded Linux Systems Flash isn't only a hard disk with no moving parts. This article shows you how to combine filesystem technologies to make the best use of Flash. by Cliff Brake Jeff Sutherland -------------------------------------------------------------------------------- 编辑 发表於:2002-03-15 - 17:17:29 IP: 211.97.214.52 amine 版主 来自: 发表总数:519 查看   短消息   电子邮件   引用   回复     -------------------------------------------------------------------------------- Transaction Flash FileSystem Copyright Tevero AS The transaction flash filesystem (TFFS) is a very simple filesystem specially made for use with the flash disk controller (FDC) in an embedded system. It is fully recoverable, by using a transaction record scheme for those filesystem actions that changes two or more FDC blocks -------------------------------------------------------------------------------- 编辑 发表於:2002-03-15 - 13:52:16 IP: 211.97.214.52 amine 版主 来自: 发表总数:519 查看   短消息   电子邮件   引用   回复     -------------------------------------------------------------------------------- http://www.usenix.org/publications/library/proceedings/neworl/full_papers/kawaguchi.ps A Flash-Memory Based File System Atsuo Kawaguchi, Shingo Nishioka, and Hiroshi Motoda Advanced Research laboratory, Hitachi, Ltd. Abstract A flash memory device driver that supports a conventional UNIX file system transparently was designed. To avoid the limitations due to flash memory's restricted number of write cycles and its inability to be overwritten, this driver writes data to the flash memory system sequentially as a Log-structured File System (LFS) does and uses a cleaner to collect valid data blocks and reclaim invalid ones by erasing the corresponding flash memory regions. Measurements showed that the overhead of the cleaner has little effect on the performance of the prototype when utilization is low but that the effect becomes critical as the utilization gets higher, reducing the random write throughput from 222 Kbytes/s at 30% utilization to 40 Kbytes/s at 90% utilization. The performance of the prototype in the Andrew Benchmark test is roughly equivalent to that of the 4.4BSD Pageable Memory based File System (MFS). -------------------------------------------------------------------------------- 编辑 发表於:2002-03-15 - 13:49:08 IP: 211.97.214.52 amine 版主 来自: 发表总数:519 查看   短消息   电子邮件   引用   回复     -------------------------------------------------------------------------------- http://gatekeeper.dec.com/pub/DEC/SRC/technical-notes/abstracts/src-tn-2001-001.html Abstract Cloudburst is a compressing, log-structured virtual disk implemented in flash memory under the Linux operating system. Existing Linux filesystems (preferably with certain modifications) can run on top of Cloudburst. Unfortunately, more extensive filesystem modifications would be needed to make the results fully satisfactory than we had realized at first, and we did not complete them. Nevertheless, the Cloudburst design has some interesting aspects that may be of use to future efforts in flash file systems -------------------------------------------------------------------------------- 编辑 发表於:2002-03-15 - 13:47:49 IP: 211.97.214.52 amine 版主 来自: 发表总数:519   查看   短消息   电子邮件   引用   回复   -------------------------------------------------------------------------------- 就象前几年讨论RTOS必要性一样, 现在一般认为在嵌入式系统没有必要使用文件系统。但随着系统复杂性的增加,存储器容量的扩大,嵌入文件系统是一种必然趋势。也象RTOS一样,文件系统可以使嵌入系统更容易管理,开发和移植。 使用文件系统,可将存储空间当做直观的名称空间,以代替原始的地址空间,不用每次新应用开发都从头使用存储器。可以提供与底层存储器无关清晰的编程接口API,使上层应用不再关心底层具体设备,而可方便地利用标准接口访问存储器。由于接口标准化,也保证了程序的层次性,增加了程序的可移植性。文件系统可以帮助系统管理大量的数据,如程序参数,记录文件等,并能提供直观接口方便用户使用;还能帮助建立更复杂的应用程序,如数据库等。 嵌入式系统一般不使用硬盘,电子盘又价格昂贵,大多数系统使用Flash存储器来存放代码和数据。所以,在Flash存储器上建立文件系统具有普遍的意义。

菜鸟
2002-07-10 07:23:00    评分
3楼
OK, thanks.

共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]