20190701_jeffrey - silenceuncrio/diary GitHub Wiki

0900

一早來看到上禮拜五對方願意幫忙看有什麼需要加的

趕緊把目前的 source code 下 mtd driver 的部分 tar 起來給對方

8MB 多

利用 google 雲端硬碟分享 當個備用載點

0925

繼續 trace 吧

1420

參考了 jeffary 給我們的 files

修改了

  • drivers/mtd/mtdsplit.c
  • drivers/mtd/mtdpart.c

結果還是一樣

趕快寫 mail 讓對方 update 我們這邊的狀況

1750

紀錄一下今天的 trace

相關的 console

...
[    2.084000] [j][drivers/mtd/nand/mtk_nand.c(5520)-mtk_nand_init]
[    2.096000] MediaTek Nand driver init, version v2.1 Fix AHB virt2phys error
[    2.112000] [j][drivers/mtd/nand/mtk_nand.c(4480)-mtk_nand_probe]
[    2.124000] Allocate 16 byte aligned buffer: 80512450
[    2.132000] [j][drivers/mtd/nand/mtk_nand.c(4198)-mtk_nand_init_hw]
[    2.144000] Enable NFI Clock
[    2.152000] # MTK NAND # : Use HW ECC
[    2.160000] NAND ID [C2 F1 80 95 02, 00809502]
[    2.168000] [j][drivers/mtd/nand/mtk_nand.c(532)-get_device_info]
[    2.180000] Device not found, ID: c2f1
[    2.188000] Not Support this Device!
[    2.196000] chip_mode=00000001
[    2.200000] Support this Device in MTK table! c2f1
[    2.212000] [j][drivers/mtd/nand/mtk_nand.c(4753)-mtk_nand_probe] Scan to find existance of the device
[    2.228000] [j][drivers/mtd/nand/nand_base.c(3815)-nand_scan]
[    2.240000] [j][drivers/mtd/nand/nand_base.c(3437)-nand_scan_ident]
[    2.252000] [j][drivers/mtd/nand/nand_base.c(2846)-nand_set_defaults]
[    2.264000] [j][drivers/mtd/nand/nand_base.c(3278)-nand_get_flash_type]
[    2.280000] NAND device: Manufacturer ID: 0xc2, Chip ID: 0xf1 (Macronix NAND 128MiB 3,3V 8-bit), 128MiB, page size: 2048, OOB size: 64
[    2.304000] [j][drivers/mtd/nand/mtk_nand.c(2969)-mtk_nand_select_chip]
[    2.316000] [NAND]select ecc bit:4, sparesize :64 spare_per_sector=16
[    2.328000] [j][drivers/mtd/nand/nand_base.c(3497)-nand_scan_tail]
[    2.340000] [j][drivers/mtd/nand/nand_base.c(3549)-nand_scan_tail] chip->ecc.mode = 2
[    2.356000] [j][drivers/mtd/nand/nand_base.c(3783)-nand_scan_tail] Build bad block table
[    2.372000] [j][drivers/mtd/nand/nand_bbt.c(1346)-nand_default_bbt]
[    2.384000] [j][drivers/mtd/nand/nand_bbt.c(1143)-nand_scan_bbt]
[    2.396000] [j][drivers/mtd/nand/nand_bbt.c(1160)-nand_scan_bbt] build a memory based bad block table
[    2.416000] [j][drivers/mtd/nand/nand_bbt.c(875)-nand_memory_bbt]
[    2.428000] [j][drivers/mtd/nand/nand_bbt.c(472)-create_bbt]
[    2.440000] Scanning device for bad blocks
[    2.448000] [j][drivers/mtd/nand/nand_bbt.c(516)-create_bbt] (startblock, numblocks) = (0, 2048)
[    2.476000] [j][drivers/mtd/nand/nand_bbt.c(535)-create_bbt] this->bbt[13] = c0
[    2.492000] Bad eraseblock 55 at 0x0000006e0000
[    2.576000] [j][drivers/mtd/nand/nand_bbt.c(535)-create_bbt] this->bbt[93] = 0c
[    2.592000] Bad eraseblock 373 at 0x000002ea0000
[    2.600000] [j][drivers/mtd/nand/nand_bbt.c(535)-create_bbt] this->bbt[94] = 03
[    2.616000] Bad eraseblock 376 at 0x000002f00000
[    2.776000] [j][drivers/mtd/nand/mtk_nand.c(4419)-load_fact_bbt]
[    2.788000] [j][drivers/mtd/nand/mtk_nand.c(4385)-read_fact_bbt]
[    2.800000] Signature matched and data read!
[    2.808000] load_fact_bbt success 1023
[    2.816000] 00 00 00 00 00 00 00 00 00 00 00 00 00 c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[    2.836000] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[    2.856000] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0c 03 00
[    2.876000] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[    2.896000] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[    2.916000] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[    2.936000] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[    2.956000] 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[    2.976000] active dual image is b!
[    2.980000] [j][drivers/mtd/mtdpart.c(1109)-add_mtd_partitions]
[    2.992000] Creating 8 MTD partitions on "MT7621-NAND":
[    3.004000] [j][drivers/mtd/mtdpart.c(444)-allocate_partition]
[    3.016000] 0x000000000000-0x000007f80000 : "ALL"
[    3.024000] [j][drivers/mtd/mtdpart.c(1071)-mtd_partition_split]
[    3.036000] [j][drivers/mtd/mtdpart.c(444)-allocate_partition]
[    3.052000] 0x000000000000-0x000000080000 : "Bootloader"
[    3.060000] [j][drivers/mtd/mtdpart.c(1071)-mtd_partition_split]
[    3.072000] [j][drivers/mtd/mtdpart.c(444)-allocate_partition]
[    3.084000] 0x000000080000-0x000000100000 : "Config"
[    3.096000] [j][drivers/mtd/mtdpart.c(1071)-mtd_partition_split]
[    3.108000] [j][drivers/mtd/mtdpart.c(444)-allocate_partition]
[    3.120000] 0x000000100000-0x000000140000 : "Factory"
[    3.132000] [j][drivers/mtd/mtdpart.c(1071)-mtd_partition_split]
[    3.144000] [j][drivers/mtd/mtdpart.c(444)-allocate_partition]
[    3.156000] 0x000002140000-0x000004140000 : "firmware"
[    3.164000] [j][drivers/mtd/mtdpart.c(1071)-mtd_partition_split]
[    3.176000] [j][drivers/mtd/mtdpart.c(977)-split_uimage]
[    3.188000] [j][drivers/mtd/mtdpart.c(679)-__mtd_add_partition]
[    3.200000] [j][drivers/mtd/mtdpart.c(444)-allocate_partition]
[    3.212000] mtd: partition "rootfs" must either start or end on erase block boundary or be smaller than an erase block -- forcing read-only
[    3.240000] 0x0000022efc4a-0x000004140000 : "rootfs"
[    3.248000] [j][drivers/mtd/mtdpart.c(1071)-mtd_partition_split]
[    3.260000] [j][drivers/mtd/mtdpart.c(936)-split_rootfs_data]
[    3.272000] [j][drivers/mtd/mtdpart.c(911)-split_squashfs]
[    3.284000] [j][drivers/mtd/mtdsplit.c(44)-mtd_get_squashfs_len]
[    3.296000] [j][drivers/mtd/mtdsplit.c(90)-mtd_get_squashfs_len] retlen = 13163342
[    3.312000] [j][drivers/mtd/mtdpart.c(861)-mtd_pad_erasesize]
[    3.332000] mtd_pad_erasesize: bad_detected= 1
[    3.344000] mtd_pad_erasesize: bad_detected= 2
[    3.352000] [j][drivers/mtd/mtdpart.c(901)-mtd_pad_erasesize] return 13435830
[    3.368000] mtd: partition "rootfs_data" created automatically, ofs=0x2fc0000, len=0x1180000
[    3.384000] [j][drivers/mtd/mtdpart.c(679)-__mtd_add_partition]
[    3.396000] [j][drivers/mtd/mtdpart.c(444)-allocate_partition]
[    3.408000] 0x000002fc0000-0x000004140000 : "rootfs_data"
[    3.420000] [j][drivers/mtd/mtdpart.c(1071)-mtd_partition_split]
[    3.432000] [j][drivers/mtd/mtdpart.c(444)-allocate_partition]
[    3.444000] 0x000000140000-0x000002140000 : "reserve"
[    3.452000] [j][drivers/mtd/mtdpart.c(1071)-mtd_partition_split]
[    3.464000] [j][drivers/mtd/mtdpart.c(444)-allocate_partition]
[    3.476000] 0x000005000000-0x000006000000 : "Proscend-config"
[    3.488000] [j][drivers/mtd/mtdpart.c(1071)-mtd_partition_split]
[    3.500000] [j][drivers/mtd/mtdpart.c(444)-allocate_partition]
[    3.512000] 0x000006000000-0x000007000000 : "Proscend-misc"
[    3.524000] [j][drivers/mtd/mtdpart.c(1071)-mtd_partition_split]
[    3.536000] [mtk_nand] probe successfully!
[    3.544000] rootfs = 22efc4a to 2fc0000
[    3.552000] [j][drivers/mtd/nand/mtk_nand.c(4962)-mtk_nand_probe] return 0
[    3.568000] PPP generic driver version 2.4.2
...
[    4.428000] 8021q: 802.1Q VLAN Support v1.8
[    4.440000] [j][fs/squashfs/super.c(89)-squashfs_fill_super]
[    4.452000] [j][fs/squashfs/cache.c(415)-squashfs_read_table] (length, pages) = (96, 1)
[    4.468000] [j][fs/squashfs/block.c(98)-squashfs_read_data]
[    4.480000] [j][fs/squashfs/block.c(202)-squashfs_read_data] return
[    4.492000] [j][fs/squashfs/cache.c(440)-squashfs_read_table] return
[    4.504000] [j][fs/squashfs/block.c(98)-squashfs_read_data]
[    4.516000] [j][fs/squashfs/block.c(202)-squashfs_read_data] return
[    4.528000] [j][fs/squashfs/id.c(74)-squashfs_read_id_index_table]
[    4.540000] [j][fs/squashfs/cache.c(415)-squashfs_read_table] (length, pages) = (8, 1)
[    4.556000] [j][fs/squashfs/block.c(98)-squashfs_read_data]
[    4.568000] [j][fs/squashfs/block.c(202)-squashfs_read_data] return
[    4.580000] [j][fs/squashfs/cache.c(440)-squashfs_read_table] return
[    4.592000] [j][fs/squashfs/id.c(104)-squashfs_read_id_index_table] (le64_to_cpu(table[0]), id_table_start = (8677150749723019401, 13163334)
[    4.620000] [j][fs/squashfs/id.c(108)-squashfs_read_id_index_table] ERROR: le64_to_cpu(table[0]) >= id_table_start
[    4.640000] [j][fs/squashfs/super.c(252)-squashfs_fill_super] ERROR: unable to read id index table
[    4.656000] SQUASHFS error: unable to read id index table
...

相關的 diff

mtdsplit.c

38,40c38,54
< 
<     printk("[j][%s(%d)-%s]\n", __FILE__,__LINE__,__FUNCTION__);
< 
---
> #if defined(CONFIG_MTK_MTD_NAND) || defined(CONFIG_MTD_ANY_RALINK)  //__MSTC__, Autumn
> 	unsigned char buf[16];
> 	struct mtd_oob_ops ops;
> 	int start_offset = offset;
> 	memset(&ops, 0, sizeof(ops));
> 	ops.mode = MTD_OPS_RAW;
> 	ops.ooblen=1;
> 	ops.oobbuf = buf;
> 	if (master->type & MTD_NANDFLASH)
> 	{
> 		while (mtd_read_oob(master, start_offset, &ops) || (buf[0] != (unsigned char)0xff))
> 		{
> 			start_offset += master->erasesize;
> 		}
> 	}
> 	err = mtd_read(master, start_offset, sizeof(sb), &retlen, (void *)&sb);
> #else //defined(CONFIG_MTK_MTD_NAND) || defined(CONFIG_MTD_ANY_RALINK)
41a56
> #endif //defined(CONFIG_MTK_MTD_NAND) || defined(CONFIG_MTD_ANY_RALINK)
66,69d80
< 
<     printk("[j][%s(%d)-%s] retlen = %d\n", __FILE__,__LINE__,__FUNCTION__,
<         retlen);
< 

mtk_nand.c

530a531,533
> 
>     printk("[j][%s(%d)-%s]\n", __FILE__,__LINE__,__FUNCTION__);
> 
2376a2380,2381
>     printk("[j][%s(%d)-%s]\n", __FILE__,__LINE__,__FUNCTION__);
> 
2695a2701,2702
>     printk("[j][%s(%d)-%s]\n", __FILE__,__LINE__,__FUNCTION__);
> 
2961a2969,2970
>     printk("[j][%s(%d)-%s]\n", __FILE__,__LINE__,__FUNCTION__);
> 
3331a3341,3342
>     printk("[j][%s(%d)-%s]\n", __FILE__,__LINE__,__FUNCTION__);
> 
3753a3765,3766
>     printk("[j][%s(%d)-%s]\n", __FILE__,__LINE__,__FUNCTION__);
> 
3851a3865,3867
> 
>     printk("[j][%s(%d)-%s]\n", __FILE__,__LINE__,__FUNCTION__);
> 
3895a3912,3913
>     printk("[j][%s(%d)-%s]\n", __FILE__,__LINE__,__FUNCTION__);
> 
4007a4026,4027
>     printk("[j][%s(%d)-%s]\n", __FILE__,__LINE__,__FUNCTION__);
> 
4177a4198,4199
>     printk("[j][%s(%d)-%s]\n", __FILE__,__LINE__,__FUNCTION__);
> 
4361a4384,4385
> 
>     printk("[j][%s(%d)-%s]\n", __FILE__,__LINE__,__FUNCTION__);
4394a4419,4420
>     printk("[j][%s(%d)-%s]\n", __FILE__,__LINE__,__FUNCTION__);
> 
4452a4479,4481
> 
>     printk("[j][%s(%d)-%s]\n", __FILE__,__LINE__,__FUNCTION__);
> 
4722a4752,4754
> 
>     printk("[j][%s(%d)-%s] Scan to find existance of the device\n", __FILE__,__LINE__,__FUNCTION__);
> 
4929a4962,4964
>         printk("[j][%s(%d)-%s] return %d\n", __FILE__,__LINE__,__FUNCTION__,
>             err);
> 
5483a5519,5520
> 
>     printk("[j][%s(%d)-%s]\n", __FILE__,__LINE__,__FUNCTION__);

nand_base.c

377a378,379
>     printk("[j][%s(%d)-%s]\n", __FILE__,__LINE__,__FUNCTION__);
> 
2617a2620,2621
>     printk("[j][%s(%d)-%s]\n", __FILE__,__LINE__,__FUNCTION__);
> 
2840a2845,2847
> 
>     printk("[j][%s(%d)-%s]\n", __FILE__,__LINE__,__FUNCTION__);
> 
3270a3278,3279
>     printk("[j][%s(%d)-%s]\n", __FILE__,__LINE__,__FUNCTION__);
> 
3427a3437,3438
>     printk("[j][%s(%d)-%s]\n", __FILE__,__LINE__,__FUNCTION__);
> 
3485a3497,3498
>     printk("[j][%s(%d)-%s]\n", __FILE__,__LINE__,__FUNCTION__);
> 
3535a3549,3551
>     printk("[j][%s(%d)-%s] chip->ecc.mode = %d\n", __FILE__,__LINE__,__FUNCTION__,
>         chip->ecc.mode);
> 
3765a3782,3784
> 
>     printk("[j][%s(%d)-%s] Build bad block table\n", __FILE__,__LINE__,__FUNCTION__);
> 
3794a3814,3815
> 
>     printk("[j][%s(%d)-%s]\n", __FILE__,__LINE__,__FUNCTION__);

nand_bbt.c

471a472,473
>     printk("[j][%s(%d)-%s]\n", __FILE__,__LINE__,__FUNCTION__);
> 
513a516,518
>     printk("[j][%s(%d)-%s] (startblock, numblocks) = (%d, %d)\n", __FILE__,__LINE__,__FUNCTION__
>         ,startblock,numblocks);
> 
529a535,536
>             printk("[j][%s(%d)-%s] this->bbt[%d] = %02x\n", __FILE__,__LINE__,__FUNCTION__
>                 ,i >> 3,this->bbt[i >> 3]);
867a875,876
>     printk("[j][%s(%d)-%s]\n", __FILE__,__LINE__,__FUNCTION__);
> 
890a900,901
>     printk("[j][%s(%d)-%s]\n", __FILE__,__LINE__,__FUNCTION__);
> 
943c954,957
< 				create_bbt(mtd, buf, bd, chipsel);
---
>             {
>                 printk("[j][%s(%d)-%s] Create the table in memory by scanning the chip(s)\n", __FILE__,__LINE__,__FUNCTION__);
>                 create_bbt(mtd, buf, bd, chipsel);
>             }         
1128a1143,1144
>     printk("[j][%s(%d)-%s]\n", __FILE__,__LINE__,__FUNCTION__);
> 
1142a1159,1161
> 
>         printk("[j][%s(%d)-%s] build a memory based bad block table\n", __FILE__,__LINE__,__FUNCTION__);
> 
1325a1345,1346
> 
>     printk("[j][%s(%d)-%s]\n", __FILE__,__LINE__,__FUNCTION__);

mtdpart.c

59c59
< static int bad_detected;
---
> //static int bad_detected;
443a444,445
>     printk("[j][%s(%d)-%s]\n", __FILE__,__LINE__,__FUNCTION__);
> 
563,564c565,569
< 	printk(KERN_NOTICE "0x%012llx-0x%012llx : \"%s\"\n", (unsigned long long)slave->offset,
< 		(unsigned long long)(slave->offset + slave->mtd.size), slave->mtd.name);
---
> #if defined(CONFIG_SUPPORT_OPENWRT) //__MSTC__, Autumn
> #else //defined(CONFIG_SUPPORT_OPENWRT)
>         printk(KERN_NOTICE "0x%012llx-0x%012llx : \"%s\"\n", (unsigned long long)slave->offset,
>             (unsigned long long)(slave->offset + slave->mtd.size), slave->mtd.name);
> #endif //defined(CONFIG_SUPPORT_OPENWRT)
673a679,680
>     printk("[j][%s(%d)-%s]\n", __FILE__,__LINE__,__FUNCTION__);
> 
715a723,726
> 
>  	printk(KERN_NOTICE "0x%012llx-0x%012llx : \"%s\"\n", (unsigned long long)new->offset,
>  		(unsigned long long)(new->offset + new->mtd.size), new->mtd.name); //__MSTC__, Autumn
> 
849a861,862
>     printk("[j][%s(%d)-%s]\n", __FILE__,__LINE__,__FUNCTION__);
> 
853,879d865
< 	if (mtd->type & MTD_NANDFLASH)
< 	{
< 		unsigned char buf[16];
< 		int start_offset = (offset + mask) & ~mask;
< 		int rootfs_len = len & ~mask;
< 		struct mtd_oob_ops ops;
< 		memset(&ops, 0, sizeof(ops));
< 		ops.mode = MTD_OPS_RAW;
< 		ops.ooblen=1;
< 		ops.oobbuf = buf;
< 		
< 		// the total length was reduced if there are bad block in kernel image, now add it back
< 		rootfs_len += bad_detected * mtd->erasesize;
< 		while(rootfs_len >= 0)
< 		{
< 			mtd_read_oob(mtd, start_offset, &ops);
< 			if (buf[0] != (unsigned char)0xff)
< 			{
< 				bad_detected++;
< 				printk("bad_detected= %x\n", bad_detected);
< 			}
< 			else
< 			{
< 				rootfs_len -= mtd->erasesize;
< 			}
< 			start_offset += mtd->erasesize;
< 		}
881,882c867,902
< 		len += bad_detected * mtd->erasesize;
< 	}
---
> #if defined(CONFIG_MTK_MTD_NAND) || defined(CONFIG_MTD_ANY_RALINK)
>     if (mtd->type & MTD_NANDFLASH)
>     {
>         unsigned char buf[16];
>         int start_offset = (offset + mask) & ~mask;
>         int rootfs_len = len & ~mask;
>         int bad_detected = 0;
>         struct mtd_oob_ops ops;
>         memset(&ops, 0, sizeof(ops));
>         ops.mode = MTD_OPS_RAW;
>         ops.ooblen=1;
>         ops.oobbuf = buf;
>         
>         // the total length was reduced if there are bad block in kernel image, now add it back
>         //rootfs_len += bad_detected * mtd->erasesize;  //__MSTC__, Autumn
>         while(rootfs_len >= 0)
>         {
>             mtd_read_oob(mtd, start_offset, &ops);
>             if (buf[0] != (unsigned char)0xff)
>             {
>                 bad_detected++;
>                 printk("mtd_pad_erasesize: bad_detected= %x\n", bad_detected);
>             }
>             else
>             {
>                 rootfs_len -= mtd->erasesize;
>             }
>             start_offset += mtd->erasesize;
>         }
> 
>         len += bad_detected * mtd->erasesize;
>     }
> #endif  //defined(CONFIG_MTK_MTD_NAND) || defined(CONFIG_MTD_ANY_RALINK)
> 
>     printk("[j][%s(%d)-%s] return %d\n", __FILE__,__LINE__,__FUNCTION__,len);
> 
890a911,912
>     printk("[j][%s(%d)-%s]\n", __FILE__,__LINE__,__FUNCTION__);
> 
913a936,937
>     printk("[j][%s(%d)-%s]\n", __FILE__,__LINE__,__FUNCTION__);
> 
953,959c977
< 	if (mtd_read(master, part->offset, sizeof(hdr), &len, (void *) &hdr))
< 	{
< 		int i = master->erasesize;
< 		while (mtd_read(master, part->offset + i, sizeof(hdr), &len, (void *) &hdr))
< 			i+= master->erasesize;
< 		//return;
< 	}
---
>     printk("[j][%s(%d)-%s]\n", __FILE__,__LINE__,__FUNCTION__);
961,967c979,1007
< 	if (len != sizeof(hdr) || hdr.magic != cpu_to_be32(UBOOT_MAGIC))
< 		return;
< 
< 	if (hdr.kern_size != 0 && hdr.name[0] == 0)
< 		len = be32_to_cpu(hdr.kern_size);
< 	else
< 		len = be32_to_cpu(hdr.size) + 0x40;
---
> #if defined(CONFIG_MTK_MTD_NAND) || defined(CONFIG_MTD_ANY_RALINK) //__MSTC__, Autumn
>     unsigned char buf[16];
>     struct mtd_oob_ops ops;
>     int start_offset = part->offset;
>     memset(&ops, 0, sizeof(ops));
>     ops.mode = MTD_OPS_RAW;
>     ops.ooblen=1;
>     ops.oobbuf = buf;
>     if (master->type & MTD_NANDFLASH)
>     {
>         while (mtd_read_oob(master, start_offset, &ops) || (buf[0] != (unsigned char)0xff))
>     {
>             start_offset += master->erasesize;
>         }
>     }
>     if (mtd_read(master, start_offset, sizeof(hdr), &len, (void *) &hdr))
>         return;
> #else //defined(CONFIG_MTK_MTD_NAND) || defined(CONFIG_MTD_ANY_RALINK)
>     if (mtd_read(master, part->offset, sizeof(hdr), &len, (void *) &hdr))
>         return;
> #endif //defined(CONFIG_MTK_MTD_NAND) || defined(CONFIG_MTD_ANY_RALINK)
> 
>     if (len != sizeof(hdr) || hdr.magic != cpu_to_be32(UBOOT_MAGIC))
>         return;
> 
>     if (hdr.kern_size != 0 && hdr.name[0] == 0)
>         len = be32_to_cpu(hdr.kern_size);
>     else
>         len = be32_to_cpu(hdr.size) + 0x40;
970,995c1010,1036
< #if defined(CONFIG_MTD_ANY_RALINK) || defined(CONFIG_MTK_MTD_NAND)
< 	if (master->type & MTD_NANDFLASH)
< 	{
< 		unsigned char buf[16];
< 		int i;
< 		struct mtd_oob_ops ops;
< 		memset(&ops, 0, sizeof(ops));
< 		ops.mode = MTD_OPS_RAW;
< 		ops.ooblen=1;
< 		ops.oobbuf = buf;
< 		bad_detected = 0;
< 		for (i = part->offset; i < (part->offset + len + (bad_detected * master->erasesize)); i+= master->erasesize)
< 		{
< 			mtd_read_oob(master, i, &ops);
< 			if (buf[0] != (unsigned char)0xff)
< 			{
< 				bad_detected++;
< 			}
< 		}
< 		
< 		rootfs_offset = part->offset + len + bad_detected * master->erasesize;
< 
< 		__mtd_add_partition(master, "rootfs", part->offset + len + bad_detected * master->erasesize,
< 				    part->mtd.size - len - bad_detected * master->erasesize, false);
< 	}
< 	else
---
> #if defined(CONFIG_MTD_ANY_RALINK) || defined(CONFIG_MTK_MTD_NAND) //__MSTC__, Autumn
>     if (master->type & MTD_NANDFLASH)
>     {
>         start_offset = part->offset;
>         int kernel_len = len;
>         int bad_detected = 0;
> 
>         while ( kernel_len >= 0 ) {
>             mtd_read_oob(master, start_offset, &ops);
>             if (buf[0] != (unsigned char)0xff)
>             {
>                 bad_detected++;
>                 printk("split_uimage: bad_detected= %x\n", bad_detected);
>             }
>             else
>             {
>                 kernel_len -= master->erasesize;
>             }
>             start_offset += master->erasesize;
>         }
>         
>         rootfs_offset = part->offset + len + bad_detected * master->erasesize;
> 
>         __mtd_add_partition(master, "rootfs", rootfs_offset,
>                     part->mtd.size - (rootfs_offset - part->offset), false);
>     }
>     else
998,999c1039,1041
< 	__mtd_add_partition(master, "rootfs", part->offset + len,
< 			    part->mtd.size - len, false);
---
>     __mtd_add_partition(master, "rootfs", part->offset + len,
>                 part->mtd.size - len, false);
> 
1028,1032c1070,1071
< #if (defined(CONFIG_MTD_ANY_RALINK) || defined(CONFIG_MTK_MTD_NAND)) && defined(CONFIG_MTD_SPLIT)
< 	unsigned int len = 0;
< 	unsigned int split_offset = 0;
< 	size_t squashfs_len = 0;
< #endif
---
> 
>     printk("[j][%s(%d)-%s]\n", __FILE__,__LINE__,__FUNCTION__);
1042,1050d1080
< #if (defined(CONFIG_MTD_ANY_RALINK) || defined(CONFIG_MTK_MTD_NAND)) && defined(CONFIG_MTD_SPLIT)
< 		else {
< 			if (!mtd_get_squashfs_len(master, part->offset, &squashfs_len)) {
< 				len = mtd_pad_erasesize(master, part->offset, squashfs_len);
< 				split_offset = part->offset + len;
< 				rootfs_data_offset = split_offset;
< 			}
< 		}
< #endif
1078a1109,1110
>     printk("[j][%s(%d)-%s]\n", __FILE__,__LINE__,__FUNCTION__);
> 
1082c1114
< 		slave = allocate_partition(master, parts + i, i, cur_offset);
---
> 		slave = allocate_partition(master, (struct mtd_partition *)parts + i, i, cur_offset);
1091,1093d1122
< #if defined(CONFIG_SUPPORT_OPENWRT)
< 		mtd_partition_split(master, slave);
< #endif
1094a1124,1133
> 
> #if defined(CONFIG_SUPPORT_OPENWRT) //__MSTC__, Autumn
>         if (!strcmp(slave->mtd.name, SPLIT_FIRMWARE_NAME) && config_enabled(CONFIG_MTD_SPLIT_FIRMWARE)) {
>             cur_offset = slave->offset;
>         }
>         printk(KERN_NOTICE "0x%012llx-0x%012llx : \"%s\"\n", (unsigned long long)slave->offset,
>             (unsigned long long)(slave->offset + slave->mtd.size), slave->mtd.name);
>         mtd_partition_split(master, slave);
> #endif //defined(CONFIG_SUPPORT_OPENWRT)
> 

除了 mtdsplit.c mtdpart.c

其餘都只是 打印罷了

不過今天有試著把 nand_def.h 裡的 CONFIG_BADBLOCK_CHECKMTK_NAND_BMT 打開

build 過了

但跑起來一樣失敗再同一個地方

所以又改回來了

⚠️ **GitHub.com Fallback** ⚠️