User Tools

Site Tools


zh-cn:doc:howto:buildroot.exigence

OpenWrt编译系统 – 安装

OpenWrt build system是OpenWrt这个Linux发行版的编译程序。OpenWrt build system 能够在Linux、BSD或者Mac OS X系统上正常工作。但是请注意你必须使用一个对大小写敏感的文件系统。

我们建议您使用一个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的内存。

在Linux上的安装步骤


1. 请使用一个非root用户来完成这些工作!
2. 这里的所有命令都在OpenWrt编译系统的根目录下运行(例如~/openwrt/trunk/
3. 编译系统的绝对路径中不能含有空格!
4. 如果你使用root用户下载了源码,请把你下载来的源码的所有者更改为一个非root用户。(sudo chown -R user:user /openwrt/)
  1. 安装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
  2. 通过git来下载OpenWrt bleeding edge(trunk版本):(参见Downloading Sources以获得更多选择):
    git clone git://git.openwrt.org/openwrt.git
    这将会创建'openwrt'这个目录。这个目录将会是OpenWrt的编译主目录。
    OpenWrt的交叉编译工具链也已经被包含在内。
  3. (可选)下载并安装所有可用的"feeds"(参见OpenWrt Feeds以获取更多选择):
    cd openwrt
    ./scripts/feeds update -a
    ./scripts/feeds install -a
  4. 运行下面的命令让OpenWrt编译系统检查你的编译环境中缺失的软件包:
    make defconfig
    make prereq
    make menuconfig
    在这里你讲可以选择你想要编译的软件包。
  5. 然后你就可以开始编译了。参见:build

各操作系统及编译条件对照表

下表所示为linux操作系统各发行版所需要的编译环境条件及软件包对照表:

名称 Debian SUSE Red Hat OS X (via MacPorts) Fedora NetBSD Arch Gentoo
asciidoc asciidoc asciidoc asciidoc asciidoc asciidoc ? asciidoc app-text/asciidoc
GNU Bash bash bash bash bash bash bash bash app-shells/bash
GNU bc bc bc bc bc sys-devel/bc
GNU Binutils binutils binutils binutils binutils binutils ? binutils sys-devel/binutils
bzip2 bzip2 bzip2 bzip2 bzip2 bzip2 ? bzip2 app-arch/bzip2
fastjar fastjarfastjar libgcj fastjar libgcj ? fastjar app-arch/fastjar
flex flexflex flex flex flex ? flex sys-devel/flex
git git-core git-core git git-core git ? git dev-vcs/git
GNU C++ Compiler g gcc-c ? gcc sys-devel/gcc
GNU C Compiler 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
GNU awk 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 jikespg jikes ? jikes ? aur/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
ncurses 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
GNU Wget 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 X 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 aur/bcc 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下载源代码。

zh-cn/doc/howto/buildroot.exigence.txt · Last modified: 2016/02/13 11:18 by 981213