‘壹’ 如何编译OpenWrt
Openwrt 官方正式的发行版是已编译好了的映像文件(后缀名bin或trx、trx2),此映像文件可从Openwrt官方网站的下载页面中轻松获取到,连接地址为 OpenWrt官方网站。这些编译好的映像文件是基于默认的配置设置,且只针对受支持的平台或设备的。因此,为什么要打造一个自己的映像文件,理由有以下四点:
您想拥有一个个性化的配置OpenWrt(彰显个性,在朋友圈子里显摆显摆,开个玩笑);
您想在实验性的平台上测试OpenWrt;
您参与测试或参与开发OpenWrt的工作;
或者,最简单的目的就是为了保持自己的Openwrt为最新版本;
若想实现上述目的,其实很简单,按下述文字即可成功编译出一个您的Openwrt来。
准备工作
在开始编译Openwrt之前需要您做些准备工作;与其他编译过程一样,类似的编译工具和编译环境是必不可少的:
一个构建OpenWrt映像的系统平台,简单说就是准备一个操作系统(比如Ubuntu、Debian等);
确保安装了所需的依赖关系库, (在debian系统中就是安装各种需要的软件包)
OpenWrt源代码副本
首先, 开机登陆到支持编译Openwrt的操作系统(废话了)。实体机或者虚拟机(Vmware 或者 Qemu)里的操作系统都行,这里推荐使用Linux系统。 bsd和mac osx系统也可以编,但不推荐,且未验证是否可编译成功。下文假定您使用的是Debian操作系统,使用 apt-get 来管理包. 替代的选择是 Ubuntu (分支 Kubuntu, Xubuntu 等即可)。
第二步, 就是安装所需要的各种软件包, 包括编译器,解压工具,特定的库等. 这些工作可以简单的通过键入以下命令 (通常需要root 或者是 sudo 权限),以root权限安装下列软件包(可能并不完整,会有提示,提示缺少即装就可以了):
32位(x86)请执行下列命令:
# apt-get install build-essential asciidoc binutils bzip2 gawk gettext \
git libncurses5-dev libz-dev patch unzip zlib1g-dev
64位(x86_64)请执行下列命令(多装了哪些库或软件包呢?请您仔细看一看哦):
# apt-get install build-essential asciidoc binutils bzip2 gawk gettext \
git libncurses5-dev libz-dev patch unzip zlib1g-dev ia32-libs \
lib32gcc1 libc6-dev-i386
参考 本列表中 所列的编译环境所需要软件包或库。
某些依赖的为库或软件包也许操作系统中已经安装过,此时apt-get会作出提示(提示您忽略或重新安装的),别紧张,放轻松些,编译Openwrt不会像编译DD-WRT那样难的(至少本人是体会到了编译DD-WRT的难)。
最后下载一份完整的 Openwrt 源码到编译环境中。关于Openwrt的源代码下载,途径有二,一是通过 svn ,一是通过 git,建议使用 svn ,因为Openwrt主要以 svn 来维护Openwrt系统的版本。另外,请注意Openwrt中不同的分支版本,一个是用得较多的开发快照,俗称 trunk,二是稳定版,俗称 backfire。
安装Subversion
若你想通过svn下载源代码,你需安装 Subversion。Subversion,或称SVN, 是OpenWrt的project中用来控制版本的系统,它非常类似的 CVS的界面和使用条款。 执行下述命令即可安装SVN,很容易的:
# apt-get install subversion
Subversion安装完毕,通过SVN命令可获取得到一份OpenWrt纯净源代码。您还得创建一个目录以便存放获取得到的Openwrt源代码,要获取源代码你还得输入subversion命令来获取 (svn里这种操作称之为'check out') 。命令很简单的,继续看下去就能见到了,别着急,耐心点儿。
编译流程
编译专属于您的设备的特定Openwrt固件以一下五个步骤:
通过Subversion命令获得源代码;
更新(或安装) package feeds〔package feeds无法确切翻译,待译吧);
创建一个默认配置以检查编译环境是否搭建好了 (假如需要的话);
用Menuconfig来配置即将编译生成的固件映像文件的配置项;
最后开始编译固件;
下载源代码
最后,下载一份完整的OpenWrt源代码。你可选择:
下载稳定发行版,或
下载开发版 (俗称"trunk"版)。
使用发行版的源码
截止本文时, Openwrt公开发行的稳定版为 OpenWrt 10.03 "backfire"。此版本是最稳定的,但也许不包括最新更新的补丁或最新编写的出的新功能。
下述代码即举例说明了通过svn从brandkfire获得backfire源代码(此版本意思是从trunk分支的补丁也在backfire版本中了,即包含修复补丁):
# mkdir OpenWrt/
# cd OpenWrt/
# svn co svn://svn.openwrt.org/openwrt/branches/backfire
注解: 上述svn命令将在当前目录创建一个 OpenWrt/backfire/ 子目录,此目录包含此命令获取到的源代码。
您也可以通过下述命令,下载不含修复补丁的backfire的原版源码:
# svn co svn://svn.openwrt.org/openwrt/tags/backfire_10.03
使用开发版源代码
当前的开发版本分支(trunk)已包含最新的实验补丁。此分支或许还突破了Openwrt原来所不支持的硬件设备的限制哦,惊喜的同时也有风险存在。因此,编译trunk版,慎之~
# mkdir OpenWrt/
# cd OpenWrt/
# svn co svn://svn.openwrt.org/openwrt/trunk/
跟进并更新源代码
因Openwrt的源代码随时都会变动,故此命令将确保您所获取得到的源码的最新性。下述假设您用的是backfire版本的源码:
## Here, backfire is the directory name of the current release branch you're tracking
# cd OpenWrt/backfire/
# svn up
'svn up' 命令用于更新SVN上更新了,但本地尚未更新的这部分源代码(本人实践证明此命令会将本地源码与SVN上的源码先比较,若SVN有更新才会下载更新的部分,很实用的一个命令)。如果未指定目标路径,则此命令将更新当前目录及当前目录的子目录内的源码。
Feeds下载
Feeds即为包含到你的OpenWrt环境中的额外软件包的索引之类的。(feed译名很多,莫衷一是,至2008年底为止,还没有一个十分通用而备受认可的中文译名;所以此文当中我们用英文feed来称呼)。 最主要的Feeds有以下三个:
'packages' - 路由的基本功能,
'LuCI' - OpenWrt默认的GUI(WEB管理界面), 及
'Xwrt' - 其他的GUI。
一般情况,你至少需要含 'packages' 和 'LuCI'两个Feeds。
下载完feeds之后, (为编译OpenWrt的recipies额外的预定义包) 您可以检查哪些feeds要包括在内。编辑在你的编译环境的根目录下的'feeds.conf.default'文件。
然后使用下列命令开始下载(注:可能你需要先运行cd trunk进入trunk目录才能成功执行下列命令):
# ./scripts/feeds update -a
在此之后,下载的软件包需要安装。亦即指的下边的命令啦。若路过下边的install命令则后续make menuconfig将无法成功执行!(注:可能你需要先运行cd trunk进入trunk目录才能成功执行下列命令):
# ./scripts/feeds install -a
只需编辑Feeds的配置文件或运行更新命令,即可很方便地更新或添加新的实验性的packages到源码中并编译到OpenWrt固件去。
注意:请老坛友及旧的新闻组成员们注意了,这一步取代了创建符号链接symlinks的老办法哦。
更新Feeds
诸如此类源码,你得定期更新Feeds。 通过如上相同的命令:
# ./scripts/feeds update -a
# ./scripts/feeds install -a
注意:若你清楚地知道你不需添加新的packages到menuconfig中去,那么你可在更新Feeds时跳过这一步。
生成配置
You may not have to make configration always after updating sources and feeds, but making it ensures that all packages from source and feeds are correctly included in your build configuration.
Defconfig
下一步是检查编译环境,若可进行编译则生成默认配置:
# make defconfig
若defconfig回显提示缺少软件包或编译库等依赖,则按提示安装所缺软件包或库等即可,不难的,细心点就行。
Menuconfig
menuconfig是一个基于文本的工具,它处理选择的目标(需要还是不需要)、编译生成软件包(openwrt下是IPKG格式)以及内核选项(编译成模块还是内核)等等
# make menuconfig
在你离开并保存配置文件(默认都是.config)后,将自动配置依赖关系,让你可以着手编译更新的固件。
大众可通过'menuconfig'这一简单的图形化的配置环境,非常轻松地编译出专属您本人的OpenWrt固件。
可以用'menuconfig',以开发的意图来编译OpenWrt的固件,为自己(个人)创造一个结构简单但是功能强大的环境。(上句实在难翻译,只能意译。并且也请大家都学习下编译OP固件,让以OP固件盈利的人丢掉那肮脏的饭碗!)
Menuconfig或多或少有些难以说明的地方,即使是最专业的配置,也可以寻求帮助并加以解决。 需要你指定何种目标平台,要包含的package软件包和内核模块等均需要你指定,配置标准的过程中会包括修改:
目标平台(即路由器何种架构,BCM呢还是AR均可选择)
选择要包含的package软件包
构建系统设置
内核模块
Target system is selected from the extensive list of supported platforms, with the numerous target profiles – ranging from specific devices to generic profiles, all depending on the particular device at hand. Package selection has the option of either 'selecting all package', which might be un-practical in certain situation, or relying on the default set of packages will be adequate or make an indivial selection. It is here needed to mention that some package combinations might break the build process, so it can take some experimentation before the expected result is reached. Added to this, the OpenWrt developers are themselves only maintaining a smaller set of packages – which includes all default packages – but, the feeds-script makes it very simple to handle a locally maintained set of packages and integrate them in the build-process.
假如你需要LuCI, 要到Administration 菜单里,在LuCI组件的子菜单下, 并选择: luci-admin-core, luci-admin-full, and luci-admin-mini组件包。
假如你不需要PPP,你可到Network菜单下取消对它的选择,以便编译时不包含此组件。
Menuconfig用法: 确保这些组件包是以 '*'星号标记而不是 'M'标记。
如果你是以星号 '*'标记该组件包, 则该组件包将编译进最终生成的OpenWrt固件中。
如果你仅以 'M'标记该组件包, 则该组件包将不会编译进最终生成的OpenWrt固件中。
The final step before the process of compiling the intended image(s) is to exit 'menuconfig' – this also includes the option to save a specific configuration or load an already existing, and pre-configured, version.
Exit and save.
Source Mirrors
The 'Build system settings' include some efficient options for changing package locations which makes it easy to handle a local package set:
Local mirror for source packages
Download folder
In the case of the first option, you simply enter a full URL to the web or ftp server on which the package sources are hosted. Download folder would in the same way be the path to a local folder on the build system (or network). If you have a web/ftp-server hosting the tarballs, the OpenWrt build system will try this one before trying to download from the location(s) mentioned in the Makefiles . Similar if a local 'download folder', residing on the build system, has been specified. The 'Kernel moles' option is required if you need specific (non-standard) drivers and so forth – this would typically be things like moles for USB or particular network interface drivers etc.
编译固件
万事具备,只欠东风,通过下面简单的make命令来编译:
# make
在多核电脑中编译
具有多核CPU处理器的电脑进行编译,使用下述参数可令编译过程加速。 常规用法为 <您cpu处理器的数目 + 1> – 例如使用3进程来编译 (即双核CPU), 命令及参数如下:
# make -j 3
后台编译
若你在这个系统内编译OpenWrt的同时还处理其他,可以让闲置的I/O及CPU来在后台编译固件 (双核CPU):
# ionice -c 3 nice -n 20 make -j 2
编译简单的基本的软件包
当你为OpenWrt开发或打包软件包,编译简单的基本的软件包可以很轻易地编译该软件包 (例如, 软件包cups):
# make package/cups/compile V=99
一个在Feeds里的软件包大约是这样子的:
# make package/feeds/packages/ndyndns/compile V=99
编译错误
如果因某种不知道的原因而编译失败,下面有种简单的方法来得知编译到底错在哪里了:
# make V=99 2>&1 |tee build.log |grep -i error
上述编译命令意为:V99参数,将出错信息保存在build.log,生成输出完整详细的副本(with stdout piped to stderr),只有在屏幕上显示的错误。
举例说明:
# ionice -c 3 nice -n 20 make -j 2 V=99 CONFIG_DEBUG_SECTION_MISMATCH=y 2>&1 \
|tee build.log |egrep -i '(warn|error)'
The above saves a full verbose of the build output (with stdout piped to stderr) in build.log and outputs only warnings and errors while building using only background resources on a al core CPU.
一键编译
即使用脚本来编译Openwrt固件。许多朋友编译Openwrt是用的脚本来编译的
生成的固件在哪
编译成功后所生成的固件文件位于bin目录下,可用如下命令查看:
# cd bin/
# ls */
清理
编译OpneWrt时你可能需要一个清洁干净的编译环境。 以下操作有利用编译工作:
清洁
清洁trunk/ 目录,在编译过程中使用“make clean”命令即可。 此命令将删除bin目录和build_dir目录下的所有文件及文件夹。
## See CAUTION below
# make clean
‘贰’ 如何编译自己的openwrt中文固件
今天路由固件的世界几乎都是linksys WRT54G 开创出来的, 这个型号的固件开源之后,逐渐衍生出来今天的强尽的DDWRT/tomato/openwrt固件。linksys WRT54G 是博通的芯片。 正是因为这个历史原因,DDWRT/tomato/openwrt固件 对博通芯片的支持最好,对其他的芯片比较差, 或者根本不支持其他的芯片。 个人认为,3个固件里面,tomato的用户体验相对最好。但是仅仅支持博通芯片。DDWRT对博通芯片的支持好, 对一些athero也可以,对螃蟹的支持很差。但是DDWRT固件过于陈旧,比 tomato落后很多。openwrt固件可以支持很多芯片,但是用户体验相对最差,但是如果想用好openwrt固件,用户需要自己编译openwrt固件适应各种芯片/功能,或者说用户需要具有独立开发新产品的能力。国内的很多垃圾路由原厂固件就是盗用的openwrt固件,开发的时候把硬件要求降到最低,一旦售出,概不维护。因为没有优秀固件的连续支持,找到螃蟹的好芯有啥意义,难道您想帮螃蟹开发维护固件。用户需要的功能来自于优异的固件。但是目前看来,优秀固件的只支持博通的芯片。难道您的仓库里积压了太多的螃蟹芯片路由,需要用新手上路的第一贴,来论坛打软广告。
‘叁’ nat1会降低延迟吗
设置好了可以降低的。
-网络环境:
我这边的网络环境,电信189套餐一共送了20条宽带。其中1条300M下30M上,1条100M下20M上,还有18条是50M下10M上,一条100M对等的联通,在加上后期拉的2条500M电信对等,所以家里一共是23条宽带,都为公网IP。3个电信光猫,1个联通光猫,若干路由器,交换机。
-CDN节点共享(闲置流量换钱):
早期,我网络环境没这么多,就玩迅雷的红水晶,再到迅雷路由,再到赚钱宝再到玩客云,可以说是一路走来。其中一代赚钱宝和赚钱宝pro挂的最久,后来不赚钱,就卖掉了大部分,玩客云因为网络的限制,留了几台,大部分抢到就是当倒爷。既然宽带这么多条,涉及到多线多拨,铁定上软路由,选爱快,操作简便,分流效果都挺好。既然有这么多闲置的带宽,刚好玩客云出现了现金,买几台试下,加上宽带提速加成,效果不错,于是就买了20几台,赚点小钱,毕竟穷。
-开始出现问题:
没想这玩意是真的能跑,20多台设备上传流量量速率达到了千兆,我用了几年的3215U 4口的软路由,开始不堪重负,100%的干活,也不知道是不是开繁星导致,反正感觉吃不消,但是上网啥的没问题,但是过了一阵子,发现当ap的ac88u,wifi开始不稳,会掉线,然后比较难连上。这让喜欢吃鸡的女王大人无法忍受,显然,挨骂是一定的。一开始以为是86u断流,用排除法,加上acrh17当ap,问题依旧,看来是就是软路由的锅。刚好电信有个500M对等的优惠套餐,果断办理,为了不受千兆端口限制,让电信小哥,再拉一条光纤,此时家里已经有了4个光猫了,电信3个,联通1。4口的软路由端口开始不够用了。宽带太多,很容易达到千兆瓶颈,一个光猫1G的带宽。
-性能不够硬件来凑
刚好同事需要软路由,把3215u出了。手头上还有dq77kb+e3 1265l v2,买个4口网卡当软路由,年少不懂事,上了淘宝买了i350-t4(寨卡)。不过还好用着没问题。这下性能应该不会瓶颈了,然而,wifi有时会连不上的问提依旧,看来是爱快的bug了,但是爱快用了好多年了,好多配置都在里面,如果换固件,调配置,比如ddns,端口转发,分流啥的,就要弄好久。但是wifi的问题不能不解决,刚好在群里看到有人说爱快,当设备跑多了,就会出现这个情况,上个三层交换机就会解决问题。那就上某鱼淘个二手的三层交换机来试试吧。后来看到群里有有人提到nat类型,对提高收益有帮助。于是大致了解了下,给大伙贴下。
-Nat类型
1. Full Cone NAT(简称NAT1):
所有来自同一 个内部Tuple X的请求均被NAT转换至同一个外部Tuple Y,而不管这些请求是不是属于同一个应用或者是多个应用的。除此之外,当X-Y的转换关系建立之后,任意外部主机均可随时将Y中的地址和端口作为目标地址 和目标端口,向内部主机发送UDP报文,由于对外部请求的来源无任何限制,因此这种方式虽然足够简单,但却不那么安全。
2. Restricted Cone NAT(简称NAT2):
它是Full Cone的受限版本:所有来自同一个内部Tuple X的请求均被NAT转换至同一个外部Tuple Y,这与Full Cone相同,但不同的是,只有当内部主机曾经发送过报文给外部主机(假设其IP地址为Z)后,外部主机才能以Y中的信息作为目标地址和目标端口,向内部主机发送UDP请求报文,这意味着,NAT设备只向内转发(目标地址/端口转换)那些来自于当前已知的外部主机的UDP报文,从而保障了外部请求来源的安全性。
3. Port Restricted Cone NAT(简称NAT3):
它是Restricted ConeNAT的进一步受限版。只有当内部主机曾经发送过报文给外部主机(假设其IP地址为Z且端口为P)之后,外部主机才能以Y中的信息作为目标地址和目标端口,向内部主机发送UDP报文,同时,其请求报文的源端口必须为P,这一要求进一步强化了对外部报文请求来源的限制,从而较Restrictd Cone更具安全性。
4. Symmetric NAT(简称NAT4):
这是一种比所有Cone NAT都要更为灵活的转换方式:在Cone NAT中,内部主机的内部Tuple与外部Tuple的转换映射关系是独立于内部主机所发出的UDP报文中的目标地址及端口的,即与目标Tuple无关。
上面是我网络出来,反正只要认为nat1是最好的就行,根据我的经验来说,像爱快,高恪之类的软路由都是nat4,。Lede可以nat1,而平常普通路由拨号的nat类型为3,刷高恪和openwrt就可以做到nat1。当然只要你路由器做了dmz也是可以变成nat1,但是这个只能指定内网的一个主机,你多台的就不行。那nat1对提高收益有帮助吗?对此,我还专门做了测试,拿出矿渣newifi3,编译了对应的openwrt固件,感谢lean大雕的源码,开始挂上,做为期几天的测试,结论是确实可以提高收益,而且对p2p游戏下载啥的也有帮助。
-目前支持nat1固件:
openwrt系列,理论能刷的openwrt都可以
k2p高恪固件,
acrh17也可以刷改版梅林实现full cone(感谢大雕的固件,该有的功能都有。)
梅林固件,目前只有新内核才支持,例如ac86u,ax88u。
‘肆’ 如何编译openwrt固件
朋友你好,想要编译oPEnwrt的固件需要用到编程技术,必须要有很高的计算机技术才可以进行编译
‘伍’ 如何将openwrt ipk包直接编译到固件
如果你只是要编译一个自定义的固件(默认带什么软件,不带什么软件,自定义默认的配置等等),那推荐你用ImageBuilder,简单快速,省心省力 你要是需要自己开发软件包,用OpenWRT的SDK,直接出ipk文件 要完全重写就buildroot
‘陆’ 如何将一个现成的ipk加入到openwrt编译出的固件中
(!文末附加戏写编译OPENWRTTXT内容直接跳至末尾例)
Openwrt 官式发行版已编译映像文件(缀名bin或trx、trx2)映像文件Openwrt官网站载页面轻松获取连接址 OpenWrt官网站些编译映像文件基于默认配置设置且针受支持平台或设备要打造自映像文件理由四点:
您想拥性化配置OpenWrt(彰显性朋友圈显摆显摆玩笑);
您想实验性平台测试OpenWrt;
您参与测试或参与发OpenWrt工作;
或者简单目保持自Openwrt新版本;
若想实现述目其实简单按述文字即功编译您Openwrt
准备工作
始编译Openwrt前需要您做些准备工作;与其编译程类似编译工具编译环境必少:
构建OpenWrt映像系统平台简单说准备操作系统(比Ubuntu、Debian等);
确保安装所需依赖关系库 (debian系统安装各种需要软件包)
OpenWrt源代码副本
首先 机登陆支持编译Openwrt操作系统(废)实体机或者虚拟机(Vmware 或者 Qemu)操作系统都行推荐使用Linux系统 bsdmac osx系统编推荐且未验证否编译功文假定您使用Debian操作系统使用 apt-get 管理包. 替代选择 Ubuntu (支 Kubuntu, Xubuntu 等即)
第二步, 安装所需要各种软件包, 包括编译器,解压工具,特定库等. 些工作简单通键入命令 (通需要root 或者 sudo 权限)root权限安装列软件包(能并完整提示提示缺少即装):
32位(x86)请执行列命令:
# apt-get install build-essential asciidoc binutils bzip2 gawk gettext \
git libncurses5-dev libz-dev patch unzip zlib1g-dev
64位(x86_64)请执行列命令(装哪些库或软件包呢请您仔细看看哦):
# apt-get install build-essential asciidoc binutils bzip2 gawk gettext \
git libncurses5-dev libz-dev patch unzip zlib1g-dev ia32-libs \
lib32gcc1 libc6-dev-i386
参考 本列表 所列编译环境所需要软件包或库
某些依赖库或软件包许操作系统已经安装apt-get作提示(提示您忽略或重新安装)别紧张放轻松些编译Openwrt像编译DD-WRT难(至少本体编译DD-WRT难)
载份完整 Openwrt 源码编译环境关于Openwrt源代码载途径二通 svn 通 git建议使用 svn Openwrt主要 svn 维护Openwrt系统版本另外请注意Openwrt同支版本用较发快照俗称 trunk二稳定版俗称 backfire
安装Subversion
若想通svn载源代码,需安装 SubversionSubversion,或称SVN, OpenWrtproject用控制版本系统,非类似 CVS界面使用条款 执行述命令即安装SVN容易:
# apt-get install subversion
Subversion安装完毕通SVN命令获取份OpenWrt纯净源代码您创建目录便存放获取Openwrt源代码要获取源代码输入subversion命令获取 (svn种操作称'check out') 命令简单继续看能见别着急耐点
编译流程
编译专属于您设备特定Openwrt固件五步骤:
通Subversion命令获源代码;
更新(或安装) package feeds[package feeds确切翻译待译吧);
创建默认配置检查编译环境否搭建 (假需要);
用Menuconfig配置即编译固件映像文件配置项;
始编译固件;
载源代码
载份完整OpenWrt源代码选择:
载稳定发行版或
载发版 (俗称"trunk"版)
使用发行版源码
截止本文, Openwrt公发行稳定版 OpenWrt 10.03 "backfire"版本稳定许包括新更新补丁或新编写新功能
述代码即举例说明通svnbrandkfire获backfire源代码(版本意思trunk支补丁backfire版本即包含修复补丁):
# mkdir OpenWrt/
# cd OpenWrt/
# svn co svn://svn.openwrt.org/openwrt/branches/backfire
注解: 述svn命令前目录创建 OpenWrt/backfire/ 目录目录包含命令获取源代码
您通述命令载含修复补丁backfire原版源码:
# svn co svn://svn.openwrt.org/openwrt/tags/backfire_10.03
使用发版源代码
前发版本支(trunk)已包含新实验补丁支或许突破Openwrt原所支持硬件设备限制哦惊喜同风险存编译trunk版慎~
# mkdir OpenWrt/
# cd OpenWrt/
# svn co svn://svn.openwrt.org/openwrt/trunk/
更详细资料详见:
跟进并更新源代码
Openwrt源代码随都变故命令确保您所获取源码新性述假设您用backfire版本源码:
## Here, backfire is the directory name of the current release branch you're tracking
# cd OpenWrt/backfire/
# svn up
'svn up' 命令用于更新SVN更新本尚未更新部源代码(本实践证明命令本源码与SVN源码先比较若SVN更新才载更新部实用命令)未指定目标路径则命令更新前目录及前目录目录内源码
Feeds载
Feeds即包含OpenWrt环境额外软件包索引类(feed译名莫衷至2008底止没十通用备受认文译名;所文我用英文feed称呼) 主要Feeds三:
'packages' - 路由基本功能,
'LuCI' - OpenWrt默认GUI(WEB管理界面), 及
'Xwrt' - 其GUI
般情况至少需要含 'packages' 'LuCI'两Feeds
载完feeds (编译OpenWrtrecipies额外预定义包) 您检查哪些feeds要包括内编辑编译环境根目录'feeds.conf.default'文件
使用列命令始载(注:能需要先运行cd trunk进入trunk目录才能功执行列命令):
# ./scripts/feeds update -a
载软件包需要安装亦即指边命令啦若路边install命令则续make menuconfig功执行(注:能需要先运行cd trunk进入trunk目录才能功执行列命令):
# ./scripts/feeds install -a
需编辑Feeds配置文件或运行更新命令即便更新或添加新实验性packages源码并编译OpenWrt固件
注意:请坛友及旧新闻组员注意步取代创建符号链接symlinks办哦
更新Feeds
诸类源码,定期更新Feeds 通相同命令:
# ./scripts/feeds update -a
# ./scripts/feeds install -a
注意:若清楚知道需添加新packagesmenuconfig更新Feeds跳步
配置
You may not have to make configration always after updating sources and feeds, but making it ensures that all packages from source and feeds are correctly included in your build configuration.
Defconfig
步检查编译环境若进行编译则默认配置:
# make defconfig
若defconfig显提示缺少软件包或编译库等依赖则按提示安装所缺软件包或库等即难细点行
Menuconfig
menuconfig基于文本工具处理选择目标(需要需要)、编译软件包(openwrtIPKG格式)及内核选项(编译模块内核)等等
# make menuconfig
离并保存配置文件(默认都.config)自配置依赖关系让着手编译更新固件
众通'menuconfig'简单图形化配置环境非轻松编译专属您本OpenWrt固件
用'menuconfig'发意图编译OpenWrt固件自()创造结构简单功能强环境(句实难翻译能意译并且请家都习编译OP固件让OP固件盈利丢掉肮脏饭碗)
Menuconfig或或少些难说明即使专业配置寻求帮助并加解决 需要指定何种目标平台要包含package软件包内核模块等均需要指定配置标准程包括修改:
目标平台(即路由器何种架构BCM呢AR均选择)
选择要包含package软件包
构建系统设置
内核模块
Target system is selected from the extensive list of supported platforms, with the numerous target profiles – ranging from specific devices to generic profiles, all depending on the particular device at hand. Package selection has the option of either 'selecting all package', which might be un-practical in certain situation, or relying on the default set of packages will be adequate or make an indivial selection. It is here needed to mention that some package combinations might break the build process, so it can take some experimentation before the expected result is reached. Added to this, the OpenWrt developers are themselves only maintaining a smaller set of packages – which includes all default packages – but, the feeds-script makes it very simple to handle a locally maintained set of packages and integrate them in the build-process.
假需要LuCI, 要Administration 菜单,LuCI组件菜单, 并选择: luci-admin-core, luci-admin-full, and luci-admin-mini组件包
假需要PPP,Network菜单取消选择便编译包含组件
Menuconfig用: 确保些组件包 '*'星号标记 'M'标记
星号 '*'标记该组件包, 则该组件包编译进终OpenWrt固件
仅 'M'标记该组件包, 则该组件包编译进终OpenWrt固件
The final step before the process of compiling the intended image(s) is to exit 'menuconfig' – this also includes the option to save a specific configuration or load an already existing, and pre-configured, version.
Exit and save.
Source Mirrors
The 'Build system settings' include some efficient options for changing package locations which makes it easy to handle a local package set:
Local mirror for source packages
Download folder
In the case of the first option, you simply enter a full URL to the web or ftp server on which the package sources are hosted. Download folder would in the same way be the path to a local folder on the build system (or network). If you have a web/ftp-server hosting the tarballs, the OpenWrt build system will try this one before trying to download from the location(s) mentioned in the Makefiles . Similar if a local 'download folder', residing on the build system, has been specified. The 'Kernel moles' option is required if you need specific (non-standard) drivers and so forth – this would typically be things like moles for USB or particular network interface drivers etc.
编译固件
万事具备欠东风,通面简单make命令编译:
# make
核电脑编译
具核CPU处理器电脑进行编译使用述参数令编译程加速 规用 – 例使用3进程编译 (即双核CPU), 命令及参数:
# make -j 3
台编译
若系统内编译OpenWrt同处理其让闲置I/O及CPU台编译固件 (双核CPU):
# ionice -c 3 nice -n 20 make -j 2
编译简单基本软件包
OpenWrt发或打包软件包,编译简单基本软件包轻易编译该软件包 (例 软件包cups):
# make package/cups/compile V=99
Feeds软件包约:
# make package/feeds/packages/ndyndns/compile V=99
编译错误
某种知道原编译失败,面种简单知编译底错哪:
# make V=99 2>&1 |tee build.log |grep -i error
述编译命令意:V99参数错信息保存build.log输完整详细副本(with stdout piped to stderr)屏幕显示错误
举例说明:
# ionice -c 3 nice -n 20 make -j 2 V=99 CONFIG_DEBUG_SECTION_MISMATCH=y 2>&1 \
|tee build.log |egrep -i '(warn|error)'
The above saves a full verbose of the build output (with stdout piped to stderr) in build.log and outputs only warnings and errors while building using only background resources on a al core CPU.
‘柒’ openwrt 编译出来的的固件是在原有路由器固件基础上升级的 还是自己可以替代原有固件
替代,没有那么牛逼可以自动升级原有firmware,也没有那个必要
‘捌’ 如何自制Openwrt固件
编译固件,不难的,我也是小白,自己根据坛里的教程,自己编译的,花点时间就行教程:http://www.right.com.cn/forum/thread-48506-1-2.html
‘玖’ openwrt怎么编译指定的目标版
编译流程
编译专属于您的设备的特定Openwrt固件以一下五个步骤:
通过Subversion命令获得源代码;
更新(或安装) package feeds[package feeds无法确切翻译,待译吧);
创建一个默认配置以检查编译环境是否搭建好了 (假如需要的话);
用Menuconfig来配置即将编译生成的固件映像文件的配置项;
最后开始编译固件;
‘拾’ openwrt 编译的固件在哪
固件在 openwrt/bin/ramips 目录下,形如
openwrt-ramips-mt7620n-rt-n14u-squashfs-sysupgrade.bin
openwrt-ramips-mt7620n-wrtnode-squashfs-sysupgrade.bin
openwrt-ramips-mt7620n-mlw221-squashfs-sysupgrade.bin
openwrt-ramips-mt7620n-wr8305rt-squashfs-sysupgrade.bin