sd007 发表于 2014-10-18 09:17

OpenWRT编译-如何为3G300M编译一个16M的固件?

如题,请教各位大神,请指点。
已经成功下载Openwrt Trunk版软件,成功编译Tenda 3G300M的4M固件,完全按照原来的设置。我已经更换成16M的闪存(W25Q128BV,16MB)现在想编译能容纳更多软件的固件,应该修改哪个地方呢?
CPU是Rt3052,SPI的闪存。
是不是修改这个文件,怎么修改?有没有这方面的教程可供参考啊。
我注意到了这个文件:
trunk/target/linux/ramips/image/Makefile
是不是修改这个文件就可以呢?这个文件的部分内容:
#
# RT305X Profiles
#

Image/Build/Profile/DIR610A1=$(call BuildFirmware/Seama/$(1),$(1),dir-610-a1,DIR-610-A1,wrgn59_dlob.hans_dir610,$(ralink_default_fw_size_4M))

edimax_3g6200n_mtd_size=3735552
Image/Build/Profile/3G6200N=$(call BuildFirmware/Edimax/$(1),$(1),3g-6200n,3G-6200N,$(edimax_3g6200n_mtd_size),CSYS,3G62,0x50000,0xc0000)

Image/Build/Profile/3G6200NL=$(call BuildFirmware/Edimax/$(1),$(1),3g-6200nl,3G-6200NL,$(edimax_3g6200n_mtd_size),CSYS,3G62,0x50000,0xc0000)

Image/Build/Profile/3G300M=$(call BuildFirmware/CustomFlashFactory/$(1),$(1),3g300m,3G300M,$(ralink_default_fw_size_4M),3G150M_SPI Kernel Image,factory)

Image/Build/Profile/AIR3GII=$(call BuildFirmware/Default4M/$(1),$(1),air3gii,AIR3GII)

define BuildFirmware/UIMAGE_8M
    $(call MkCombineduImage,$(1),$(2),$(call mkcmdline,$(3),$(4),$(5)) $(call mkmtd/$(6),$(mtdlayout_8M)),$(kernel_size_8M),$(rootfs_size_8M),$(7))
endef
define Image/Build/Profile/ALL02393G
    $(call Image/Build/Template/$(image_type)/$(1),UIMAGE_8M,all0239-3g,ALL0239-3G,ttyS1,57600,phys)
endef







改造的帖子见:http://www.anywlan.com/thread-335830-1-1.html,
[路由改装]Di-524M B1改造 兼Rt3050F uboot


sd007 发表于 2014-10-20 13:32

本帖最后由 sd007 于 2014-10-20 13:34 编辑

网上发了求教帖子,但是一直没有得到回复。
没有办法,只好自己从纷乱的信息中提取有效信息,分析猜测它的文件,最终成功编译了16M固件。
以下是要点和过程:
1.首先找到上面提到的trunk/target/linux/ramips/image/Makefile文件,将
Image/Build/Profile/3G300M=$(call BuildFirmware/CustomFlashFactory/$(1),$(1),3g300m,3G300M,$(ralink_default_fw_size_4M),3G150M_SPI Kernel Image,factory)
修改为:
Image/Build/Profile/3G300M=$(call BuildFirmware/CustomFlashFactory/$(1),$(1),3g300m,3G300M,$(ralink_default_fw_size_16M),3G150M_SPI Kernel Image,factory)
编译后下载到Di-524,设备不能正常运行,出现大量的
[    5.310000] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 。。。。

[    5.650000] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,5)
仔细观察TTL的输出信息,发现在这些出错信息之上有MTD分区信息,firmware和rootfs的长度有问题,很可能原因在此。于是在各个配置文件中查找,最终发现:

2.找到trunk/target/linux/ramips/dts/3G300M.dts,修改本文件,将Fiwmware的长度变长到整个Flash,然后再次编译,编译成功后下载到DI-524后成功,所有功能正常。仔细看了DI-524的PCB,没找到这个板子的USB接口,现在固件成功了,自然就想利用它的USB接口做离线下载了。
palmbus@10000000 {
spi@b00 {
   status = "okay";
   m25p80@0 {
    #address-cells = <1>;
    #size-cells = <1>;
    compatible = "w25q128";
    reg = <0 0>;
    linux,modalias = "m25p80", "mx25l3205d";
    spi-max-frequency = <10000000>;
    partition@0 {
   label = "u-boot";
   reg = <0x0 0x30000>;
   read-only;
    };
    partition@30000 {
   label = "u-boot-env";
   reg = <0x30000 0x10000>;
   read-only;
    };
    factory: partition@40000 {
   label = "factory";
   reg = <0x40000 0x10000>;
   read-only;
    };
    partition@50000 {
   label = "firmware";
   reg = <0x50000 0xfb0000>;
    };
   };
};
};




sd007 发表于 2014-10-20 13:35

仔细看了DI-524的PCB,没找到这个板子的USB接口,现在固件成功了,自然就想利用它的USB接口做离线下载了。
页: [1]
查看完整版本: OpenWRT编译-如何为3G300M编译一个16M的固件?