rv1126-rv1109-yaffs2-mkyaffs2image610

今天使用了一下yaffs2功能

就是生成一个yaffs的包

从移植的角度先生成ro_1109.yaffs包

烧录进去

操作步骤:

创建和生成ro文件夹和 mkyaffs2image610可执行程序

然后用

fakeroot ./mkyaffs2image610 ro ro_1109.yaffs 1 2

生成了ro_1109.yaffs

例:

	@if [ "$(TARGET_DEPLOY_TYPE)" == "rodatafs" ] || [ "$(TARGET_DEPLOY_TYPE)" == "rwdatafs" ] || [ "$(TARGET_DEPLOY_TYPE)" == "rwfs" ];then \
		echo "Deploy $(TARGET_DEPLOY_TYPE) permissions to directory $($(patsubst %_$(FLASH_TYPE)_yaffs_fsimage,%,$@)$(RESOUCE))"; \
		$(FAKEROOT) /bin/bash $(DEPLOYER_SH) -s -P ${D_PRODUCT_TYPE} -d $(TARGET_DEPLOY_TYPE) -o $($(patsubst %_$(FLASH_TYPE)_yaffs_fsimage,%,$@)$(RESOUCE)) -- "$< $($(patsubst %_$(FLASH_TYPE)_yaffs_fsimage,%,$@)$(RESOUCE)) $(IMAGEDIR)/$(patsubst %_$(FLASH_TYPE)_yaffs_fsimage,%,$@)_202d.yaffs 1 2"; \
	else \
		echo "Create $(patsubst %_$(FLASH_TYPE)_yaffs_fsimage,%,$@) yaffs image"; \
		$(FAKEROOT) $(MKYAFFS2IMAGE) $($(patsubst %_$(FLASH_TYPE)_yaffs_fsimage,%,$@)$(RESOUCE)) $(IMAGEDIR)/$(patsubst %_$(FLASH_TYPE)_yaffs_fsimage,%,$@)_202d.yaffs 1 2; \
	fi;

//上面是存在ro_1109.yaffs文件做覆盖
//下面是不存在创建

升级ro_1109.yaffs

=============================移植cramfs================================

安装cramfs

sudo apt-get install cramfsprogs

//安装失败
E: Unable to locate package cramfsprogs
手动下载这个包
https://launchpad.net/ubuntu/xenial/+package/cramfsprogs
http://mirror4.nyist.edu.cn/ubuntu/ubuntu/pool/main/c/cramfs/cramfsprogs_1.1-6ubuntu1_amd64.deb

cramfsprogs_1.1-6ubuntu1_amd64.deb
安装
sudo dpkg -i cramfsprogs_1.1-6ubuntu1_amd64.deb

参考博客:Ubuntu 18.04 安装cramfsprogs_cramfs deb-CSDN博客

然后手动对文件系统打包

=============================移植yaffs2================================

UBOOT部分 

diff --git a/u-boot/cmd/mtd.c b/u-boot/cmd/mtd.c
old mode 100644
new mode 100755
index 31ef7be4e..803824b94
--- a/u-boot/cmd/mtd.c
+++ b/u-boot/cmd/mtd.c
@@ -261,7 +261,7 @@ static int do_mtd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
            !strncmp(cmd, "write", 5)) {
                bool has_pages = mtd->type == MTD_NANDFLASH ||
                                 mtd->type == MTD_MLCNANDFLASH;
-               bool dump, read, raw, woob, write_empty_pages;
+               bool dump, read, raw, woob, write_empty_pages,wyaffs;
                struct mtd_oob_ops io_op = {};
                uint user_addr = 0, npages;
                u64 start_off, off, len, remaining, default_len;
@@ -273,6 +273,9 @@ static int do_mtd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
                read = dump || !strncmp(cmd, "read", 4);
                raw = strstr(cmd, ".raw");
                woob = strstr(cmd, ".oob");
+               //add by lm@lonbon >>>start
+               wyaffs = woob = strstr(cmd, ".yaffs");
+               //add by lm@lonbon <<<end       
                write_empty_pages = !has_pages || strstr(cmd, ".dontskipff");
 
                if (!dump) {
@@ -294,6 +297,11 @@ static int do_mtd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
                default_len = dump ? mtd->writesize : mtd->size;
                len = argc > 1 ? simple_strtoul(argv[1], NULL, 16) :
                                 default_len;
+               //add by lm@lonbon >>>start
+        if (wyaffs) {
+           len = round_up(len, mtd->writesize + mtd->oobsize);
+               } else
+               //add by lm@lonbon <<<end       
                if (!mtd_is_aligned_with_min_io_size(mtd, len)) {
                        len = round_up(len, mtd->writesize);
                        printf("Size not on a page boundary (0x%x), rounding to 0x%llx\n",
@@ -333,7 +341,42 @@ static int do_mtd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
                off = start_off;
                while (mtd_block_isbad(mtd, off))
                        off += mtd->erasesize;
-
+               
+               //add by lm@lonbon >>>start
+               if(wyaffs){
+               io_op.mode = MTD_OPS_RAW;//raw ? MTD_OPS_RAW : MTD_OPS_AUTO_OOB;
+               io_op.len = has_pages ? mtd->writesize : len;
+               io_op.ooblen = woob ? mtd->oobsize : 0;
+               io_op.datbuf = buf;
+               io_op.oobbuf = io_op.datbuf + mtd->writesize;
+
+                    for (int page = 0; page < npages; page++) {
+                    /* Skip the block if it is bad */
+                    if (mtd_is_aligned_with_block_size(mtd, off) &&
+                        mtd_block_isbad(mtd, off)) {
+                            off += mtd->erasesize;
+                            continue;
+                    }
+
+                    if (read)
+                        ret = mtd_read_oob(mtd, off, &io_op);
+                    else
+                        ret = mtd_write_oob(mtd, off, &io_op);
+
+                                       if (ret) {
+                                               printf("Failure while %s at offset 0x%llx\n",
+                                                          read ? "reading" : "writing", off);
+                                               return CMD_RET_FAILURE;
+                                       }
+
+                    off += (io_op.retlen);
+                    io_op.datbuf += (io_op.retlen + io_op.oobretlen);
+                    io_op.oobbuf = (io_op.datbuf +  mtd->writesize);
+               //printf("yaffs datbuf=[0x%p] oobbuf=[0x%p] offset=[0x%llx] \n",io_op.datbuf, io_op.oobbuf,off);
+               }
+                          printf("mtd yaffs npages =%d\n", npages);
+               }else {
+               //add by lm@lonbon <<<end       
                /* Loop over the pages to do the actual read/write */
                while (remaining) {
                        /* Skip the block if it is bad */
@@ -361,7 +404,7 @@ static int do_mtd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
                        io_op.datbuf += io_op.retlen;
                        io_op.oobbuf += io_op.oobretlen;
                }
-
+       }
                if (!ret && dump)
                        mtd_dump_device_buf(mtd, start_off, buf, len, woob);
 
diff --git a/u-boot/configs/rv1126_defconfig b/u-boot/configs/rv1126_defconfig
index 4df77885e..255465eaf 100755
--- a/u-boot/configs/rv1126_defconfig
+++ b/u-boot/configs/rv1126_defconfig
@@ -193,3 +193,5 @@ CONFIG_ERRNO_STR=y
 # CONFIG_EFI_LOADER is not set
 CONFIG_OPTEE_CLIENT=y
 CONFIG_OPTEE_V2=y
+CONFIG_YAFFS2=y
+CONFIG_CMD_YAFFS2=y
diff --git a/u-boot/drivers/mtd/nand/spi/core.c b/u-boot/drivers/mtd/nand/spi/core.c
old mode 100644
new mode 100755
index f83698f0e..8361b02a5
--- a/u-boot/drivers/mtd/nand/spi/core.c
+++ b/u-boot/drivers/mtd/nand/spi/core.c
@@ -25,9 +25,22 @@
 #include <spi.h>
 #include <spi-mem.h>
 #include <linux/mtd/spinand.h>
+#include <lbmtd.h>
 #endif
-
 /* SPI NAND index visible in MTD names */
+
+static struct mtd_info *nand_info[1];
+
+struct mtd_info *get_nand_dev_mtd_info(int dev)
+{
+return nand_info[dev];
+}
+int set_mtd_info(struct mtd_info *mtd)
+{
+nand_info[0] = mtd;
+return 0;
+}
+
 static int spi_nand_idx;
 
 static void spinand_cache_op_adjust_colum(struct spinand_device *spinand,
@@ -1274,6 +1287,10 @@ static int spinand_probe(struct udevice *dev)
        if (ret)
                goto err_spinand_cleanup;
 
+       ret = set_mtd_info(mtd);
+       if (ret)
+               printf("failed set_mtd_info! \n");
+
        return 0;
 
 err_spinand_cleanup:
diff --git a/u-boot/fs/yaffs2/yaffs_uboot_glue.c b/u-boot/fs/yaffs2/yaffs_uboot_glue.c
old mode 100644
new mode 100755
index 2a70e4a54..6cdb98780
--- a/u-boot/fs/yaffs2/yaffs_uboot_glue.c
+++ b/u-boot/fs/yaffs2/yaffs_uboot_glue.c
@@ -22,6 +22,7 @@
 #include <common.h>
 #include <div64.h>
 
+#include <lbmtd.h>
 #include <config.h>
 #include "nand.h"
 #include "yaffscfg.h"
@@ -166,7 +167,7 @@ void cmd_yaffs_devconfig(char *_mp, int flash_dev,
        char *mp = NULL;
        struct nand_chip *chip;
 
-       mtd = get_nand_dev_by_index(flash_dev);
+       mtd = get_nand_dev_mtd_info(flash_dev);
        if (!mtd) {
                pr_err("\nno NAND devices available\n");
                return;
diff --git a/u-boot/fs/yaffs2/yaffsfs.h b/u-boot/fs/yaffs2/yaffsfs.h
old mode 100644
new mode 100755
index f2c766662..146a16514
--- a/u-boot/fs/yaffs2/yaffsfs.h
+++ b/u-boot/fs/yaffs2/yaffsfs.h
@@ -31,7 +31,7 @@
 #endif
 
 #define YAFFS_MAX_FILE_SIZE (0x800000000LL - 1)
-
+#define CONFIG_LB_STORE_YAFSS_FILE_SIZE  1
 
 struct yaffs_dirent {
        long d_ino;                     /* inode number */
diff --git a/u-boot/include/lbmtd.h b/u-boot/include/lbmtd.h
new file mode 100755
index 000000000..ce344ced9
--- /dev/null
+++ b/u-boot/include/lbmtd.h
@@ -0,0 +1,15 @@
+/*^M
+ * (C) Copyright 2005^M
+ * 2N Telekomunikace, a.s. <www.2n.cz>^M
+ * Ladislav Michl <michl@2n.cz>^M
+ *^M
+ * SPDX-License-Identifier:    GPL-2.0^M
+ */^M
+#ifndef _LBMTD_H_^M
+#define _LBMTD_H_^M
+^M
+#include <config.h>^M
+^M
+struct mtd_info *get_nand_dev_mtd_info(int dev);^M
+int set_mtd_info(struct mtd_info *mtd);^M
+#endif /* _LBMTD_H_ */

KERNEL

commit a854f5c08ae887c1e832be2c950a5c9714189fee (HEAD -> master)
Author: longmin <1938049502@qq.com>
Date:   Wed Nov 8 15:09:30 2023 +0800

    Add support YAFFS filesystem for u-boot and kernel

diff --git a/kernel/arch/arm/boot/dts/rv1109-38-v10-spi-nand.dts b/kernel/arch/arm/boot/dts/rv1109-38-v10-spi-nand.dts
index b45b79e49..89679ca66 100755
--- a/kernel/arch/arm/boot/dts/rv1109-38-v10-spi-nand.dts
+++ b/kernel/arch/arm/boot/dts/rv1109-38-v10-spi-nand.dts
@@ -12,7 +12,8 @@
        compatible = "rockchip,rv1109-38-v10-spi-nand", "rockchip,rv1109";
 
        chosen {
-               bootargs = "earlycon=uart8250,mmio32,0xff570000 console=ttyFIQ0 ubi.mtd=3 ubi.block=0,rootfs root=/dev/mtdblock3 rootfstype=cramfs snd_aloop.index=7";
+//             bootargs = "earlycon=uart8250,mmio32,0xff570000 console=ttyFIQ0 ubi.mtd=3 ubi.block=0,rootfs root=/dev/mtdblock3 rootfstype=cramfs snd_aloop.index=7";
+               bootargs = "earlycon=uart8250,mmio32,0xff570000 console=ttyFIQ0 root=/dev/mtdblock3 rootfstype=cramfs snd_aloop.index=7";
        };
 
        /delete-node/ vdd-npu;
@@ -315,6 +316,23 @@
 
 &sfc {
        status = "okay";
+           u-boot,dm-spl;
+        /delete-property/ pinctrl-names;
+        /delete-property/ pinctrl-0;
+        /delete-property/ assigned-clocks;
+        /delete-property/ assigned-clock-rates;
+
+        #address-cells = <1>;
+        #size-cells = <0>;
+        spi_nand0: flash@0 {
+                u-boot,dm-spl;
+                compatible = "spi-nand";
+                reg = <0>;
+                spi-tx-bus-width = <1>;
+                spi-rx-bus-width = <4>;
+                spi-max-frequency = <96000000>;
+                                status = "okay";
+        };
 };
 
 &u2phy_host {
diff --git a/kernel/arch/arm/configs/rv1126_defconfig b/kernel/arch/arm/configs/rv1126_defconfig
index 80acf93f0..e49d7c981 100755
--- a/kernel/arch/arm/configs/rv1126_defconfig
+++ b/kernel/arch/arm/configs/rv1126_defconfig
@@ -331,10 +331,10 @@ CONFIG_ROCKCHIP_OTP=y
 CONFIG_TEE=y
 CONFIG_OPTEE=y
 CONFIG_RK_FLASH=y
-CONFIG_RK_SFC_NAND=y
-CONFIG_RK_SFC_NAND_MTD=y
-CONFIG_RK_SFC_NOR=y
-CONFIG_RK_SFC_NOR_MTD=y
+CONFIG_RK_SFC_NAND=n
+CONFIG_RK_SFC_NAND_MTD=n
+CONFIG_RK_SFC_NOR=n
+CONFIG_RK_SFC_NOR_MTD=n
 CONFIG_EXT4_FS=y
 # CONFIG_DNOTIFY is not set
 CONFIG_OVERLAY_FS=y
@@ -415,3 +415,13 @@ CONFIG_IP_ROUTE_MULTIPATH=y
 CONFIG_IP_ROUTE_VERBOSE=y
 CONFIG_CRAMFS=y
 CONFIG_MTD_BLOCK=y
+CONFIG_YAFFS_FS=y
+CONFIG_YAFFS_YAFFS1=y
+CONFIG_YAFFS_YAFFS2=y
+CONFIG_YAFFS_AUTO_YAFFS2=y
+CONFIG_YAFFS_XATTR=y
+CONFIG_MTD_NAND=y
+CONFIG_MTD_SPI_NAND=y
+CONFIG_SPI_NAND_XTX=y
+CONFIG_MTD_NAND_ROCKCHIP_V6=y
+CONFIG_SPI_ROCKCHIP_SFC=y
diff --git a/kernel/drivers/mtd/nand/spi/Makefile b/kernel/drivers/mtd/nand/spi/Makefile
old mode 100644
new mode 100755
index b74e074b3..e5ea6bc5c
--- a/kernel/drivers/mtd/nand/spi/Makefile
+++ b/kernel/drivers/mtd/nand/spi/Makefile
@@ -1,3 +1,3 @@
 # SPDX-License-Identifier: GPL-2.0
-spinand-objs := core.o macronix.o micron.o winbond.o
+spinand-objs := core.o macronix.o micron.o winbond.o xtx.o
 obj-$(CONFIG_MTD_SPI_NAND) += spinand.o
diff --git a/kernel/drivers/mtd/nand/spi/core.c b/kernel/drivers/mtd/nand/spi/core.c
old mode 100644
new mode 100755
index 48b3ab26b..f121b9f1a
--- a/kernel/drivers/mtd/nand/spi/core.c
+++ b/kernel/drivers/mtd/nand/spi/core.c
@@ -765,6 +765,7 @@ static const struct spinand_manufacturer *spinand_manufacturers[] = {
        &macronix_spinand_manufacturer,
        &micron_spinand_manufacturer,
        &winbond_spinand_manufacturer,
+       &xtx_spinand_manufacturer,
 };
 
 static int spinand_manufacturer_detect(struct spinand_device *spinand)
@@ -1070,13 +1071,19 @@ static void spinand_cleanup(struct spinand_device *spinand)
        kfree(spinand->databuf);
        kfree(spinand->scratchbuf);
 }
-
+//add by lm@lonbon >>>start
+static char spinand_name[24];
+//add by lm@lonbon <<<end 
 static int spinand_probe(struct spi_mem *mem)
 {
        struct spinand_device *spinand;
        struct mtd_info *mtd;
        int ret;
-
+//add by lm@lonbon >>>start
+       uint32_t id;
+       struct device_node *node;
+       node = mem->spi->dev.of_node;
+//add by lm@lonbon <<<end      
        spinand = devm_kzalloc(&mem->spi->dev, sizeof(*spinand),
                               GFP_KERNEL);
        if (!spinand)
@@ -1089,6 +1096,18 @@ static int spinand_probe(struct spi_mem *mem)
        mtd = spinand_to_mtd(spinand);
        mtd->dev.parent = &mem->spi->dev;
 
+#if 1 //add by lm@lonbon >>>start
+       ret = of_property_read_u32(node, "reg", &id);
+               if (ret) {
+               pr_err("spinand_probe get #reg [id] error\n");
+               return ret;
+               }
+       pr_debug("spinand_probe id=%d\n", id);          
+       memset(spinand_name, 0, sizeof(spinand_name));
+       snprintf(spinand_name, sizeof(spinand_name)-1, "spi-nand%u", id);
+       mtd->name = spinand_name;
+       pr_debug("spinand_probe mtd->name=%s\n", mtd->name);
+#endif //add by lm@lonbon <<<end 
        ret = spinand_init(spinand);
        if (ret)
                return ret;
diff --git a/kernel/include/linux/mtd/mtd.h b/kernel/include/linux/mtd/mtd.h
old mode 100644
new mode 100755
index 035d641e8..19c749eba
--- a/kernel/include/linux/mtd/mtd.h
+++ b/kernel/include/linux/mtd/mtd.h
@@ -40,9 +40,18 @@ struct mtd_info;
  * or was not specific to any particular block.
  */
 struct erase_info {
-       uint64_t addr;
-       uint64_t len;
-       uint64_t fail_addr;
+    struct mtd_info *mtd;
+    uint64_t addr;
+    uint64_t len;
+    uint64_t fail_addr;
+    u_long time;
+    u_long retries;
+    unsigned dev;
+    unsigned cell;
+    void (*callback) (struct erase_info *self);
+    u_long priv;
+    u_char state;
+    struct erase_info *next;
 };
 
 struct mtd_erase_region_info {
diff --git a/kernel/include/linux/mtd/spinand.h b/kernel/include/linux/mtd/spinand.h
old mode 100644
new mode 100755
index 088ff96c3..fefc16169
--- a/kernel/include/linux/mtd/spinand.h
+++ b/kernel/include/linux/mtd/spinand.h
@@ -197,7 +197,7 @@ struct spinand_manufacturer {
 extern const struct spinand_manufacturer macronix_spinand_manufacturer;
 extern const struct spinand_manufacturer micron_spinand_manufacturer;
 extern const struct spinand_manufacturer winbond_spinand_manufacturer;
-
+extern const struct spinand_manufacturer xtx_spinand_manufacturer;
 /**
  * struct spinand_op_variants - SPI NAND operation variants
  * @ops: the list of variants for a given operation
diff --git a/kernel/include/linux/spi/spi.h b/kernel/include/linux/spi/spi.h
old mode 100644
new mode 100755
index 6be77fa5a..171921a2d
--- a/kernel/include/linux/spi/spi.h
+++ b/kernel/include/linux/spi/spi.h
@@ -215,6 +215,11 @@ static inline void *spi_get_drvdata(struct spi_device *spi)
        return dev_get_drvdata(&spi->dev);
 }
 
+static inline u8 spi_get_chipselect(const struct spi_device *spi, u8 idx) {
+       return spi->chip_select;
+}
+
+
 struct spi_message;
 struct spi_transfer;

diff --git a/kernel/drivers/spi/Kconfig b/kernel/drivers/spi/Kconfig
old mode 100644
new mode 100755
index 671d07834..9048f78ab
--- a/kernel/drivers/spi/Kconfig
+++ b/kernel/drivers/spi/Kconfig
@@ -508,6 +508,17 @@ config SPI_ROCKCHIP
          The main usecase of this controller is to use spi flash as boot
          device.
 
+config SPI_ROCKCHIP_SFC
+       tristate "Rockchip SPI controller sfc driver"
+       help
+         This selects a driver for Rockchip SPI SFC controller.
+
+         If you say yes to this option, support will be included for
+         RK3066, RK3188 and RK3288 families of SPI controller.
+         Rockchip SPI controller support DMA transport and PIO mode.
+         The main usecase of this controller is to use spi flash as boot
+         device.
+
 config SPI_RB4XX
        tristate "Mikrotik RB4XX SPI master"
        depends on SPI_MASTER && ATH79
diff --git a/kernel/drivers/spi/Makefile b/kernel/drivers/spi/Makefile
old mode 100644
new mode 100755
index a90d55970..b832da728
--- a/kernel/drivers/spi/Makefile
+++ b/kernel/drivers/spi/Makefile
@@ -76,6 +76,7 @@ obj-$(CONFIG_SPI_PXA2XX)              += spi-pxa2xx-platform.o
 obj-$(CONFIG_SPI_PXA2XX_PCI)           += spi-pxa2xx-pci.o
 obj-$(CONFIG_SPI_QUP)                  += spi-qup.o
 obj-$(CONFIG_SPI_ROCKCHIP)             += spi-rockchip.o
+obj-$(CONFIG_SPI_ROCKCHIP_SFC) += spi-rockchip-sfc.o
 obj-$(CONFIG_SPI_RB4XX)                        += spi-rb4xx.o
 obj-$(CONFIG_SPI_RSPI)                 += spi-rspi.o
 obj-$(CONFIG_SPI_S3C24XX)              += spi-s3c24xx-hw.o

========================================================================

总结:

调试过程中遇到很多问题,现在发现是烧录没有烧录spi nand的oob部分导致yaffs加载失败

uboot阶段使用tftp功能来烧录后使用自身的mtd工具烧录

操作如下:

rw:
setenv serverip 192.168.1.147
setenv ipaddr 192.168.1.150
tftp 22000000 ro.yaffs
mtd erase spi-nand0 D100000 20000
mtd write.yaffs spi-nand0 22000000 D100000 8C40
mtd read.yaffs spi-nand0 21000000 D100000 8C40
md 21000000

 这一段是oob内容;

也可以使用以下指令来验证

ydevconfig rw 0  0x668 0x780
ymount rw
yls rw

 内核kernel验证方法:

mount -r -t yaffs2 /dev/mtdblock10 /mnt &> /dev/null 
mount -o remount,rw -t yaffs2 /dev/mtdblock10 /mnt 

 文件系统已经挂上;

总结:

============================================================================

遇到问题:使用tftp

发现并不能解析,于是我查阅规格书发现

包是要扩大的,ecc校验也要更新

于是鉴于使用fakeroot mkyaffs2image610 rw/  /rw.img 1 2      指令生成rw.img包

于是可以知道包要打成4k;ecc和之前256一样;

看到ecc也是8bit/528byte

所以应该改成 fakeroot mkyaffs2image610 rw/  /rw.img 2 2  

index d9836ee0b..27450e7b1 100755
--- a/buildroot/fs/yaffs-image/yaffs-image.mk
+++ b/buildroot/fs/yaffs-image/yaffs-image.mk
@@ -13,22 +13,22 @@ ROCKDEV_DIR = $(TARGET_DIR)/../../../../rockdev
 all:
 ifeq ($(BR2_TARGET_ROOTFS_YAFFSDATARO),y)
        cp -a $(MKYAFFS_LIFE_DIR)/ro $(ROOTFS_HOST_DIR)
-       $(FAKEROOT) $(MKYAFFS_LIFE)  $(ROOTFS_HOST_DIR)/ro $(RK_IMAGE_DIR)/dataro.img 1 2
+       $(FAKEROOT) $(MKYAFFS_LIFE)  $(ROOTFS_HOST_DIR)/ro $(RK_IMAGE_DIR)/dataro.img 2 2
        ln -rsf $(RK_IMAGE_DIR)/dataro.img $(ROCKDEV_DIR)
 endif
 ifeq ($(BR2_TARGET_ROOTFS_YAFFSDATARW),y)
        cp -a $(MKYAFFS_LIFE_DIR)/rw $(ROOTFS_HOST_DIR)
-       $(FAKEROOT) $(MKYAFFS_LIFE)  $(ROOTFS_HOST_DIR)/rw $(RK_IMAGE_DIR)/datarw.img 1 2
+       $(FAKEROOT) $(MKYAFFS_LIFE)  $(ROOTFS_HOST_DIR)/rw $(RK_IMAGE_DIR)/datarw.img 2 2
        ln -rsf $(RK_IMAGE_DIR)/datarw.img $(ROCKDEV_DIR)
 endif
 ifeq ($(BR2_TARGET_ROOTFS_YAFFSBACKUP),y)
        mkdir -p $(ROOTFS_HOST_DIR)/backup
-       $(FAKEROOT) $(MKYAFFS_LIFE)  $(ROOTFS_HOST_DIR)/backup $(RK_IMAGE_DIR)/backup.img 1 2
+       $(FAKEROOT) $(MKYAFFS_LIFE)  $(ROOTFS_HOST_DIR)/backup $(RK_IMAGE_DIR)/backup.img 2 2
        ln -rsf $(RK_IMAGE_DIR)/backup.img $(ROCKDEV_DIR)
 endif
 ifeq ($(BR2_TARGET_ROOTFS_YAFFSFACTORY),y)
        mkdir -p $(ROOTFS_HOST_DIR)/factory
-       $(FAKEROOT) $(MKYAFFS_LIFE)  $(ROOTFS_HOST_DIR)/factory $(RK_IMAGE_DIR)/factory.img 1 2
+       $(FAKEROOT) $(MKYAFFS_LIFE)  $(ROOTFS_HOST_DIR)/factory $(RK_IMAGE_DIR)/factory.img 2 2
        ln -rsf $(RK_IMAGE_DIR)/factory.img $(ROCKDEV_DIR)
 endif
 ifeq ($(BR2_TARGET_ROOTFS_LONBON),y)

===================================================================

打好新包之后烧录还是不正常,多番读取查看发现是oob分区的问题

512m的oob区间是256bytes;但是实际打包出来的rw.img内的oob只有128bytes;由于大小不对会把下面的内容烧录进oob导致数据丢失;

实际就会把

 oob空间会放入头部,

而我的修改思路是:

于是直接修改了芯片的oob大小

diff --git a/u-boot/drivers/mtd/nand/spi/xtx.c b/u-boot/drivers/mtd/nand/spi/xtx.c
old mode 100644
new mode 100755
index ef259ff09..16b62c792
--- a/u-boot/drivers/mtd/nand/spi/xtx.c
+++ b/u-boot/drivers/mtd/nand/spi/xtx.c
@@ -278,7 +278,7 @@ static const struct spinand_info xtx_spinand_table[] = {
                                     xt26g01c_ecc_get_status)),
        SPINAND_INFO("XT26G04C",
                     SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x13),
-                    NAND_MEMORG(1, 4096, 256, 64, 2048, 1, 1, 1),
+                    NAND_MEMORG(1, 4096, 128, 64, 2048, 1, 1, 1),
                     NAND_ECCREQ(8, 512),
                     SPINAND_INFO_OP_VARIANTS(&read_cache_variants,
                                              &write_cache_variants,

然后就可以正常烧录了,主要还是mkyaffs2image610不支持256byte的oob;

总结:真的是颠沛流离的问题!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: yaffs2utils-0.2.9.tar.gz是一个文件压缩包,其中包含了yaffs2utils工具的源代码和相关的文件。 yaffs2utils是一个用于处理YAFFS2(Yet Another Flash File System 2)文件系统的工具集。YAFFS2是一种用于嵌入式设备的闪存文件系统,它具有高可靠性和高效性能的特点。 这个压缩包中的源代码可以通过编译生成可执行文件,用于在Linux等环境中操作YAFFS2文件系统。它包含了一些常用的工具,如yaffs2等,可以用于格式化、挂载、卸载和操作YAFFS2文件系统中的文件和目录。 通过yaffs2utils,开发者可以方便地对YAFFS2文件系统进行管理和操作,例如创建、删除、复制、重命名等操作。同时,yaffs2utils还提供了一些用于文件系统的检查和修复的工具,以确保文件系统的运行状态和数据完整性。 使用这个工具集,开发人员可以更加轻松地开发和维护嵌入式设备中的闪存文件系统。此外,yaffs2utils还为测试和调试提供了一些方便的功能,以便更好地分析和解决问题。 总之,yaffs2utils-0.2.9.tar.gz是一个重要的工具集压缩包,提供了在嵌入式设备中处理YAFFS2文件系统的源代码和工具。使用它可以方便地管理、操作和维护YAFFS2文件系统,提高开发和维护的效率。 ### 回答2: yaffs2utils-0.2.9.tar.gz是一个压缩文件,该文件是一个软件工具包。YAFFS2意味着"Yet Another Flash File System 2",这是一个用于嵌入式设备和闪存存储介质的文件系统。 该软件工具包提供了用于操作和管理YAFFS2文件系统的工具。它包含了一些命令行实用工具,可以对嵌入式设备上的闪存进行读、写、擦除和重新格式化操作。这些工具旨在帮助开发人员和系统管理员在处理闪存文件系统时更加方便和高效。 通过使用yaffs2utils-0.2.9.tar.gz,用户可以轻松管理和维护嵌入式设备上的闪存文件系统。用户可以使用其中的命令行工具对文件进行复制、移动、重命名和删除等操作。此外,该软件工具包还提供了一些用于查看和调试YAFFS2文件系统的工具,可以帮助开发人员诊断和解决与闪存文件系统相关的问题。 用户可以通过解压和编译yaffs2utils-0.2.9.tar.gz来安装这个软件工具包。编译后,用户可以在命令行界面中运行相应的命令来操作YAFFS2文件系统。这个工具包是开源的,可以免费使用和修改。 总而言之,yaffs2utils-0.2.9.tar.gz是一个用于操作和管理YAFFS2文件系统的软件工具包,它提供了一些命令行实用工具,帮助用户在嵌入式设备和闪存存储介质中进行文件系统的读、写和管理操作。 ### 回答3: yaffs2utils-0.2.9.tar.gz是一个打包压缩文件,其中包含了yaffs2utils-0.2.9版本的源代码及相关工具和文档。 yaffs2utils是一组用于处理YAFFS2文件系统的实用工具。YAFFS2是一种用于嵌入式设备的文件系统,具有快速、可靠、高效的特性。yaffs2utils-0.2.9版本是该工具的一个特定版本,对应于该版本的yaffs2文件系统架构和特性。 在yaffs2utils-0.2.9.tar.gz文件中,包含了用C语言编写的源代码文件,这些源代码文件包含了yaffs2utils的实现。通过编译这些源代码文件,可以生成可执行文件,进而使用这些工具来处理yaffs2文件系统。 此外,yaffs2utils-0.2.9.tar.gz中还包含了一些相关的工具和文档。这些工具可以用于格式化、挂载、读写yaffs2文件系统,以及进行文件的备份和还原等操作。而文档则提供了关于yaffs2文件系统和yaffs2utils工具的详细说明和使用指南,帮助用户更好地理解和使用这些工具。 总之,yaffs2utils-0.2.9.tar.gz是一个用于处理YAFFS2文件系统的工具集合,通过它可以方便地操作和管理yaffs2文件系统,并提供了相关文档来帮助用户使用这些工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旋风旋风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值