回想最初接触openwrt的时候,喜欢在恩山论坛找各种固件来刷机,按照教程一点一点的配置,心里洋溢着满满的成就感。但网上的固件终究是别人做的,大部分都集成了许多多余的功能,不一定适合自己,也没有提供对应内核版本的软件源,用官方的软件源经常出现内核版本不匹配的问题。
既然没有合适的,就自己动手, 丰衣足食吧。自制固件的方法有两种,直接从源代码编译或者使用image builder,后面逐个介绍。
从源码编译
获取源码,先安装git或者svn,然后按照官方教程下载源代码。如果没有特殊要求,直接下载最新的trunk版源码。
安装依赖,按照官方教程安装即可。
更新feeds。openwrt通过feeds来管理package,修改目录下的feeds.conf.default配置文件,取消oldpackage这一行的注释,否则很多软件包找不到。也可以在这里添加额外的软件,例如加上一行
src-git ss https://github.com/madeye/shadowsocks-libev.git
就可以在package列表里加入shadowsocks了。修改后更新feeds获取Makefile
$ ./scripts/feeds update -a
$ ./scripts/feeds install -a
配置编译选项。make menuconfig图形化的界面,选择目标平台,路由器型号以及软件包,选中软件包,y集成进,n取消集成,m编译成ipk包但不集成到固件里。按下/可以搜索软件包,快速定位。配置好可以导出,留作以后备用。默认使用.config配置文件。
开始编译。make即可,很多地方写到可以加入-j参数加速编译,但是我的经验是,只要加上-j开启多线程,编译过程就会报错,所以千万不要加-j参数。这个过程中还会下载软件包,部分软件包可能被墙,最好通过代理下载。
报错的处理。出错后再次执行make V=s看报错信息,根据报错信息处理,例如,有次编译到pdnsd时报错,大概是说,git无法从远程仓库获取内容,查看package/feeds/oldpackages/pdnsd/Makefile,修改一行
PKG_SOURCE_URL:=git://gitorious.org/pdnsd/pdnsd.git
改成
PKG_SOURCE_URL:=https://gitorious.org/pdnsd/pdnsd.git
默认的ssh登陆方式可能出问题了,改成https就可以了。
自定义固件。package文件夹里的软件包的配置文件就可以更改固件的默认配置。
默认开启无线的方法
package/mac80211/files/lib/wifi/mac80211.sh修改一行
option disabled 0
常用的目录
package/base-files/files/etc
package/base-files/files/etc/confit/network
但是每次openwrt源码更新都会覆盖配置文件,所以最佳实践是,先刷好基础的固件,把配置文件拷出来,放到openwrt根目录下的files文件夹里,编译时会自动打包到固件里。隔一段时间git pull获取最新的源码,直接make编译,可以一直用上最新的固件,减少折腾。
使用image builder快速定制
编译一次固件至少需要1个小时,再次编译就快了,但是编译的过程实际上是挺折腾的。openwrt官网提供了image builder可以无需编译制作自己想要的固件,但前提是你的路由器被openwrt官方支持。根据自己路由器的平台选择image builder,下载后解压,在其根目录执行执行下面的命令可以制作固件。
make image PROFILE=WNDR3800 PACKAGES="shadowsocks-libev" FILES=files
解释下参数,PROFILE 是自己路由器对应的配置名称,通过make info查看可用的PROFILE。PACKAGES是希望添加到固件里的软件包,注意包依赖关系。FILES是打包到固件里的配置文件的目录。可以把命令写到脚本里,定期下载最新的image builder,运行脚本生成固件。生成的固件在bin目录。
想加入新的软件包,可以把包直接放到package文件夹里,在PACKAGES里加入包名
总结
使用image builder简单实用,是首选方法,但是如果自带的package里面没有需要的包,或者路由器不被openwrt官方支持,就只能通过源代码编译了。但是不论使用哪种方法,最重要的是把自己的配置文件备份出来直接集成到固件里,刷机即用,养成经常备份的好习惯!
参考链接
编译个性化的openwrt固件
官方文档
回想最初接触openwrt的时候,喜欢在恩山论坛找各种固件来刷机,按照教程一点一点的配置,心里洋溢着满满的成就感。但网上的固件终究是别人做的,大部分都集成了许多多余的功能,不一定适合自己,也没有提供对应内核版本的软件源,用官方的软件源经常出现内核版本不匹配的问题。
本文章由作者:佐须之男 整理编辑,原文地址: 定制openwrt固件心得