1、目的

将普通路由器升级成为一台支持OpenFlow的交换机。

具体哪些路由器可以刷OpenFlow可以参考:OpenWRT:http://wiki.openwrt.org/toh/start#supported.hardware.-.router.type 或DD-WRT:http://www.dd-wrt.com/site/support/router-database

2、环境

  • Cisco Valet Plus M20
  • Ubuntu Linux 16.04(64 bit)
  • Window 7(64 bit)

3、安装编译环境

在Ubuntu上安装相关编译环境:

$ sudo apt-get update

$ sudo apt-get install build-essential binutils flex \

bison autoconf gettext texinfo sharutils subversion \

libncurses5-dev ncurses-term zlib1g-dev gawk git-core unzip

4、下载源码编译

4.1方法一:从OpenWRT源码编译生成固件

(1)下载OpenWRT源码:

$ cd /home

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

$ cd openwrt

(2)更新feeds:

$ mv feeds.conf.default feeds.conf

$ ./scripts/feeds update –a

$ ./scripts/feeds install –a

$ ./scripts/feeds install –a luci

(3)添加Openflow:

$ cd /home

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

$ cd /home/openwrt/package/

$ ln –s /home/openflow-openwrt/openflow-1.3/

$ cd /home/openwrt/

$ ln –s /home/openflow-openwrt/openflow-1.3/files

(4)配置编译套件:

$ make menuconfig

四个重要配置如下:

选择CPU型号:Target System—Broadcom BCM47xx/53xx(MIPS)

选择系列号:Subtarget—MIPS 74K

选择路由器版本:Target Profile—Broadcom Soc,BCM43xx WiFi(b43)

添加OpenFlow:Network -> <*>openflow

其他配置如下:

添加luci:LuCI—>Collections—– <*> luci

添加ddns:LuCI—>Applications —> <*>luci-app-ddns

添加utf8:Kernel modules —> Native Language Support —> <*> kmod-nls-utf8

注:CPU具体型号可以参考:https://wiki.openwrt.org/toh/start#supported.hardware.-.router.type

例如:Cisco Valet Plus M20 打开ViewEditdata具体信息如图所示

(5)编译

$ make V=99

执行完后:

在bin/brcm47xx/packges/base下生成openflow_1.0.0-1_brcm47xx.ipk

在bin/brcm47xx/下生成openwrt-15.05-brcm47xx-mips74k-squashfs.trx固件

4.2方法二:从OpenWRT ImageBuilder编译生成固件

Cisco M20相关资源下载网址:

http://downloads.openwrt.org/chaos_calmer/15.05/brcm47xx/mips74k/

(1)下载OpenWrt-ImageBuilder并解压到/home/ImageBuilder目录下

将openflow_1.0.0-1_brcm47xx.ipk拷贝到/packges/base/目录下

$ cp /home/openwrt/bin/brcm47xx/packges/base/openflow_1.0.0-1_brcm47xx.ipk /home/ImageBuilder/packges/base/

$ cd /home/ImageBuilder/

可以查看当前已有的预定义的型号信息(profile)

$ make info

可以查看命令格式

$ make help

(2)将openflow.ipk编译进固件

$ make image PROFILE="TLWR740" PACKAGES="luci-app-firewall luci-base luci-lib-ip luci-lib-nixio luci-mod-admin-full luci-proto-ppp luci-theme-bootstrap luci openflow“

(3)编译完成

生成固件:bin/brcm47XX/openwrt-15.05-brcm47xx-mips74k-squashfs.trx

5、刷机

5.1方法一:从网页直接刷入固件

打开浏览器,输入路由器地址:192.168.1.1

可以在Flash new fiemware image 选项编译好的固件刷入,等待路由器重启页面刷新,至此刷机完成。(注:从原厂刷入固件时,一般选择升级固件即可)

5.2方法二:登录路由器输入固件

Ubuntu系统下:

(1)将固件拷贝的路由器/tmp目录下

$ scp xxx.bin(文件名) root@192.168.1.1:/tmp(刷固件)

(2)ssh登入路由器

$ ssh root@192.168.1.1

(3)刷入固件

$ cd /tmp

$ mtd -r write xxx.bin(文件名) firmware(firmware或linux、OS1,这里是firmware)

Windows系统下:

(1)用HFS建立路由器固件文件的本地服务器

打开HFS,进入主菜单“Menu”的“IP address”子菜单;勾选内网IP,一般内网IP是“192.168.X.X”的形式,即路由分配给当前网卡的IP;在“Virtual File System”(虚拟文件系统)树状目录框中点鼠标右键弹出快捷菜单;选择“添加文件”,打开本地存储器路由器固件“xxx.bin”,看到“xxx.bin”出现在“Virtual File System”(虚拟文件系统)树状目录框中即表示已添加;可以在“Virtual File System”(虚拟文件系统)树状目录框中的“xxx.bin”上点鼠标右键弹出快捷菜单,选择“浏览”,如果网络浏览器弹出窗口显示下载“rf.bin”文件,即表示本地固件文件服务器成功运行。

(2)telnet 或 SSH 登录

$ telnet 192.168.1.1

$ cd /tmp

$ wget http://192.168.1.143/xxx.bin(192.168.1.143 地址为路由器给电脑分配的ip)

$ mtd -r write xxx.bin firmware

6部署配置OpenFlow

(1)与openflow相关的脚本

/etc/config/network

/etc/config/wireless

/etc/config/openflow

/lib/openflow/ofswitch.sh

(2)拷贝functions.sh

$ cp /lib/functions.sh /etc/

(3)配置openflow并设置远程控制器IP

$ vim /etc/config/openflow

config 'ofswitch'

option 'dp' 'dp0'

option 'dpid' '000000000001'

option 'ofports' 'eth0.1 eth0.2'

option 'ofctl' 'tcp:192.168.1.136:6633'

option 'mode'  'outofband'

(4)启动openflow:

$/etc/init.d/openflow start

(5)在远程控制器OpenDaylight web界面,可以看到openflow:1交换机连接上控制器。

OpenFlow硬件交换机制作及刷机教程的更多相关文章

  1. 小米刷机教程和GAE for android

    小米上的刷机教程:http://www.miui.com/getrom.php?r=2gae for android :https://github.com/madeye/gaeproxy/wiki

  2. 努比亚Z7 mini刷机教程_recovery卡刷机教程

    之前小编分享努比亚Z7 mini电话访问Root权限.recovery刷机教程. 所以对于朋友谁搞机整机的爱,左边是写第三方手机刷包.那么下面刷的家小编与您分享努比亚Z7 mini刷机教程手机. 一. ...

  3. 三星N8000/N8010通用刷机教程

    前面已经讲到过如何给三星n8000/n8010 Galaxy Note 10.1获取ROOT权限了.接下来就顺便告诉大家怎么给三星n8000/n8010刷机吧.其实给三星n8000/n8010刷机过程 ...

  4. Jetson tk1 刷机教程

    前期准备: 1.  Jetson TK1开发板. 2.  安装有ubuntu系统的PC(或者ubuntu虚拟机)切记:不管是PC还是虚拟机,务必确保有大于5G的存储空间,之后安装过程会作详细解释. 3 ...

  5. 三星GT-N8010刷机教程

    本刷机教程只针对三星GT-N8010机器(以下简称GT-N8010),以下操作本人已在GT-N8010机器上亲测,且都成功,其它机器没有测试不能保证成功. 刷机有风险,请谨慎使用!请先备份资料和信息. ...

  6. Android刷机教程

    我的机器是Nexus 5 一. 安装驱动 如何进入fastboot模式 1. 拔掉数据线,将手机关机 2. 关机后同时按住[音量减小键]和[开关机键]即可进入Fastboot模式 开启usb调试  - ...

  7. OpenWrt简要刷机教程

    准备工作 1. 下载openwrt中文固件到PC.(当然其他英文固件也可) 2  找到路由器的RST键. 3  找到路由器刷机口---姑且称之为“WAN口” 4. 关闭路由器的电源. 5. 将PC网口 ...

  8. Essential Phone刷机教程

    安装fastboot驱动(Essential-PH1-WindowsDrivers) 下载ADB刷机指令工具:platform-tools(ADB): 进入开发者选项,打开 USB 调试,OEM解锁选 ...

  9. K2路由器刷机教程

    http://blog.sina.com.cn/s/blog_dc642faa0102x1on.html 方法:先降价——刷入breed——刷入固件 1.K2路由固件版本为V22.4.5.39 / V ...

随机推荐

  1. linux学习笔记----权限与命令之间的关系(极重要)

    一.权限与命令之间的关系 二.文件与目录的默认权限与隐藏权限 1)umask为默认的权限(通过umask -S)查看你的系统的默认权限. umask的分数是指该默认值需要减掉的权限,比如说umask= ...

  2. EntityFramework 简单入个门

    任何一个和数据相关的系统里,数据持久化都是一个不容忽视的问题. 一直以来,Java 平台出了很多 NB 的 ORM 框架,Hibernate.MyBatis等等..NET 平台上,ORM 框架这一块一 ...

  3. 【鸡年大吉】,不知道写点啥,放个demo(小球碰撞)吧,有兴趣的看看

    最初的想法是仿写win7的泡泡屏保效果,但是对于小球的斜碰问题一直没搞明白(如果你会这个,欢迎留言或者做个demo),所以只是简单处理了碰撞后的速度,有时候会看起来很搞笑~~~funny guy 话不 ...

  4. OpenLayers.Map的一些特殊事件

    开年上班的第二天,无意中看到一些没见过的事件,特地来给广大人民群众报个信. 众所周知的,map里面的 eventListeners 支持的事件挺多的,比如: var map = new OpenLay ...

  5. Python自然语言处理学习笔记之性别识别

    从今天起开始写自然语言处理的实践用法,今天学了文本分类,并没用什么创新的东西,只是把学到的知识点复习一下 性别识别(根据给定的名字确定性别) 第一步是创建一个特征提取函数(feature extrac ...

  6. Jmeter生成html格式测试报告

    使用jmeter进行性能测试,运行完毕后生成html格式的测试报告,需要进行如下操作: 1.在C:\apache-jmeter-3.0\bin文件夹下的user.properties文本中添加如下信息 ...

  7. gradient的几点认识转载

    线性渐变(Linear Gradients)- 向下/向上/向左/向右/对角方向 径向渐变(Radial Gradients)- 由它们的中心定义 在这里主要讲线性渐变谷歌浏览器中:(1)backgr ...

  8. 读书笔记 effective c++ Item3 在任何可能的时候使用 const

    Const可以修饰什么?   Const 关键字是万能的,在类外部,你可以用它修饰全局的或者命名空间范围内的常量,也可以用它来修饰文件,函数和块作用域的静态常量.在类内部,你可以使用它来声明静态或者非 ...

  9. 理解javascript this 的绑定过程

    在理解this 的绑定过程之前,首先要理解调用位置:调用位置就是函数在代码中被调用的位置(而不是声明的位置).只有仔细分析调用位置才能回答这个问题:这个this 到底引用的是什么?通常来说,寻找调用位 ...

  10. UltraEdit的配置

    这两天看同学门写的博客,很多人都是些的配置文件如何配置,看完以后感觉获益很大啊,从dos中不在需要输入javac.exe文件的地址就可以访问到javac的文件,为我们的java的编译提供了很大的帮助. ...