OpenWrt build system是OpenWrt这个Linux发行版的编译程序。OpenWrt build system 能够在Linux、BSD或者Mac OS
我们建议您使用一个Linux发行版(例如:Debian)。您可以选择在您的电脑上单独安装一个,或者安装在虚拟机当中。(例如VMware或者Qemu).
Cygwin(Windows)将不会被支持,因为它缺少一个对大小写敏感的文件系统。
旧的Buildroot版本的相关信息请参见: buildroot.exigence.old
常见问题、性能信息以及一些常见优化请参见: development
环境要求
编译一个可以安装的OpenWrt固件镜像文件(大约8MB大小的),你需要:
- 一个纯净的OpenWrt编译系统大约需要200MB的空间。
- 一个包含feeds的OpenWrt编译系统大约需要300MB的空间。
- 编译feeds中的软件包大约需要2.1GB的空间用于存放下载来的源代码。
- 构建OpenWrt并生成固件文件需要大约3-4 GB的空间。
- 编译OpenWrt需要大约1-4 GB的内存。
wip
在Linux上的安装步骤
注意:
1. 请使用一个非root用户来完成这些工作! 2. 这里的所有命令都在OpenWrt编译系统的根目录下运行(例如~/openwrt/trunk/) 3. 编译系统的绝对路径中不能含有空格! 4. 如果你使用root用户下载了源码,请把你下载来的源码的所有者更改为一个非root用户。(sudo chown -R user:user /openwrt/)
主要步骤:
- 安装git以下载OpenWrt源码。安装编译工具以进行交叉编译:
sudo apt-get update
sudo apt-get install git-core build-essential libssl-dev libncurses5-dev unzip
- feeds中的部分软件包可能只能通过subversion (缩写: svn)或者mercurial下载源代码。如果你需要安装这些软件包,你同时也应当安装svn和mercurial:
sudo apt-get install subversion mercurial
关于编译环境的详细信息请参见:make和build-essential
关于git的详细信息请参见:git(7)
关于subversion tool的详细信息请参见:svn和subversion documentation (multiple languages)
- 通过git来下载OpenWrt bleeding edge(trunk版本):(参见Downloading Sources以获得更多选择):
git clone git://git.openwrt.org/openwrt.git
- 这将会创建'openwrt'这个目录。这个目录将会是OpenWrt的编译主目录。 OpenWrt的交叉编译工具链也已经被包含在内。
- (可选)下载并安装所有可用的"feeds"(参见OpenWrt Feeds以获取更多选择):
cd openwrt
./scripts/feeds update -a
./scripts/feeds install -a
- 运行下面的命令让OpenWrt编译系统检查你的编译环境中缺失的软件包:
make defconfig
make prereq
make menuconfig
- 然后你就可以开始编译了。参见:build
各操作系统及编译条件对照表
下表所示为linux操作系统各发行版所需要的编译环境条件及软件包对照表:
名称 | Debian | SUSE | Red Hat | OS | Fedora | NetBSD | Arch | Gentoo |
asciidoc | asciidoc | asciidoc | asciidoc | asciidoc | asciidoc | ? | asciidoc | app-text/asciidoc |
bash | bash | bash | bash | bash | bash | bash | app-shells/bash | |
bc | bc | | | bc | | bc | sys-devel/bc | |
binutils | binutils | binutils | binutils | binutils | ? | binutils | sys-devel/binutils | |
bzip2 | bzip2 | bzip2 | bzip2 | bzip2 | ? | bzip2 | app-arch/bzip2 | |
fastjar | fastjar | fastjar | libgcj | fastjar | libgcj | ? | fastjar | app-arch/fastjar |
flex | flex | flex | flex | flex | ? | flex | sys-devel/flex | |
git-core | git-core | git | git-core | git | ? | git | dev-vcs/git | |
g | gcc-c | ? | gcc | sys-devel/gcc | | | | |
gcc | gcc | gcc | ? | gcc | ? | gcc | sys-devel/gcc | |
getopt | util-linux | util-linux | util-linux | getopt | util-linux | getopt | util-linux | sys-apps/util-linux |
gawk | gawk | gawk | gawk | gawk | ? | gawk | sys-apps/gawk | |
gtk2.0-dev | libgtk2.0-dev | gtk2-devel | gtk2-devel | gtk2 | gtk2-devel | ? | gtk2 | x11-libs/gtk+:2 |
intltool-update | intltool | intltool | intltool | intltool | intltool | ? | intltool | dev-util/intltool |
jikes | jikes | ? | jikes | — | ? | dev-java/jikes | ||
libz, libz-dev | zlib1g-dev | zlib-devel | zlib-devel | zlib | zlib-devel | ? | zlib | sys-libs/zlib |
Mercurial / hg | | mercurial | | | hg | | | dev-vcs/mercurial |
make | make | make | make | gmake | make | gmake | make | sys-devel/make |
mkisofs | genisoimage | genisoimage | ? | ? | genisoimage | ? | cdrkit | virtual/cdrtools |
libncurses5-dev | ncurses-devel | ncurses-devel | ncurses | ncurses-devel | ? | ncurses | sys-libs/ncurses | |
openssl/ssl.h | libssl-dev | libopenssl-devel | openssl-devel | openssl | openssl-devel | ? | openssl | dev-libs/openssl |
patch | patch | patch | patch | patchutils | patch | ? | patch | sys-devel/patch |
perl-ExtUtils-MakeMaker | perl-modules | perl-ExtUtils-MakeMaker | perl-ExtUtils-MakeMaker | p5-extutils-makemaker | perl-ExtUtils-MakeMaker | ? | perl-extutils-makemaker | virtual/perl-ExtUtils-MakeMaker |
python2.6-dev | python2.6-dev | python-devel | ? | python26 | python-devel | ? | python2 | dev-lang/python:2.6 |
rsync | rsync | rsync | rsync | rsync | rsync | ? | rsync | net-misc/rsync |
ruby | ruby | ruby | ? | ruby | ruby | ? | ruby | dev-lang/ruby |
sdcc | sdcc | sdcc | sdcc | sdcc | sdcc | ? | sdcc | dev-embedded/sdcc |
unzip | unzip | unzip | unzip | unzip | unzip | ? | unzip | app-arch/unzip |
wget | wget | wget | wget | wget | ? | wget | net-misc/wget | |
xgettext | gettext | gettext-tools | gettext | gettext | gettext | ? | gettext | sys-devel/gettext |
xsltproc | xsltproc | libxslt-tools | ? | libxslt | libxslt | ? | libxslt | dev-libs/libxslt |
zlib, zlib-static | zlib1g-dev | zlib-devel | zlib-devel | zlib-devel | zlib-devel,zlib-static | ? | zlib | sys-libs/zlib |
但是,make config并不会检查所有软件包,比如:
Package | Prerequisite | Debian (8) | SUSE | Red Hat | OS | Fedora | NetBSD | Arch | Gentoo |
boost | bjam / boost-jam | libboost1.55-dev | | | | boost-jam | boost | dev-util/boost-build | |
intltool | [Perl] XML::Parser | libxml-parser-perl | | perl-XML-Parser | | perl-XML-Parser | | intltool | dev-perl/XML-Parser |
libftdi | libusb-config | libusb-dev | | | | libusb-devel | | libusb | dev-libs/libusb-compat |
lilo | as86,ld86 | bin86 | | | | dev86 | | bin86 | sys-devel/bin86 |
lilo | bcc | bcc | | | | dev86 | | sys-devel/dev86 | |
lilo | uudecode | sharutils | | | | sharutils | | sharutils | app-arch/sharutils |
classpath | javac, gcj | openjdk-7-jdk | | | | java-1.7.0-openjdk-devel | | jdk7-openjdk | dev-java/oracle-jdk-bin, sys-devel/gcc[gcj], and one (or both) of dev-java/icedtea-bin:7 and dev-java/icedtea:7 |
mac80211 | b43-fwcutter | | | | | b43-fwcutter | | b43-fwcutter | net-wireless/b43-fwcutter |
jamvm | zip | | | | | zip | | | app-arch/zip |
安装编译所需软件包的例子
- Arch Linux
pacman -S --needed subversion asciidoc bash bc binutils bzip2 fastjar flex git gcc util-linux gawk intltool zlib make cdrkit ncurses openssl patch perl-extutils-makemaker rsync sdcc unzip wget gettext libxslt boost libusb bin86 sharutils b43-fwcutter findutils
- Debian 7 Wheezy:
apt-get install libncurses5-dev zlib1g-dev gawk
- Fedora 22 - 64Bit :
dnf install -y subversion binutils bzip2 gcc gcc-c++ gawk gettext flex ncurses-devel zlib-devel zlib-static make patch unzip perl-ExtUtils-MakeMaker glibc glibc-devel glibc-static quilt sed sdcc intltool sharutils bison wget openssl-devel
- openSUSE 13.2
zypper install asciidoc bash bc binutils bzip2 fastjar flex git-core gcc-c++ gcc util-linux gawk gtk2-devel intltool jikes zlib-devel mercurial make genisoimage ncurses-devel libopenssl-devel patch perl-ExtUtils-MakeMaker python-devel rsync ruby sdcc unzip wget gettext-tools libxslt-tools zlib-devel subversion
- Ubuntu 12.04LTS:
sudo apt-get install build-essential subversion git-core libncurses5-dev zlib1g-dev gawk flex quilt libssl-dev xsltproc libxml-parser-perl mercurial bzr ecj cvs unzip
- Ubuntu 64bit:
sudo apt-get install build-essential subversion libncurses5-dev zlib1g-dev gawk gcc-multilib flex git-core gettext libssl-dev
- Centos x86-64:
yum install subversion binutils bzip2 gcc gcc-c++ gawk gettext flex ncurses-devel zlib-devel make patch unzip perl-ExtUtils-MakeMaker glibc glibc-devel glibc-static quilt ncurses-lib sed sdcc intltool sharutils bison wget git-core openssl-devel xz
- Gentoo:
$ echo \
app-arch/{bzip2,fastjar,sharutils,unzip,zip} \
app-text/asciidoc dev-java/{icedtea:7,jikes,oracle-jdk-bin} \
dev-libs/{libusb-compat,libxslt,openssl} dev-util/intltool \
dev-vcs/{git,mercurial} net-misc/{rsync,wget} \
net-wireless/b43-fwcutter sys-apps/{gawk,util-linux} \
sys-devel/{bc,bin86,binutils,dev86,flex,gcc[gcj],gettext} \
sys-libs/{ncurses,zlib} virtual/{cdrtools,perl-ExtUtils-MakeMaker} \
x11-libs/gtk+:2 \
| sed 's/\s/\n/g' \
| sort \
| sudo tee /etc/portage/sets/openwrt-prerequisites \
&& sudo emerge -DuvNa '@openwrt-prerequisites'
已知的不能编译OpenWrt的Linux发行版
- alpine linux使用musl作为libc的替代品。一些工具无法被编译通过。(例如mtd-utils, e2fsprogs)也许相关的检测代码需要被重写。(gcc -dumpmachine outputs a result where some scripts will fail - tools/sed)
下载源代码的更多选择
GIT
使用以下命令之一可以通过git下载一份你想要的源码:
trunk (主开发分支)
开发版的源码 (trunk)包括了文档以及实验性的 补丁
从官方源下载
git clone git://git.openwrt.org/openwrt.git
更多额外的软件包在feeds中提供。(例如Luci, packages, routing, management等feed源)。请使用OpenWrt编译系统下载正确的feed源。
15.05分支(Chaos Calmer)
从官方源下载
git clone git://git.openwrt.org/15.05/openwrt.git
14.07分支(Barrier Breaker)
从官方源下载
git clone git://git.openwrt.org/14.07/openwrt.git
12.09分支(Attitude Adjustment)
从官方源下载
git clone git://git.openwrt.org/12.09/openwrt.git
额外的软件包
git clone git://git.openwrt.org/12.09/packages.git
SVN
参见:Deprecated Buildroot-Installation Howto
连接我们的SVN服务器可能会导致你的IP被SVN服务器以及我们的论坛禁止访问。与Git相比,使用SVN检出一份完整的代码将会用时更久。OpenWrt开发者建议你们使用Git下载源代码。