分类: LINUX
2007-08-25 11:06:36
由于在我的目标系统FLASH太小,只有2M,而且还要去掉将近1M空间用于存放U-BOOT、内核映象,所以没有用建立的JFFS2文件系统作为根文件系统,只是介绍了在FLASH上制作一个文件系统的过程。
我把FLASH 2M的空间分为了3个区,分区的实现在linux根目录下/drivers/mtd/maps/目录下,我对TQM8xxL(tqm8xxl.c)的分区做了改动,作为我的分区,实际只要修改代码中的结构体tqm8xxl_partitions[]即可以:
static struct mtd_partition tqm8xxl_partitions[] = {
{
name: “u-boot”,
offset: 0x0000000,
size: 0x00020000,
},
{
name: “kernel”,
offset: 0x00020000,
size: 0x000a0000,
},
{
name: “jffs2”,
offset: 0x000c0000,
size: 0x00140000,
}
}
很简单,第一行是你partition的名字,第二行是在FLASH中的偏移量,第三行是partition的大小。紧随其后的还有一个结构体:
static struct mtd_partition tqm8xxl_fs_partitions[]{}是用于linux2.4.x以前版本的,在linux2.4.x版本中不用,我将它屏蔽掉了。
源文件中要改的就这么多,然后重新编译内核:
#make menuconfig
打开内核选项:
选择<*>Memory Technology Device(MTD) support 记着选择为“built-in”而不是“module”(前面的选项为“*”而不是“M”)
选择<*>Mtd partitioning support MTD分区支持
选择<*>Caching block device access to MTD devices 支持MTD 作为BLOCK设备访问
进入【RAM/ROM/FLASH chip drivers- 】选项选择加载FLASH的驱动
选择<*> Detect flash chips by Common Flash Interface (CFI) probe
自动探测CFI接口的FLASH设备
选择<*> Support for AMD/Fujistu flash chips 选择对AMD/Fujistu FLASH设备选择<*> Support for ROM chips in bus mapping 支持ROM设备总线MAP
其它选项不选,退回到上一级。
进入【Mapping drivers for chip access- 】选项
选择<*> CFI Flash device mapped on TQM8xxL 支持TQM8xxL的FLASH分区
其它选项都不用选中。
编译内核:
#make dep
#make pImage
生成内核映象文件在arch/ppc/mbxboot/目录下,重新引导内核,进入linux系统,运行命令:
#more /proc/mtd查看
dev: size erasesize name
mtd0: 00020000 00010000 "ppcboot"
mtd1: 000a0000 00010000 "kernel"
mtd2: 00140000 00010000 "jffs2"
这里显示的mtd0-2是FLASH分区后模拟的三个设备,是字符型的设备,我们后面用的mtdblock0-2是对应三个partitions的block设备。
此时用的是NFS文件系统,退到根目录,运行:
#mkfs.jffs2 –d filesystem –o jffs2.image
制作jffs2文件系统,filesystem是我制作的一个很小的包含几个文件的目录,生成的jffs2文件系统文件为jffs2.image。在/mnt/下建立目录jffs2:
#mkdir /mnt/jffs2
将jffs2文件系统拷贝到FLASH:
#cp jffs2.image /dev/mtdblock2
挂接flash设备到/mnt/jffs2
#mount /dev/mtdblock2 /mnt/jffs2 –t jffs2
ffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x001dc000: 0xe6a7 id
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x001dc004: 0x626f id
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x001dc008: 0x636d id
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x001dc00c: 0x626f id
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x001dc010: 0x6d20 id
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x001dc014: 0x3030 id
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x001dc018: 0x3000 id
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x001dc01c: 0x7564 id
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x001dc020: 0x7465 id
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x001dc024: 0x3932 id
Further such events for this erase block will not be printed
JFFS2: Erase block at 0x001d0000 is not formatted. It will be erased
不知这些信息是否不正确,正在查询这个问题。
查看jffs2文件系统:
sh-2.05a# cd /mnt/jffs2
sh-2.05a# ls
app bin dev etc home lib mnt proc root sbin tmp usr var
sh-2.05a#
OK!制作的文件系统都在里面了,就这么简单。如果你将一个完整的文件系统拷贝到FLASH,然后想用它作为根文件系统,可以在U-BOOT启动时设置启动参数:
#setenv bootargs root=/dev/mtdblock2然后保存参数并重新引导U-BOOT即可以即可以。