OpenWrt 建置 – 安裝

OpenWrt Buildroot 偏好使用 toolchain 來建置OpenWrt。建議你使用一個 GNU/Linux Distribution,不論是獨立安裝的, 或是執行於虛擬環境的 (VMwareQemu)上。

Cygwin 無法正常的運作,也不保證可以成功的建置於 ~BSD 或 MacOSX 系統上。 你可以試試,並回報你的結果。不要忘了先閱讀 問題排除.

先前準備

  • 350 MB 的硬碟空間供下載原始碼
  • 3-4 GB 的硬碟空間供OpenWrt的建置

程序

1. 不要使用 root帳號
2. 所有的命令必須在 <buildroot dir> 目錄底下執行, 如 ~/openwrt/trunk/ 3. 不要在完整路徑名中有空白的資料夾下建置
  1. 安裝 subversion (short: svn), 來下載OpenWrt的原始碼較為便利,且安裝 build tools 來幫助編彙程序:
    sudo apt-get update
    sudo apt-get install subversion build-essential
  2. 使用svn下載OpenWrt的原始碼
    mkdir ~/openwrt
    cd ~/openwrt
    svn co svn://svn.openwrt.org/openwrt/trunk/
    cd trunk
    • 這會產生 'trunk'資料夾,為OpenWrt原始碼主要的資料夾。
    • 以版本 R27988來說,全部有14,382個檔案,總大小約 150 MiB
    • 包含OpenWrt Buildroot system.
  3. 使用feeds script下載並安裝 feeds。(選擇性)
    ./scripts/feeds update -a
    ./scripts/feeds install -a
    • 版本 7367之後,trunk資料夾已包含 26,650 個檔案,總大小約 302 MiB (如需安裝個別套件: ./scripts/feeds install PACKAGENAME)
  4. 使用以下其中一個命令,可以檢查是否你的建置OpenWrt的環境中有遺漏的套件:
    make defconfig
    make prereq
    make menuconfig
    • 這會列出需要建置OpenWrt的系統中遺漏的套件。
  5. 使用 package management commands安裝遺漏的套件。參照以下的範例表。

:!: 在設定並執行編譯後 (如 這裡所描述), trunk資料夾包含 244,451 個檔案,總大小為 3.2GiB!

已知的所需的環境和套件表

這個表格提供不同的Linux發行版所需的套件名稱。

Prerequisite Debian Suse Red Hat OS X (via MacPorts) Fedora NetBSD
asciidoc asciidoc asciidoc asciidoc asciidoc asciidoc ?
bash bash bash ? bash ? bash
binutils binutils binutils binutils binutils binutils ?
bzip2 bzip2 bzip2 bzip2 bzip2 bzip2 ?
fastjar fastjar fastjar libgcj fastjar libgcj ?
flex flex flex ? flex flex ?
git git-core git-core ? ? ? ?
g++ g++ gcc-c++ gcc-c++ ? gcc-c++ ?
gcc gcc gcc gcc ? gcc ?
getopt util-linux util-linux ? getopt ? getopt
GNU awk gawk gawk gawk gawk gawk ?
gtk2.0-dev libgtk2.0-dev ? gtk2-devel gtk2 gtk2-devel ?
intltool-update intltool intltool intltool intltool intltool ?
jikes jikes ? jikes ?
libz, libz-dev zlib1g-dev zlib-devel zlib-devel zlib zlib-devel ?
make make make ? gmake make gmake
ncurses libncurses5-dev ncurses-devel ncurses-devel ncurses ncurses-devel ?
openssl/ssl.h libssl-dev libopenssl-devel openssl-devel openssl openssl-devel ?
patch patch patch ? patchutils patch ?
perl-ExtUtils-MakeMaker perl-modules perl-ExtUtils-MakeMaker perl-ExtUtils-MakeMaker p5-extutils-makemaker perl-ExtUtils-MakeMaker ?
python2.6-dev python2.6-dev python-devel ? python26 ? ?
rsync rsync rsync ? rsync rsync ?
ruby ruby ruby ? ruby ruby ?
sdcc sdcc sdcc ? sdcc sdcc ?
unzip unzip unzip ? unzip unzip ?
wget wget wget wget wget wget ?
working-sdcc ? ? ? ?
xgettext gettext ? ? gettext gettext ?
xsltproc xsltproc libxslt ? libxslt libxslt ?
zlib, zlib-static zlib1g-dev zlib-devel ? ? ? ?

可惜的是並非所有的相依性都可以透過 make config來檢查:

Package Prerequisite Debian Suse Red Hat OS X Fedora NetBSD
intltool [Perl] XML::Parser libxml-parser-perl ? ? ? ? ?

範例

Debian 5.0 Lenny:

# aptitude install gawk ncurses-dev unzip zlib1g-dev

Debian 6.0 Squeeze:

# aptitude install libncurses5-dev zlib1g-dev gawk flex libssl-dev sdcc-nf

Fedora 17:

yum install -y subversion binutils bzip2 gcc gcc-c++ gawk gettext flex libz-dev flex ncurses-devel zlib-devel make patch unzip perl-ExtUtils-MakeMaker mkdir ~/openwrt cd openwrt svn co svn://svn.openwrt.org/openwrt/trunk/ cd trunk ./scripts/feeds update -a ./scripts/feeds install -a make defconfig make prereq make menuconfig ionice -c 3 nice -n 20 make -j 2 #for quad-core CPU put -j 3

openSuSE 11.1

# zypper install binutils bzip2 gawk gcc gcc-c++ gettext make ncurses-devel patch unzip wget zlib-devel flex git-core

Ubuntu:

$ sudo apt-get install build-essential subversion libncurses5-dev zlib1g-dev gawk flex

Ubuntu 9.10, I needed also these (30-03-2011):

$ sudo apt-get install gcc-multilib bison autoconf screen gcc g++ binutils patch bzip2 flex make gettext unzip libc6 git-core

Ubuntu 11.10:

$ sudo apt-get install build-essential subversion git-core libncurses5-dev zlib1g-dev gawk flex quilt

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

Ubuntu 64bit:

$ sudo apt-get install build-essential subversion libncurses5-dev zlib1g-dev gawk gcc-multilib flex git-core gettext

Mac OS X (tested on 64-bit Lion):

  1. 下載 MacPorts .pkg Installer,並安裝 (移動第二個水平捲軸以看到全部的命令):
  2. sudo port -v selfupdate
  3. sudo port install coreutils asciidoc bzip2 fastjar flex getopt gtk2 intltool jikes zlib openssl p5-extutils-makemaker python26 rsync ruby sdcc unzip gettext libxslt bison gawk autoconf wget gmake ncurses e2fsprogs ossp-uuid
  4. 64-bit OS X修正: 透過上面的SVN指令下載原始碼後,需要編輯 trunk/tools/Makefile
  • 第17行, 刪掉 "e2fsprogs" 其他保留。如:
    tools-y += sstrip ipkg-utils genext2fs mtd-utils mkimage
  • 把第 22, 54, 56, 62 行的最前面加上 # 註解。這幾行是建置qemu,而需要相依mtd-utils (dep: e2fsprogs), qemu (dep: e2fsprogs),和 e2fsprogs相關。這幾行應如:
    tools-$(CONFIG_TARGET_x86) += qemu
    $(curdir)/mtd-utils/compile := $(curdir)/e2fsprogs/install $(curdir)/xz/install
    $(curdir)/qemu/compile := $(curdir)/e2fsprogs/install
    $(curdir)/e2fsprogs/compile := $(curdir)/automake/install
  • 然後複製需要的標頭檔和函式庫來編譯tools/mtd-utils
    cd trunk;
    mkdir -p staging_dir/host/include/e2fsprogs;
    mkdir -p staging_dir/host/lib;
    cp -R /opt/local/include/ossp staging_dir/host/include/e2fsprogs/;
    cp /opt/local/lib/libuuid* staging_dir/host/lib 

可以參照: 在Mac OS X 10.7 Lion建置OpenWrt 的詳細步驟。

注意:

  • 在 Debian 或 Ubuntu 使用
    apt-cache search ""
    找所需的套件,名稱有時會不一樣。
  • 在 openSuSE 某些套件需要額外的套件庫。 請在http://packages.opensuse-community.org 搜尋並新增套件庫,如:
    zypper ar "http://download.opensuse.org/repositories/devel:/languages:/perl/openSUSE_11.1/devel:languages:perl.repo"
  • 在 Mac OS X 的機器上建置,你需要 fink project中的 "fileutils"。 (測試於 Leopard 10.5.3)

下載原始碼

簡易版: https://dev.openwrt.org/wiki/GetSource
有兩種選擇:

  • 下載最新發行的穩定版
  • 下載開發中的快照版 (目前名稱為 "Barrier Breaker", 但通常稱做 "trunk").

如果你要下載trunk的話,官方的資料庫在 svn 上,但也可以選擇使用 git。參照 GetSource 取得合適的命令和位址。

使用發行的原始碼 (穩定版)

如這份文件所寫的,OpenWrt最新發行的穩定版是OpenWrt 10.03 "Backfire"。在SVN資料庫上,有一個Backfire分支,有時會有驗證過的修正檔。 使用這個方式可以產生可運作且穩定的安裝檔,但可能不會有最新的修正。如同範例,這可以取得 backfire 的發行版分支 (包含最新的trunk上的 backported 修正):

svn checkout svn://svn.openwrt.org/openwrt/branches/backfire

你也可以下載被標籤的backfire原始碼版本。舉例來說,你堅持使用發行版的原始碼(不包含最新發行版的backported 修正),你可以使用:

svn checkout svn://svn.openwrt.org/openwrt/tags/backfire_10.03

你也可以使用特定版本:

svn checkout --revision=24045 svn://svn.openwrt.org/openwrt/branches/backfire/ ./build_dir

當套件複製 feeds.conf.default 到 ./build_dir 的 feeds.conf ,並增加 "@24045" 到套件feed的結尾:

src-svn packages svn://svn.openwrt.org/openwrt/packages@24045

使用開發中的原始碼 (bleeding edge)

開發中的分支 (trunk) 包含所有從文件檔到 實驗性的 修正.

  • 取得最新版
    svn checkout svn://svn.openwrt.org/openwrt/trunk/
    
  • 取得特定版
    svn co svn://svn.openwrt.org/openwrt/trunk/@<rev#>
    

問題排除

  • 注意不尋常的環境變數如:
    • GREP_OPTIONS 不應該有 –initial-tab 或其他會影響輸出的選項
    • SED 不應該被設定。如果已存在編譯前請執行 `unset SED` 。 (參照 Ticket 10612.)

Back to top

zh-tw/doc/howto/buildroot.exigence.txt · Last modified: 2012/10/25 08:43 by changeway