主页 > 路由器 > Ubuntu下编译TL-WR743N V2的Openwrt固件-Openwrt新增设备方法

Ubuntu下编译TL-WR743N V2的Openwrt固件-Openwrt新增设备方法

Openwrt中只有TPLINK TL-WR743N/ND的固件,与TL-WR743N V2的硬件差别较大,固件不兼容,因此如果想要支持新版本的固件,需要自己新增设备,进行编译,如下是详细的操作过程。

TL-WR743N V2的硬件与TL-WR703N的硬件比较类似,因此源码参照703源码进行拷贝修改。

 

环境要求

编译一个可以安装的OpenWrt固件镜像文件(大约8MB大小的),你需要:

  • 一个纯净的OpenWrt编译系统大约需要200MB的空间。
  • 一个包含feeds的OpenWrt编译系统大约需要300MB的空间。
  • 编译feeds中的软件包大约需要2.1GB的空间用于存放下载来的源代码。
  • 构建OpenWrt并生成固件文件需要大约3-4 GB的空间。
  • 编译OpenWrt需要大约1-4 GB的内存。

以非root用户来进行工作

 

预先准备:
Ubuntu安装编译OpenWrt所需要的软件
sudo apt-get install build-essential asciidoc binutils bzip2 gawk gettext  git libncurses5-dev libz-dev patch unzip zlib1g-dev  subversion git

 

1、下载源码

git clone git://git.openwrt.org/15.05/openwrt.git

取得最新分支代码,如果要回到15.05主干,则继续执行

git checkout 483dac821788b457d349233e770329186a0aa860

2、配置

cd openwrt

下载并安装所有可用的"feeds",这是为了下载和安装让luci之类的第三方包的源码,如果不进行这步的话配置菜单是没有非openwrt的包给你选的

./scripts/feeds update -a

./scripts/feeds install -a

运行下面的命令让OpenWrt编译系统检查你的编译环境中缺失的软件包:
make defconfig
make prereq

修改openwrt\target\linux\ar71xx\generic\profiles\tp-link.mk

增加743nv2的profile:

define Profile/TLWR743NV2
NAME:=TP-LINK TL-WR743NV2
PACKAGES:=kmod-usb-core kmod-usb2 kmod-ledtrig-usbdev
endef

define Profile/TLWR743NV2/Description
Package set optimized for the TP-LINK TL-WR743NV2.
endef
$(eval $(call Profile,TLWR743NV2))

 

然后
make menuconfig

选编译的目标系统(Atheros AR7XXX架构,profile为743NV2):

选缺省组件:

编辑完成后点击“save”保存配置文件:

3、修改源文件

make前修改如下文件:

1)修改openwrt\target\linux\ar71xx\image\Makefile,新增及修改部分以粗体表示,下同:

TARGET_DEVICES += tl-mr3020-v1 tl-mr3040-v1 tl-mr3040-v2 tl-mr3220-v2 tl-mr3420-v2

define Device/tl-wr703n-v1
$(Device/tplink-4mlzma)
BOARDNAME := TL-WR703N
DEVICE_PROFILE := TLWR703
TPLINK_HWID := 0x07030101
CONSOLE := ttyATH0,115200
endef

define Device/tl-wr743n-v2
$(Device/tplink-8mlzma)
BOARDNAME := TL-WR743N
DEVICE_PROFILE := TLWR743NV2
TPLINK_HWID := 0x07430102
CONSOLE := ttyATH0,115200
endef

...

TARGET_DEVICES += tl-wr703n-v1 tl-wr743n-v2 tl-wr710n-v1 tl-wr710n-v2 tl-wr720n-v3 tl-wr720n-v4

2)修改openwrt\tools\firmware-utils\src\mktplinkfw.c,增加

#define HWID_TL_WR743N_V2    0x07430102

...

}, {
.id = "TL-WR703Nv1",
.hw_id = HWID_TL_WR703N_V1,
.hw_rev = 1,
.layout_id = "4Mlzma",
}, {
.id = "TL-WR743Nv2",
.hw_id = HWID_TL_WR743N_V2,
.hw_rev = 1,
.layout_id = "8Mlzma",
}, {
.id = "TL-WR720Nv3",

3)修改openwrt\target\linux\ar71xx\base-files\lib\ar71xx.sh

"070301"*)
model="TP-Link TL-WR703N"
;;
"074301"*)
model="TP-Link TL-WR743N"
;;
"071000"*)

...

*"TL-WR703N v1")
name="tl-wr703n"
;;
*"TL-WR743N v2")
name="tl-wr743n"
;;
*"TL-WR710N v1")

4)修改openwrt\target\linux\ar71xx\base-files\lib\upgrade\platform.sh,注意“| \”后不能有空格

tl-wr703n | \
tl-wr743n | \
tl-wr710n | \

5)修改openwrt\target\linux\ar71xx\base-files\etc\diag.sh

tl-wr703n | \
tl-wr743n | \
tl-wr710n | \

6)修改openwrt\target\linux\ar71xx\base-files\etc\uci-defaults\01_leds

增加

tl-wr743n)
ucidef_set_led_netdev "wan" "WAN" "tp-link:green:wan" "eth1"
ucidef_set_led_switch "lan1" "LAN1" "tp-link:green:lan1" "switch0" "0x02"
ucidef_set_led_switch "lan2" "LAN2" "tp-link:green:lan2" "switch0" "0x04"
ucidef_set_led_switch "lan3" "LAN3" "tp-link:green:lan3" "switch0" "0x08"
ucidef_set_led_switch "lan4" "LAN4" "tp-link:green:lan4" "switch0" "0x10"
ucidef_set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt"
ucidef_set_led_usbdev "usb" "USB" "tp-link:green:3g" "1-1"
;;

7)修改openwrt\target\linux\ar71xx\base-files\etc\uci-defaults\02_network

tl-wdr3500 |\
tl-wr743n |\
tl-wr741nd |\
tl-wr741nd-v4 |\

8)修改openwrt\target\linux\ar71xx\config-3.18

CONFIG_ATH79_MACH_TL_WR703N=y
CONFIG_ATH79_MACH_TL_WR743N=y
CONFIG_ATH79_MACH_TL_WR720N_V3=y

9)拷贝openwrt\target\linux\ar71xx\files\arch\mips\ath79\mach-tl-wr703n.c为mach-tl-wr743n.c进行修改,如下为修改后文件:

mach-tl-wr743n

10)添加pathch

为了支持我们的设备, Linux 代码树的部分文件也需要做改动, OpenWrt 采用了 patch 的方式实现.

# 清理并准备 patch 树,后面可加 V=s QUILT=1 参数, 表示静默无输出
make target/linux/{clean,prepare}

进入内核代码目录(其中版本号可能与你的不一致):

cd build_dir/target-mips_34kc_uClibc-0.9.33.2/linux-ar71xx_generic/linux-3.18.36/

这里就是内核代码树了, 里面的代码是已经打过所有 patch 的, 可以用 quilt push 检查看是不是这样:

$ quilt push
File series fully applied, ends at patch patches/platform/907-MIPS-ath79-add-tl-wa901nd-v4-support.patch

 新建个 patch,选择的数字需要大于刚才的那个 907,:

$quilt new platform/920-add-tl-wr743-support.patch

修改如下文件,参照其中703的配置拷贝修改:
$ quilt edit arch/mips/ath79/Kconfig
$ quilt edit arch/mips/ath79/Makefile
$ quilt edit arch/mips/ath79/machtypes.h

#验证下修改的内容:
$ quilt diff

# 保存所有修改到 patch 文件

$ quilt refresh

这个时候我们的 patch 文件还在 build_dir 里, 大概位置是 patches/platform/ 下. 需要同步到 OpenWrt 代码树.
# 退回到顶层工作目录, 执行:
~/openwrt$ make target/linux/update V=s
同步完成后, patch 文件会出现在 target/linux/ar71xx/patches-3.18/ 下.

4、执行编译

删除 tmp 目录
$ rm -rvf tmp/

对于第一次编译,请不要开多线程。。。。因为不好排错
make V=99

如果第一次编译成功的话,之后的编译可以充分发挥多核心的优势了

首先执行:
ulimit -s 10240
这个命令是防止爆栈

对make加入多线程编译支持
make V=99 -j线程数
速度比单线程快N倍

第二次编译命令示例:

rm .config
rm -rf tmp

make clean
make defconfig
make menuconfig
ulimit -s 10240
make V=99 -j8

5、编译后的固件

8M固件,15.05正式版,内嵌pptp、luci、DDNS、网络共享:

编译时还碰到一个问题,opkg版本和luci版本不兼容,opkg是随openwrt发行的版本,luci则是通过feed下载的最新版本,新luci调用了最新版本opkg中增加的命令参数“--size”,而旧版本opkg不支持

解决方法:

1)从新openwrt中提取新的补丁:/openwrt/package/system/opkg/patches中拷贝260-add-print-package-size.patch文件到主干版本的对应目录

2)参照新版本修改/openwrt/package/system/opkg/makefile

或者直接把/openwrt/package/system/opkg目录从新版本拷贝到主干版本目录。

 

如需使固件缺省为中文WEB,修改openwrt/feeds/luci/modules/luci-base/root/etc/config/luci文件:

config core main
option lang zh_cn 

固件下载:

openwrt-ar71xx-generic-tl-wr743n-v2

 

 

评论已关闭.