开发环境构建
来源 https://zhuanlan.zhihu.com/p/24403803
无线路由器目前已经可以做很多的功能了,相应的扩展资源也越来越多。其中大部分都是直接基于OpenWRT平台直接进行开发的。笔者之前一直介绍的都是一些协议的理论知识,目前也更新一些笔者关于SDWN(Software Defined Wireless Networking)的实现中,所总结的一些实战类的笔记。笔者目前是采用WNDR3800作为硬件平台,性价比高。
PS:由于路径问题,一般一个ubuntu系统只能够安装一个OpenWRT,否则会出现路径不匹配的问题。
开发环境构建
第一步:安装一些依赖包
sudo apt-get install libncurses5-dev zlib1g-dev gawk flex patch git-core g++ subversion
第二步:下载OpenWRT源码
git clone git://git.openwrt.org/14.07/openwrt.git
第三步:修改文件夹权限,为了编译方便,一般直接对源码文件夹赋予777的权限
sudo chmod -R 777 openwrt
第四步:修改feeds源,用以安装所需的package以及luci界面
gedit feeds.conf.default
打开文件后,注释掉一些不需要的源,一般使用前三个源即可
第五步:更新与安装feeds包
./scripts/feeds update –a
./scripts/feeds install –a
第六步:固件的编译设置,我们要设置如下内容。注意,空格键是选择是否安装模块,如果是“*”的话,那么就是默认安装,如果是“M”的话,那么就是要手动加载。回车键是用来选择是否进入子栏的,在配置完固件之后,需要手动保存后再离开。
1)Target System类型为: Atheros AR7xx/AR9xx
2)Target Profile类型为:NETGEAR WNDR3700/WNDR3800/WNDRMAC,这里根据路由器型号进行选择,我们采用的路由器为WNDR3800。
3)Target Images类型为:squashfs,其余的选项不选
4)分别选中 <Advanced configuration options(for developers)>,<Build the OpenWrt SDK>,<Build the OpenWrt based Toolchain>
5)选择<Luci—Collections--(*)luci>,如下图(选择时要注意是选择了M还是*,因为这两种不同的选择方式编译完的固件是有不同的,这里还是强调全部用 *,否则刷机完之后,还需要手动加载Luci界面)
6)保存退出
7)如果需要装OVS的话,那么需要手动取消bridge,即在make menuconfig后手动执行以下指令。
echo '#CONFIG_KERNEL_BRIDGE is not set' >> .config
注意:每次 make menuconfig以后都要执行这条指令。
第七步:在openwrt源码文件中,添加编译时候需要附加的模块。在openwrt编译过程中,会从互联网上自行下载一些模块,不过由于网络以及数据源的问题,有部分数据包直接下载是存在问题的。故本文已经将该版本openwrt所需要的数据包进行整理,并整理如下:
上述文件解压缩以后,可以获得一个dl.tar.gz的文件,首先将其下载至本地,并传入开发环境中,然后用以下命令解压缩
tar zvxf dl.tar.gz
解压缩之后,可以获得一个名为dl的文件夹。此时需要将该文件夹与openwrt目录下的内容进行合并,比如可以用以下指令(如果在图形界面里面,手动拖拽文件夹也行)
cp ./dl/* openwrt/dl/
在openwrt编译过程中,如果dl目录中已经有下载好的模块,那么编译的时候就不会再行下载资源。
第八步:编译openwrt固件。直接在openwrt根目录下,执行以下指令即可
make V=99
编译完的结果被保存在目录(openwrt/bin/ar71xx/)下,其中ar71xx路径名与固件配置时选择的芯片型号有关。以本文选择WNDR3800路由器为例,最后编译结果为
openwrt-ar71xx-generic-wndr3800-squashfs-sysupgrade.bin
将该文件拷出后,我们可以进行最后一步的刷机操作。
============ End