将OpenFlow 1.3编译进OpenWRT并刷入TP-LINK TL-WR1043ND v3

实验需要,要搞一个SDN路由器。并没有现成的,自己动手丰衣足食。网上搜了下,最终决定选择TP-LINK TL-WR1043ND作为目标路由器,由于目前v1和v2都已停产,看了看介绍v3和v2的硬件是完全一样的,所以美亚海淘了一发TP-LINK TL-WR1043ND v3。入手以来,尝试刷机数次,今天终于成功,特此记录。

选择合适的路由器

首先你需要选择一个支持OpenWRT的路由器。可以参考官方列表:《Table of Hardware》。我参考了网上的一些文章,最终决定选择TP-LINK TL-WR1043ND。当然你也可以选择其他的,只要在列表中的应该都可以。

选择完路由器后,就要选择路由器对应的OpenWRT版本。每个路由器支持的OpenWRT版本都不一样,需要在上述列表中进行选择,下面安装编译环境的时候会用到。我的WR1043ND v3由于硬件和v2完全一样,所以支持的是15.05.1版本。

安装OpenWRT编译环境

编译前我们需要安装一个OpenWRT的编译环境。可以参考官方的文档:《OpenWrt编译系统 – 安装》。下面说明一下主要步骤。

请注意,整个过程中都不能使用 root用户,必须使用普通用户。

  1. 安装git下载OpenWRT源码。安装必要工具。
sudo apt-get update
sudo apt-get install git-core build-essential libssl-dev libncurses5-dev unzip

安装subversion和mercurial:

sudo apt-get install subversion mercurial

安装必要的依赖:

apt-get install binutils flex bison autoconf gettext texinfo sharutils ncurses-term zlib1g-dev gawk ccache git quilt sharutils  xsltproc

建立一个文件夹,下载OpenWRT:

mkdir openwrt
cd openwrt
git clone http://git.openwrt.org/15.05/openwrt.git

进入下载的文件夹,下载安装所有可用feeds:

cd openwrt
mv feeds.conf.default feeds.conf
./scripts/feeds update -a
./scripts/feeds install -a

顺便安装LuCI Web UI套件:

./scripts/feeds install -a luci

至此编译环境准备完成。

编译OpenFlow 1.3 for OpenWRT

下面开始编译OpenWRT。

输入下面命令进入编译菜单:

make menuconfig

需要选择以下组件,按下S键即可选中,前面<*>即表示已选中:

  1. 选择CPU型号:Target System -> Atheros AR7xxx/AR9xxx
  2. 选择路由器型号:Target Profile -> TP-LINK TL-WR1043N/ND
  3. 添加LuCI:LuCI -> Collections -> luci
  4. 添加ddns:LuCI -> Applications -> luci-app-ddns
  5. 添加自己喜欢的LuCI主题:LuCI -> Themes下面自己选择
  6. 添加UTF8编码:Kernel modules -> Native Language Support -> kmod-nsl-utf8
  7. 添加tun:Kernel modules -> Network Support -> kmod-tun
  8. 添加:Kernel modules ->Network Support 下的 kmod-sched-corekmod-sched

做出如上选择后,选择菜单下方的Save,保存后退出。

下面下载OpenFlow1.3 for OpenWRT的源码。

在~/openwrt目录下下载即可:

git clone https://github.com/CPqD/openflow-openwrt.git

下面要建立symbolic link。

进入OpenWRT根目录,请根据自己存放位置作出选择,下面仅以我的目录为例。

需要建两次软链接,分别为:

~/openwrt/packages/openflow-1.3 -> ~/openwrt/openflow-openwrt/openflow-1.3

cd /home/tang/openwrt/openwrt/package/
ln -s /home/tang/openwrt/openwrt/openflow-openwrt/openflow-1.3/

~/openwrt/files -> ~/openwrt/openflow-openwrt/openflow-1.3/files

cd /home/tang/openwrt/openwrt
ln -s /home/tang/openwrt/openwrt/openflow-openwrt/openflow-1.3/files

完成之后再次make menuconfig

选择Network -> openflow

如果要装OpenvSwitch,也可以顺手把下方的openvswitch给选上。

完成上述所有步骤后,开始编译:

make -V=99

-V=99是为了显示编译过程,这样出错的时候可以直接显示错误信息。单纯的make不会输出错误信息。

刷入TP-LINK TL-WR1043ND

如果上述的编译没有任何问题,最后会在~/openwrt/bin/ar71xx目录下产生多个binary文件。如果编译有问题,请自行解决。

其中*factory.bin是从原厂固件刷到OpenWRT的故将,如果之前已经将路由器刷成了OpenWRT,则使用 sysupgrade.bin

我之前已经刷过OpenWRT,所以直接用*sysupgrade.bin升级即可。下面说一下第一次刷入OpenWRT的大致步骤,因为是很久以前刷的了,有些遗忘,具体可以参考官方教程 :《TP-LINK TL-WR1043ND Installation》和《Installing OpenWrt via TFTP》,下面说一些要点。

对于WR1043ND这款路由器来说,由于版本升级,目前最新的已经升级到v4了,v4暂时还没有什么支持,我的是v3,虽然和v2的硬件完全一样,但是有一点很不一样,就是不支持路由器管理界面直接刷OpenWRT固件了。这个在官方文档里也有说明:

For revision v3.0, stock FW 3.16.9 Build 151021 or newer won't accept OpenWRT image.

解决的方法很简单,就是通过tftp刷进去。简单来说,在电脑上装个虚拟机,使用桥接模式,然后IP设置成192.168.0.66,把路由器和电脑直接用网线相连,然后通过tftp将固件刷进路由器即可。大概需要20-30秒的时间。

至于如何使用tftp,对于ubuntu系统大概就是下面这么几步。

1.安装,启动tftp server,并将文件放入正确位置。此时可能需要用root账户来操作。

sudo apt-get install tftpd-hpa tftp
sudo cp ~/uboot/arch/arm/boot/uboot.img /var/lib/tftpboot

2.测试tftp server

tftp localhost
tftp > get uboot.img
tftp > quit
  cmp /var/lib/tftpboot/uboot.img uboot.img

没有任何输出就说明安装成功了。

3.刷入路由器

把之前生成的固件放入tftp server的根目录/var/lib/tftpboot,确保路由器和电脑已通过网线连接,任何按下路由器的reset键,等待大概30秒,就能传输完成了,之后等待路由器安装OpenWRT完成后重启,就完成了刷机。

待解决问题

~~1. OpenFlow显示的版本为什么还是1.0?~~
~~2. 安装OpenvSwitch出错,提示kernel not support,应该是OpenWRT里的OpenvSwitch版本太低(2.39),不支持高版本的kernel,暂时未找到解决方法,于是也就无从验证第一个问题的真实性。~~

以上问题已经解决,参考最新文章:

TP-LINK TL-WR1043ND 刷入 OpenWRT & OpenvSwitch & OpenFlow 1.3

参考资料

  1. OpenWrt编译系统 – 安装
  2. OpenFlow 1.3 for OpenWRT
  3. 【SDN】將 OpenWRT 和 Openflow 刷進 TL-WR1043ND v2.1
  4. OpenFlow1.3的OpenWRT刷机部署
  5. OpenFlow 1.3 for OpenWRT on TP-LINK TL-WR1043ND
  6. TP-Link TL-WR1043ND installation
  7. Installing OpenWrt via TFTP
  8. Table of Hardware
  9. Techdata: TP-Link TL-WR1043ND v3
  10. TP-LINK TL-WR1043ND 刷入 OpenWRT & OpenvSwitch & OpenFlow 1.3
未经允许不得转载:Zhiqing Tang » 将OpenFlow 1.3编译进OpenWRT并刷入TP-LINK TL-WR1043ND v3