Browse Source

create branch for barrier breaker (from trunk r41863)

git-svn-id: svn://svn.openwrt.org/openwrt/branches/barrier_breaker@41864 3c298f89-4303-0410-b956-a3cf2f4a3e73
test-seperate-ports
nbd 7 years ago
commit
e345c9a277
  1. 1
      .gitattributes
  2. 25
      .gitignore
  3. 7
      BSDmakefile
  4. 33
      Config.in
  5. 340
      LICENSE
  6. 105
      Makefile
  7. 35
      README
  8. 206
      config/Config-build.in
  9. 100
      config/Config-devel.in
  10. 317
      config/Config-images.in
  11. 466
      config/Config-kernel.in
  12. 15
      docs/.gitignore
  13. 48
      docs/Makefile
  14. 590
      docs/adding.tex
  15. 52
      docs/bugs.tex
  16. 594
      docs/build.tex
  17. 101
      docs/config.tex
  18. 61
      docs/debugging.tex
  19. 60
      docs/init-scripts.tex
  20. 55
      docs/network-scripts.tex
  21. 231
      docs/network.tex
  22. 10
      docs/openwrt.sty
  23. 41
      docs/openwrt.tex
  24. 53
      docs/submitting-patches.tex
  25. 492
      docs/wireless.tex
  26. 112
      docs/working.tex
  27. 14
      feeds.conf.default
  28. 166
      include/autotools.mk
  29. 72
      include/cmake.mk
  30. 51
      include/debug.mk
  31. 48
      include/depends.mk
  32. 5
      include/device_table.txt
  33. 184
      include/download.mk
  34. 205
      include/host-build.mk
  35. 65
      include/host.mk
  36. 310
      include/image.mk
  37. 142
      include/kernel-build.mk
  38. 179
      include/kernel-defaults.mk
  39. 39
      include/kernel-version.mk
  40. 235
      include/kernel.mk
  41. 12
      include/ltqtapi.mk
  42. 306
      include/netfilter.mk
  43. 40
      include/nls.mk
  44. 33
      include/package-bin.mk
  45. 152
      include/package-defaults.mk
  46. 85
      include/package-dumpinfo.mk
  47. 199
      include/package-ipkg.mk
  48. 317
      include/package.mk
  49. 193
      include/prereq-build.mk
  50. 62
      include/prereq.mk
  51. 170
      include/quilt.mk
  52. 76
      include/scan.mk
  53. 23
      include/scons.mk
  54. 37
      include/shell.sh
  55. 28
      include/site/arm-linux
  56. 5
      include/site/arm-openwrt-linux-gnu
  57. 5
      include/site/arm-openwrt-linux-gnueabi
  58. 5
      include/site/arm-openwrt-linux-musl
  59. 5
      include/site/arm-openwrt-linux-muslgnueabi
  60. 5
      include/site/arm-openwrt-linux-uclibc
  61. 5
      include/site/arm-openwrt-linux-uclibcgnueabi
  62. 28
      include/site/armeb-linux
  63. 5
      include/site/armeb-openwrt-linux-gnu
  64. 5
      include/site/armeb-openwrt-linux-gnueabi
  65. 5
      include/site/armeb-openwrt-linux-musl
  66. 5
      include/site/armeb-openwrt-linux-muslgnueabi
  67. 5
      include/site/armeb-openwrt-linux-uclibc
  68. 5
      include/site/armeb-openwrt-linux-uclibcgnueabi
  69. 28
      include/site/avr32-linux
  70. 5
      include/site/avr32-openwrt-linux-gnu
  71. 5
      include/site/avr32-openwrt-linux-uclibc
  72. 28
      include/site/cris-linux
  73. 5
      include/site/cris-openwrt-linux-gnu
  74. 5
      include/site/cris-openwrt-linux-uclibc
  75. 28
      include/site/i486-linux
  76. 5
      include/site/i486-openwrt-linux-gnu
  77. 5
      include/site/i486-openwrt-linux-musl
  78. 5
      include/site/i486-openwrt-linux-uclibc
  79. 28
      include/site/i686-linux
  80. 5
      include/site/i686-openwrt-linux-gnu
  81. 5
      include/site/i686-openwrt-linux-musl
  82. 5
      include/site/i686-openwrt-linux-uclibc
  83. 78
      include/site/linux
  84. 1
      include/site/linux-gnu
  85. 1
      include/site/linux-uclibc
  86. 26
      include/site/m68k-linux
  87. 5
      include/site/m68k-openwrt-linux-gnu
  88. 5
      include/site/m68k-openwrt-linux-uclibc
  89. 28
      include/site/mips-linux
  90. 5
      include/site/mips-linux-gnu
  91. 5
      include/site/mips-openwrt-linux-gnu
  92. 5
      include/site/mips-openwrt-linux-musl
  93. 5
      include/site/mips-openwrt-linux-uclibc
  94. 28
      include/site/mips64-linux
  95. 5
      include/site/mips64-openwrt-linux-gnu
  96. 5
      include/site/mips64-openwrt-linux-uclibc
  97. 28
      include/site/mips64el-linux
  98. 5
      include/site/mips64el-openwrt-linux-gnu
  99. 5
      include/site/mips64el-openwrt-linux-uclibc
  100. 28
      include/site/mipsel-linux

1
.gitattributes

@ -0,0 +1 @@
* -text

25
.gitignore

@ -0,0 +1,25 @@
*.o
.DS_Store
.*.swp
/env
/dl
/.config
/.config.old
/bin
/build_dir
/staging_dir
/tmp
/logs
/feeds
/feeds.conf
/files
/package/feeds
/package/openwrt-packages
*.orig
*.rej
*~
.#*
*#
.emacs.desktop*
TAGS*~
git-src

7
BSDmakefile

@ -0,0 +1,7 @@
# Copyright (C) 2006 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
world ${.TARGETS}:
@gmake $@

33
Config.in

@ -0,0 +1,33 @@
# Copyright (C) 2006-2013 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
mainmenu "OpenWrt Configuration"
config MODULES
bool
default y
config HAVE_DOT_CONFIG
bool
default y
source "target/Config.in"
source "config/Config-images.in"
source "config/Config-build.in"
source "config/Config-devel.in"
source "toolchain/Config.in"
source "target/imagebuilder/Config.in"
source "target/sdk/Config.in"
source "target/toolchain/Config.in"
source "tmp/.config-package.in"

340
LICENSE

@ -0,0 +1,340 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.

105
Makefile

@ -0,0 +1,105 @@
# Makefile for OpenWrt
#
# Copyright (C) 2007 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
TOPDIR:=${CURDIR}
LC_ALL:=C
LANG:=C
export TOPDIR LC_ALL LANG
empty:=
space:= $(empty) $(empty)
$(if $(findstring $(space),$(TOPDIR)),$(error ERROR: The path to the OpenWrt directory must not include any spaces))
world:
include $(TOPDIR)/include/host.mk
ifneq ($(OPENWRT_BUILD),1)
_SINGLE=export MAKEFLAGS=$(space);
override OPENWRT_BUILD=1
export OPENWRT_BUILD
GREP_OPTIONS=
export GREP_OPTIONS
include $(TOPDIR)/include/debug.mk
include $(TOPDIR)/include/depends.mk
include $(TOPDIR)/include/toplevel.mk
else
include rules.mk
include $(INCLUDE_DIR)/depends.mk
include $(INCLUDE_DIR)/subdir.mk
include target/Makefile
include package/Makefile
include tools/Makefile
include toolchain/Makefile
$(toolchain/stamp-install): $(tools/stamp-install)
$(target/stamp-compile): $(toolchain/stamp-install) $(tools/stamp-install) $(BUILD_DIR)/.prepared
$(package/stamp-compile): $(target/stamp-compile) $(package/stamp-cleanup)
$(package/stamp-install): $(package/stamp-compile)
$(target/stamp-install): $(package/stamp-compile) $(package/stamp-install)
printdb:
@true
prepare: $(target/stamp-compile)
clean: FORCE
rm -rf $(BUILD_DIR) $(BIN_DIR) $(BUILD_LOG_DIR)
dirclean: clean
rm -rf $(STAGING_DIR) $(STAGING_DIR_HOST) $(STAGING_DIR_TOOLCHAIN) $(TOOLCHAIN_DIR) $(BUILD_DIR_HOST) $(BUILD_DIR_TOOLCHAIN)
rm -rf $(TMP_DIR)
ifndef DUMP_TARGET_DB
$(BUILD_DIR)/.prepared: Makefile
@mkdir -p $$(dirname $@)
@touch $@
tmp/.prereq_packages: .config
unset ERROR; \
for package in $(sort $(prereq-y) $(prereq-m)); do \
$(_SINGLE)$(NO_TRACE_MAKE) -s -r -C package/$$package prereq || ERROR=1; \
done; \
if [ -n "$$ERROR" ]; then \
echo "Package prerequisite check failed."; \
false; \
fi
touch $@
endif
# check prerequisites before starting to build
prereq: $(target/stamp-prereq) tmp/.prereq_packages
@if [ ! -f "$(INCLUDE_DIR)/site/$(REAL_GNU_TARGET_NAME)" ]; then \
echo 'ERROR: Missing site config for target "$(REAL_GNU_TARGET_NAME)" !'; \
echo ' The missing file will cause configure scripts to fail during compilation.'; \
echo ' Please provide a "$(INCLUDE_DIR)/site/$(REAL_GNU_TARGET_NAME)" file and restart the build.'; \
exit 1; \
fi
prepare: .config $(tools/stamp-install) $(toolchain/stamp-install)
world: prepare $(target/stamp-compile) $(package/stamp-compile) $(package/stamp-install) $(target/stamp-install) FORCE
$(_SINGLE)$(SUBMAKE) -r package/index
# update all feeds, re-create index files, install symlinks
package/symlinks:
$(SCRIPT_DIR)/feeds update -a
$(SCRIPT_DIR)/feeds install -a
# re-create index files, install symlinks
package/symlinks-install:
$(SCRIPT_DIR)/feeds update -i
$(SCRIPT_DIR)/feeds install -a
# remove all symlinks, don't touch ./feeds
package/symlinks-clean:
$(SCRIPT_DIR)/feeds uninstall -a
.PHONY: clean dirclean prereq prepare world package/symlinks package/symlinks-install package/symlinks-clean
endif

35
README

@ -0,0 +1,35 @@
This is the buildsystem for the OpenWrt Linux distribution.
Please use "make menuconfig" to configure your appreciated
configuration for the toolchain and firmware.
You need to have installed gcc, binutils, bzip2, flex, python, perl
make, find, grep, diff, unzip, gawk, getopt, libz-dev and libc headers.
Run "./scripts/feeds update -a" to get all the latest package definitions
defined in feeds.conf / feeds.conf.default respectively
and "./scripts/feeds install -a" to install symlinks of all of them into
package/feeds/.
Use "make menuconfig" to configure your image.
Simply running "make" will build your firmware.
It will download all sources, build the cross-compile toolchain,
the kernel and all choosen applications.
You can use "scripts/flashing/flash.sh" for remotely updating your embedded
system via tftp.
The OpenWrt system is documented in docs/. You will need a LaTeX distribution
and the tex4ht package to build the documentation. Type "make -C docs/" to build it.
To build your own firmware you need to have access to a Linux, BSD or MacOSX system
(case-sensitive filesystem required). Cygwin will not be supported because of
the lack of case sensitiveness in the file system.
Sunshine!
Your OpenWrt Project
http://openwrt.org

206
config/Config-build.in

@ -0,0 +1,206 @@
# Copyright (C) 2006-2013 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
menu "Global build settings"
config ALL
bool "Select all packages by default"
default n
comment "General build options"
config DISPLAY_SUPPORT
bool "Show packages that require graphics support (local or remote)"
default n
config BUILD_PATENTED
default y
bool "Compile with support for patented functionality"
help
When this option is disabled, software which provides patented functionality will not be built.
In case software provides optional support for patented functionality,
this optional support will get disabled for this package.
config BUILD_NLS
default n
bool "Compile with full language support"
help
When this option is enabled, packages are built with the full versions of iconv and GNU gettext
instead of the default OpenWrt stubs. If uClibc is used, it is also built with locale support.
config BUILD_STATIC_TOOLS
default n
bool "Attempt to link host utilities statically"
help
Linking host utilities like sed or firmware-utils statically increases the portability of the
generated ImageBuilder and SDK tarballs, however it may fail on some Linux distributions.
config SHADOW_PASSWORDS
bool
prompt "Enable shadow password support"
default y
help
Enable shadow password support.
config CLEAN_IPKG
bool
prompt "Remove ipkg/opkg status data files in final images"
default n
help
This removes all ipkg/opkg status data files from the target directory before building the root fs
config COLLECT_KERNEL_DEBUG
bool
prompt "Collect kernel debug information"
select KERNEL_DEBUG_INFO
default n
help
This collects debugging symbols from the kernel and all compiled modules.
Useful for release builds, so that kernel issues can be debugged offline later.
comment "Kernel build options"
source "config/Config-kernel.in"
comment "Package build options"
config DEBUG
bool
prompt "Compile packages with debugging info"
default n
help
Adds -g3 to the CFLAGS
config IPV6
bool
prompt "Enable IPv6 support in packages"
default y
help
Enable IPV6 support in packages (passes --enable-ipv6 to configure scripts).
config PKG_BUILD_PARALLEL
bool
prompt "Compile certain packages parallelized"
default y
help
This adds a -jX option to certain packages that are known to
behave well for parallel build. By default the package make processes
use the main jobserver, in which case this option only takes effect
when you add -jX to the make command.
If you are unsure, select N.
config PKG_BUILD_USE_JOBSERVER
bool
prompt "Use top-level make jobserver for packages"
depends on PKG_BUILD_PARALLEL
default y
help
This passes the main make process jobserver fds to package builds,
enabling full parallelization across different packages
Note that disabling this may overcommit CPU resources depending on the
-j level of the main make process, the number of package
submake jobs selected below and the number of actual CPUs present.
Example: If the main make is passed a -j4 and the submake -j
is also set to 4, we may end up with 16 parallel make processes
in the worst case.
config PKG_BUILD_JOBS
int
prompt "Number of package submake jobs (2-512)"
range 2 512
default 2
depends on PKG_BUILD_PARALLEL && !PKG_BUILD_USE_JOBSERVER
help
The number of jobs (-jX) to pass to packages submake.
config PKG_DEFAULT_PARALLEL
bool
prompt "Parallelize the default package build rule (May break build)"
depends on PKG_BUILD_PARALLEL
depends on BROKEN
default n
help
Always set the default package build rules to parallel build.
WARNING: This may break build or kill your cat, as it builds
packages with multiple jobs that are probably not tested in
a parallel build environment.
Only say Y, if you don't mind fixing broken packages.
Before reporting build bugs, set this to N and re-run the build.
comment "Stripping options"
choice
prompt "Binary stripping method"
default USE_STRIP if EXTERNAL_TOOLCHAIN
default USE_STRIP if USE_GLIBC || USE_EGLIBC || USE_MUSL
default USE_SSTRIP
help
Select the binary stripping method you wish to use.
config NO_STRIP
bool "none"
help
This will install unstripped binaries (useful for native compiling/debugging)
config USE_STRIP
bool "strip"
help
This will install binaries stripped using strip from binutils
config USE_SSTRIP
bool "sstrip"
depends on !DEBUG
depends on !USE_GLIBC
depends on !USE_EGLIBC
help
This will install binaries stripped using sstrip
endchoice
config STRIP_ARGS
string
prompt "Strip arguments"
depends on USE_STRIP
default "--strip-unneeded --remove-section=.comment --remove-section=.note" if DEBUG
default "--strip-all"
help
Specifies arguments passed to the strip command when stripping binaries
config STRIP_KERNEL_EXPORTS
bool "Strip unnecessary exports from the kernel image"
help
Reduces kernel size by stripping unused kernel exports from the kernel image
Note that this might make the kernel incompatible with any kernel modules that
were not selected at the time the kernel image was created
config USE_MKLIBS
bool "Strip unnecessary functions from libraries"
help
Reduces libraries to only those functions that are necessary for using all
selected packages (including those selected as <M>)
Note that this will make the system libraries incompatible with most of the packages
that are not selected during the build process
choice
prompt "Preferred standard C++ library"
default USE_LIBSTDCXX if USE_EGLIBC
default USE_UCLIBCXX
help
Select the preferred standard C++ library for all packages that support this.
config USE_UCLIBCXX
bool "uClibc++"
config USE_LIBSTDCXX
bool "libstdc++"
endchoice
endmenu

100
config/Config-devel.in

@ -0,0 +1,100 @@
# Copyright (C) 2006-2013 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
menuconfig DEVEL
bool "Advanced configuration options (for developers)"
default n
config BROKEN
bool "Show broken platforms / packages" if DEVEL
default n
config BINARY_FOLDER
string "Binary folder" if DEVEL
default ""
config DOWNLOAD_FOLDER
string "Download folder" if DEVEL
default ""
config LOCALMIRROR
string "Local mirror for source packages" if DEVEL
default ""
config AUTOREBUILD
bool "Automatic rebuild of packages" if DEVEL
default y
help
Automatically rebuild packages when their files change
config BUILD_SUFFIX
string "Build suffix to append to the BUILD_DIR variable" if DEVEL
default ""
help
Build suffix to append to the BUILD_DIR variable, i.e: build_dir_suffix
config TARGET_ROOTFS_DIR
string "Override the default TARGET_ROOTFS_DIR variable" if DEVEL
default ""
help
Override the default TARGET_ROOTFS_DIR variable content $(BUILD_DIR) with custom path.
Use this option to re-define the location of the target root file system directory.
config CCACHE
bool "Use ccache" if DEVEL
default n
help
Compiler cache; see http://ccache.samba.org/
config EXTERNAL_KERNEL_TREE
string "Use external kernel tree" if DEVEL
default ""
config KERNEL_GIT_CLONE_URI
string "Enter git repository to clone" if DEVEL
default ""
help
Enter the full git repository path i.e.:
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
This will create a git clone of the kernel in your build
directory.
config KERNEL_GIT_LOCAL_REPOSITORY
string "Enter path to local reference repository" if DEVEL
depends on (KERNEL_GIT_CLONE_URI != "")
default ""
help
Enter a full pathname to a local reference git repository.
In this instance, the --refererence option of git clone will
be used thus creating a quick local clone of your repo.
config KERNEL_GIT_BRANCH
string "Enter git branch to clone" if DEVEL
depends on (KERNEL_GIT_CLONE_URI != "")
default ""
help
Enter the branch name to checkout after cloning the git repository.
In this instance, the --branch option of git clone will be used.
If unused, the clone's repository HEAD will be checked-out.
config BUILD_LOG
bool "Enable log files during build process" if DEVEL
help
If enabled log files will be written to the ./log directory
config SRC_TREE_OVERRIDE
bool "Enable package source tree override" if DEVEL
help
If enabled, you can force a package to use a git tree as source
code instead of the normal tarball. Create a symlink 'git-src'
in the package directory, pointing to the .git tree that you want
to pull the source code from
config EXTRA_OPTIMIZATION
string "Additional compiler options" if DEVEL
default "-fno-caller-saves"
help
Extra Target-independent optimizations to use when building for the target.

317
config/Config-images.in

@ -0,0 +1,317 @@
# Copyright (C) 2006-2013 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
menu "Target Images"
menuconfig TARGET_ROOTFS_INITRAMFS
bool "ramdisk"
default y if USES_INITRAMFS
help
Embed the rootfs into the kernel (initramfs)
choice
prompt "Compression"
default TARGET_INITRAMFS_COMPRESSION_LZMA if TARGET_ar71xx
default TARGET_INITRAMFS_COMPRESSION_LZMA if TARGET_ramips
default TARGET_INITRAMFS_COMPRESSION_NONE
depends on TARGET_ROOTFS_INITRAMFS
help
Select ramdisk compression.
config TARGET_INITRAMFS_COMPRESSION_NONE
bool "none"
config TARGET_INITRAMFS_COMPRESSION_GZIP
bool "gzip"
config TARGET_INITRAMFS_COMPRESSION_BZIP2
bool "bzip2"
config TARGET_INITRAMFS_COMPRESSION_LZMA
bool "lzma"
config TARGET_INITRAMFS_COMPRESSION_LZO
bool "lzo"
config TARGET_INITRAMFS_COMPRESSION_LZ4
bool "lz4"
config TARGET_INITRAMFS_COMPRESSION_XZ
bool "xz"
endchoice
config EXTERNAL_CPIO
string
prompt "Use external cpio" if TARGET_ROOTFS_INITRAMFS
default ""
help
Kernel uses specified external cpio as INITRAMFS_SOURCE
comment "Root filesystem archives"
config TARGET_ROOTFS_CPIOGZ
bool "cpio.gz"
default y if USES_CPIOGZ
help
Build a compressed cpio archive of the the root filesystem
config TARGET_ROOTFS_TARGZ
bool "tar.gz"
default y if USES_TARGZ
help
Build a compressed tar archive of the the root filesystem
comment "Root filesystem images"
menuconfig TARGET_ROOTFS_EXT4FS
bool "ext4"
default y if USES_EXT4
help
Build a ext4 root filesystem
config TARGET_EXT4_MAXINODE
int "Maximum number of inodes in root filesystem"
depends on TARGET_ROOTFS_EXT4FS
default 6000
help
Allows you to change the maximum number of inodes in the root filesystem
config TARGET_EXT4_RESERVED_PCT
int "Percentage of reserved blocks in root filesystem"
depends on TARGET_ROOTFS_EXT4FS
default 0
help
Allows you to change the percentage of reserved blocks in the root filesystem
choice
prompt "Root filesystem block size"
default TARGET_EXT4_BLOCKSIZE_4K
depends on TARGET_ROOTFS_EXT4FS
help
Allows you to change the block size of the root filesystem
config TARGET_EXT4_BLOCKSIZE_4K
bool "4k"
config TARGET_EXT4_BLOCKSIZE_2K
bool "2k"
config TARGET_EXT4_BLOCKSIZE_1K
bool "1k"
endchoice
config TARGET_EXT4_BLOCKSIZE
int
default 4096 if TARGET_EXT4_BLOCKSIZE_4K
default 2048 if TARGET_EXT4_BLOCKSIZE_2K
default 1024 if TARGET_EXT4_BLOCKSIZE_1K
depends on TARGET_ROOTFS_EXT4FS
config TARGET_EXT4_JOURNAL
bool "Create a journaling filesystem"
depends on TARGET_ROOTFS_EXT4FS
default n
help
Create an ext4 filesystem with a journal
config TARGET_ROOTFS_ISO
bool "iso"
default n
depends on TARGET_x86_generic
help
Create some bootable ISO image
config TARGET_ROOTFS_JFFS2
bool "jffs2"
default y if USES_JFFS2
help
Build a jffs2 root filesystem
config TARGET_ROOTFS_JFFS2_NAND
bool "jffs2 for NAND"
default y if USES_JFFS2_NAND
depends on USES_JFFS2_NAND
help
Build a jffs2 root filesystem for NAND flash
menuconfig TARGET_ROOTFS_SQUASHFS
bool "squashfs"
default y if USES_SQUASHFS
help
Build a squashfs-lzma root filesystem
config TARGET_SQUASHFS_BLOCK_SIZE
int "Block size (in KiB)"
depends on TARGET_ROOTFS_SQUASHFS
default 64 if LOW_MEMORY_FOOTPRINT
default 256
menuconfig TARGET_ROOTFS_UBIFS
bool "ubifs"
default y if USES_UBIFS
depends on USES_UBIFS
help
Build a ubifs root filesystem
choice
prompt "compression"
default TARGET_UBIFS_COMPRESSION_ZLIB
depends on TARGET_ROOTFS_UBIFS
help
Select compression type
config TARGET_UBIFS_COMPRESSION_NONE
bool "none"
config TARGET_UBIFS_COMPRESSION_LZO
bool "lzo"
config TARGET_UBIFS_COMPRESSION_ZLIB
bool "zlib"
endchoice
config TARGET_UBIFS_FREE_SPACE_FIXUP
bool "free space fixup" if TARGET_ROOTFS_UBIFS
default y
help
The file-system free space has to be fixed up on first mount
config TARGET_UBIFS_JOURNAL_SIZE
string
prompt "journal size" if TARGET_ROOTFS_UBIFS
default ""
config GRUB_IMAGES
bool "Build GRUB images (Linux x86 or x86_64 host only)"
depends on TARGET_x86_64 || (TARGET_x86 && !(TARGET_x86_olpc || TARGET_x86_rdc))
depends on TARGET_ROOTFS_EXT4FS || TARGET_ROOTFS_ISO || TARGET_ROOTFS_JFFS2 || TARGET_ROOTFS_SQUASHFS
select PACKAGE_grub2
default y
config GRUB_CONSOLE
bool "Use Console Terminal (in addition to Serial)"
depends on GRUB_IMAGES
default n if (TARGET_x86_generic_Soekris45xx || TARGET_x86_generic_Soekris48xx || TARGET_x86_net5501 || TARGET_x86_geos || TARGET_x86_alix2)
default y
config GRUB_SERIAL
string "Serial port device"
depends on GRUB_IMAGES
default "hvc0" if TARGET_x86_xen_domu
default "ttyS0" if ! TARGET_x86_xen_domu
config GRUB_BAUDRATE
int "Serial port baud rate"
depends on GRUB_IMAGES
default 19200 if TARGET_x86_generic_Soekris45xx || TARGET_x86_generic_Soekris48xx || TARGET_x86_net5501
default 38400 if TARGET_x86_alix2
default 115200 if TARGET_x86_geos || TARGET_x86_kvm_guest
default 38400
config GRUB_BOOTOPTS
string "Extra kernel boot options"
depends on GRUB_IMAGES
default "xencons=hvc" if TARGET_x86_xen_domu
help
If you don't know, just leave it blank.
config GRUB_TIMEOUT
string "Seconds to wait before booting the default entry"
depends on GRUB_IMAGES
default "5"
help
If you don't know, 5 seconds is a reasonable default.
config VDI_IMAGES
bool "Build VirtualBox image files (VDI)"
depends on TARGET_x86 || TARGET_x86_64
select GRUB_IMAGES
select TARGET_IMAGES_PAD
select PACKAGE_kmod-e1000
config VMDK_IMAGES
bool "Build VMware image files (VMDK)"
depends on TARGET_x86 || TARGET_x86_64
select GRUB_IMAGES
select TARGET_IMAGES_PAD
select PACKAGE_kmod-e1000
config TARGET_IMAGES_PAD
bool "Pad images to filesystem size (for JFFS2)"
depends on OLPC_BOOTSCRIPT_IMAGES || GRUB_IMAGES
config TARGET_IMAGES_GZIP
bool "GZip images"
depends on TARGET_IMAGES_PAD || TARGET_ROOTFS_EXT4FS
default y
comment "Image Options"
source "target/linux/*/image/Config.in"
config TARGET_KERNEL_PARTSIZE
int "Kernel partition size (in MB)"
depends on OLPC_BOOTSCRIPT_IMAGES || GRUB_IMAGES
default 4
config TARGET_ROOTFS_PARTSIZE
int "Root filesystem partition size (in MB)"
depends on GRUB_IMAGES || TARGET_ROOTFS_EXT4FS || TARGET_rb532
default 48
help
Allows you to change the root filesystem partition size
config TARGET_ROOTFS_PARTNAME
string "Root partition on target device"
depends on OLPC_BOOTSCRIPT_IMAGES || GRUB_IMAGES
default "/dev/xvda2" if TARGET_x86_xen_domu
default "/dev/sda2" if ! TARGET_x86_xen_domu
help
The root partition on the final device. If you don't know,
you probably want the default (/dev/sda2).
menuconfig TARGET_ROOTFS_INCLUDE_KERNEL
bool "Include kernel in root filesystem"
depends on TARGET_ROOTFS_UBIFS || TARGET_ROOTFS_EXT4FS
default n
help
Include the kernel image in the rootfs. Typically the image is placed
below /boot.
config TARGET_ROOTFS_INCLUDE_UIMAGE
bool "include uImage" if TARGET_ROOTFS_INCLUDE_KERNEL
default y
help
This option might not apply to all targets. Make sure
to check target/linux/<your_target>/image/Makefile to
see if this option will have any effect.
config TARGET_ROOTFS_INCLUDE_ZIMAGE
bool "include zImage" if TARGET_ROOTFS_INCLUDE_KERNEL
default y
help
This option might not apply to all targets. Make sure
to check target/linux/<your_target>/image/Makefile to
see if this option will have any effect.
config TARGET_ROOTFS_INCLUDE_FIT
bool "include FIT" if TARGET_ROOTFS_INCLUDE_KERNEL
default y
help
This option might not apply to all targets. Make sure
to check target/linux/<your_target>/image/Makefile to
see if this option will have any effect.
config TARGET_ROOTFS_INCLUDE_DTB
bool "Include DTB in root filesystem"
depends on USES_DEVICETREE && (TARGET_ROOTFS_UBIFS || TARGET_ROOTFS_EXT4FS)
default n
help
Include the device tree blob file(s) in the rootfs. Typically the DTBs
are placed below /boot.
endmenu

466
config/Config-kernel.in

@ -0,0 +1,466 @@
# Copyright (C) 2006-2014 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
config KERNEL_PRINTK
bool "Enable support for printk"
default y
config KERNEL_CRASHLOG
bool "Crash logging"
depends on !(arm || powerpc || sparc || TARGET_uml)
default y
config KERNEL_SWAP
bool "Support for paging of anonymous memory (swap)"
default y
config KERNEL_DEBUG_FS
bool "Compile the kernel with Debug FileSystem enabled"
default y
help
debugfs is a virtual file system that kernel developers use to put
debugging files into. Enable this option to be able to read and
write to these files.
config KERNEL_PERF_EVENTS
bool
default n
config KERNEL_PROFILING
bool "Compile the kernel with profiling enabled"
default n
select KERNEL_PERF_EVENTS
help
Enable the extended profiling support mechanisms used by profilers such
as OProfile.
config KERNEL_KALLSYMS
bool "Compile the kernel with symbol table information"
default y
help
This will give you more information in stack traces from kernel oopses
config KERNEL_FTRACE
bool "Compile the kernel with tracing support"
default n
config KERNEL_FTRACE_SYSCALLS
bool "Trace system calls"
depends on KERNEL_FTRACE
default n
config KERNEL_ENABLE_DEFAULT_TRACERS
bool "Trace process context switches and events"
depends on KERNEL_FTRACE
default n
config KERNEL_DEBUG_KERNEL
bool
default n
config KERNEL_DEBUG_INFO
bool "Compile the kernel with debug information"
default y
select KERNEL_DEBUG_KERNEL
help
This will compile your kernel and modules with debug information.
config KERNEL_DEBUG_LL_UART_NONE
bool
default n
depends on arm
config KERNEL_DEBUG_LL
bool
default n
depends on arm
select KERNEL_DEBUG_LL_UART_NONE
help
ARM low level debugging
config KERNEL_DYNAMIC_DEBUG
bool "Compile the kernel with dynamic printk"
select KERNEL_DEBUG_FS
default n
help
Compiles debug level messages into the kernel, which would not
otherwise be available at runtime. These messages can then be
enabled/disabled based on various levels of scope - per source file,
function, module, format string, and line number. This mechanism
implicitly compiles in all pr_debug() and dev_dbg() calls, which
enlarges the kernel text size by about 2%.
config KERNEL_EARLY_PRINTK
bool "Compile the kernel with early printk"
default n
depends on arm
select KERNEL_DEBUG_KERNEL
select KERNEL_DEBUG_LL if arm
help
Compile the kernel with early printk support.
This is only useful for debugging purposes to send messages
over the serial console in early boot.
Enable this to debug early boot problems.
config KERNEL_AIO
bool "Compile the kernel with asynchronous IO support"
default n
config KERNEL_DIRECT_IO
bool "Compile the kernel with direct IO support"
default n
config KERNEL_MAGIC_SYSRQ
bool "Compile the kernel with SysRq support"
default y
config KERNEL_COREDUMP
bool
config KERNEL_ELF_CORE
bool "Enable process core dump support"
select KERNEL_COREDUMP
default y
config KERNEL_PROVE_LOCKING
bool "Enable kernel lock checking"
select KERNEL_DEBUG_KERNEL
default n
config KERNEL_PRINTK_TIME
bool "Enable printk timestamps"
default y
config KERNEL_SLUB_DEBUG
bool
config KERNEL_SLUB_DEBUG_ON
bool
config KERNEL_SLABINFO
select KERNEL_SLUB_DEBUG
select KERNEL_SLUB_DEBUG_ON
bool "Enable /proc slab debug info"
config KERNEL_PROC_PAGE_MONITOR
bool "Enable /proc page monitoring"
config KERNEL_RELAY
bool
config KERNEL_KEXEC
bool "Enable kexec support"
config USE_RFKILL
bool "Enable rfkill support"
default RFKILL_SUPPORT
config USE_SPARSE
bool "Enable sparse check during kernel build"
default n
#
# CGROUP support symbols
#
config KERNEL_CGROUPS
bool "Enable kernel cgroups"
default n
if KERNEL_CGROUPS
config KERNEL_CGROUP_DEBUG
bool "Example debug cgroup subsystem"
default n
help
This option enables a simple cgroup subsystem that
exports useful debugging information about the cgroups
framework.
config KERNEL_FREEZER
bool
default y if KERNEL_CGROUP_FREEZER
config KERNEL_CGROUP_FREEZER
bool "Freezer cgroup subsystem"
default n
help
Provides a way to freeze and unfreeze all tasks in a
cgroup.
config KERNEL_CGROUP_DEVICE
bool "Device controller for cgroups"
default y
help
Provides a cgroup implementing whitelists for devices which
a process in the cgroup can mknod or open.
config KERNEL_CPUSETS
bool "Cpuset support"
default n
help
This option will let you create and manage CPUSETs which
allow dynamically partitioning a system into sets of CPUs and
Memory Nodes and assigning tasks to run only within those sets.
This is primarily useful on large SMP or NUMA systems.
config KERNEL_PROC_PID_CPUSET
bool "Include legacy /proc/<pid>/cpuset file"
default n
depends on KERNEL_CPUSETS
config KERNEL_CGROUP_CPUACCT
bool "Simple CPU accounting cgroup subsystem"
default n
help
Provides a simple Resource Controller for monitoring the
total CPU consumed by the tasks in a cgroup.
config KERNEL_RESOURCE_COUNTERS
bool "Resource counters"
default n
help
This option enables controller independent resource accounting
infrastructure that works with cgroups.
config KERNEL_MM_OWNER
bool
default y if KERNEL_MEMCG
config KERNEL_MEMCG
bool "Memory Resource Controller for Control Groups"
default n
depends on KERNEL_RESOURCE_COUNTERS
help
Provides a memory resource controller that manages both anonymous
memory and page cache. (See Documentation/cgroups/memory.txt)
Note that setting this option increases fixed memory overhead
associated with each page of memory in the system. By this,
20(40)bytes/PAGE_SIZE on 32(64)bit system will be occupied by memory
usage tracking struct at boot. Total amount of this is printed out
at boot.
Only enable when you're ok with these trade offs and really
sure you need the memory resource controller. Even when you enable
this, you can set "cgroup_disable=memory" at your boot option to
disable memory resource controller and you can avoid overheads.
(and lose benefits of memory resource controller)
This config option also selects MM_OWNER config option, which
could in turn add some fork/exit overhead.
config KERNEL_MEMCG_SWAP
bool "Memory Resource Controller Swap Extension"
default n
depends on KERNEL_MEMCG
help
Add swap management feature to memory resource controller. When you
enable this, you can limit mem+swap usage per cgroup. In other words,
when you disable this, memory resource controller has no cares to
usage of swap...a process can exhaust all of the swap. This extension
is useful when you want to avoid exhaustion swap but this itself
adds more overheads and consumes memory for remembering information.
Especially if you use 32bit system or small memory system, please
be careful about enabling this. When memory resource controller
is disabled by boot option, this will be automatically disabled and
there will be no overhead from this. Even when you set this config=y,
if boot option "swapaccount=0" is set, swap will not be accounted.
Now, memory usage of swap_cgroup is 2 bytes per entry. If swap page
size is 4096bytes, 512k per 1Gbytes of swap.
config KERNEL_MEMCG_SWAP_ENABLED
bool "Memory Resource Controller Swap Extension enabled by default"
default n
depends on KERNEL_MEMCG_SWAP
help
Memory Resource Controller Swap Extension comes with its price in
a bigger memory consumption. General purpose distribution kernels
which want to enable the feature but keep it disabled by default
and let the user enable it by swapaccount boot command line
parameter should have this option unselected.
For those who want to have the feature enabled by default should
select this option (if, for some reason, they need to disable it
then swapaccount=0 does the trick).
config KERNEL_MEMCG_KMEM
bool "Memory Resource Controller Kernel Memory accounting (EXPERIMENTAL)"
default n
depends on KERNEL_MEMCG
help
The Kernel Memory extension for Memory Resource Controller can limit
the amount of memory used by kernel objects in the system. Those are
fundamentally different from the entities handled by the standard
Memory Controller, which are page-based, and can be swapped. Users of
the kmem extension can use it to guarantee that no group of processes
will ever exhaust kernel resources alone.
config KERNEL_CGROUP_PERF
bool "Enable perf_event per-cpu per-container group (cgroup) monitoring"
select KERNEL_PERF_EVENTS
default n
help
This option extends the per-cpu mode to restrict monitoring to
threads which belong to the cgroup specified and run on the
designated cpu.
menuconfig KERNEL_CGROUP_SCHED
bool "Group CPU scheduler"
default n
help
This feature lets CPU scheduler recognize task groups and control CPU
bandwidth allocation to such task groups. It uses cgroups to group
tasks.
if KERNEL_CGROUP_SCHED
config KERNEL_FAIR_GROUP_SCHED
bool "Group scheduling for SCHED_OTHER"
default n
config KERNEL_CFS_BANDWIDTH
bool "CPU bandwidth provisioning for FAIR_GROUP_SCHED"
default n
depends on KERNEL_FAIR_GROUP_SCHED
help
This option allows users to define CPU bandwidth rates (limits) for
tasks running within the fair group scheduler. Groups with no limit
set are considered to be unconstrained and will run with no
restriction.
See tip/Documentation/scheduler/sched-bwc.txt for more information.
config KERNEL_RT_GROUP_SCHED
bool "Group scheduling for SCHED_RR/FIFO"
default n
help
This feature lets you explicitly allocate real CPU bandwidth
to task groups. If enabled, it will also make it impossible to
schedule realtime tasks for non-root users until you allocate
realtime bandwidth for them.
endif
config KERNEL_BLK_CGROUP
bool "Block IO controller"
default y
help
Generic block IO controller cgroup interface. This is the common
cgroup interface which should be used by various IO controlling
policies.
Currently, CFQ IO scheduler uses it to recognize task groups and
control disk bandwidth allocation (proportional time slice allocation)
to such task groups. It is also used by bio throttling logic in
block layer to implement upper limit in IO rates on a device.
This option only enables generic Block IO controller infrastructure.
One needs to also enable actual IO controlling logic/policy. For
enabling proportional weight division of disk bandwidth in CFQ, set
CONFIG_CFQ_GROUP_IOSCHED=y; for enabling throttling policy, set
CONFIG_BLK_DEV_THROTTLING=y.
config KERNEL_DEBUG_BLK_CGROUP
bool "Enable Block IO controller debugging"
default n
depends on KERNEL_BLK_CGROUP
help
Enable some debugging help. Currently it exports additional stat
files in a cgroup which can be useful for debugging.
config KERNEL_NET_CLS_CGROUP
bool "Control Group Classifier"
default y
config KERNEL_NETPRIO_CGROUP
bool "Network priority cgroup"
default y
endif
#
# Namespace support symbols
#
config KERNEL_NAMESPACES
bool "Enable kernel namespaces"
default n
if KERNEL_NAMESPACES
config KERNEL_UTS_NS
bool "UTS namespace"
default y
help
In this namespace tasks see different info provided
with the uname() system call
config KERNEL_IPC_NS
bool "IPC namespace"
default y
help
In this namespace tasks work with IPC ids which correspond to
different IPC objects in different namespaces.
config KERNEL_USER_NS
bool "User namespace (EXPERIMENTAL)"
default y
help
This allows containers, i.e. vservers, to use user namespaces
to provide different user info for different servers.
config KERNEL_PID_NS
bool "PID Namespaces"
default y
help
Support process id namespaces. This allows having multiple
processes with the same pid as long as they are in different
pid namespaces. This is a building block of containers.
config KERNEL_NET_NS
bool "Network namespace"
default y
help
Allow user space to create what appear to be multiple instances
of the network stack.
endif
#
# LXC related symbols
#
config KERNEL_LXC_MISC
bool "Enable miscellaneous LXC related options"
default n
if KERNEL_LXC_MISC
config KERNEL_DEVPTS_MULTIPLE_INSTANCES
bool "Support multiple instances of devpts"
default y
help
Enable support for multiple instances of devpts filesystem.
If you want to have isolated PTY namespaces (eg: in containers),
say Y here. Otherwise, say N. If enabled, each mount of devpts
filesystem with the '-o newinstance' option will create an
independent PTY namespace.
config KERNEL_POSIX_MQUEUE
bool "POSIX Message Queues"
default y
help
POSIX variant of message queues is a part of IPC. In POSIX message
queues every message has a priority which decides about succession
of receiving it by a process. If you want to compile and run
programs written e.g. for Solaris with use of its POSIX message
queues (functions mq_*) say Y here.
POSIX message queues are visible as a filesystem called 'mqueue'
and can be mounted somewhere if you want to do filesystem
operations on message queues.
endif

15
docs/.gitignore

@ -0,0 +1,15 @@
*.log
*.aux
*.toc
*.out
*.lg
*.dvi
*.idv
*.4ct
*.4tc
*.xref
*.tmp
*.dvi
*.html
*.css
*.pdf

48
docs/Makefile

@ -0,0 +1,48 @@
ifeq ($(TOPDIR),)
TOPDIR:=${CURDIR}/..
endif
PKG_NAME=docs
all: compile
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/prereq.mk
MAIN = openwrt.tex
DEPS = $(MAIN) Makefile config.tex network.tex network-scripts.tex network-scripts.tex wireless.tex build.tex adding.tex bugs.tex debugging.tex $(TMP_DIR)/.prereq-docs
compile: $(TMP_DIR)/.prereq-docs
$(NO_TRACE_MAKE) cleanup
latex $(MAIN)
$(NO_TRACE_MAKE) openwrt.pdf openwrt.html
$(NO_TRACE_MAKE) cleanup
$(TMP_DIR)/.prereq-docs:
mkdir -p $(TMP_DIR)
$(NO_TRACE_MAKE) prereq
touch $@
openwrt.html: $(DEPS)
htlatex $(MAIN)
openwrt.pdf: $(DEPS)
pdflatex $(MAIN)
clean: cleanup
rm -f openwrt.pdf openwrt.html openwrt.css
cleanup: FORCE
rm -f *.log *.aux *.toc *.out *.lg *.dvi *.idv *.4ct *.4tc *.xref *.tmp *.dvi
$(eval $(call RequireCommand,latex, \
You need to install LaTeX to build the OpenWrt documentation \
))
$(eval $(call RequireCommand,pdflatex, \
You need to install PDFLaTeX to build the OpenWrt documentation \
))
$(eval $(call RequireCommand,htlatex, \
You need to install tex4ht to build the OpenWrt documentation \
))
FORCE:
.PHONY: FORCE

590
docs/adding.tex

@ -0,0 +1,590 @@
Linux is now one of the most widespread operating system for embedded devices due
to its openess as well as the wide variety of platforms it can run on. Many
manufacturer actually use it in firmware you can find on many devices: DVB-T
decoders, routers, print servers, DVD players ... Most of the time the stock
firmware is not really open to the consumer, even if it uses open source software.
You might be interested in running a Linux based firmware for your router for
various reasons: extending the use of a network protocol (such as IPv6), having
new features, new piece of software inside, or for security reasons. A fully
open-source firmware is de-facto needed for such applications, since you want to
be free to use this or that version of a particular reason, be able to correct a
particular bug. Few manufacturers do ship their routers with a Sample Development Kit,
that would allow you to create your own and custom firmware and most of the time,
when they do, you will most likely not be able to complete the firmware creation process.
This is one of the reasons why OpenWrt and other firmware exists: providing a
version independent, and tools independent firmware, that can be run on various
platforms, known to be running Linux originally.
\subsection{Which Operating System does this device run?}
There is a lot of methods to ensure your device is running Linux. Some of them do
need your router to be unscrewed and open, some can be done by probing the device
using its external network interfaces.
\subsubsection{Operating System fingerprinting and port scanning}
A large bunch of tools over the Internet exists in order to let you do OS
fingerprinting, we will show here an example using \textbf{nmap}:
\begin{Verbatim}
nmap -P0 -O <IP address>
Starting Nmap 4.20 ( http://insecure.org ) at 2007-01-08 11:05 CET
Interesting ports on 192.168.2.1:
Not shown: 1693 closed ports
PORT STATE SERVICE
22/tcp open ssh
23/tcp open telnet
53/tcp open domain
80/tcp open http
MAC Address: 00:13:xx:xx:xx:xx (Cisco-Linksys)
Device type: broadband router
Running: Linksys embedded
OS details: Linksys WRT54GS v4 running OpenWrt w/Linux kernel 2.4.30
Network Distance: 1 hop
\end{Verbatim}
nmap is able to report whether your device uses a Linux TCP/IP stack, and if so,
will show you which Linux kernel version is probably runs. This report is quite
reliable and it can make the distinction between BSD and Linux TCP/IP stacks and others.
Using the same tool, you can also do port scanning and service version discovery.
For instance, the following command will report which IP-based services are running
on the device, and which version of the service is being used:
\begin{verbatim}
nmap -P0 -sV <IP address>
Starting Nmap 4.20 ( http://insecure.org ) at 2007-01-08 11:06 CET
Interesting ports on 192.168.2.1:
Not shown: 1693 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh Dropbear sshd 0.48 (protocol 2.0)
23/tcp open telnet Busybox telnetd
53/tcp open domain ISC Bind dnsmasq-2.35
80/tcp open http OpenWrt BusyBox httpd
MAC Address: 00:13:xx:xx:xx:xx (Cisco-Linksys)
Service Info: Device: WAP
\end{verbatim}
The web server version, if identified, can be determining in knowing the Operating
System. For instance, the \textbf{BOA} web server is typical from devices running
an open-source Unix or Unix-like.
\subsubsection{Wireless Communications Fingerprinting}
Although this method is not really known and widespread, using a wireless scanner
to discover which OS your router or Access Point run can be used. We do not have
a clear example of how this could be achieved, but you will have to monitor raw
802.11 frames and compare them to a very similar device running a Linux based firmware.
\subsubsection{Web server security exploits}
The Linksys WRT54G was originally hacked by using a "ping bug" discovered in the
web interface. This tip has not been fixed for months by Linksys, allowing people
to enable the "boot\_wait" helper process via the web interface. Many web servers
used in firmwares are open source web server, thus allowing the code to be audited
to find an exploit. Once you know the web server version that runs on your device,
by using \textbf{nmap -sV} or so, you might be interested in using exploits to reach
shell access on your device.
\subsubsection{Native Telnet/SSH access}
Some firmwares might have restricted or unrestricted Telnet/SSH access, if so,
try to log in with the web interface login/password and see if you can type in
some commands. This is actually the case for some Broadcom BCM963xx based firmwares
such as the one in Neuf/Cegetel ISP routers, Club-Internet ISP CI-Box and many
others. Some commands, like \textbf{cat} might be left here and be used to
determine the Linux kernel version.
\subsubsection{Analysing a binary firmware image}
You are very likely to find a firmware binary image on the manufacturer website,
even if your device runs a proprietary operating system. If so, you can download
it and use an hexadecimal editor to find printable words such as \textbf{vmlinux},
\textbf{linux}, \textbf{ramdisk}, \textbf{mtd} and others.
Some Unix tools like \textbf{hexdump} or \textbf{strings} can be used to analyse
the firmware. Below there is an example with a binary firmware found other the Internet:
\begin{verbatim}
hexdump -C <binary image.extension> | less (more)
00000000 46 49 52 45 32 2e 35 2e 30 00 00 00 00 00 00 00 |FIRE2.5.0.......|
00000010 00 00 00 00 31 2e 30 2e 30 00 00 00 00 00 00 00 |....1.0.0.......|
00000020 00 00 00 00 00 00 00 38 00 43 36 29 00 0a e6 dc |.......8.C6)..??|
00000030 54 49 44 45 92 89 54 66 1f 8b 08 08 f8 10 68 42 |TIDE..Tf....?.hB|
00000040 02 03 72 61 6d 64 69 73 6b 00 ec 7d 09 bc d5 d3 |..ramdisk.?}.???|
00000050 da ff f3 9b f7 39 7b ef 73 f6 19 3b 53 67 ea 44 |???.?9{?s?.;Sg?D|
\end{verbatim}
Scroll over the firmware to find printable words that can be significant.