关于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界面了]
uboot的web界面
15.尾声:虽然本篇的经验不是很多,但LZ还是折腾了不少日子,比较了很多参考教程写出来的。如果不是对OpenWRT有兴趣,真不用折腾了,DIY的时代似乎过去了。即使折腾,我看也比较适合单身狗,像LZ这样,在电脑前呆的时间长些,LD就会来关心慰问:“侬在搞萨飞机?”(此处声音已做马塞克处理),LZ总是尴尬、羞愧、无言以对……我想,这也是玩OpenWRT的一条重要经验吧,跟大家分享一下。