微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于ARM的嵌入式文件系统YAFFS的移植

基于ARM的嵌入式文件系统YAFFS的移植

时间:04-12 来源:互联网 点击:

  • lock3.
    static struct mtd_partition partition_info[]={
    [0] = {
    .name = u-boot,
    .size = 0x00020000,
    .offset = 0x00000000,
    },
    [1] = {
    .name = param,
    .size = 0x00010000,
    .offset = 0x00020000,
    },
    [2] = {
    .name = kernel,
    .size = 0x00100000,
    .offset = 0x00030000,
    },
    [3] = {
    .name = root,
    .size = 0x01900000,
    .offset = 0x00130000,
    },
    [4] = {
    .name = user,
    .size = 0x025d0000,
    .offset = 0x01a30000,
    }
    };注意,这里的分区信息应与U-BOOT中保持一致.

    2.YAFFS 的校验算法和MTD NAND FLASH驱动的校验算法不同,如果在内核中由MTD来处理ECC,会造成MTD 认为所有的page都校验错误.所以要把要把NAND驱动中的ECC校验关闭.采用YAFFS2自带的校验算法,基于这个考虑,在drivers/mtd/nand/s3c2410.c中,将 chip->eccmode=NAND_ECC_SOFT修改为chip->eccmode=NAND_ECC_SOFT.

    3.从开源网站下载YAFFS2文件系统的源码,在宿主机下用tar xzvf yaffs2.tar.gz命令解压,在移植的内核目录下建立yaffs文件夹,并将需要的文件拷贝到yaffs文件夹下.简单介绍下yaffs文件系统代码的函数功能.
    # mkdir $LINUXDIR/fs/yaffs
    # cp Makefile.kernel $LINUXDIR/fs/yaffs/Makefile
    # cp Kconfig $LINUXDIR/fs/yaffs
    # cp *.c *.h $LINUXDIR/fs/yaffs

    4.修改fs/Kconfig,vi Kconfig ,添加 source fs/ /Kconfig

    5.修改Makefile文件:
    # cd $LINUXDIR/fs
    # vi Makefile obj-$(CONFIG_YAFFS_FS) += yaffs/

    6 配置和编译内核

    1.选中对MTD(memory technology device内存技术设备)的支持.
    Memory Technology Device (MTD)
    support --->
    [~] MTD concatenating support
    • MTD partitioning support
    [~] RedBoot partition table parsing
    [~] Command line partition table parsing
    User Modules And Translation Layers
    • Direct char device access to MTD devices
    • Caching block device access to MTD devices

    MTD 主要是用于访问memory设备(ROM、flash)的Linux的子系统.MTD可以使新的memory设备的驱动更加简单,为此它在硬件和上层之间提供了一个抽象的接口.

    2.选中NAND Device Support
    • NAND Device Support --->
    [~] Verify NAND page writes
    • NAND Flash support for S3C2410/S3C2440 SoC
    • S3C2410 NAND driver debug
    [~] S3C2410 NAND Hardware ECC

    这样就完成了内核对NAND FLASH的支持.

    3.由于添加了YAFFS2文件系统,所以在内核的配置菜单 [File systems] 中的 [miscellaneous filesystems] 中增加了 [Yaffs2 file systems support] 选项.这个选项就是 YAFFS2的配置内容.
    File systems ---> Miscellaneous filesystems --->
    • YAFFS2 file system support
    --- 512 byte / page devices
    • Lets Yaffs do its own ECC
    • Use the same ecc byte order as Steven Hill's nand_ecc.c
    --- 2048 byte (or larger) / page devices
    • Autoselect yaffs2 format
    • Disable lazy loading
    • Turn off wide tnodes
    • Turn off debug chunk erase check
    • Cache short names in RAM

    选择这个选项的全部内容,保存配置,然后退到终端,输入make zImage,重新编译内核,这样就就完成了对YAFFS文件系统的定制.

    7 测试挂载的YAFFS文件系统

    1.用imagewrite命令将YAFFS文件系统的映像文件烧写到mtdblock3分区.
    2.在ramdisk根文件系统中创建挂载目录,使用命令mkdir /mnt/yaffs.
    3. 执行mount –t yaffs /dev/mtdblock/3 /mnt/yaffs来挂载YAFFS文件系统.
    4. 由于内核配置了proc文件系统,用cat /proc/mounts 可以查看已经成功挂载了YAFFS文件系统,用ls /mnt/yaffs可以查看YAFFS文件系统的内容.

    8 结束语

    本文为开发者提供了在ARM9平台上移植YAFFS文件系统的方法和过程的参考,创新之处是在当前嵌入式应用中比较新的2.6内核上测试完成的.测试过程中 YAFFS稳定性能比JFFS2文件系统要稳定的多,而且mount分区的时间也比JFFS2文件系统少的多。需要注意一点是,即使NAND FLASH 是512+16B的,不需要使用YAFFS2,也必须将对2kpage的NAND FLASH的支持这一项选上,否则编译无法通过.由于ARM- S3C2410不支持大容量的NAND FLASH,所以flash是512+16B / page的,即使你选择的是YAFFS2文件系统,内核也会自动选择挂载为YAFFS1文件系统,由于实验系统的局限性,本文只在ARM-S3C2410平台上实现了YAFFS1文件系统的移植

  • Copyright © 2017-2020 微波EDA网 版权所有

    网站地图

    Top