本帖最后由 abccba94 于 2016-9-10 19:03 编辑
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目录从新版本拷贝到主干版本目录。
固件下载: openwrt-ar71xx-generic-tl-wr743n-v2
原始贴:
btw:如果自己编译的话,可能还是不能用官方的ipk进行应用安装,要解决此问题,参见下面的帖子解决OPENWRT自编译版本内核不兼容问题
|