OpenWrt Buildroot – 使用说明

→ 返回获取固件或者阅读→OpenWrt Buildroot – 关于

先决条件

  1. 在你的电脑上安装OpenWrt Buildroot和它的先决条件

步骤

1. 以root用户来进行工作
2. 在<buildsystem root>目录中完成所有命令,例如~/openwrt/trunk/
  1. 更新OpenWrt源。
  2. 更新feeds的package 包.
  3. 配置编译。
  4. 开始编译。这会自动编译工具链,交叉编译源代码,打包包文件,最后生成可以可以刷写的镜像文件。
  5. 进入安装OpenWrt环节

更新源码(source)

更新源码:

svn update

  • OpenWrt源码更新很频繁。建议你使用最新的源来完成工作。

更新源(Feeds)

更新源:

./scripts/feeds update -a

安装下载好的包: (可选)

./scripts/feeds install -a   (或者 'install <PACKAGENAME>' )

镜像配置

开始OpenWrt Buildroot基于ncurses文本配置界面:

make menuconfig

同配置Linux内核类似,几乎每一个设置都有三个选项:y / m / n,分别代表如下含义:
* `` (按下`y`)这个包会被包含进固件镜像
* `` (按下`m`)这个包会在生成刷新OpenWrt的镜像文件以后被编译,但是不会被包含进镜像文件
* `` (按下`n`)这个包不会被编译

当你保存你的配置后,~/openwrt/trunk/.config这个文件会按照你的配置被生成。
\\编译环境会提供一个这样的配置文件给OpenWrt 'Backfire' 10.03.1-RC5。 例如,for ar71xx.
  • 这个菜单允许你选择目标平台,也就是你想要用来编译你要包含进固件镜像的软件包的工具链(toolchain)的版本。
  • 在更新源码和源以后运行这个配置界面,确保你的配置中包含的软件包是最新的。

默认配置(Defconfig)

在启用默认配置以前先选择的你的目标平台

make defconfig
将会生成一个通用的编译系统配置,这个配置包含了一个对于编译环境的先决条件和依赖的检查,同时会安装缺失的组件并再次运行。

总体配置

Menuconfig拥有一个文本界面,它包括选择要处理的目标平台,要编译的软件包,要被包含进固件文件的软件包和一些内核设置等。

make menuconfig

这会自动更新你现在存在的配置的依赖,方便你你准备编译你更新过的镜像。

It has from the beginning on been the intention, with the development of 'menuconfig', to create a simple yet powerful environment for the configuration of individual OpenWrt images. Menuconfig is more or less self-explanatory, and even the most specialized configuration needs can be solved with its help. Depending on the the particular target platform, package requirements and kernel module needs, the standard process of configuration will include modifying:

  1. 目标系统
  2. 软件包设定
  3. 系统构建设定
  4. 内核模块

Target system is selected from the extensive list of supported platforms, with the numerous target profiles – ranging from specific devices to generic profiles, all depending on the particular device at hand. Package selection has the option of either 'selecting all package', which might be un-practical in certain situation, or relying on the default set of packages will be adequate or make an individual selection. It is here needed to mention that some package combinations might break the build process, so it can take some experimentation before the expected result is reached. Added to this, the OpenWrt developers are themselves only maintaining a smaller set of packages – which includes all default packages – but, the feeds-script makes it very simple to handle a locally maintained set of packages and integrate them in the build-process.

这儿有三种选项可选:

  • < > 该代码将不会被编译
  • <M> 该代码将被交叉编译,生成的ipk软件包将被放在 /buildsystem/bla/bla/bla, 但该软件包不会放入固件中
  • <*> 该代码将被放入固件中 (on the SqashFS partition)

The final step before the process of compiling the intended image(s) is to exit 'menuconfig' – this also includes the option to save a specific configuration or load an already existing, and pre-configured, version.

Exit the TUI, and choose to save your settings.

内核配置

While you won't typically need to do this, you can do it:

make kernel_menuconfig

See: Customizing the kernel options

Source Mirrors

The 'Build system settings' include some efficient options for changing package locations which makes it easy to handle a local package set:

  1. Local mirror for source packages
  2. Download folder

In the case of the first option, you simply enter a full URL to the web or ftp server on which the package sources are hosted. Download folder would in the same way be the path to a local folder on the build system (or network). If you have a web/ftp-server hosting the tarballs, the OpenWrt build system will try this one before trying to download from the location(s) mentioned in the Makefiles . Similar if a local 'download folder', residing on the build system, has been specified.

The 'Kernel modules' option is required if you need specific (non-standard) drivers and so forth – this would typically be things like modules for USB or particular network interface drivers etc.

Custom files

In many cases, you may want to have a custom image that has been pre-configured to your link. If so, place your custom files in

<buildroot dir>/files/

For example, let's say that you want an image with a pre-configured /etc/config/firewall, then place your modified firewall config in here:

<buildroot dir>/files/etc/config

Building Images

Everything is now ready for building the image(s), which is done with one single command:

make

This simple command will trigger a cascade of activity. As already stated, it will

  1. compile the toolchain
  2. then crosscompile the sources with this toolchain
  3. create opkg-packages
  4. create a firmware image file ready to be flashed.

Make options

Building on multi-core CPU

The build process can be accelerated by running multiple concurrent job processes using the -j-option:

make -j 3

  • Use the standard formula <your number of CPUs + 1>
  • If this produces random build errors try compiling again without the -j-option

Building in the background

If you intend to use your system while building, you can have the build process use only idle I/O and CPU capacity like this (dualcore CPU):

ionice -c 3 nice -n 20 make -j 2

Building single Packages

When developing or packaging software for OpenWrt, it is convenient to be able to build only the package in question (e.g. with package cups):

make package/cups/compile V=99

For the package mc (midnight commander), which is contained the feed packages it looks like this:

make package/feeds/packages/mc/compile v=99

Spotting build errors

If for some reason the build fails, the easiest way to spot the error is to do:

make V=99 2>&1 | tee build.log | grep -i error

The above saves a full verbose copy of the build output (with stdout piped to stderr) in /openwrt/trunk/build.log and only shows errors on the screen.

Another example:

ionice -c 3 nice -n 20 make -j 2 V=99 CONFIG_DEBUG_SECTION_MISMATCH=y 2>&1 | tee build.log | egrep -i '(warn|error)'

yet another one:

somthing something screen

The above saves a full verbose copy of the build output (with stdout piped to stderr) in build.log and outputs only warnings and errors while building using only background resources on a dual core CPU.

Getting beep notification

Depending on your CPU, the process will take a while, or while longer. If you want an acoustic notification, you could use echo -e '\a':

make V=99 ; echo -e '\a'

本地固件

编译成功后的固件bin文件在 /openwrt/trunk/bin 目录下.

cd ~/openwrt/trunk/bin
ls */

Cleaning Up

You might need to clean your build environment every now and then. The following make-targets are useful for that job:

Clean

make clean

deletes contents of bin and build_dir directories.

Dirclean

make dirclean

deletes contents of /bin and /build_dir directories and additionally /staging_dir and /toolchain (=the cross-compile tools). 'Dirclean' is your basic "Full clean" operation.

Distclean

make distclean

nukes everything you have compiled or configured and also deletes all downloaded feeds contents and package sources.

CAUTION: In addition to all else, this will erase your build configuration (.config), your toolchain and all other sources. Use with care!

There are numerous other functionalities in the OpenWrt build system, but the above should have covered some of the fundamentals.

例子

Troubleshooting

First get more information on the problem using the make option "make V=99".

  • Missing source code file, due to download problems.

First check if the URL path in the make file contains a trailing slash, then try with it removed (helped several times). Otherwise try to download the source code manually and put it into "dl" directory

  • Compilation errors.

Try to update the main source and all the feeds (Warning! May result in other problems). Check for a related bug in (TRAC), use the filters to find it. Otherwise report the problem there, by mentioning the package, the target data (CPU, image, etc.) and the code revisions (main & package). Compiling with make -j … sometimes gives random errors. Try compiling without -j first before reporting the problem.

注意

Back to top

zh-cn/doc/howto/build.txt · Last modified: 2014/03/13 04:46 by jiangming1399