OpenWRT文章翻譯之(一)----OpenWRT Buildroot簡介
原文地址:http://wiki.openwrt.org/about/toolchain
Buildroot簡介
話說OpenWRT Buildroot 之前,先說一下Buildroot是什么東西吧。Buildroot實際上是一個編譯的腳本,它包括一組Makefiles文件和補丁文件,主要用于簡單系統或嵌入式系統的編譯,支持多種CPU的架構,其中包括x86、ARM、MIPS和PowerPC等。它可以生成交叉編譯的工具鏈,文件系統,內核鏡像和bootloader鏡像等。相關的內容可以到Buildroot的主頁去查看http://www.buildroot.org
OpenWRT Buildroot簡介
那么OpenWRT Buildroot又是什么玩兒呢?實際上也是一個Buildroot,只是它是專門為編譯OpenWRT而移植過來的編譯OpenWRT系統的腳本,而至于為什么它叫OpenWRT Buildroot,那是因為OpenWRT移植過來的時候,做了大量的修改!OpenWRT Buildroot的主要任務就是生成交叉編譯鏈和文件系統。
交叉編譯工具鏈
交叉編譯鏈是一套交叉編譯工具,它可以為你的目標系統編譯源代碼文件。那么為什么叫交叉編譯工具鏈呢?因為大部分嵌入式或是微型的小系統,由于CPU或是Flash的限制,或是避免浪費,都不會把編譯工具鏈放到系統里面去,當然X86的例外,嘿嘿。那我的代碼怎么才能編譯到嵌入式系統里面呢?我們通常都是在X86通用Linux系統上面使用特定的工具,編譯生成目標系統可以執行的代碼,再上傳到目標系統。而這個編譯平臺和目標平臺不同的特定的編譯工具鏈即是前面所講的交叉編譯工具鏈。
一個交叉編譯工具鏈主要包括三部分:編譯器(gcc),二進制工具binutils(匯編器、鏈接器等)和標準的C函數庫(GNU Libc或uClibc)。
它主要有兩個特征:
? ? 1.可以運行在X86通用CPU架構之上;
? ? 2.可以編譯生成特定CPU架構(ARM,MIPS等)的代碼。
OpenWRT交叉編譯工具鏈使用的標準C函數庫是uClibc,一個專為嵌入系統設計的小型標準C函數庫。所以即便的是使用ALIX.2D2的板子,這個也是X86的CPU,使用OpenWRT系統,你在X86架構Linux上編譯的東西,也無法在OpenWRT上面運行。
好吧,我承認有點偏題了。。。
OpenWRT Buildroot的真實身份
有同鞋講,網上有一票gcc,和binutils,uClibc的源代碼,我不能自己下載,然后自己編譯么?答案是可以滴,但是~~如果你不怕麻煩的話(原文翻譯,老外真是有水平啊哈,了解大家都怕麻煩的特點,然后拿出來放大)。前面我們提過OpenWRT Buildroot是許多Makefiles文件和補丁文件的集合,它會為我們自動配置這個源代碼,為每個版本打上已知的補丁,最后生成確實可用的交叉編譯工具鏈。
除此之外,它還可以生成系統,這個篇幅比例不太合適啊,OpenWRT Buildroot兩個主要任務的其中一個怎么介紹這么少呢?沒有辦法,原文就是醬紫的。。。
最后表達一下對OpenWRT Buildroot的景仰之情,雖然OpenWRT Buildroot主要是面向開發都的,但是一般沒有專業技能基礎的終端用戶也可以使用它編譯生成你自己的系統固件。
OpenWRT文章翻譯之(二)----OpenWRT Buildroot安裝
原文地址:http://wiki.openwrt.org/doc/howto/buildroot.exigence
?
簡介
OpenWRT Buildroot是創建OpenWRT系統首選的工具鏈。OpenWRT Buildroot要求使用GNU Linux的發行版本,獨立安裝到PC機上,或是虛擬機里面都行。
但是Cygwin則可能會出錯,而BSD或是MacOSX,有可能使用OpenWRT Buildroot成功生成目標系統鏡像,但是這并不能保存生成的鏡像的正確性,汗一個,看來大家還是使用原版的Linux吧,因為這個水有點深了,,,
系統需求
1. 350MB的空間用于下載源代碼文件
2. 3~4GB空間用于生成交叉編譯工具鏈和OpenWRT系統鏡像.
安裝過程
? ? ? ? 1.?安裝svn,這個是用來獲取服務器的OpenWRT源代碼的
下面就按Ubuntu的來安裝吧,其它版本的自己Google,百度一下吧
sudo apt-get update
sudo apt-get install subversion build-essential
build-essential好像是安裝gcc之類的編譯器跟環境,subversion,就是svn。
?
? ? ? ? 2.?通過svn下載OpenWRT的源代碼
mkdir ~/openwrt
cd openwrt
svn co svn://svn.openwrt.org/openwrt/trunk/
cd trunk
包括OpenWRT Buildroot腳本的OpenWRT源代碼會下載到trunk文件夾里面。
?
? ? ? ? 3.?下載安裝feeds腳本
這一項是可選的,不過feeds也是很有用的一個工具,可以往OpenWRT里面添加軟件包,安裝方法如下:
./script/feeds update -a
./script/feeds install -a
?
? ? ? ? 4.?檢查使用Buildroot編譯OpenWRT源代碼所需要安裝的軟件包,進入源代碼根目錄,運行下面三條語句中任意一條
make defconfig
make prereq
make menuconfig
檢查之后,它會列出系統需要安裝的軟件包,根據這個列表來安裝編譯OpenWRT所需的軟件。
下面僅列出Ubuntu所需要安裝的包
Ubuntu:
$ sudo apt-get install build-essential subversion libncurses5-dev zlib1g-dev gawk flex
Ubuntu 9.10,需要安裝下列軟件包(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
下面是各個Linux發行版本編譯OpenWRT所需要安裝的軟件包列表
Prerequisite DebianSuse Red HatOS X (via MacPorts) FedoraNetBSD
asciidoc asciidocasciidoc asciidocasciidoc asciidoc?
bash bash bash ? bash ? bash
binutils binutilsbinutils binutilsbinutils binutils?
bzip2 bzip2 bzip2 bzip2 bzip2 bzip2 ?
fastjar fastjarfastjar libgcjfastjar 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-linuxutil-linux ?getopt ?getopt
GNU awk gawk gawk gawk gawk gawk ?
gtk2.0-dev libgtk2.0-dev? gtk2-develgtk2 gtk2-devel?
intltool-update intltoolintltool intltoolintltool intltool?
jikes — jikes ? jikes — ?
libz, libz-dev zlib1g-devzlib-devel zlib-develzlib zlib-devel?
make make make ? gmake make gmake
ncurses libncurses5-devncurses-devel ncurses-develncurses ncurses-devel?
openssl/ssl.h libssl-devlibopenssl-devel openssl-developenssl openssl-devel?
patch patch patch ? patchutils patch?
perl-ExtUtils-MakeMaker perl-modulesperl-ExtUtils-MakeMaker perl-ExtUtils-MakeMakerp5-extutils-makemaker perl-ExtUtils-MakeMaker?
python2.6-dev python2.6-devpython-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 xsltproclibxslt ?libxslt libxslt?
zlib, zlib-static zlib1g-devzlib-devel ?? ? ?