windows *** 作系统如何支持yaffs文件系统

windows *** 作系统如何支持yaffs文件系统,第1张

1、修改内核源码根目录下的Makefile文件

#ARCH ?= arm

#CROSS_COMPILE ?=arm-linux-

2、修改arch/arm/plat-s3c24xx/common-smdk.c文件,修改Nand Flash的分区信息和Nand Flash的硬件信息。这里的分区一定要和你的bootloader的一致,你可以参考smdk_default_nand_part[]这个数据结构的做法。

3、还是2中用到的文件,修改static struct s3c2410_platform_nand smdk_nand_info = {

.tacls = 0,

.twrph0 = 30, //这 三个数字要改的 以前是20 60 20

.twrph1 = 0,

.nr_sets = ARRAY_SIZE(smdk_nand_sets),

.sets = smdk_nand_sets,

}

4、修改drivers/mtd/nand/s3c2410.c中s3c2410_nand_init_chip函数的NAND_ECC_SOFT为NAND_ECC_NONE。

5、晶振频率:修改arch/arm/mach-s3c2440/mach-smdk2440.c

static void __init smdk2440_map_io(void)

{

s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc))

s3c24xx_init_clocks(12000000)//改成和你的一样

s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs))

}

6、添加对yaffs2文件系统的支持:

下载yaffs2的源码包,解压后进入其中,其加入Linux内核(打补丁的方式)

#cd yaffs2

#./patch-ker.sh c $you_kernel_path(你的内核代码的目录)

7、配置内核

先拷贝s3c2410开发板的默认配置到内核根目录下,以简化配置过程

# cp arch/arm/configs/s3c2410_defconfig .config

# make menuconfig

1.General setup --->

[*] Configure standard kernel features (for small systems) --->

2. System Type ---->

[*] S3C2410 DMA support [*] Support ARM920T processor

S3C2410 Machines --->

[*] SMDK2410/A9M2410

S3C2440 Machines --->

[*] SMDK2440

[*] SMDK2440 with S3C2440 CPU module

3.Boot options --->

将 (root=/dev/hda1 ro init=/bin/bash console=ttySAC0) Default kernel command string

改成 (noinitrd root=/dev/mtdblock2 console=ttySAC0,115200 init=/linuxrc )

这里要特别注意root=/dev/mtdblock2 这个参数,mtdblock2是你的根文件系统所在的位置,和你在bootloader的分配有关,当然也和上述2。步骤的密切相关。不行的话多试几次。

4.[*] Enable loadable module support --->

[*] Module unloading

[*] Automatic kernel module loading

选择这两个,剩下的可以去掉

5.Device Drivers --->

<*>Memory Technology Device (MTD) support --->

[*] MTD partitioning support

<*>NAND Device Support --->

<*>NAND Flash support for S3C2410/S3C2440 SoC

[ ] S3C2410 NAND Hardware ECC //这个要去掉

6.File systems----->

Miscellaneous filesystems --->

<*>YAFFS2 file system support

7.make zImage

和普通文件系统不同,YAFFS文件系统专门为Nand Flash设计,可以使用mkyaffsimage生成文件系统的镜像,但如果要将此镜像烧入Flash,那么有些地方需要注意。

硬件上,Nand Flash的设计已考虑到包含坏块的情况,对于每扇区512字节的Nand Flash,每扇区都有一个16字节额外的扩展区,通常用以存储此扇区的校验数据以及坏块标记等信息(WinCE则使用了其中4字节存储逻辑扇区编号),所以我们看Nand Flash的Data Sheet时,经常会发现其容量以“64M + 2048K”这样的格式进行描述,后面的数字就用来表示扩展区的容量。

YAFFS文件系统既然专为Nand Flash设计,它在生成文件系统镜像时,已经考虑到对扩展区的利用,并将扩展区的数据包含在扇区数据后,其结构定义如下:

bytes 0-511: Data

bytes 512-515: YAFFS TAG

bytes 516: Data status

bytes 517: Block status

bytes 518-519: YAFFS TAG

bytes 520-522: ECC for bytes 256-511

bytes 523-524: YAFFS TAG

bytes 525-527: ECC for bytes 0-255

可以看出,YAFFS使用了8字节(YAFFS TAG)存储文件系统相关信息,并使用4字节(ECC)存储校验数据,而此校验数据算法与Nand Flash控制器的硬件算法并不一致,对于很多Boot Loader,可能会校验失败。

另外,由于YAFFS文件系统需要使用分区上的第一个块来存储一个名为Yaffs_ObjectHeader的结构体。该结构体记录了该分区中的文件、路径以及相关的链接,该块无法在生成镜像的时候产生,所以在烧写时还需要跳过第一个可用的块。比如,我们在MTD分区中划分一个YAFFS分区,占用Nand Flash空间为块1000-4095,那么,第1000块我们必须留空,镜像文件要从1001块开始烧写。

了解了YAFFS镜像文件的特点,我们现在清楚如何将YAFFS镜像烧入Nand Flash:

1、将镜像文件载入内存

2、根据MTD分区信息,定位到首块Nand Flash并跳过,从下一块开始烧录

3、擦除块,如果擦除失败,标志为坏块,继续 *** 作下一块

4、从镜像文件读出512字节,写入Nand Flash扇区

5、继续从镜像文件读出16字节,写入Nand Flash扩展数据区(注意不要写入硬件ECC,否则YAFFS分区无法mount)

6、重复步骤4,直到整块数据写入完成

7、重复步骤3,直到整个影像文件写入完成


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/6076300.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-13
下一篇 2023-03-13

发表评论

登录后才能评论

评论列表(0条)

保存