小编注:此篇文章来自#原创新人#活动,成功参与活动将获得额外50金币奖励。

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(你懂的吧,想想出门在外,有个带此功能的便携路由
)、阻止DNS污染(还有反过来的玩法)、做编程器、智能机器人的“大脑”(吸取上次投稿失败的经验,不该写的一律不写,嘿嘿)……OpenWrt社区的组织者Gregers Petersen在一次采访中提到,“除了传统的路由器用途,在智能家居主控设备、机器人、飞行器、工业控制设备、voIP设备等很多领域,都有爱好者和商业项目在使用OpenWrt,甚至有爱好者已经完整移植了Android系统并且真正打通了电话。而嫁接到OpenWrt上的Arduino Yun,使大家意识到Linux与物理世界交互一种非常简单的可能性,这赋予了OpenWrt更大的想象空间。在新型智能设备和机器人的热潮中,OpenWrt的价值也越来越得到人们的重视。相比Android系统,OpenWrt被认为是更加适应智能设备和机器人的平台,其直接的原生二进制代码具有更高的计算效率”。
感兴趣,想要学习一下的话,先从简单的学起吧,这就需要有个硬件载体。所以我请了件小神器回家,本文主角终于登场啦!它的全名是TP-Link WR720N。为什么称为“神器”?因为我也不知道它具体能干什么
开玩笑的啦,选它,是基于这几点考虑:
1.价格还行,不算离谱(一般电商价格为120元左右,包邮哦);
[商品:TP-LINK TL-WR720N 150M迷你型3G无线路由器 白色]
2.体积相对小巧;
3.接口相对丰富;
4.获得OpenWRT支持较好(它的兄弟703N的固件更是满天飞);
5.可刷不死uboot,走TTL;
因为笔者没有电烙铁、备用闪存、TTL转接线、编程器等(我就是不说自己动手能力为0,哼),所以到大X宝淘了个现成的打过鸡血的720N(16M flash + 64M Ram + 不死uboot)。
看得出来这是全新的吧!
麻雀虽小五脏俱全
官方的切换拨片,在刷OpenWRT后,会变成啥效果呢?
如果不满意,想选别的,建议先参考一下OpenWRT的硬件支持列表wiki.openwrt。另外,为什么不选703N呢,因为我嫌它接口少了点。当然,也有高手给它加LAN口、USB口什么的,这种加胳膊加腿的改法,太彪悍了。至于710N呢,那个USB口原厂的只是个摆设,只能做充电接口,虽说能刷OpenWRT,但跟USB有关的啥事儿都做不了,那还折腾个P啊,也听说有高手给它做芯片级改造,让它的USB口活起来,这种改法,在我看来和换心手术差不多了,太凶残,真是改到它妈都认不出来了。
所以我选720N,打打鸡血就够啦。
再友情提醒一下,TP-Link的好基友叫水星(都是一个总公司的吧),选水星对应的型号,可以更便宜实惠些(回来改个固件头文件就行)。
好,选硬件的经验分享到此。接下来说软件部分。因为相关教程很多,如果仅仅是进行些复制编辑工作的话,一是原创性太差,二是可能会无意中侵权,……但,太简单了,恐怕也不行(小鞭:你懂的……),所以我这里采摘些帖子内容,提供下大体的思路和一些贴士,供交流分享。(我尽量注明帖子出处,但有些已不知从何处复制的了,因此如有侵权之处,请回复说明;另,编译openwrt一文主体在www.openwrt.org.cn首发,特此说明)
1.几大Linux系统系统都行。建议选主流的。因为Ubuntu的教程多,就选它吧(下载Ubuntu的地方:http://www.ubuntu.org.cn/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。
Ubuntu的一个典型工作环境
小结:输入命令时,不仅要注意大小写,还要注意是否有空格;安装库和依赖,我的体会:(1)基本上是多多益善;(2)不用担心重复安装,系统会自动识别的;(3)有教程说64位系统需安装ia32-libs,其实这个库已过时了;(4)教程中的“*”,你也照着打就行,并非注释;(5)所有教程中,“subversion”都是装2遍,不知为何,反正我就装了一遍,也没出问题;(6)没必要单条命令的一个个打,直接复制整条安装命令就行,即使出错也不用管,后面报错或缺什么库,到时再补上就行。
5.上述安装完成后,这一步很重要,就是执行Exit命令退出root。如果不退出root的话,那后面会出现晕人的情况。