2008年05月
flash文件系统在嵌入式linux系统中是必须的,无论是作为只读的根文件系统还是作为可写的用户文件系统。目前在linux-2.6.14内核上 移植flash文件系统。下载相应内核,打好at91rm9200的补丁后,却发现先前移植nand文件系统的方法在flash文件系统中完全不行。只好从头开始了。 星光AT91RM9200开发板的flash芯片是SST39VF3201,16 位 ,4M 。按目前计划,准备分区为三个区,分别为uboot(0x40000), kernel(0x1c0000), rootfs(0x200000), 应该可以将linux的最小系统跑起来的。 首先,添加MTD分区的底层驱动文件,在drivers/mtd/maps下添加at91rm9200.c文件,该文件是flash分区的基本驱动文件,包含分区信息、芯片识别等基本flash文件系统的底层实现。事实上,该文件并不需要从头开始创建,可以参考该目录下其它文件来修改,如edb7312.c。代码如下阅读全文>
发表于 @ 2008年05月30日 10:28:00|评论(loading...)|编辑
在使用fwrite, fread时,并不是每调用一次就对文件进行读写操作。标准I/O为write,read之类的调用提供了缓存。它对每个I/O流自动的进行缓存管理,避免应用程序需要考虑这点所带来的麻烦。这样做的目的是避免频繁I/O操作浪费大量时间。然而,我们在实际编程中往往欠考虑I/O 缓存机制,从而带来许多意想不到的麻烦。 缓存有三种类型,分别是全缓存,行缓存,不带缓存(见一本伟大的书《Unix 环境高级编程》)。一般我们操作磁盘上文件的时候,用全缓存的类型。即调用读写函数填满缓存后,才真正对文件进行一次读写操作。 我们可以通过setbuf或者setvbuf来改变缓存类型,。在libc中,默认的缓存大小为8k字节,见stdio.h (#define _G_BUFSIZ 8192) 。我们可以根据我们需要来改变这个缓存大小。 任何时候,我们都可根据需要通过调用fflush()强制刷新一个流,这样可使得缓存没填满的情况下,对文件进行实际的操作。通常这种情况出现在数据流的末尾。如果你经常出现数据在文件末尾丢失的情况,那么就要考虑是否要用fflush来将缓存的内容写入文件。 当阅读全文>
发表于 @ 2008年05月07日 15:07:00|评论(loading...)|编辑