小神器入手:迈入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(你懂的吧,想想出门在外,有个带此功能的便携路由
)、阻止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的地方:https://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。
小结:输入命令时,不仅要注意大小写,还要注意是否有空格;安装库和依赖,我的体会:(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支持打开并保存就行。
箭头显示设置为相对位置
打开UTF-8,并保存8.来到这里,操作系统部分完全准备好了,建议如果用虚拟机的朋友先做一个快照,后面编译部分出了问题大不了恢复快照重新来过。关于Openwrt的源代码下载,途径有二,一是通过 subversion ,一是通过 git,建议使用 subversion(SVN) ,因为Openwrt主要以 svn 来维护Openwrt系统的版本。另外,请注意Openwrt中不同的分支版本,一种是最新版但不是最稳定,也就是trunk版,一种是相对稳定版,backfire版。
下述代码即举例说明了通过svn从brandkfire获得backfire源代码(此版本意思是从trunk分支的补丁也在backfire版本中了,即包含修复补丁):
mkdir OpenWrt/ (先创建文件夹;省事点的话,文件夹的名称均用小写字母即可)
cd OpenWrt/
svn co svn://svn.openwrt.org/openwrt/branches/backfire/(回车后等待下载;co就是checkout)
注解: 上述svn命令将在当前目录创建一个 OpenWrt/backfire/ 子目录,此目录包含此命令获取到的源代码。您也可以通过下述命令,下载不含修复补丁的backfire的原版源码:
svn cosvn://svn.openwrt.org/openwrt/tags/backfire_10.03
使用开发版源代码
当前的开发版本分支(trunk)已包含最新的实验补丁。此分支或许还突破了Openwrt原来所不支持的硬件设备的限制哦,惊喜的同时也有风险存在。因此,编译trunk版,慎之~
mkdir OpenWrt/
cd OpenWrt/
svn co svn://svn.openwrt.org/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 System——选择编译类型(目标系统类型)
Target Profile——选择编译路由型号
Package selection(软件包选择)Buildsystem settings (编译系统设置) Kernelmodules (内核模块)
添加功能时尽量依靠依赖包,比如添加ddns时,只需要在luci选项里面选择luci-app-ddns,编译管理器会自动加上ddns-scripts及其他依赖库文件。
编译管理器主界面
编译管理器进入子界面(此处是LuCI项)贴士:flash非官方默认大小的话(比如720N默认大小是4M),就要用WinSCP登陆,在路径/trunk/tools/firmware-utils/src/mktplinkfw.c这个文件里边有个“fw_max_len”,如果是16m Flash,教程中说是改成fc0000,但参考固件文本和实际测试,应该改成f80000。当然,也可设置让它把默认720N的4M在文件中改成16M也行,但这究竟要改多少个地方,不是太确定。
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界面刷。
第三方固件状态下,点击箭头处刷固件,选*sysupgrade.bin结尾的第三方固件或*.bin结尾的原厂固件
原厂固件状态下,刷固件时选*factory.bin结尾的第三方固件或*.bin结尾的原厂固件
即使有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的一条重要经验吧,跟大家分享一下。





乌云29
校验提示文案
值友6135433485
linux的部分是教用户自己编译固件
普通用户根本是不需要做这些的,只需要去网上找自己型号对应的bin就行
简单类比,android刷机大家都是下载zip包直接刷入的吧
校验提示文案
smilezzz
校验提示文案
dodopig
校验提示文案
happyd
校验提示文案
binarec
校验提示文案
草包
校验提示文案
dreamyer
校验提示文案
值友6135433485
一般比较流行的是hg255d'便宜好用
校验提示文案
宝蓝鲨
校验提示文案
xushuduo
校验提示文案
sleepbeer
校验提示文案
Sin9IE翼
校验提示文案
THINKFLYER
校验提示文案
抛泡龙
校验提示文案
william_chen
校验提示文案
巴小特
校验提示文案
mythos
校验提示文案
rizhi
校验提示文案
求求其
校验提示文案
三少阿龙
校验提示文案
上树的鱼1
校验提示文案
嘉尚
校验提示文案
wovoo
校验提示文案
三石-1983
但是x宝上问了下,720N,都说不能刷openwrt,想问下,只能打鸡血的才能刷么?还是他们说错了。
btw,“大X宝淘了个现成的打过鸡血的720N(16M flash + 64M Ram + 不死uboot)”,这个店铺的链接能给个么
校验提示文案
放羊的老虎
校验提示文案
管爷要努力
校验提示文案
ljun
校验提示文案
shamroc
校验提示文案
joico007
校验提示文案
怯步者
校验提示文案
leondy
校验提示文案
questionlin
校验提示文案
一根麻花
校验提示文案
Repper
校验提示文案
潜龙在渊
校验提示文案
Solo95
校验提示文案
FradSer
校验提示文案
FradSer
校验提示文案
dongzhenye
校验提示文案