OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3489|回复: 0

AM335X板上的ubifs文件系统制作

[复制链接]

27

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2012-4-4
在线时间
46 小时
发表于 2016-1-15 15:03:41 | 显示全部楼层 |阅读模式
本帖最后由 fuqiye 于 2016-1-15 15:03 编辑

AM335X板上的ubifs文件系统制作

UBIFS是一个比较适合NAND FLASH的文件系统。。。。。。

/*****************************************************************************************************************************/
开始:

1、让u-boot 对 UBIFS文件系统的支持

    修改u-boot下板子的头文件/include/configs/am335x_wsdv.h

    在am335x_wsdv.h中添加如下宏

#define CONFIG_CMD_UBI
#define CONFIG_CMD_UBIFS
#define CONFIG_CMD_MTDPARTS
#define CONFIG_MTD_DEVICE
#define CONFIG_MTD_PARTITIONS
#define CONFIG_RBTREE
#define CONFIG_LZO

#define MTD_ACTIVE_PART "nand0,10"

#define CONFIG_STACKSIZE (512*1024)
#define CONFIG_SYS_GBL_DATA_SIZE  512
    修改NAND分区表
#define MTDIDS_DEFAULT                        "nand0=nand.0"
#define MTDPARTS_DEFAULT                "mtdparts=nand.0:" \
                                        "128k(SPL)," \
                                        "128k(SPL.backup1)," \
                                        "128k(SPL.backup2)," \
                                        "128k(SPL.backup3)," \
                                        "256k(u-boot-spl-os)," \
                                        "1m(u-boot)," \
                                        "128k(u-boot-env)," \
                                        "128k(u-boot-env.backup1)," \
                                        "256k(dtb)," \
                                        "8m(kernel)," \
                                        "-(rootfs)"
2、利用mkfs.ubifs工具制作ubifs系统文件rootfs.bin
     如果交叉编译器工具一样可用我上传的附件(文件名:mkfs.rar) mkfs.rar (84.55 KB, 下载次数: 287)
      -m:最小输入输出大小为2KiB(2048bytes),一般为页大小
      -e:逻辑可擦除块大小为124KiB(126976bytes)=(每块的页数-2)*页大小=(64-2)*2KiB=124KiB
      -c:最多逻辑可擦除块数目为2048 (2048 *128KiB=256MiB),这个可根据ubi volume来设置,实际上是设置此卷的最大容量。
3、修改设备树对NAND的分区表
     修改的内容如下:
&gpmc {
        status = "okay";
        pinctrl-names = "default";
        pinctrl-0 = <&nandflash_pins_s0>;
        ranges = <0 0 0x08000000 0x10000000>;        /* CS0: NAND */
        nand@0,0 {
                reg = <0 0 0>; /* CS0, offset 0 */
                ti,nand-ecc-opt = "bch8";
                /*ti,nand-ecc-opt = "none";*/
                ti,elm-id = <&elm>;
                nand-bus-width = <8>;
                gpmc,device-width = <1>;
                gpmc,sync-clk-ps = <0>;
                gpmc,cs-on-ns = <0>;
                gpmc,cs-rd-off-ns = <44>;
                gpmc,cs-wr-off-ns = <44>;
                gpmc,adv-on-ns = <6>;
                gpmc,adv-rd-off-ns = <34>;
                gpmc,adv-wr-off-ns = <44>;
                gpmc,we-on-ns = <0>;
                gpmc,we-off-ns = <40>;
                gpmc,oe-on-ns = <0>;
                gpmc,oe-off-ns = <54>;
                gpmc,access-ns = <64>;
                gpmc,rd-cycle-ns = <82>;
                gpmc,wr-cycle-ns = <82>;
                gpmc,wait-on-read = "true";
                gpmc,wait-on-write = "true";
                gpmc,bus-turnaround-ns = <0>;
                gpmc,cycle2cycle-delay-ns = <0>;
                gpmc,clk-activation-ns = <0>;
                gpmc,wait-monitoring-ns = <0>;
                gpmc,wr-access-ns = <40>;
                gpmc,wr-data-mux-bus-ns = <0>;
                /* MTD partition table */
                /* All SPL-* partitions are sized to minimal length
                 * which can be independently programmable. For
                 * NAND flash this is equal to size of erase-block */
                #address-cells = <1>;
                #size-cells = <1>;
                partition@0 {
                        label = "SPL";
                        reg = <0x00000000 0x00020000>;
                };
                partition@1 {
                        label = "SPL.backup1";
                        reg = <0x00020000 0x00020000>;
                };
                partition@2 {
                        label = "SPL.backup2";
                        reg = <0x00040000 0x00020000>;
                };
                partition@3 {
                        label = "SPL.backup3";
                        reg = <0x00060000 0x00020000>;
                };
                partition@4 {
                        label = "u-boot-spl-os";
                        reg = <0x00080000 0x00040000>;
                };
                partition@5 {
                        label = "u-boot";
                        reg = <0x000C0000 0x00100000>;
                };
                partition@6 {
                        label = "u-boot-env";
                        reg = <0x001C0000 0x00020000>;
                };
                partition@7 {
                        label = "u-boot-env.backup1";
                        reg = <0x001E0000 0x00020000>;
                };
                partition@8 {
                        label = "dtb";
                        reg = <0x00200000 0x00040000>;
                };
                partition@9 {
                        label = "kernel";
                        reg = <0x00240000 0x00800000>;
                };
                partition@10 {
                        label = "rootfs";
                        reg = <0x00A40000 0x0F5C0000>;
                };
        };
};
    在修改的时候还发现少了一个节点
    添加如下:
&elm {
        status = "okay";
};
    说明:此分区表必须和u-boot下板子的头文件/include/configs/am335x_wsdv.h中分区表一至!!!!!
4、修改u-boot启动命令
     之前的u-boot环境变量太多现在也顺便修改一下
#ifdef CONFIG_NAND
#define NANDARGS \
        "mtdids=" MTDIDS_DEFAULT "\0" \
        "mtdparts=" MTDPARTS_DEFAULT "\0" \
        "nandargs=setenv bootargs console=${console} " \
                "${optargs} " \
                "root=${nandroot} " \
                "rootfstype=${nandrootfstype}\0" \
        "nandroot=ubi0:rootfs rw ubi.mtd=10,2048\0" \
        "nandrootfstype=ubifs rootwait=1\0" \
        "nandboot=echo Booting from nand ...; " \
                "run nandargs ; ; "\
                "nand read ${fdtaddr} dtb; "\
                "nand read ${loadaddr} kernel; "\
                "bootz ${loadaddr} - ${fdtaddr}; \0"\
        "download2nand=echo sd download file to nand ...;"        \
                "echo sd download file to nand ...;" \
                "echo SD/MMC found on device ${mmcdev};" \
                "nand erase.chip; "\
                "fatload mmc 0 0x81000000 MLO; "\
                "nand write 0x81000000 SPL ${filesize}; "\
                "nand write 0x81000000 SPL.backup1 ${filesize}; "\
                "nand write 0x81000000 SPL.backup2 ${filesize}; "\
                "nand write 0x81000000 SPL.backup3 ${filesize}; "\
                "fatload mmc 0 0x81000000 u-boot.img; "\
                "nand write 0x81000000 u-boot ${filesize}; "\
                "fatload mmc 0 0x81000000 am335x-wsdv.dtb; "\
                "nand write 0x81000000 dtb ${filesize}; "\
                "fatload mmc 0 0x81000000 zImage; "\
                "nand write 0x81000000 kernel ${filesize}; "\
                "nand erase.part rootfs; "\
                "ubi part rootfs 2048; "\
                "ubi create rootfs; "\
                "fatload mmc 0 0x81000000 rootfs.bin; "\
                "ubi write 0x81000000 rootfs ${filesize}; \0"
#else
#define NANDARGS ""
#endif

#define CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG

#ifndef CONFIG_SPL_BUILD
#define CONFIG_EXTRA_ENV_SETTINGS \
        DEFAULT_LINUX_BOOT_ENV\
        "console=ttyO0,115200n8\0" \
        "optargs=\0" \
        "mmcdev=0\0" \
        "bootkernelfile=zImage\0" \
        "bootdtbfile=am335x-wsdv.dtb\0" \
        "mmcboot=echo sd boot linux kernel 3.18.24 Author:fuqiye...;"        \
                "load mmc ${mmcdev} ${fdtaddr} /${bootdtbfile} ; "\
                "load mmc ${mmcdev} ${loadaddr} /${bootkernelfile} ; "\
                "bootz ${loadaddr} - ${fdtaddr} ; \0"\
        NANDARGS
#endif

#define CONFIG_BOOTCOMMAND \
        "echo Please manually select the command ... ;"\
        "echo tiy run mmcboot nandboot download2nand... ;"\
        "run nandboot ;"
5、烧写到NAND FLASH
     将MLO、rootfs.bin、zImage、am335x-wsdv.dtb、u-boot.img放到SD卡的FAT32分区中
     板子从SD卡启动。
     启动后手动输入命令烧写到NAND FLASH
     #run download2nand
     烧写完成后重启板子。






正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-22 04:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表