更新:最近openwrt SVN失效了,不过官方有新的教程
https://wiki.openwrt.org/zh-cn/doc/howto/buildroot.exigence
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大小的),你需要:
→在~BSD上的安装步骤 | →在Mac OS X上的安装步骤 |
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 unzipfeeds中的部分软件包可能只能通过
subversion
(缩写:
svn
)或者
mercurial
下载源代码。如果你需要安装这些软件包,你同时也应当安装svn和mercurial:
sudo apt-get install subversion mercurial
make
和 build-essential
git(7)
svn
和 subversion documentation (multiple languages)
git
来下载OpenWrt bleeding edge(trunk版本):(
参见Downloading Sources以获得更多选择):
git clone git://git.openwrt.org/openwrt.git这将会创建'openwrt'这个目录。这个目录将会是OpenWrt的编译主目录。
cd openwrt ./scripts/feeds update -a ./scripts/feeds install -a
make defconfig make prereq make menuconfig在这里你讲可以选择你想要编译的软件包。
下表所示为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 | fastjar | fastjar | libgcj | fastjar | libgcj | ? | fastjar | app-arch/fastjar |
flex | flex | flex | 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 | OSX | 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 |
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
apt-get install libncurses5-dev zlib1g-dev gawk
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
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
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
sudo apt-get install build-essential subversion libncurses5-dev zlib1g-dev gawk gcc-multilib flex git-core gettext libssl-dev
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
$ 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'
使用以下命令之一可以通过git下载一份你想要的源码:
开发版的源码 (trunk)包括了文档以及实验性的 补丁
git clone git://git.openwrt.org/openwrt.git
更多额外的软件包在feeds中提供。(例如Luci, packages, routing, management等feed源)。请使用OpenWrt编译系统下载正确的feed源。
git clone git://git.openwrt.org/15.05/openwrt.git
git clone git://git.openwrt.org/14.07/openwrt.git
git clone git://git.openwrt.org/12.09/openwrt.git
git clone git://git.openwrt.org/12.09/packages.git
参见:Deprecated Buildroot-Installation Howto
连接我们的SVN服务器可能会导致你的IP被SVN服务器以及我们的论坛禁止访问。与Git相比,使用SVN检出一份完整的代码将会用时更久。OpenWrt开发者建议你们使用Git下载源代码。
--------------------------------------------------------------------------------------------------
以下是旧方法1、安装编译环境
编译环境安装在ubuntu上,虚拟机或真实系统都可。
root@lhc-vm:mkdir /work
root@lhc-vm:/work# apt-get install subversion build-essential libncurses5-dev zlib1g-dev gawk git ccache gettext libssl-dev xsltproc
2、下载源码
在 Openwrt 的官方网站 https://openwrt.org 上可以看到目前的最新稳定版为BarrierBreaker 14.07,在自己的虚拟机Ubuntu 系统中创建一个工作目录
root@zjh-vm:/home/work# mkdir openwrt
最近貌似SVN下载不好使了,我们还可以用git下载源码,从这里获取不同版本的克隆地址。https://dev.openwrt.org/wiki/GetSource
然后
#git clone git://git.openwrt.org/15.05/openwrt.git
然后使用 svn工具下载最新稳定版的源代码,下载完成后,进入 barrier_breaker目录
root@zjh-vm:/home/work# cd openwrt
root@zjh-vm:/home/work/openwrt# svn co svn://svn.openwrt.org/openwrt/branches/barrier_breaker
root@zjh-vm:/home/work/openwrt# cd barrier_breaker/
首先可以执行make help查看一些帮助
root@zjh-vm:/home/work/openwrt/barrier_breaker# make help
执行svn info查看当前下载的源码的修订版本
root@zjh-vm:/home/work/openwrt/barrier_breaker# svn info
Openwrt会经常更新源码,可以执行 svn update 更新已下载的源码
root@zjh-vm:/home/work/openwrt/barrier_breaker# svn update
更新Feeds
root@zjh-vm:/home/work/openwrt/barrier_breaker# ./scripts/feeds update -a
Resolving deltas: 100% (70/70), completed with 19 local objects.
From https://github.com/openwrt/packages
ad7c25a..71719eb for-14.07 -> origin/for-14.07
Updating ad7c25a..71719eb
使下载的软件包可以出现在make menuconfig配置菜单中
root@zjh-vm:/home/work/openwrt/barrier_breaker# ./scripts/feeds install
root@zjh-vm:/home/work/openwrt/barrier_breaker# ./scripts/feeds install –a
3、配置
Openwrt默认不允许使用root用户操作,若要使用root用户操作可以修改 include/prereq-build.mk这个文件
root@zjh-vm:/home/work/openwrt/barrier_breaker# vi include/prereq-build.mk
define Require/non-root
[ "$$(shell whoami)" != "root" ]
endef
$(eval $(call Require,non-root, \
Please do not compile as root. \
))
define Require/non-root
[ "$$(shell whoami)" != "root" ]
endef
#$(eval $(call Require,non-root, \
Please do not compile as root. \
))
注:最新的版本已经取消这个限制了。
执行make menuconfig打开配置菜单
root@zjh-vm:/home/work/openwrt/barrier_breaker# make menuconfig
每个选项前面都有一个[ ]标签,我们可以选择 y,m和n
选择 y设置为<*>,表示将软件包编译进固件image 文件;
选择 m 设置为
选择 n 设置为<>,表示不编译该软件包。
配置主要包括4 个部分
Target system(目标系统)
Package selection(软件包选择)
Build system settings(编译系统设置)
Kernel modules(内核模块配置)
我们这里先简单配置一下,具体的以后再讲。
首先配置目标系统,根据自己的设备选择 SOC 类型,我使用的设备使用是 RT5350,是 Ralink 公司的 SOC,8MB Flash,32MB SDRAM,从http://wiki.openwrt.org/toh/hame/mpr-a2 这个地址得知我们的设备是openwrt支持的设备
因此Target System 配置如下
Target Profile 对应上面列表的mpr-a2
当配置完成并保存配置后,openwrt将根据你的配置创建一个配置文件.config
4、编译
可以直接执行 make 进行编译
root@zjh-vm:/home/work/openwrt/barrier_breaker# make
root@zjh-vm:/home/work/openwrt/barrier_breaker# make -j 3 V=s
其中的 openwrt-ramips-rt305x-mpr-a2-squashfs-sysupgrade.bin就是用来烧写到设备的固件。
5 、清理工程
root@zjh-vm:/home/work/openwrt/barrier_breaker# make clean
root@zjh-vm:/home/work/openwrt/barrier_breaker# make dirclean
root@zjh-vm:/home/work/openwrt/barrier_breaker# make distclean
6 、编译/清理单个软件包
以uci这个软件包为例
root@zjh-vm:/home/work/openwrt/barrier_breaker# make package/system/uci/compile V=s 编译
root@zjh-vm:/home/work/openwrt/barrier_breaker# make package/system/uci/clean V=s 清理