Flash 由4M改8M/16M, u-boot不锁死可刷写, openwrt源码的修改

15862阅读 0评论2012-11-14 qiushui_007
分类:LINUX

一. u-boot不锁死可刷写
 执行 mtd -r write uboot.bin u-boot
错误信息如下, 一般情况下是锁死不给刷的,需要将路由器进入安全模式
Could not open mtd device: u-boot
Can't open device for writing!

修改: target/linux/ar71xx/files/drivers/mtd/tplinkpart.c
parts[0].mask_flags = MTD_WRITEABLE; //去除本行

再重新编译, 这样u-boot就可以任意刷写了, 方便u-boot的调试修改


二. Flash右4M改8M, 修改2处, C源码和目标的Makefile

1.  tools\firmware-utils\src\mktplinkfw.c

点击(此处)折叠或打开

  1. static struct flash_layout layouts[] = {
  2.     {
  3.         .id        = "4M",
  4.         .fw_max_len    = 0x3c0000,
  5.         .kernel_la    = 0x80060000,
  6.         .kernel_ep    = 0x80060000,
  7.         .rootfs_ofs    = 0x140000,
  8.     }, {
  9.         .id        = "4Mlzma",
  10.         .fw_max_len    = 0x3c0000,
  11.         .kernel_la    = 0x80060000,
  12.         .kernel_ep    = 0x80060000,
  13.         .rootfs_ofs    = 0x100000,
  14.     }, {
  15.         .id        = "8M",
  16.         .fw_max_len    = 0x7c0000,
  17.         .kernel_la    = 0x80060000,
  18.         .kernel_ep    = 0x80060000,
  19.         .rootfs_ofs    = 0x140000,
  20.     }, {
  21.         .id        = "8Mlzma",
  22.         .fw_max_len    = 0x7c0000,
  23.         .kernel_la    = 0x80060000,
  24.         .kernel_ep    = 0x80060000,
  25.         .rootfs_ofs    = 0x100000,
  26.     }, {
            .id = "16Mlzma",
            .fw_max_len = 0xfc0000,
            .kernel_la = 0x80060000,
            .kernel_ep = 0x80060000,
            .rootfs_ofs = 0x100000,
        }, {
            /* terminating entry */
        }
  27. };

  28. static struct board_info boards[] = {
  29.     {
  30.         .id        = "TL-MR3020v1",
  31.         .hw_id        = HWID_TL_MR3020_V1,
  32.         .hw_rev        = 1,
  33.         .layout_id    = "4Mlzma",
  34.     }, {
  35.         .id        = "TL-MR3220v1",
  36.         .hw_id        = HWID_TL_MR3220_V1,
  37.         .hw_rev        = 1,
  38.         .layout_id    = "4M",
  39.     }, {
  40.         .id        = "TL-MR3420v1",
  41.         .hw_id        = HWID_TL_MR3420_V1,
  42.         .hw_rev        = 1,
  43.         .layout_id    = "4M",
  44.     }, {
  45.         .id        = "TL-WA701Nv1",
  46.         .hw_id        = HWID_TL_WA701N_V1,
  47.         .hw_rev        = 1,
  48.         .layout_id    = "4M",
  49.     }, {
  50.         .id        = "TL-WA901NDv1",
  51.         .hw_id        = HWID_TL_WA901ND_V1,
  52.         .hw_rev        = 1,
  53.         .layout_id    = "4M",
  54.     }, {
  55.         .id = "TL-WA901NDv2",
  56.         .hw_id = HWID_TL_WA901ND_V2,
  57.         .hw_rev = 1,
  58.         .layout_id    = "4M",
  59.     }, {
  60.         .id        = "TL-WR741NDv1",
  61.         .hw_id        = HWID_TL_WR741ND_V1,
  62.         .hw_rev        = 1,
  63.         .layout_id    = "4M",
  64.     }, {
  65.         .id        = "TL-WR741NDv4",
  66.         .hw_id        = HWID_TL_WR741ND_V4,
  67.         .hw_rev        = 1,
  68.         .layout_id    = "4Mlzma",
  69.     }, {
  70.         .id        = "TL-WR740Nv1",
  71.         .hw_id        = HWID_TL_WR740N_V1,
  72.         .hw_rev        = 1,
  73.         .layout_id    = "4M",
  74.     }, {
  75.         .id        = "TL-WR740Nv3",
  76.         .hw_id        = HWID_TL_WR740N_V3,
  77.         .hw_rev        = 1,
  78.         .layout_id    = "4M",
  79.     }, {
  80.         .id        = "TL-WR743NDv1",
  81.         .hw_id        = HWID_TL_WR743ND_V1,
  82.         .hw_rev        = 1,
  83.         .layout_id    = "4M",
  84.     }, {
  85.         .id        = "TL-WR841Nv1.5",
  86.         .hw_id        = HWID_TL_WR841N_V1_5,
  87.         .hw_rev        = 2,
  88.         .layout_id    = "4M",
  89.     }, {
  90.         .id        = "TL-WR841NDv3",
  91.         .hw_id        = HWID_TL_WR841ND_V3,
  92.         .hw_rev        = 3,
  93.         .layout_id    = "4M",
  94.     }, {
  95.         .id        = "TL-WR841NDv5",
  96.         .hw_id        = HWID_TL_WR841ND_V5,
  97.         .hw_rev        = 1,
  98.         .layout_id    = "4M",
  99.     }, {
  100.         .id        = "TL-WR841NDv7",
  101.         .hw_id        = HWID_TL_WR841ND_V7,
  102.         .hw_rev        = 1,
  103.         .layout_id    = "4M",
  104.     }, {
  105.         .id        = "TL-WR941NDv2",
  106.         .hw_id        = HWID_TL_WR941ND_V2,
  107.         .hw_rev        = 2,
  108.         .layout_id    = "4M",
  109.     }, {
  110.         .id        = "TL-WR941NDv4",
  111.         .hw_id        = HWID_TL_WR941ND_V4,
  112.         .hw_rev        = 1,
  113.         .layout_id    = "4M",
  114.     }, {
  115.         .id        = "TL-WR1043NDv1",
  116.         .hw_id        = HWID_TL_WR1043ND_V1,
  117.         .hw_rev        = 1,
  118.         .layout_id    = "8M",
  119.     }, {
  120.         .id        = "TL-WR2543Nv1",
  121.         .hw_id        = HWID_TL_WR2543N_V1,
  122.         .hw_rev        = 1,
  123.         .layout_id    = "8Mlzma",
  124.     }, {
  125.         .id        = "TL-WR703Nv1",
  126.         .hw_id        = HWID_TL_WR703N_V1,
  127.         .hw_rev        = 1,
  128.         .layout_id    = "4Mlzma", //-->8Mlzma/16Mlzma
  129.     }, {
  130.         /* terminating entry */
  131.     }
  132. };
2.  target/linux/ar71xx/image/Makefile
$(eval $(call SingleProfile,TPLINK-LZMA,$(fs_64kraw),TLWR703,tl-wr703n-v1,TL-WR703N,ttyATH0,115200,0×07030101,1,8Mlzma/16Mlzma))



--- 比较老的版本, 参考 

Part Three: Compile your openwrt firmware:

1. Checkout trunk and update feeds as other common tutorials
2. Modify Openwrt code to support and partition your flash:

/trunk/tools/firmware-utils/src/mktplinkfw.c

fw_max_len = 0x7c0000 /* for 8M Flash, use 0xfc0000 for 16M flash*/

target/linux/ar71xx/files/arch/mips/ar71xx/mach-tl-mr3x20.c


4M:

                 .name           = "u-boot", 
                 .offset         = 0, 
                 .size           = 0x020000, 
                 .mask_flags     = MTD_WRITEABLE, 
         }, { 
                 .name           = "kernel", 
                 .offset         = 0x020000, 
                 .size           = 0x140000, 
         }, { 
                 .name           = "rootfs", 
                 .offset         = 0x160000, 
                 .size           = 0x290000, 
         }, { 
                 .name           = "art", 
                 .offset         = 0x3f0000, 
                 .size           = 0x010000, 
                 .mask_flags     = MTD_WRITEABLE, 
         }, { 
                 .name           = "firmware", 
                 .offset         = 0x020000, 
                 .size           = 0x3d0000, 
         } 
};

8M:

                 .name           = "u-boot", 
                 .offset         = 0, 
                 .size           = 0x020000, 
                 .mask_flags     = MTD_WRITEABLE, 
         }, { 
                 .name           = "kernel", 
                 .offset         = 0x020000, 
                 .size           = 0x140000, 
         }, { 
                 .name           = "rootfs", 
                 .offset         = 0x160000, 
                 .size           = 0x690000, 
         }, { 
                 .name           = "art", 
                 .offset         = 0x7f0000, 
                 .size           = 0x010000, 
                 .mask_flags     = MTD_WRITEABLE, 
         }, { 
                 .name           = "firmware", 
                 .offset         = 0x020000, 
                 .size           = 0x7d0000, 
         } 
};


16M:

                 .name           = "u-boot", 
                 .offset         = 0, 
                 .size           = 0x020000, 
                 .mask_flags     = MTD_WRITEABLE, 
         }, { 
                 .name           = "kernel", 
                 .offset         = 0x020000, 
                 .size           = 0x140000, 
         }, { 
                 .name           = "rootfs", 
                 .offset         = 0x160000, 
                 .size           = 0xe90000, 
         }, { 
                 .name           = "art", 
                 .offset         = 0xff0000, 
                 .size           = 0x010000, 
                 .mask_flags     = MTD_WRITEABLE, 
         }, { 
                 .name           = "firmware", 
                 .offset         = 0x020000, 
                 .size           = 0xfd0000, 
         } 
};



0x000000000000-0x000000020000 : "u-boot"  //128k
0x000000020000-0x000000160000 : "kernel"  ///1280K
0x000000160000-0x000000ff0000 : "rootfs"   //14912K
0x0000008c0000-0x000000ff0000 : "rootfs_data" //7360k
0x000000ff0000-0x000001000000 : "art"      //64k
0x000000020000-0x000000ff0000 : "firmware" //16192k




3. menuconfig and make your image as common tutorials. save the image openwrt-ar71xx-generic-tl-mr3420-v1-squashfs-factory.bin for future usage.
4. back up your 64k art (wirelss driver data, without it your wireless does not work.) this is important! you can also use the backup one from other tp-link ar7241 chipset routers.



Imagebuilder 目录下,./target/linux/ar71xx/image/Makefile, 把703n最后的4Mlzma改成了8Mlzma
$(eval $(call SingleProfile,TPLINK-LZMA,$(fs_64kraw),TLWR703,tl-wr703n-v1,TL-WR703N,ttyATH0,115200,0x07030101,1,8Mlzma))
否则出现如下错误:
[mktplinkfw] kernel length aligned to 914864
[mktplinkfw] *** error: images are too big
make[3]: [install] Error 255 (ignored)



老版本: R29600, Imagebuilder 中的makefile , 和最新的版本则不同, 内容如下:

tlwr703_cmdline=board=TL-WR703N console=ttyATH0,115200
define Image/Build/Profile/TLWR703
$(call Image/Build/Template/$(fs_64kraw)/$(1),TPLINK-LZMA,tl-wr703n-v1,$(tlwr703_cmdline),0x07030101,1,4Mlzma)
endef

上一篇:脚本集锦
下一篇:1-Wire Debug