OpenWrt 编译配置笔记

Posted on Thu 18 December 2014 in misc

近日购得 Netgear WNDR3700v4 二手路由器一台,有 128MB 内存和 128MB NAND,自定义空间很大。但目前 OpenWrt 14.07 和 trunk 都只能识别 24MB NAND,无法完全利用。网上搜索后得知有人给出了 解决方法 ,故动手下载 OpenWrt Buildroot,自己编译。

  1. 无需准备 cross-compile toolchain,OpenWrt Buildroot 会帮你下载。Buildroot 的具体设置过程详见 官方文档

  2. feeds 脚本用于管理对 menuconfig 可见的软件仓库和软件包,只有 feeds install 过的软件包才会显示在 make menuconfig 的菜单中。因此建议 feeds update -afeeds install -a 以确保科学。

  3. oldpackages 仓库可以干掉了。修改 feeds.conf.default 去掉相应行。

  4. menuconfig 是整个编译系统的设置中心,一般情况下除了 make menuconfig 和 make 之外不需要干别的。

  5. 上面说到官方 OpenWrt 只能识别 24MB 空间,因此需要 patch 内核的 Makefile 来修改分区定义。

    所需 patch:

    Index: target/linux/ar71xx/image/Makefile
    ===================================================================
    --- target/linux/ar71xx/image/Makefile  (revision 42081)
    +++ target/linux/ar71xx/image/Makefile  (working copy)
    @@ -285,7 +285,7 @@
     wnr2000v3_mtdlayout=mtdparts=spi0.0:256k(u-boot)ro,64k(u-boot-env)ro,3712k(firmware),64k(art)ro
     wndr3700_mtdlayout=mtdparts=spi0.0:320k(u-boot)ro,128k(u-boot-env)ro,7680k(firmware),64k(art)ro
     wndr3700v2_mtdlayout=mtdparts=spi0.0:320k(u-boot)ro,128k(u-boot-env)ro,15872k(firmware),64k(art)ro
    -wndr4300_mtdlayout=mtdparts=ar934x-nfc:256k(u-boot)ro,256k(u-boot-env)ro,256k(caldata),512k(pot),2048k(language),512k(config),3072k(traffic_meter),2048k(kernel),23552k(ubi),25600k@0x6c0000(firmware),256k(caldata_backup),-(reserved)
    +wndr4300_mtdlayout=mtdparts=ar934x-nfc:256k(u-boot)ro,256k(u-boot-env)ro,256k(caldata),512k(pot),2048k(language),512k(config),3072k(traffic_meter),2048k(kernel),121856k(ubi),123904k@0x6c0000(firmware),256k(caldata_backup),-(reserved)
     zcn1523h_mtdlayout=mtdparts=spi0.0:256k(u-boot)ro,64k(u-boot-env)ro,6208k(rootfs),1472k(kernel),64k(configure)ro,64k(mfg)ro,64k(art)ro,7680k@0x50000(firmware)
     mynet_n600_mtdlayout=mtdparts=spi0.0:256k(u-boot)ro,64k(u-boot-env)ro,64k(devdata)ro,64k(devconf)ro,15872k(firmware),64k(radiocfg)ro
     mynet_rext_mtdlayout=mtdparts=spi0.0:256k(u-boot)ro,7808k(firmware),64k(nvram)ro,64k(ART)ro,6848k@0x130000(filesystem)
    

    将以上内容保存为 mtdlayout.patch(文件名随意),放在 Buildroot 根目录中,然后执行 patch -p0 < mtdlayout.patch 即可。

期间还刷挂了一次,无奈拆机上 USB TTL 工具。WNDR3700v4 的 PCB 与 OpenWrt Wiki 中的 WNDR3700 页面上的照片不同而与 WNDR4300 相似,画面左下角的四个串口 pin 依次为(从前到后,图中从下到上):GND RX TX VCC。电压为 3.3V 否则有烧板子的危险,请注意 USB TTL 上的开关或跳线。

至于串口通信,我这里 minicom 无法输入,于是用的 screen。screen /dev/ttyUSB0 115200 执行即可。