20190701_jeffrey - silenceuncrio/diary GitHub Wiki
一早來看到上禮拜五對方願意幫忙看有什麼需要加的
趕緊把目前的 source code 下 mtd driver 的部分 tar 起來給對方
8MB 多
利用 google 雲端硬碟分享 當個備用載點
繼續 trace 吧
參考了 jeffary 給我們的 files
修改了
- drivers/mtd/mtdsplit.c
- drivers/mtd/mtdpart.c
結果還是一樣
趕快寫 mail 讓對方 update 我們這邊的狀況
紀錄一下今天的 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_CHECK
和 MTK_NAND_BMT
打開
build 過了
但跑起來一樣失敗再同一個地方
所以又改回來了