OpenWrt 建置 – 安裝
OpenWrt Buildroot 偏好使用 toolchain 來建置OpenWrt。建議你使用一個 GNU/Linux Distribution,不論是獨立安裝的, 或是執行於虛擬環境的 (VMware 或 Qemu)上。
Cygwin 無法正常的運作,也不保證可以成功的建置於 ~BSD 或 MacOSX 系統上。 你可以試試,並回報你的結果。不要忘了先閱讀 問題排除.
先前準備
- 350 MB 的硬碟空間供下載原始碼
- 3-4 GB 的硬碟空間供OpenWrt的建置
程序
| 1. 不要使用 root帳號 2. 所有的命令必須在 <buildroot dir> 目錄底下執行, 如 ~/openwrt/trunk/ 3. 不要在完整路徑名中有空白的資料夾下建置 |
- 安裝
subversion(short:svn), 來下載OpenWrt的原始碼較為便利,且安裝build tools來幫助編彙程序:sudo apt-get update sudo apt-get install subversion build-essential
- subversion請參見
svn和 subversion documentation (multiple languages) - 建置工具請參見
make和 build-essential
- 使用
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.
- 使用feeds script下載並安裝 feeds。(選擇性)
./scripts/feeds update -a ./scripts/feeds install -a
- 版本 7367之後,
trunk資料夾已包含 26,650 個檔案,總大小約 302 MiB (如需安裝個別套件:./scripts/feeds install PACKAGENAME)
- 使用以下其中一個命令,可以檢查是否你的建置OpenWrt的環境中有遺漏的套件:
make defconfig make prereq make menuconfig
- 這會列出需要建置OpenWrt的系統中遺漏的套件。
- 使用 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):
- 下載 MacPorts .pkg Installer,並安裝 (移動第二個水平捲軸以看到全部的命令):
sudo port -v selfupdate
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
- 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.)
zh-tw/doc/howto/buildroot.exigence.txt · Last modified: 2012/10/25 08:43 by changeway
This text is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
