如何编译OpenWrt

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何编译OpenWrt相关的知识,希望对你有一定的参考价值。

搭建编译环境。编译建议在Linux下进行。我的系统是Linux mint 17,执行以下命令,构建编译环境:

sudo apt-get update
sudo apt-get install git-core build-essential

获取openwrt源码。在当前用户主目录下执行

git clone git://git.openwrt.org/openwrt.git

等待代码下载。结束后,目录下会出现openwrt文件夹。
配置软件源。进入openwrt目录,执行

./scripts/feeds update -a

./scripts/feeds install -a

检查编译环境是否完整:

make defconfig

make prereq

根据提示信息安装需要的软件包。如果提示类似

“tmp/.config-package.in:22022:warning: multi-line strings not supported”

的信息,打开 openwrt/tmp/.config-package.in,定位到对应行,添上丢掉的一个引号就可以了。
编译选项:

执行 make menuconfig,根据路由器情况,选择 Target System 和 Subtarget。如意云一代和极壹S的 Target System 均为 Ralink RT288x/RT3xxx 。对于Subtarget ,前者为 MT7620n based boards ,后者为 MT7620a based boards。

其他选项根据个人喜好选择。一般来说要选中LuCI界面,选中中文语言包等等。
开始编译:

执行 make -j2 V=s 进行编译。-j后面的数字是电脑物理CPU数量加一。V=s可以显示出编译的详细信息。首次编译大概需要几个小时的时间。
错误排查:

编译失败,一般有两种情况:

1.代码下载链接失效。首次编译时,编译程序会实时从网上下载一些软件包的代码。如果下载链接失效,编译就会失败。这时需要根据软件包的名称,从网上自行下载,然后放在 openwrt/dl/ 目录下,执行 make -j2 V=s 继续编译即可。

2.软件包自身有问题。这时重新执行 make menuconfig ,取消对应软件包选中即可。这种情况比较少见,目前已知的有 tor 等。

编译成功,但没有生成固件。这种情况一般是因为选中的软件包过多,导致固件大小超过16MB。重新执行 make menuconfig,去掉一些软件包,重新执行编译即可。
得到固件。在排除了所有错误后,现在终于得到了固件。对于如意云RY-1,固件在 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

等等。
参考技术A OpenWrt编译环境搭建和编译方法
  
  一、 更新开发系统。
  安装完ubuntu 后,重新开机的时候,会有一个VMware tools 安装的提示界面,耐心等待,等到VMware tools 安装好后
  因为更新系统和安装一些工具包需要用到网络,所以进入ubuntu的界面后,
  将ubuntu的网络设置为NAT网络连接模式(默认为NAT),
  以上就绪后,更新开发系统的软件
  1、首先备份Ubuntu 10.04源列表
  sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup (备份下当前的源列表) 2、修改更新源
  sudo gedit /etc/apt/sources.list (打开Ubuntu 11.10源列表文件) 3、使用
  http://hi.baidu.com/pobenliu/blog/item/2180dc3502933c375bb5f5a5.html
  网站下的一个更新源贴到sources.list文件中(“#”开头的那一行为注释,可以直接复制进文件中) ,使用这里的源主要是为了提高下载速度,用官方的会比较慢。
  4、通知ubuntu启用新的更新源
  sudo apt-get update
  
  二、 安装编译OpenWrt需要用到的软件包:
  命令如下:
  sudo apt-get install g++ libncurses5-dev zlib1g-dev bison flex unzip
  autoconf gawk unzip make gettext gcc binutils patch asciidoc bzip2 libz-dev libc6-dev linux-headers-2.6.32-38
  注意,红色部分的版本根据自己的内核版本来修改,可以通过uname –a 来查看。
  三、 安装svn。
  由于在后面需要用到svn 来下载OpenWrt,所以需要先安装svn。
  由于使用命令 sudo apt-get install subversion来安装的版本最新也只是
  1.6.6版本,为了和windows 上的版本同步,所以需要下载安装包,进行手工安装。

  
  

  1、先下载两个包,
  subversion-1.7.2.tar.gz
  subversion-deps-1.6.1.tar.gz 2、拷贝到/home目录下,解压:
  tar -zxvf subversion-1.7.2.tar.gz
  tar -zxvf subversion-deps-1.6.1.tar.gz 3、进入目录,准备编译安装: cd subversion-1.7.2 执行:./configure
  安装遇到的第一个error: checking for APR... no
  configure: WARNING: APR not found
  The Apache Portable Runtime (APR) library cannot be found. Please install APR on this system and supply the appropriate --with-apr option to 'configure' 解决办法: 到tar -zxvf subversion-deps-1.6.1.tar.gz 解压的目录下,有一个apr的文件夹,放到subversion-1.7.2下即可 cp -rf ../subversion-1.6.1/apr .
  4、再重新执行./configure 命令 遇到第二个error:
  checking APR version... 1.3.3
  configure: Apache Portable Runtime Utility (APRUTIL) library configuration
  checking for APR-util... no
  configure: WARNING: APRUTIL not found
  The Apache Portable Runtime Utility (APRUTIL) library cannot be found. Either install APRUTIL on this system and supply the appropriate 提示的是apache的端口没有找到,因为此安装并没有与apache结合,到tar -zxvf subversion-deps-1.6.1.tar.gz 解压的目录下,发现有一个 APR-util,再移动到ubversion-1.7.2下
  5、重新执行./configure 命令 Ok,遇到第三个error,
  checking sqlite library version (via pkg-config)... no
  An appropriate version of sqlite could not be found. We recommmend 3.7.6.3, but require at least 3.6.18. 错误有提示:解决办法
  sqlite-amalgamation-3071000.zip

  

  下载这个包,解压,将sqlite3.c放到指定的位置: unzip sqlite-amalgamation-3070900.zip
  mkdir –p subversion-1.7.2/sqlite-amalgamation cd sqlite-amalgamation-3070900
  cp sqlite3.c ../subversion-1.7.2/sqlite-amalgamation/
  之後重新执行./configure 见到这表示./config执行ok
  checking for ctypesgen.py... none configure: creating ./config.status config.status: creating Makefile
  config.status: creating tools/backup/hot-backup.py
  config.status: creating tools/hook-scripts/commit-access-control.pl config.status: creating
  subversion/bindings/swig/perl/native/Makefile.PL
  config.status: creating subversion/svn_private_config.h.tmp config.status: executing libtool commands
  config.status: executing svn_private_config.h.tmp commands
  6、然后编译安装: make clean
  make && make install
  只要没有遇到error,就是ok的, 输入
  svn –version
  得到:
  svn, version 1.7.2 (r1207936) compiled Feb 8 2012, 23:09:00 说明安装成功。
  四、下载OpenWrt源码。
  分两种,一种是最新版但不是最稳定,也就是trunk版,一种是相对稳定版,backfire版。源码下载命令分别是: 先创建文件夹:
  mkdir OpenWrt_trunk cd OpenWrt_trunk Trunk版下载命令:
  svn co svn://svn.openwrt.org/openwrt/trunk/
  若需要backfire:
  mkdir OpenWrt_backfire

  

  cd OpenWrt_backfire
  Backfire下载命令:
  svn co svn://svn.openwrt.org/openwrt/branches/backfire/
  五、 编译OpenWrt:
  如果不是刚下载的代码,为了保持代码为最新状态,应该定期运行Svn up更新代码,什么时候有变你是不知道的 然后是更新软件包:
  ./scripts/feeds update –a ./scripts/feeds install –a
  如果不更新软件包的话,你会发现后面是看不到很多软件包的,也就无法集成那些看不到的包了。
  然后是make defconfig,再make menuconfig进入定制界面,定制自己的系统。
  最后,执行make命令,然后是非常漫长的等待。
  在编译的时候,是根据你的配置,进行下载程序包的,先是把这些程序包下载到./dl目录下,再进行解压编译,和安装。如果不是为了开发某一软件的话,建议一开始的时候不要安装太多的软件,一是时间太长,然后很容易出错。要用到的软件在编译好后,用opkg来安装。

以上是关于如何编译OpenWrt的主要内容,如果未能解决你的问题,请参考以下文章

编译器如何编译自己?

编译器如何编译编译器?

如何编译github项目

c#如何防反编译

如何使用lessc编译.less文件

Zend 引擎如何编译 php 代码或 php 编译器如何工作?