小神器入手:迈入OpenWRT世界的第一步OpenWRT简介以“OpenWRT”为关键字搜了一下张大妈的百宝箱,发现几篇算是OpenWRT的高阶应用。每篇文章,都应有特定的读者群,所以我想,就写篇菜鸟级的OpenWRT学习心得,仅供与笔者一样的电脑苦手交流分享(别说高手了,中手都将无任何收获)。任何“经验”,都有时效性,特别是OpenWRT的技术发展也很快,所以,看下表,记录下下本文的时间:2014年8月。Linux世界很大,大到无从谈起。OpenWrt仅仅是一个嵌入式的Linux发行版。 先百度一下它的来历:2002年12月,Linksys发布了家用无线路由器WRT54G,由于成本的原因,Linksys使用Linux作为固件而不是授权费用很高的vXworks。根据GPL条款,据称是哥伦比亚大学法学院教授Eben Moglen向Linksys提出了开源要求,Linksys随即照办,之后在一堆各种hack WRT54G固件中,2004年生长出来了OpenWrt。2005年到2007年,最初的稳定版叫White Russian,之后的Kamikaze延续到2010年,Backfire到2013年,随后Attitude Adjustment发布,而最新版的Barrier Breaker也已经在持续开发中,据称将很快发布。它的前身的前身,是UNIX,一步步发展过来,慢慢觉醒……是不是有种“天网”要粗线的感觉! OpenWRT用途历史先放一边,小编也说了,我们更关心的是它能做什么。怎么说呢,提起它,或许大家可能还有点陌生,但提起它的兄弟Android来,大概无人不知了吧。作为对比:“OpenWrt具有比肩桌面级Linux和现代移动操作系统(Android)的用户体验,完全回避了传统嵌入式Linux的磨叽和枯燥,使一个小小的路由器真正成为完整的、现代的、开放的计算系统,降低了入门门槛,产生了大量非嵌入式专业的爱好者群体。OpenWrt框架的奠定者们和广泛的代码贡献者们,在桌面级和现代操作系统的理念下,也使OpenWrt成为嵌入式Linux领域个性十足而广受追捧的佼佼者”。 具体点说,凡是路由器能做到的功能OpenWRT都能做到[市面上路由器除了官方固件,第三方固件中主要有OpenWRT(功能最给力)、TT(稳定性不错)和DD(以“中继”出名些)]。OpenWRT进阶的功能:做USB摄像头、挂载移动硬盘/U盘、BT下载、3G上网卡(好吧,这点官方固件也勉强可行了)、单号多拨(这点是否有效要看当地ISP)、绑定域名远程控制、Samba/DLNA家庭NAS共享、私有云同步、FTP、个人网站/服务器等; 高阶的玩法,可改出口IP(你懂的吧,想想出门在外,有个带此功能的便携路由 感兴趣,想要学习一下的话,先从简单的学起吧,这就需要有个硬件载体。所以我请了件小神器回家,本文主角终于登场啦!它的全名是TP-Link WR720N。为什么称为“神器”?因为我也不知道它具体能干什么 开玩笑的啦,选它,是基于这几点考虑: 1.价格还行,不算离谱(一般电商价格为120元左右,包邮哦); ![]()
TP-LINK TL-WR720N 150M迷你型3G无线路由器 白色
价格¥115亚马逊中国
2.体积相对小巧; 3.接口相对丰富; 4.获得OpenWRT支持较好(它的兄弟703N的固件更是满天飞); 5.可刷不死uboot,走TTL; 因为笔者没有电烙铁、备用闪存、TTL转接线、编程器等(我就是不说自己动手能力为0,哼),所以到大X宝淘了个现成的打过鸡血的720N(16M flash + 64M Ram + 不死uboot)。
如果不满意,想选别的,建议先参考一下OpenWRT的硬件支持列表wiki.openwrt。另外,为什么不选703N呢,因为我嫌它接口少了点。当然,也有高手给它加LAN口、USB口什么的,这种加胳膊加腿的改法,太彪悍了。至于710N呢,那个USB口原厂的只是个摆设,只能做充电接口,虽说能刷OpenWRT,但跟USB有关的啥事儿都做不了,那还折腾个P啊,也听说有高手给它做芯片级改造,让它的USB口活起来,这种改法,在我看来和换心手术差不多了,太凶残,真是改到它妈都认不出来了。 再友情提醒一下,TP-Link的好基友叫水星(都是一个总公司的吧),选水星对应的型号,可以更便宜实惠些(回来改个固件头文件就行)。 好,选硬件的经验分享到此。接下来说软件部分。因为相关教程很多,如果仅仅是进行些复制编辑工作的话,一是原创性太差,二是可能会无意中侵权,……但,太简单了,恐怕也不行(小鞭:你懂的……),所以我这里采摘些帖子内容,提供下大体的思路和一些贴士,供交流分享。(我尽量注明帖子出处,但有些已不知从何处复制的了,因此如有侵权之处,请回复说明;另,编译openwrt一文主体在www..cn首发,特此说明)
1.几大Linux系统系统都行。建议选主流的。因为Ubuntu的教程多,就选它吧(下载Ubuntu的地方:http://www./download)。 很多教程都建议选32位的系统,我的个人经验是选64位的没有问题!(不必服务器版,个人版就行了,它自带中文,另有个中文麒麟版,不知区别 很多教程都建议实体机安装系统,我的个人经验是选虚拟机没有问题! (本人运行虚拟机的实体机是N年前的惠普商务小本 HP 4321s,费了半天劲,才把内存升级到4G……各位不用担心自己的硬件不够了吧,记得把CPU的虚拟化技术打开来)。 虚拟机安装Ubuntu不像装黑苹果,此过程无特别之处,用推荐项一路默认“下一步”即可,又是图形安装,又是中文,如有困难,建议别玩OpenWRT了。 教程中特别提到,安装过程中某一步设置用户名密码时,可选择自动登录,因为懒得每次都输密码登录,而且反正只是编译用的系统又没什么秘密。 小结:硬件上保证至少4G内存,CPU虚拟化技术打开,然后安装虚拟机(VMware Workstation较好些,和谐一下),使用从Ubuntu官网下的64位版,给它预留一般推荐至少20G的空间。 2.安装好后,在左面左边找到“系统设置”“屏幕”选项把“定时关闭”改成“从不”把锁定“关闭”在左上角“主面板”菜单的“搜索”中输入“te”找到“终端”拖至桌面(或者同时按住Ctrl+Alt+T,调出终端),省去以后再找的过程,这个窗口是没有“应用”或“确定”之类的,直接关闭它就会保存。用惯WINDOWS的用户注意了。为什么要做这步呢?因为整个编译过程中有些步骤要等一段时间的,老是自动启用屏幕保护程序,然后还要重新输密码才能退出,也是麻烦事。 3.打开桌面上的“终端”进入命令模式然后输入sudo –sH(也有人说是输入sudo -s),注意大小写和空格,然后输入装系统时设置的用户密码,就能切换到root(提示:输入密码的时候不会有*之类的显示的,是完全不显示,部分人不必惊慌)。切换到root是为了安装或升级部分必要的组件,有些组件需要root权限。 注:如果你使用此方法切换root权限失败(提示sudo:-sh command no found)你使用以下命令 sudopasswd root ******(输入原先的root口令) ******(输入新的root口令,可以保持原样。我就保持的原样) ******(再次输入新的root口令) su root 就切换到root权限了 4.切到root后顺序输入(或者不切到root,在下面命令前均加个“sudo ”) apt-get update apt-get install gcc apt-get install g++ apt-get install binutils apt-get install patch apt-get install bzip2 apt-get install flex apt-get install bison apt-get install make apt-get install autoconf apt-get install gettext apt-get install texinfo apt-get install unzip apt-get install sharutils apt-get install subversion apt-get install libncurses5-dev apt-get install ncurses-term apt-get install zlib1g-dev apt-get install subversion #好像所有的教程在此处都是重复安装了这条,不知何意,我没重复安装,似乎没事# apt-get install git-core apt-get install gawk apt-get install libz-dev apt-get install asciidoc 为了方便,可以在命令的最后面加上“ -y”参数来自动回答,也可以合起来用一行命令来执行: apt-get install gcc g++ binutils patchbzip2 flex bison make autoconf gettext texinfo unzip sharutils subversionlibncurses5-dev ncurses-term zlib1g-dev subversion git-core gawk libz-devasciidoc –y 还有的教程加了如下内容,应该是多多益善,没什么害处吧: apt-get install sphinxsearch apt-get install libtool apt-get install sphinx-common apt-get install libssl-dev apt-get install libsqlite3* apt-get install intltool apt-get install libiconv* apt-getinstall gstreamer-0.10* apt-get install glib2.0 apt-get install libxml2-dev apt-get install qemu *64位系统需安装ia32-libs (←这条已过时) 编译以上需下载的东西较多,建议选择国内的源进行。 每一行回车后都会马上检测安装或升级那个组件,官方WIKI用的是单一条命令。分开的好处是可以更容易查看每一个组件的安装是否成功。一行命令的话,一大堆东西连续出来,懒得拖滚动条回头看了。当中最后面的asciidoc组件是需要下载400多MB东西的,慢慢等了。下载东西之前会有提示本次要下载多少M的东西,问是否的,按y然后回车让它下载就行了。提示,假如它提示找不到软件包的话,那麻烦你再看清楚命令中的软件名名称,因为有时是字母中间冒个数字1出来之类的,很容易错看成字母L。 小结:输入命令时,不仅要注意大小写,还要注意是否有空格;安装库和依赖,我的体会:(1)基本上是多多益善;(2)不用担心重复安装,系统会自动识别的;(3)有教程说64位系统需安装ia32-libs,其实这个库已过时了;(4)教程中的“*”,你也照着打就行,并非注释;(5)所有教程中,“subversion”都是装2遍,不知为何,反正我就装了一遍,也没出问题;(6)没必要单条命令的一个个打,直接复制整条安装命令就行,即使出错也不用管,后面报错或缺什么库,到时再补上就行。 5.上述安装完成后,这一步很重要,就是执行Exit命令退出root。如果不退出root的话,那后面会出现晕人的情况。下一步是下载源码,以root身份下载源码后,在后续操作中有些会提示不能以root身份操作,但源码已经以root身份下载了,所有文件的“所有者”都是root,退出root后再操作,又会提示没有权限,因为文件是root的,普通用户无法访问,结果只能用命令修改文件所有者,比较麻烦。所以这里就要退出root,以普通用户身份执行下面的下载源码命令。其实一开始安装组件的时候可以在命令前加上sudo来达到临时用root身份,执行完后又回到普通权限的目的,但对于新手来说,不必过于追求这些了,有个可行的方法就凑合着先用吧。 6.安装SSH。网上有个教程是说用“apt-getinstall ssh”,我试了下,似乎不太灵光。改用另一教程的“apt-get install openssh-server”,没问题了,然后按那教程记录下本机IP,备用。 7.把WinSCP装好。这个软件非常有用,要装的。另外,PuTTY可说是它的配套软件,一起装吧。 贴士:这两个软件都是绿色软件,建议从官网下载,二者放在一起,调用PuTTY时用相对位置方便些。连接主机和虚拟机中的Ubuntu,就用之前记录的IP即可,可能出现的问题是中文乱码,记得在WinSCP中把UTF-8支持打开并保存就行。
下述代码即举例说明了通过svn从brandkfire获得backfire源代码(此版本意思是从trunk分支的补丁也在backfire版本中了,即包含修复补丁): mkdir OpenWrt/ (先创建文件夹;省事点的话,文件夹的名称均用小写字母即可) cd OpenWrt/ svn co svn://svn./openwrt/branches/backfire/(回车后等待下载;co就是checkout) 注解: 上述svn命令将在当前目录创建一个 OpenWrt/backfire/ 子目录,此目录包含此命令获取到的源代码。您也可以通过下述命令,下载不含修复补丁的backfire的原版源码: svn cosvn://svn./openwrt/tags/backfire_10.03 使用开发版源代码 当前的开发版本分支(trunk)已包含最新的实验补丁。此分支或许还突破了Openwrt原来所不支持的硬件设备的限制哦,惊喜的同时也有风险存在。因此,编译trunk版,慎之~ mkdir OpenWrt/ cd OpenWrt/ svn co svn://svn./openwrt/trunk/ (回车后等待下载) 9.我选择了trunk,所以要给trunk目录添加权限 sudo chmod –R 777 trunk 10.开始准备编译cd openwrt/trunk或者cd openwrt/backfire 如果不是刚下载的代码,为了保持代码为最新状态,应该定期运行svn up更新代码,什么时候有变你是不知道的。 分别更新最新源码、安装最新源码、更新版本号的操作如下: ./scripts/feeds update –a ./scripts/feeds install –a svn up 如果不更新软件包的话,你会发现后面是看不到很多软件包的,也就无法集成那些看不到的包了。然后是make defconfig (若defconfig回显提示缺少软件包或编译库等依赖,则按提示安装所缺软件包或库等即可,不难的,细心点就行) 再make menuconfig进入定制界面,慢慢选了,里面可选只编译指定设备的固件,一定要注意选对自己的设备类型,然后可以指定该类型下的具体哪一款。有些软件包你装官网版本后要另外装的,你见到了,就可以选上让它集成,要让它前面括号里出现*才表示集成[空格键是选择(在选项框下按空格键,*号是编译进固件,M是编译但是不编译进固件)]。 配置完成后退出(按两次“esc”键退出配置菜单界面),提示是否保存,当然要按Yes,表示把当前编译设置保存下来,或在主菜单最底部“Save Configuration to an Alternate File”命令保存一下你的设置,可以自定义文件名,以方便以后调用。 自定义路由器的默认设置,可进入编译目录/trunk/package/base-file/files/etc/config,修改里面的配置文件,一般可以不用定义。 如果你想修改源码,应该在此时进行,比如支持大容量Flash之类的修改,自己上网查到修改什么文件什么地方后,就在Ubuntu图形界面上进去找到文件,双击打开文本编辑器修改保存。
Target Profile——选择编译路由型号 Package selection(软件包选择)Buildsystem settings (编译系统设置) Kernelmodules (内核模块) 添加功能时尽量依靠依赖包,比如添加ddns时,只需要在luci选项里面选择luci-app-ddns,编译管理器会自动加上ddns-scripts及其他依赖库文件。
11.最后就执行make正式开始编译。首次编译必然是漫长的等待。如果是双核CPU,为加快速度,有教程说使用Make –j 2命令,也有教程说是使用Make j=3命令,也有人说首次编译最好不要加参数。 实测:双核CPU,执行如下命令没有问题 make j=3 V=99 贴士:(1)笔记本中的电源设置要改一下,免得它“睡眠”或关闭硬盘了。(2)编译需要用到的DL文件夹,网上有提供下载,可解压后用winscp上传到trunk目录。我对这种文件的时效性有所怀疑,而且实际体会,确实只在首次编译时用时较多,第2次开始,就快很多了(约半小时左右吧,没看表)。所以网上的该类DL文件可不用下载。(3)我首次编译失败的原因,从页面提示是断网造成的……我还怀疑这怀疑那的,总之,后来保证网络不断,就成功了。 12.编译完成。编译完成后的固件会出现在/openwrt/trunk/bin目录下面(重要的是3个:*factory.bin、*tftp.bin和*sysupgrade.bin),可用WinSCP登陆上去提取(甚至用Firefox上网进邮箱都能传出)。然后再清除之前的编译作业 make clean 恢复默认编译环境 make defconfig 这两步操作完成后,就可以重新编译了。 命令贴士: [openwrt@localhost trunk]$make clean #清除(删除bin和build_dir内容) [openwrt@localhost trunk]$make dirclean #清除目录[除了删除bin和build_dir内容,并且包含staging_dir(交叉编译工具)和toolchain(跨平台编译的工具,即工具链),dirclean是基本的清除指令] [openwrt@localhost trunk]$make distclean #清除编译(清除所有相关的东西,包括下载的软件包,配置文件,feed内容等,不建议使用) 对于更新feeds后出现的错误: ERROR:please fixpackage/feeds/packages/mc/Makefile 等类似的问题,需要执行这条语句进行系统的清理 13.DIY固件功能。上述简单编译测试通过后,就可以尽情的DIY了。LZ正在挑选“功能插件”中…… (上表仅供参考,错漏难免;不清楚什么功能的,很可能你就不需要它) 记得完成第12中的两条命令“make clean 和 make defconfig ”后,再回到第10条开始重新编译。等软件包选配、编译好后,生成的bin,就可以拿去喜刷刷、喜刷刷啦! 14.刷机。难点在前面,刷机真是太容易了,Web界面,找到固件升级处的按键就行,不需要教程的吧?最重要的是提醒一下,如未做好准备,请勿刷机,以免变砖。防砖准备包括如下几种:TTL引线、编程器、uboot…… 各机型刷固件方法可能会不太一样。总体上,如在官方固件状态,就刷*factory.bin结尾的固件;如在第三方固件状态,就刷*sysupgrade.bin结尾的固件;还可选择在uboot的web界面刷。
即使有uboot护体,也要小心有的固件会刷新uboot。为避免这种情况,一是用去uboot的固件,二是通过uboot界面刷固件比较安全些(有的uboot可检测避免刷uboot部分)。各uboot的登陆方法也小有不同,看你刷的uboot的作者说明吧。[比如我这个Uboot(高手在此),登陆方法: 把路由器(WAN口或LAN口)通过网线连上电脑,电脑IP设为192.168.1.2,子网255.255.255.0,网关、DNS为空就行。 给720N路由器通电,看指示灯亮了约2、3秒后熄了,此时,迅速、轻轻地用针插住reset孔,约3、4秒,可见指示灯飞快地闪动约2、3秒,又熄了,这时就可拿开针。 再用高版本的浏览器打开192.168.1.1,就能见到uboot的Web界面了] 15.尾声:虽然本篇的经验不是很多,但LZ还是折腾了不少日子,比较了很多参考教程写出来的。如果不是对OpenWRT有兴趣,真不用折腾了,DIY的时代似乎过去了。即使折腾,我看也比较适合单身狗,像LZ这样,在电脑前呆的时间长些,LD就会来关心慰问:“侬在搞萨飞机?”(此处声音已做马塞克处理),LZ总是尴尬、羞愧、无言以对……我想,这也是玩OpenWRT的一条重要经验吧,跟大家分享一下。 |
|