| 1 | \documentclass[12pt,a4paper,openany,smallheadings,headinclude,headsepline,final]{scrreprt}
|
|---|
| 2 | %\usepackage{ucs} % Unicode support
|
|---|
| 3 | \usepackage[utf8]{inputenc} % UTF-8 characters as input are allowed
|
|---|
| 4 | %\usepackage{amsmath}
|
|---|
| 5 | %\usepackage{amsfonts}
|
|---|
| 6 | %\usepackage{amssymb}
|
|---|
| 7 | %\usepackage{caption2}
|
|---|
| 8 | \usepackage[english]{babel} % Sets the layout to English style
|
|---|
| 9 | \usepackage{varioref} % Intelligent page references
|
|---|
| 10 | \usepackage{txfonts}
|
|---|
| 11 | \usepackage[pdftex]{color} % Colour control for LaTeX documents
|
|---|
| 12 | \usepackage[pdftex]{graphicx} % Enhanced support for graphics
|
|---|
| 13 | %\usepackage{listings}
|
|---|
| 14 | \usepackage{makeidx} % Standard LaTeX package for creating indexes
|
|---|
| 15 | \usepackage{longtable} % Allow tables to flow over page boundaries
|
|---|
| 16 | \usepackage[T1]{fontenc} % T1-fonts
|
|---|
| 17 | \usepackage{fancyvrb} % Sophisticated verbatim text
|
|---|
| 18 | \usepackage[a4paper,rmargin=2cm,lmargin=2cm,tmargin=2.5cm,bmargin=3.5cm]{geometry} % Flexible and complete interface to document dimensions
|
|---|
| 19 | \usepackage{fixltx2e, mparhack} % Patches for LaTeX; A workaround for a LaTeX bug in marginpars
|
|---|
| 20 | \usepackage[nofancy]{svninfo} % Typeset Subversion Keywords
|
|---|
| 21 | \usepackage{float} % Improved interface for floating objects
|
|---|
| 22 | \usepackage{hyperref} % Extensive support for hypertext in LaTeX
|
|---|
| 23 |
|
|---|
| 24 |
|
|---|
| 25 | \definecolor{skyblue}{rgb}{0,0.3323,0.5720}
|
|---|
| 26 | \restylefloat{figure}
|
|---|
| 27 | \hypersetup{
|
|---|
| 28 | colorlinks=true,anchorcolor=red,
|
|---|
| 29 | breaklinks=true,linkcolor=blue,urlcolor=red,
|
|---|
| 30 | citecolor=skyblue,
|
|---|
| 31 | pdfauthor={The FreeWRT Team},
|
|---|
| 32 | pdftitle={FreeWRT User Handbook},
|
|---|
| 33 | pdfcreator={tetex and VIM},
|
|---|
| 34 | pdfsubject={Open Source},
|
|---|
| 35 | pdfview=FitV,
|
|---|
| 36 | pdfstartview=FitV,
|
|---|
| 37 | pdfstartpage={1},
|
|---|
| 38 | pdfpagelayout=SinglePage,
|
|---|
| 39 | pdfpagemode=None,
|
|---|
| 40 | pdfkeywords={FreeWRT}
|
|---|
| 41 | }
|
|---|
| 42 | \fvset{fontsize=\small, frame=single} % fancyvrb: set small font size and enable frames
|
|---|
| 43 | %\usepackage{cancel}
|
|---|
| 44 | %\usepackage[final, activate, verbose=true]{microtype}
|
|---|
| 45 | %\usepackage{ngerman}
|
|---|
| 46 | %\usepackage{bookman}
|
|---|
| 47 | %\usepackage[a4paper,twoside,rmargin=2cm,lmargin=2cm,tmargin=2.5cm]{geometry}
|
|---|
| 48 | %\usepackage[a4paper,rmargin=2cm,lmargin=2cm,tmargin=2.5cm,bmargin=3.5cm]{geometry}
|
|---|
| 49 | %\usepackage{ncntrsbk}
|
|---|
| 50 | %\usepackage{float}
|
|---|
| 51 | %\restylefloat{figure}
|
|---|
| 52 | %\bibliographystyle{alphadin}
|
|---|
| 53 | %\bibliographystyle{alpha}
|
|---|
| 54 |
|
|---|
| 55 | % Generate index in preamble
|
|---|
| 56 | \makeindex
|
|---|
| 57 |
|
|---|
| 58 | \begin{document}
|
|---|
| 59 | \svnInfo $Id$
|
|---|
| 60 | \setlength{\marginparwidth}{10mm}
|
|---|
| 61 |
|
|---|
| 62 | \include{cover}
|
|---|
| 63 |
|
|---|
| 64 | \renewcommand{\thepage}{\roman{page}}
|
|---|
| 65 | \tableofcontents
|
|---|
| 66 | %Set Arabic Numbering 1,2,3,...
|
|---|
| 67 | % Clear needed to renumber from the right position
|
|---|
| 68 | \cleardoublepage
|
|---|
| 69 | \renewcommand{\thepage}{\arabic{page}}
|
|---|
| 70 | %Reset Counter
|
|---|
| 71 | %\setcounter{page}{1}
|
|---|
| 72 |
|
|---|
| 73 | % Set marks where it should Change
|
|---|
| 74 | \renewcommand{\chaptermark}[1]{%
|
|---|
| 75 | \markboth{\large \thechapter.\ \normalsize \scshape #1}{}}
|
|---|
| 76 | \renewcommand{\sectionmark}[1]{\markright{\thesection.\ \scshape #1}}
|
|---|
| 77 |
|
|---|
| 78 |
|
|---|
| 79 | % Create some new commands for designing the text
|
|---|
| 80 | % applications
|
|---|
| 81 | \newcommand{\app}[1]{%
|
|---|
| 82 | \textsf{\textit{#1}}}
|
|---|
| 83 | % terminology, vendor or product names
|
|---|
| 84 | \newcommand{\term}[1]{%
|
|---|
| 85 | \textsc{#1}}
|
|---|
| 86 | % filenames and directories
|
|---|
| 87 | \newcommand{\file}[1]{%
|
|---|
| 88 | \textsf{#1}}
|
|---|
| 89 | % user input
|
|---|
| 90 | \newcommand{\command}[1]{%
|
|---|
| 91 | \texttt{\textbf{#1}}}
|
|---|
| 92 | % example code, output of applications
|
|---|
| 93 | \newcommand{\code}[1]{%
|
|---|
| 94 | \texttt{#1}}
|
|---|
| 95 | % emphasized text (nicer than \emph{})
|
|---|
| 96 | \newcommand{\strong}[1]{%
|
|---|
| 97 | \textbf{#1}}
|
|---|
| 98 |
|
|---|
| 99 |
|
|---|
| 100 | \chapter{Introduction}
|
|---|
| 101 |
|
|---|
| 102 | Welcome to FreeWRT! This handbook covers the building, installation and usage
|
|---|
| 103 | aspects of the FreeWRT 1.0 Linux distribution. FreeWRT is a portable, secure
|
|---|
| 104 | and functional Linux distribution for embedded systems. As FreeWRT is a source
|
|---|
| 105 | code distribution, it does not provide any pre-compiled firmware for embedded
|
|---|
| 106 | systems. The latest version of this document is always available at the FreeWRT
|
|---|
| 107 | website. If you have any comments, criticism or found some wrong description,
|
|---|
| 108 | please send us an e-mail to
|
|---|
| 109 | \href{mailto:freewrt-handbook@freewrt.org}{freewrt-handbook@freewrt.org}, we
|
|---|
| 110 | are always happy about getting feedback to this document, and will try to
|
|---|
| 111 | update or correct the issues mentioned by you.
|
|---|
| 112 |
|
|---|
| 113 | The FreeWRT User handbook is split into several distinct chapters.
|
|---|
| 114 | \nameref{ch:ADK} covers the building of FreeWRT firmware images. In
|
|---|
| 115 | \autoref{ch:installing}, \nameref{ch:installing}, all aspects regarding the
|
|---|
| 116 | installation and deinstallation of FreeWRT firmware images are covered. The
|
|---|
| 117 | next chapter, \nameref{ch:administration}, covers administrational tasks, such
|
|---|
| 118 | as network configuration, the FreeWRT configuration filesystem, package
|
|---|
| 119 | management and update mechanism. The last chapter,
|
|---|
| 120 | \nameref{ch:troubleshooting}, helps troubleshooting problems and recovering a
|
|---|
| 121 | bad firmware installation. The appendix contains board specific information.
|
|---|
| 122 | For FreeWRT 1.0 these are only Broadcom based embedded systems.
|
|---|
| 123 |
|
|---|
| 124 | The intended audience for this handbook are advanced users with basic knowledge
|
|---|
| 125 | about Linux, networking and software development. The reader should be aware of
|
|---|
| 126 | basic command line tools, the vi editor and a shell. FreeWRT does not contain
|
|---|
| 127 | any high level administration tools (e.g. web based administration) and is
|
|---|
| 128 | fully configured via command line.
|
|---|
| 129 |
|
|---|
| 130 | \section{Typographic Conventions}
|
|---|
| 131 |
|
|---|
| 132 | Examples starting with \code{\#} indicate a command that must be invoked as
|
|---|
| 133 | super user. You can use \command{su} to gain super user privileges.
|
|---|
| 134 |
|
|---|
| 135 | \begin{Verbatim}[label=example for a command line with super user privileges]
|
|---|
| 136 | # fwcf commit
|
|---|
| 137 | \end{Verbatim}
|
|---|
| 138 |
|
|---|
| 139 | Examples starting with \code{\$} indicate a command that can be invoked as a
|
|---|
| 140 | normal user. The default user account on a freshly installed FreeWRT system is
|
|---|
| 141 | "\code{admin}", the password "\code{FreeWRT}".
|
|---|
| 142 |
|
|---|
| 143 | \begin{Verbatim}[label=example for a command line as non-privileged user]
|
|---|
| 144 | $ cat /etc/banner
|
|---|
| 145 | \end{Verbatim}
|
|---|
| 146 |
|
|---|
| 147 | %\chapter{Web Interface Builder (WIB)}\label{ch:WIB}
|
|---|
| 148 | %
|
|---|
| 149 | %FIXME It is named later in the text, but not explained what it is. Probably
|
|---|
| 150 | %this chapter can be joined with the chapter about ADK
|
|---|
| 151 |
|
|---|
| 152 | \chapter{Appliance Development Kit (ADK)}\label{ch:ADK}
|
|---|
| 153 |
|
|---|
| 154 | The ADK is the core of FreeWRT and contains all scripts and sources to create
|
|---|
| 155 | firmware images for every supported embedded system. FreeWRT 1.0 supports the
|
|---|
| 156 | following embedded systems:
|
|---|
| 157 |
|
|---|
| 158 | \begin{itemize}
|
|---|
| 159 | \item Asus WL500g
|
|---|
| 160 | \item Asus WL500g deluxe
|
|---|
| 161 | \item Asus WL500g premium
|
|---|
| 162 | \item Linksys WRT54G v2.0
|
|---|
| 163 | \item Linksys WRT54G v2.2
|
|---|
| 164 | \item Linksys WRT54G v3.0
|
|---|
| 165 | \item Linksys WRT54G v3.1
|
|---|
| 166 | \item Linksys WRT54G v4.0
|
|---|
| 167 | \item Linksys WRT54GS v1.0
|
|---|
| 168 | \item Linksys WRT54GS v1.1
|
|---|
| 169 | \item Linksys WRT54GS v4
|
|---|
| 170 | \item Linksys WRT54G3G
|
|---|
| 171 | \item Linksys WRT54GL
|
|---|
| 172 | \item Netgear WGT634u
|
|---|
| 173 | \end{itemize}
|
|---|
| 174 |
|
|---|
| 175 | In this release we only support the Linux 2.4 kernel. The ADK contains over 600
|
|---|
| 176 | software packages.
|
|---|
| 177 |
|
|---|
| 178 | \section{Prerequisites}
|
|---|
| 179 |
|
|---|
| 180 | Here is a list of all supported and tested host systems. The host system is
|
|---|
| 181 | needed to create a firmware for your embedded system.
|
|---|
| 182 |
|
|---|
| 183 | The list of supported GNU/Linux build systems is not an exclusive one, these
|
|---|
| 184 | are just the ones tested and verified. The other millions of linux
|
|---|
| 185 | distributions are very likely to work, too.
|
|---|
| 186 |
|
|---|
| 187 | \begin{itemize}
|
|---|
| 188 | \item Debian GNU/Linux
|
|---|
| 189 | \item Gentoo Linux
|
|---|
| 190 | \item OpenSuSE
|
|---|
| 191 | \item Ubuntu GNU/Linux
|
|---|
| 192 | \item Fedora Core
|
|---|
| 193 | \item OpenBSD (partial support)
|
|---|
| 194 | \footnote{some addon packages does not compile}
|
|---|
| 195 | \item MirOS BSD (partial support)
|
|---|
| 196 | \footnote{some addon packages does not compile}
|
|---|
| 197 | \end{itemize}
|
|---|
| 198 |
|
|---|
| 199 | Please install the following software, which is needed to build a basic
|
|---|
| 200 | firmware image. If you choose more packages some more prerequisites might be
|
|---|
| 201 | needed. The ADK host checks will warn you about any software you need to
|
|---|
| 202 | install to compile a specific package. Here is a list of the required
|
|---|
| 203 | software:
|
|---|
| 204 |
|
|---|
| 205 | \begin{itemize}
|
|---|
| 206 | \item gcc3 or higher
|
|---|
| 207 | \item g++
|
|---|
| 208 | \item binutils
|
|---|
| 209 | \item patch
|
|---|
| 210 | \item gzip
|
|---|
| 211 | \item bzip2
|
|---|
| 212 | \item unzip
|
|---|
| 213 | \item flex
|
|---|
| 214 | \item bison
|
|---|
| 215 | \item GNU make
|
|---|
| 216 | \item zlib (+headers)
|
|---|
| 217 | \item ncurses (+headers)
|
|---|
| 218 | \item (g)libc headers
|
|---|
| 219 | \item perl
|
|---|
| 220 | \end{itemize}
|
|---|
| 221 |
|
|---|
| 222 | The ADK scripts will check for the required versions of these tools in advance.
|
|---|
| 223 |
|
|---|
| 224 | To build FreeWRT with the ADK it is recommended to have an unprivileged user.
|
|---|
| 225 | Please \underline{never} build FreeWRT as super user. Because all necessary
|
|---|
| 226 | source tarballs are downloaded from the internet automatically, your host
|
|---|
| 227 | system needs a working internet connection.
|
|---|
| 228 |
|
|---|
| 229 | \section{Getting the source}
|
|---|
| 230 |
|
|---|
| 231 | Now go to a directory where you want to build the firmware. Depending on the
|
|---|
| 232 | features you select you will need about 2.5--5 GB free disk space. This
|
|---|
| 233 | includes the ADK itself, any source archives which will be downloaded and their
|
|---|
| 234 | extracted copies (for compiling).
|
|---|
| 235 |
|
|---|
| 236 | To get the latest stable FreeWRT ADK try one of these commands:
|
|---|
| 237 | \begin{Verbatim}[label=Check out an 1.0.x revision of FreeWRT ADK via HTTP protocol]
|
|---|
| 238 | $ svn co http://www.freewrt.org/svn/tags/freewrt_1_0_x freewrt
|
|---|
| 239 | \end{Verbatim}
|
|---|
| 240 | \begin{Verbatim}[label=Check out the 1.0-stable branch of FreeWRT ADK via HTTP protocol]
|
|---|
| 241 | $ svn co http://www.freewrt.org/svn/branches/freewrt_1_0 freewrt
|
|---|
| 242 | \end{Verbatim}
|
|---|
| 243 |
|
|---|
| 244 | The value $x$ is a place holder for the latest minor release number. Take a
|
|---|
| 245 | look at our project page to find out which minor release number is the latest
|
|---|
| 246 | one.
|
|---|
| 247 |
|
|---|
| 248 | After successfully downloading, enter the directory:
|
|---|
| 249 |
|
|---|
| 250 | \begin{Verbatim}
|
|---|
| 251 | $ cd freewrt
|
|---|
| 252 | \end{Verbatim}
|
|---|
| 253 |
|
|---|
| 254 | This directory will be referred to as the ADK root later on.
|
|---|
| 255 |
|
|---|
| 256 | \section{Some Theory First}
|
|---|
| 257 |
|
|---|
| 258 | Building a FreeWRT firmware image is just like building a new Linux kernel, but
|
|---|
| 259 | a little more complex. There is a \app{ncurses}-based configuration menu at the
|
|---|
| 260 | beginning, the changes made are saved into a file named \file{.config} in the
|
|---|
| 261 | ADK root. The build is done by the various Makefiles, compiling and linking the
|
|---|
| 262 | sources together accordingly to the symbols defined in \file{.config}.
|
|---|
| 263 |
|
|---|
| 264 | Unlike kernel compilation, FreeWRT needs to be cross-compiled. This leads to
|
|---|
| 265 | special premises, as most of the tools need to be specially build. But no
|
|---|
| 266 | panic, FreeWRT will do this all for you. In fact, this is done at the second
|
|---|
| 267 | run of \command{make} (the first one opens the configuration), and therefore
|
|---|
| 268 | can be seen as part of the first firmware build. For clarity though, we will
|
|---|
| 269 | discuss these two things separately.
|
|---|
| 270 |
|
|---|
| 271 | \section{Preparing the Build Process}
|
|---|
| 272 |
|
|---|
| 273 | After downloading the FreeWRT ADK, it's time to prepare the ADK for the
|
|---|
| 274 | building of firmware images (for explanations see the chapter above).
|
|---|
| 275 |
|
|---|
| 276 | \subsection{Creating A Configuration}
|
|---|
| 277 |
|
|---|
| 278 | The first step is to run \command{make}. After checking some prerequisites (see
|
|---|
| 279 | \nameref{ch:troubleshooting} below for aid in problems), a console based
|
|---|
| 280 | configuration menu should start. Theoretically no choices have to be made, but
|
|---|
| 281 | it's proven useful to at least:
|
|---|
| 282 | \begin{itemize}
|
|---|
| 283 | \item select a target (menu: \code{Embedded System})
|
|---|
| 284 | \item select the root filesystem type (menu: \code{Target Firmware type})
|
|---|
| 285 | \end{itemize}
|
|---|
| 286 |
|
|---|
| 287 | Then quit saving changes. If you forgot that, just run \command{make} again,
|
|---|
| 288 | redo your changes, then save.
|
|---|
| 289 |
|
|---|
| 290 | \subsection{Building ADK}
|
|---|
| 291 |
|
|---|
| 292 | Now that you have a first minimal configuration, it is time to build the
|
|---|
| 293 | toolchain for cross-compiling. To do this, just enter \command{make} again. The
|
|---|
| 294 | build starts downloading and compiling each needed part of the toolchain, and
|
|---|
| 295 | later continues with building the first firmware image. Later one can be taken
|
|---|
| 296 | as proof of a working ADK.
|
|---|
| 297 |
|
|---|
| 298 | Already experienced in compiling \app{gcc}? Then you know\dots If not, better
|
|---|
| 299 | be told that it takes \underline{really long} to finish. In the meantime I
|
|---|
| 300 | suggest reading the next chapter dealing with internals about cross-compiling.
|
|---|
| 301 |
|
|---|
| 302 | \section{Details Of Cross-Compiling}
|
|---|
| 303 |
|
|---|
| 304 | A cross-compile toolchain exists of a set of tools: a compiler, linker,
|
|---|
| 305 | assembler, debugger and a C~library. A cross-compile toolchain runs on your
|
|---|
| 306 | host system and creates native binaries for your target system. A cross-compile
|
|---|
| 307 | toolchain is basically created in six steps:
|
|---|
| 308 |
|
|---|
| 309 | \begin{enumerate}
|
|---|
| 310 | \item Get and prepare the Kernel and C~library headers of your target system
|
|---|
| 311 | \item Compile the binutils package for your target
|
|---|
| 312 | \item Compile a static C~compiler for your target
|
|---|
| 313 | \item Compile and install a C~library for your target
|
|---|
| 314 | \item Compile and install a full C/C++~compiler
|
|---|
| 315 | \item Compile and install the GNU debugger
|
|---|
| 316 | \end{enumerate}
|
|---|
| 317 |
|
|---|
| 318 | The cross-compile toolchain is created in
|
|---|
| 319 | \file{staging\_dir\_\$(cpu\_arch)}\footnote{e.g. mipsel, which stands for MIPS
|
|---|
| 320 | Little Endian}. All the tools running on the host, but used to create, analyze
|
|---|
| 321 | or debug for the target are kept in this directory. All addon headers and
|
|---|
| 322 | libraries are installed to this directory.
|
|---|
| 323 |
|
|---|
| 324 | If you want to compile a simple application without using the ADK, just use the
|
|---|
| 325 | compiler directly (e.g. compiling a MIPS Little Endian application):
|
|---|
| 326 | \begin{Verbatim}[label=compile a simple application with the cross-compiler]
|
|---|
| 327 | ./staging_dir_mipsel/bin/mipsel-linux-uclibc-gcc -o myapp myapp.c
|
|---|
| 328 | \end{Verbatim}
|
|---|
| 329 |
|
|---|
| 330 | Check with the tool \app{file} if you got a MIPS binary:
|
|---|
| 331 | \begin{Verbatim}[label=check the binary with \app{file}]
|
|---|
| 332 | $ file myapp
|
|---|
| 333 | myapp: ELF 32-bit LSB MIPS-I executable, MIPS, version 1 (SYSV), dynamically
|
|---|
| 334 | linked (uses shared libs), not stripped
|
|---|
| 335 | \end{Verbatim}
|
|---|
| 336 |
|
|---|
| 337 | \section{Building A FreeWRT Firmware Image}
|
|---|
| 338 |
|
|---|
| 339 | Your local copy of the FreeWRT ADK should now be prepared for building firmware
|
|---|
| 340 | images. The next step is to do an extensive configuration for the image you
|
|---|
| 341 | want to create. To start the configuration menu, type \command{make
|
|---|
| 342 | menuconfig}.
|
|---|
| 343 |
|
|---|
| 344 | When selecting packages, \code{<*>} means it will be inserted into the firmware
|
|---|
| 345 | images and \code{<M>} means it will be build as an addon package which can be
|
|---|
| 346 | installed later at runtime.
|
|---|
| 347 |
|
|---|
| 348 | The target device and filesystem should already been chosen by you to the right
|
|---|
| 349 | value, if not you will have to issue a \command{make clean} before actually
|
|---|
| 350 | building the firmware image. Otherwise things get messed up. A smooth rebuild
|
|---|
| 351 | is a missing feature in the current ADK. For the packages, if unsure, you can
|
|---|
| 352 | just select one of the package collections. After that, you can still manually
|
|---|
| 353 | check the choices made by the collection and correct them if appropriate. Do
|
|---|
| 354 | not forget to save your configuration when leaving!
|
|---|
| 355 |
|
|---|
| 356 | After leaving the menubased configuration, type \command{make} again to build
|
|---|
| 357 | the new FreeWRT firmware image. Depending on your package selections and
|
|---|
| 358 | underlying hardware, this will take different amounts of time. For your spare
|
|---|
| 359 | time there is the following chapter giving some explanation about what is done
|
|---|
| 360 | at this point.
|
|---|
| 361 |
|
|---|
| 362 | \section{Firmware Build Process In Detail}
|
|---|
| 363 |
|
|---|
| 364 | Just like when building the ADK's toolchain, the sources for the selected
|
|---|
| 365 | packages are downloaded from the internet first, then built using the
|
|---|
| 366 | cross-compiler and libraries of the ADK.
|
|---|
| 367 |
|
|---|
| 368 | The detailed order of firmware image building is:
|
|---|
| 369 |
|
|---|
| 370 | \begin{itemize}
|
|---|
| 371 | \item compile the Linux kernel and all supported kernel modules
|
|---|
| 372 | \item compile all selected packages
|
|---|
| 373 | \item clean the target root directory
|
|---|
| 374 | \item install all packages to the target root directory
|
|---|
| 375 | \item create the root filesystem image
|
|---|
| 376 | \item create the firmware image (bootloader, kernel and root
|
|---|
| 377 | filesystem)
|
|---|
| 378 | \end{itemize}
|
|---|
| 379 |
|
|---|
| 380 | The result of the build process is created in the directory \file{bin/}. You
|
|---|
| 381 | will find a firmware image in the top level directory. Check the size of the
|
|---|
| 382 | binary image file to see if it is small enough to fit into flash memory of your
|
|---|
| 383 | embedded system. Furthermore there is a directory \file{package/}, which
|
|---|
| 384 | contains all base and add--on packages.
|
|---|
| 385 |
|
|---|
| 386 | \section{Troubleshooting}
|
|---|
| 387 |
|
|---|
| 388 | This section deals with various tips for problems with the ADK installation.
|
|---|
| 389 |
|
|---|
| 390 | \subsection{Errors During Prerequisites Check}
|
|---|
| 391 |
|
|---|
| 392 | To re-issue the checks, use \command{make prereq}.
|
|---|
| 393 |
|
|---|
| 394 | \begin{itemize}
|
|---|
| 395 | \item GNU make 3.80 too old \\
|
|---|
| 396 | On a Fedora Core 4 hostsystem the first you'll get is
|
|---|
| 397 | \begin{Verbatim}[label=error message with too old GNU make]
|
|---|
| 398 | $ make
|
|---|
| 399 | GNU make 3.80 too old.
|
|---|
| 400 | Please install GNU make 3.81 or higher to continue.
|
|---|
| 401 | You can override this check, see http://www.freewrt.org/faq for details.
|
|---|
| 402 | It is suggested to upgrade your copy of bison to
|
|---|
| 403 | GNU Bison 2.3 because of its bug fixes.
|
|---|
| 404 | make: *** [.prereq_done] Error 1
|
|---|
| 405 | \end{Verbatim}
|
|---|
| 406 | it is quite a nice error that tells you to use more up to date software, but
|
|---|
| 407 | we can anyhow give this hostsystem a try and tell make to ignore those
|
|---|
| 408 | errors/warnings running \command{make prereq-noerror}.
|
|---|
| 409 | \end{itemize}
|
|---|
| 410 |
|
|---|
| 411 | \subsection{Compilation errors}
|
|---|
| 412 |
|
|---|
| 413 | If you encounter any compilation errors, then first try to reproduce the error.
|
|---|
| 414 | First update your ADK tree via \command{svn update}, to be sure that the error
|
|---|
| 415 | is not already fixed in the subversion repository. After that do a
|
|---|
| 416 | \command{make clean \&\& make}, to reproduce your problem.
|
|---|
| 417 |
|
|---|
| 418 | If you can reproduce the problem, please file a bug report. Please always
|
|---|
| 419 | report following information:
|
|---|
| 420 | \begin{itemize}
|
|---|
| 421 | \item Operating system type and version
|
|---|
| 422 | \item GCC and Binutils versions of your host system
|
|---|
| 423 | \item complete error message, not only the last 4 lines
|
|---|
| 424 | \end{itemize}
|
|---|
| 425 |
|
|---|
| 426 | \chapter{Installing FreeWRT Firmware Images}\label{ch:installing}
|
|---|
| 427 |
|
|---|
| 428 | The FreeWRT ADK produces a single image holding both kernel and root
|
|---|
| 429 | filesystem. This image can be written into your hardware's builtin flash memory
|
|---|
| 430 | on serveral ways (ordered by needed skills, increasing downwards):
|
|---|
| 431 | \begin{itemize}
|
|---|
| 432 | \item via the original firmware's web interface
|
|---|
| 433 | (\autoref{sec:webinterface})
|
|---|
| 434 | \item via \texttt{mtd} when reflashing or migrating from another third
|
|---|
| 435 | party distribution (\autoref{sec:mtd})
|
|---|
| 436 | \item via network using a TFTP client (\autoref{sec:tftp})
|
|---|
| 437 | \end{itemize}
|
|---|
| 438 |
|
|---|
| 439 | \section{Flashing The Firmware}
|
|---|
| 440 |
|
|---|
| 441 | \subsection{Web Interface Method}\label{sec:webinterface}
|
|---|
| 442 |
|
|---|
| 443 | The following text describes how to use the original firmware's web interface
|
|---|
| 444 | to flash FreeWRT. The object of demonstration is an \term{Asus WL500gP}, but
|
|---|
| 445 | this guide should fit more or less fine for other systems, too.
|
|---|
| 446 |
|
|---|
| 447 | If you flash a router from \term{Linksys}, we strongly suggest to use the
|
|---|
| 448 | popular \term{ping exploit} to allow recovery, if your image is broken or the
|
|---|
| 449 | flash process was interrupted by a power shortage.
|
|---|
| 450 |
|
|---|
| 451 | There are some things that you should have done previously:
|
|---|
| 452 | \begin{itemize}
|
|---|
| 453 | \item read the special documentation page about your hardware in our wiki, some
|
|---|
| 454 | systems need special precaution before flashing
|
|---|
| 455 | \item a firmware image has to be built (matching the used hardware, of course)
|
|---|
| 456 | \item the router has to be powered on
|
|---|
| 457 | \item your computer needs to be connected to one of the LAN ports
|
|---|
| 458 | (using IP address \file{192.168.1.2})
|
|---|
| 459 | \end{itemize}
|
|---|
| 460 |
|
|---|
| 461 | \parbox{17em}{
|
|---|
| 462 | After preparation is complete, open your favourite browser and type
|
|---|
| 463 | \command{192.168.1.1} into the address bar. You should reach the web
|
|---|
| 464 | interface's startup page:
|
|---|
| 465 | }\hfill\parbox{20em}{
|
|---|
| 466 | \includegraphics[width=20em]{pics/asus-startup.png}
|
|---|
| 467 | } \\ [1em]
|
|---|
| 468 | \parbox{17em}{
|
|---|
| 469 | Then click on \code{System Setup}:
|
|---|
| 470 | }\hfill\parbox{20em}{
|
|---|
| 471 | \includegraphics[width=20em]{pics/asus-system_setup.png}
|
|---|
| 472 | } \\ [1em]
|
|---|
| 473 | \parbox{17em}{
|
|---|
| 474 | In the new menu click on \code{Firmware Upgrade}, and enter the name of your
|
|---|
| 475 | firmware image into the appropriate field:
|
|---|
| 476 | }\hfill\parbox{20em}{
|
|---|
| 477 | \includegraphics[width=20em]{pics/asus-fw_upgrade.png}
|
|---|
| 478 | } \\ [1em]
|
|---|
| 479 | Finally click on \code{Upload}. As the whole process of writing the image to
|
|---|
| 480 | flash and rebooting (don't forget that it creates \app{ssh} hostkeys on first
|
|---|
| 481 | boot) takes quite long (yes, a couple of minutes). Better go and get a coffee
|
|---|
| 482 | or tea.
|
|---|
| 483 |
|
|---|
| 484 | When everything went well, you can login using \app{ssh}. The default username
|
|---|
| 485 | is "\code{admin}". The default password for images created via WIB or ADK is
|
|---|
| 486 | "\code{FreeWRT}". It is possible to change this password in the ADK, before
|
|---|
| 487 | image creation.
|
|---|
| 488 |
|
|---|
| 489 | \subsection{\texttt{mtd} -- The Flash Utility}\label{sec:mtd}
|
|---|
| 490 |
|
|---|
| 491 | For this method to work, you need to copy the file containing the firmware
|
|---|
| 492 | image to the router, preferably into \file{/tmp/}, the memory filesystem should
|
|---|
| 493 | be big enough to hold the full image. If not, use \app{wget} to get the image
|
|---|
| 494 | via http or ftp and pipe the result into \app{mtd}.
|
|---|
| 495 |
|
|---|
| 496 | Then the image is written to flash using \app{mtd}, optionally giving
|
|---|
| 497 | additional options (see below).
|
|---|
| 498 |
|
|---|
| 499 | The \app{mtd} utility was written with simplicity and code size in mind. It's
|
|---|
| 500 | features were derived from the
|
|---|
| 501 | \href{http://sources.redhat.com/jffs2/}{\app{mtd-utils}}, combining the needed
|
|---|
| 502 | parts into a single small tool providing all the functionality necessary for
|
|---|
| 503 | FreeWRT, and leaving everything out that's not.
|
|---|
| 504 |
|
|---|
| 505 | \app{mtd} provides the following features:
|
|---|
| 506 | \begin{description}
|
|---|
| 507 | \item[unlock] some chips need unlocking before they can be written to
|
|---|
| 508 | \item[erase] this is a filesystem independent method to delete all
|
|---|
| 509 | contents on the flash. Basically this is like \app{format} in
|
|---|
| 510 | MS--DOS.
|
|---|
| 511 | \item[write] this is generally the same functionality as using \app{dd}
|
|---|
| 512 | or \app{rawrite}, but \app{mtd} takes care of the quirks that
|
|---|
| 513 | have to be paid attention to for correctly handling the type of
|
|---|
| 514 | flash in use
|
|---|
| 515 | \end{description}
|
|---|
| 516 |
|
|---|
| 517 | Further it can request your system to reboot. Some of the features mentioned
|
|---|
| 518 | here can also be combined, so it is e.g. possible to immediately reboot the
|
|---|
| 519 | system after the flash has been written.
|
|---|
| 520 |
|
|---|
| 521 | Mostly, similar to the sample usage shown in the help output should be all that
|
|---|
| 522 | has to be done to write the firmware to flash:
|
|---|
| 523 | \begin{Verbatim}[label=write a previously downloaded new firmware-file into flash]
|
|---|
| 524 | # mtd -e linux -r write freewrt.bin linux &
|
|---|
| 525 | \end{Verbatim}
|
|---|
| 526 | Or via wget pipe:
|
|---|
| 527 | \begin{Verbatim}[label=download and write a new firmware-file into flash]
|
|---|
| 528 | # wget -O - http://www.yourserver.com/freewrt.bin | mtd -e linux -r write - linux &
|
|---|
| 529 | \end{Verbatim}
|
|---|
| 530 | The parameters explained in detail:
|
|---|
| 531 | \begin{description}
|
|---|
| 532 | \item[\command{-e linux}] erase existing data in flash
|
|---|
| 533 | \item[\command{-r}] trigger rebooting right after finishing work
|
|---|
| 534 | \item[\command{write}] write the firmware image contained in the file
|
|---|
| 535 | given as next parameter to flash
|
|---|
| 536 | \item[\command{freewrt.bin}] the actual image to write -- ignore the
|
|---|
| 537 | suffix, it is detected at runtime
|
|---|
| 538 | \item[\command{linux}] this is an abstract identifier for a certain
|
|---|
| 539 | partition in flash, so don't change this
|
|---|
| 540 | \item[\command{\&}] put the process into background, to prevent
|
|---|
| 541 | accidentally stopping
|
|---|
| 542 | \end{description}
|
|---|
| 543 |
|
|---|
| 544 | \subsection{Installation using TFTP}\label{sec:tftp}
|
|---|
| 545 |
|
|---|
| 546 | All supported target devices are shipped with a builtin bootloader, comparable
|
|---|
| 547 | to the BIOS of \term{x86} machines. This bootloader is used to bootstrap the
|
|---|
| 548 | system until it can boot a regular operating system. Besides the ability to
|
|---|
| 549 | load the executable code from flash, it can be received from another node in
|
|---|
| 550 | the local area network via the famous TFTP protocol.
|
|---|
| 551 |
|
|---|
| 552 | For doing this, there are two ways:
|
|---|
| 553 | \begin{itemize}
|
|---|
| 554 | \item the device acts as a client, asks the local \app{dhcpd} for a
|
|---|
| 555 | lease, the address of the next \app{tftpd} and the filename to
|
|---|
| 556 | download
|
|---|
| 557 | \item the device acts as a server, having a known IP address and
|
|---|
| 558 | waiting for any TFTP client to connect and send the file
|
|---|
| 559 | \end{itemize}
|
|---|
| 560 |
|
|---|
| 561 | Most of the hardware supported by FreeWRT 1.0 uses the second method. Only the
|
|---|
| 562 | device \term{Netgear WGT634u} is using the first method, the bootloader
|
|---|
| 563 | provides a DHCP/TFTP client. Though this may be a little confusing to people
|
|---|
| 564 | being familiar with netboot technologies, it is definitely the easier way of
|
|---|
| 565 | doing it. Otherwise one had to setup both DHCP and TFTP servers and configure
|
|---|
| 566 | them right.
|
|---|
| 567 |
|
|---|
| 568 | The even quite simple task of sending the flash image to the target device is
|
|---|
| 569 | made even more easy by providing a little shell script for the job. Invocation
|
|---|
| 570 | is as follows:
|
|---|
| 571 | \begin{Verbatim}[label=sending the new firmware via TFTP]
|
|---|
| 572 | $ ./scripts/flash.sh firmware.bin [address]
|
|---|
| 573 | \end{Verbatim}
|
|---|
| 574 | The second Parameter \code{address} is used to specify a different IP address
|
|---|
| 575 | of the target device than the default \file{192.168.1.1}.
|
|---|
| 576 |
|
|---|
| 577 | \strong{Beware:} do not rename the firmware image before flashing it using the
|
|---|
| 578 | script as the original name is parsed to guess what hardware is to be flashed.
|
|---|
| 579 |
|
|---|
| 580 | To actually being able to flash the device, it has to wait for a tftp
|
|---|
| 581 | connection when booting. To complicate installation of third vendor's firmware
|
|---|
| 582 | images and to improve bootup time, of course, this feature is disabled by
|
|---|
| 583 | default. The following list shows what has to be done for a certain device to
|
|---|
| 584 | get it to wait at boot: \\
|
|---|
| 585 | \begin{center}
|
|---|
| 586 | \begin{tabular}{l|l|p{7cm}} % TODO: fill this table
|
|---|
| 587 | \strong{Target Device} & \strong{Action to be taken} & \strong{Comments} \\
|
|---|
| 588 | \hline
|
|---|
| 589 | All supported Linksys models & Ping Exploit & nvram variable \code{boot\_wait}
|
|---|
| 590 | needs to be on \\
|
|---|
| 591 | All supported Asus models & Recovery mode & power off $\rightarrow$ push and
|
|---|
| 592 | hold the reset button $\rightarrow$
|
|---|
| 593 | power on $\rightarrow$ power led is
|
|---|
| 594 | flashing \\
|
|---|
| 595 | \end{tabular}
|
|---|
| 596 | \end{center}
|
|---|
| 597 |
|
|---|
| 598 | \chapter{FreeWRT Administration}\label{ch:administration}
|
|---|
| 599 |
|
|---|
| 600 | After the FreeWRT firmware image has been built by the ADK and later flashed
|
|---|
| 601 | onto the hardware, the resulting operating system has to be configured. This
|
|---|
| 602 | section provides the necessary information to do that, including tips and
|
|---|
| 603 | guides for using FreeWRT in general, of course.
|
|---|
| 604 |
|
|---|
| 605 | \section{Network Configuration}
|
|---|
| 606 |
|
|---|
| 607 | The device names for real network interfaces in Linux are named \code{ethx} (\code{x} is
|
|---|
| 608 | \code{0--9}). If the device has a switch, the different ports are separated via VLAN
|
|---|
| 609 | technology. The vlan interfaces are named \code{ethx.y}. The network configuration in
|
|---|
| 610 | FreeWRT is managed via \app{Busybox}'s \app{ifupdown} implementation. \app{Busybox}'s builtin \app{ip}
|
|---|
| 611 | command configures the network interfaces. There is no \app{ifconfig} or \app{route}, you can activate
|
|---|
| 612 | it in the ADK menue, if you like.
|
|---|
| 613 |
|
|---|
| 614 | To show all configured network interfaces use:
|
|---|
| 615 | \begin{Verbatim}[label=show IP address]
|
|---|
| 616 | $ ip addr show
|
|---|
| 617 | \end{Verbatim}
|
|---|
| 618 | To show the kernel routing table use:
|
|---|
| 619 | \begin{Verbatim}[label=show routing table]
|
|---|
| 620 | $ ip route show
|
|---|
| 621 | \end{Verbatim}
|
|---|
| 622 |
|
|---|
| 623 | All available network settings can be found in \file{/etc/network/interfaces}
|
|---|
| 624 | which has the common form:
|
|---|
| 625 | \begin{Verbatim}[label=common form of \file{/etc/network/interfaces}]
|
|---|
| 626 | auto <iface-name>
|
|---|
| 627 | iface <iface-name> inet <method>
|
|---|
| 628 | <option-x> <value>
|
|---|
| 629 | <option-y> <value>
|
|---|
| 630 | <option-z> <value>
|
|---|
| 631 | \end{Verbatim}
|
|---|
| 632 |
|
|---|
| 633 | <b>ATTENTION: Be sure you have no whitespaces at the and of any value!</b>
|
|---|
| 634 |
|
|---|
| 635 | \code{auto <iface-name>} is optional and, if set, tells the \app{ifup} script to
|
|---|
| 636 | start this interface automatically on bootup.
|
|---|
| 637 |
|
|---|
| 638 | Each interface needs a unique name which, depending on the method, represents
|
|---|
| 639 | either a physical interface or a logical interface name like \code{eth0.1} for
|
|---|
| 640 | a physical VLAN or \code{umts} as a logical name for a PPP interface.
|
|---|
| 641 |
|
|---|
| 642 | Possible methods are:
|
|---|
| 643 | \begin{description}
|
|---|
| 644 | \item[static] use the given options to configure the interface
|
|---|
| 645 | statically
|
|---|
| 646 | \item[dhcp] just start a dhcp client using the interface
|
|---|
| 647 | \code{iface-name}
|
|---|
| 648 | \item[manual] don't configure the interface but start \code{pre-up.d}
|
|---|
| 649 | hook scripts
|
|---|
| 650 | \item[ppp] run \code{pon <provider>} where \code{<provider>} is given
|
|---|
| 651 | as an interface option
|
|---|
| 652 | \end{description}
|
|---|
| 653 |
|
|---|
| 654 | \subsection{Switch/VLAN}
|
|---|
| 655 | The switch built-in into the most routers is capable of separating each port
|
|---|
| 656 | using VLAN tagging. You can configure the switch by simply adding the interface
|
|---|
| 657 | to the config file and giving the desired switch-ports:
|
|---|
| 658 | \begin{Verbatim}[label=\file{/etc/network/interfaces}]
|
|---|
| 659 | auto eth0.0
|
|---|
| 660 | iface eth0.0 inet static
|
|---|
| 661 | switch-ports 1 2 5*
|
|---|
| 662 | address 192.168.1.1
|
|---|
| 663 | netmask 255.255.255.0
|
|---|
| 664 |
|
|---|
| 665 | auto eth0.1
|
|---|
| 666 | iface eth0.1 inet static
|
|---|
| 667 | switch-ports 3 4 5
|
|---|
| 668 | address 192.168.2.1
|
|---|
| 669 | netmask 255.255.255.0
|
|---|
| 670 |
|
|---|
| 671 | auto eth0.2
|
|---|
| 672 | iface eth0.2 inet static
|
|---|
| 673 | switch-ports 0 5
|
|---|
| 674 | address 172.16.1.42
|
|---|
| 675 | netmask 255.255.255.0
|
|---|
| 676 | gateway 172.16.1.1
|
|---|
| 677 | \end{Verbatim}
|
|---|
| 678 |
|
|---|
| 679 | This configures three VLAN interfaces \code{eth0.0} on ports 1 and 2,
|
|---|
| 680 | \code{eth0.1} on port 3 and 4 and \code{eth0.2} on port 0.
|
|---|
| 681 |
|
|---|
| 682 |
|
|---|
| 683 | If you need to do some advanced settings, because you have for example a
|
|---|
| 684 | powerful switch with a VLAN trunking port connected to one of your switch
|
|---|
| 685 | ports, the configuration would look like this:
|
|---|
| 686 |
|
|---|
| 687 | \begin{Verbatim}[label=\file{/etc/network/interfaces}]
|
|---|
| 688 | auto eth0.1
|
|---|
| 689 | iface eth0.1 inet static
|
|---|
| 690 | switch-ports 2 3 4 5*
|
|---|
| 691 | address 192.168.1.1
|
|---|
| 692 | netmask 255.255.255.0
|
|---|
| 693 |
|
|---|
| 694 | auto eth0.2
|
|---|
| 695 | iface eth0.2 inet static
|
|---|
| 696 | switch-ports 1t 5
|
|---|
| 697 | address 10.2.0.1
|
|---|
| 698 | netmask 255.255.255.0
|
|---|
| 699 | broadcast +
|
|---|
| 700 |
|
|---|
| 701 | auto eth0.3
|
|---|
| 702 | iface eth0.3 inet static
|
|---|
| 703 | switch-ports 1t 5
|
|---|
| 704 | address 10.3.0.1
|
|---|
| 705 | netmask 255.255.255.0
|
|---|
| 706 | broadcast +
|
|---|
| 707 |
|
|---|
| 708 | auto eth0.4
|
|---|
| 709 | iface eth0.4 inet static
|
|---|
| 710 | switch-ports 1t 5
|
|---|
| 711 | address 10.4.0.1
|
|---|
| 712 | netmask 255.255.255.0
|
|---|
| 713 | broadcast +
|
|---|
| 714 |
|
|---|
| 715 | \end{Verbatim}
|
|---|
| 716 |
|
|---|
| 717 | This configures four VLAN interfaces, \code{eth0.1} on physical ports 2, 3 and
|
|---|
| 718 | 4. The interfaces \code{eth0.2}, \code{eth0.3} and \code{eth0.4} are three
|
|---|
| 719 | different networks with VLAN ID 2--4. The physical port 1 needs to be connected
|
|---|
| 720 | to a VLAN trunking port on a switch with knows the same VLAN IDs.
|
|---|
| 721 |
|
|---|
| 722 |
|
|---|
| 723 | Explanation:
|
|---|
| 724 | \begin{description}
|
|---|
| 725 | \item[port 0] this is typically the port labeled as WAN
|
|---|
| 726 | \item[port 1--4] these are typically the ports labeled as LAN
|
|---|
| 727 | \item[port 5] this special port represents the port where the
|
|---|
| 728 | router--board is connected to the switch
|
|---|
| 729 | \item[*] one interface always need an asterisk behind port 5 which
|
|---|
| 730 | means it is the default interface and gets all the packages
|
|---|
| 731 | with unknown tags.
|
|---|
| 732 | \end{description}
|
|---|
| 733 |
|
|---|
| 734 | \subsection{Static IP configuration}
|
|---|
| 735 | As you can see in the VLAN example three interfaces were configured with static
|
|---|
| 736 | IP settings, so these are the commonly used options:
|
|---|
| 737 | \begin{description}
|
|---|
| 738 | \item[address] the IP address --- required
|
|---|
| 739 | \item[netmask] the netmask --- required
|
|---|
| 740 | \item[broadcast] broadcast address --- only required for legacy
|
|---|
| 741 | applications (if using \code{+}, it will be calculated
|
|---|
| 742 | automatically by the kernel)
|
|---|
| 743 | \item[gateway] an IP address added as default gateway if present
|
|---|
| 744 | \item[mac-address] if you need to change your MAC address (required for
|
|---|
| 745 | some DSL providers)
|
|---|
| 746 | \end{description}
|
|---|
| 747 |
|
|---|
| 748 | \subsection{DHCP}
|
|---|
| 749 | That's just as simple as:
|
|---|
| 750 | \begin{Verbatim}[label=\file{/etc/network/interfaces}]
|
|---|
| 751 | auto eth0.1
|
|---|
| 752 | iface eth0.1 inet dhcp
|
|---|
| 753 | switch-ports 0 5
|
|---|
| 754 | \end{Verbatim}
|
|---|
| 755 | Typically this configures the WAN-Port to start a DHCP request on bootup.
|
|---|
| 756 |
|
|---|
| 757 | \subsection{WLAN}
|
|---|
| 758 | A router containing a WLAN interface has an additional ethernet device
|
|---|
| 759 | representing it. On Broad\-com-based hardware it is typically \code{eth1}
|
|---|
| 760 | (\term{Linksys}),\code{eth2} (\term{Asus WL500gP}) or on \term{Netgear WGT634u}
|
|---|
| 761 | which has a Madwifi WLAN chip, it is \code{ath0}, \code{ath1}, etc. You can use
|
|---|
| 762 | these interfaces standalone or bridged with other devices, e.g. the internal
|
|---|
| 763 | LAN.
|
|---|
| 764 |
|
|---|
| 765 | \subsubsection{Basic Settings}
|
|---|
| 766 |
|
|---|
| 767 | Mandatory options and default parameters are in bold font.
|
|---|
| 768 |
|
|---|
| 769 | \begin{tabular}{l|l|p{10cm}}
|
|---|
| 770 | \strong{Option} & \strong{Parameter} & \strong{Description} \\
|
|---|
| 771 | \hline\hline
|
|---|
| 772 | \code{\strong{type}} & \code{broadcom} & Broadcom based card \\
|
|---|
| 773 | & \code{atheros} & Madwifi driver \\
|
|---|
| 774 | \hline
|
|---|
| 775 | \code{\strong{mode}} & \code{ap} & Access point mode \\
|
|---|
| 776 | & \code{sta} & Client mode \\
|
|---|
| 777 | & \code{adhoc} & Ad-Hoc mode \\
|
|---|
| 778 | & \code{wds} & WDS point-to-point link over wireless\\
|
|---|
| 779 | & \code{monitor} & The node acts as a passive monitor and
|
|---|
| 780 | only receives packets \\
|
|---|
| 781 | \hline
|
|---|
| 782 | \code{\strong{ssid}} & \code{<String>} & Set the SSID (Network Name) \\
|
|---|
| 783 | \hline
|
|---|
| 784 | \code{country} & \code{\{ALL|DE|JP|US|\ldots\}} & The country code used
|
|---|
| 785 | to determine the
|
|---|
| 786 | regulatory settings. \\
|
|---|
| 787 | \hline
|
|---|
| 788 | \end{tabular}
|
|---|
| 789 |
|
|---|
| 790 | \subsubsection{Security Settings}
|
|---|
| 791 | \begin{longtable}{l|l|p{10cm}}
|
|---|
| 792 | \strong{Option} & \strong{Parameter} & \strong{Description} \\
|
|---|
| 793 | \hline\hline
|
|---|
| 794 | \code{\strong{security}} & \code{none} & No authorization \\
|
|---|
| 795 | & \code{wep} & WEP key \\
|
|---|
| 796 | & \code{wpa-psk} & WPA with preshared key \\
|
|---|
| 797 | & \code{8021x} & IEEE 802.1X authentication \\
|
|---|
| 798 | \hline
|
|---|
| 799 | \code{\strong{authorization}} & & \strong{wpa-psk} \\
|
|---|
| 800 | & \code{psk} & WPA PSK \\
|
|---|
| 801 | & \code{psk2} & WPA2 PSK \\
|
|---|
| 802 | & \code{psk psk2} & WPA PSK and WPA2 PSK \\
|
|---|
| 803 | & & \strong{8021x} \\
|
|---|
| 804 | & \code{wpa} & WPA with RADIUS \\
|
|---|
| 805 | & \code{wpa2} & WPA2 with RADIUS \\
|
|---|
| 806 | & \code{wpa wpa2} & WPA and WPA2 \\
|
|---|
| 807 | \hline
|
|---|
| 808 | \code{\strong{encryption}} & & \strong{wep} \\
|
|---|
| 809 | & --- & not needed, automatically by key size \\
|
|---|
| 810 | & & \strong{wpa-psk} \\
|
|---|
| 811 | & \code{tkip} & RC4 encryption \\
|
|---|
| 812 | & \code{aes} & AES encryption \\
|
|---|
| 813 | & \code{aes+tkip} & support both \\
|
|---|
| 814 | & & \strong{8021x} \\
|
|---|
| 815 | & \code{wep} & RC4 encryption (static) \\
|
|---|
| 816 | & \code{tkip} & RC4 encryption \\
|
|---|
| 817 | & \code{aes} & AES encryption \\
|
|---|
| 818 | & \code{aes+tkip} & support both \\
|
|---|
| 819 | \hline
|
|---|
| 820 | \code{eap-type} & & \strong{8021x} \\
|
|---|
| 821 | & \code{\strong{tls}} & Transport Layer Security \\
|
|---|
| 822 | & \code{ttls} & Tunnelled TLS \\
|
|---|
| 823 | & \code{peap} & Protected EAP \\
|
|---|
| 824 | & \code{leap} & Cisco Wireless \\
|
|---|
| 825 | \hline
|
|---|
| 826 | \code{key} & & \strong{wep} \\
|
|---|
| 827 | &\code{\{\strong{1}|2|3|4\}} & Select WEP key to use. \\
|
|---|
| 828 | \hline
|
|---|
| 829 | \code{key[1..4]} & & \strong{wep} \\
|
|---|
| 830 | & \code{<String>} & WEP key. The key must be 5, 13 or 16
|
|---|
| 831 | bytes long, or 10, 26, 32, or 64 hex
|
|---|
| 832 | digits long. The encryption algorithm is
|
|---|
| 833 | automatically selected based on the key
|
|---|
| 834 | size. key1 is the key for WEP client mode.
|
|---|
| 835 | \\
|
|---|
| 836 | \hline
|
|---|
| 837 | \code{wpa-key} & & \strong{wpa-psk} \\
|
|---|
| 838 | & <String> & Password to use with WPA/WPA2 PSK (at least 8, up
|
|---|
| 839 | to 63 chars) \\
|
|---|
| 840 | \hline
|
|---|
| 841 | \code{wpa-gtk-rekey} & & \strong{wpa-psk},
|
|---|
| 842 | \strong{8021x} \\
|
|---|
| 843 | & \code{<Int>} (\strong{3600}) & Rekeying interval in
|
|---|
| 844 | seconds. \\
|
|---|
| 845 | \hline
|
|---|
| 846 | \code{\strong{radius-ipaddr}} & & \strong{8021x} \\
|
|---|
| 847 | & \code{<a.b.c.d>} & IP to connect. \\
|
|---|
| 848 | \hline
|
|---|
| 849 | \code{radius-port} & & \strong{8021x} \\
|
|---|
| 850 | & \code{<Int>} (\strong{1812}) & RADIUS-Port no. to connect
|
|---|
| 851 | \\
|
|---|
| 852 | \hline
|
|---|
| 853 | \strong{radius-key} & & \strong{8021x} \\
|
|---|
| 854 | & \code{<String>} & Shared Secret for connection to the
|
|---|
| 855 | Radius server \\
|
|---|
| 856 | \hline
|
|---|
| 857 | \end{longtable}
|
|---|
| 858 |
|
|---|
| 859 | \subsubsection{MAC filter}
|
|---|
| 860 | \begin{tabular}{l|l|p{10cm}}
|
|---|
| 861 | \strong{Option} & \strong{Parameter} & \strong{Description} \\
|
|---|
| 862 | \hline\hline
|
|---|
| 863 | \code{macmode} & \code{\{0|1|2\}} & 0: Disable MAC address matching. \\
|
|---|
| 864 | & & 1: Deny association to stations on the MAC
|
|---|
| 865 | list. \\
|
|---|
| 866 | & & 2: Allow association to stations on the MAC
|
|---|
| 867 | list. \\
|
|---|
| 868 | \hline
|
|---|
| 869 | \code{maclist} & \code{<MAC1> \ldots <MACn>} & List of space separated mac
|
|---|
| 870 | addresses to allow/deny
|
|---|
| 871 | according to \code{macmode}.
|
|---|
| 872 | Addresses should be entered with
|
|---|
| 873 | colons, e.g.:
|
|---|
| 874 | "\code{00:02:2D:08:E2:1D
|
|---|
| 875 | 00:03:3E:05:E1:1B}"\\
|
|---|
| 876 | \end{tabular}
|
|---|
| 877 |
|
|---|
| 878 | \subsubsection{Wireless Distribution System (WDS)}
|
|---|
| 879 | \begin{tabular}{l|l|p{10cm}}
|
|---|
| 880 | \strong{Option} & \strong{Parameter} & \strong{Description} \\
|
|---|
| 881 | \hline\hline
|
|---|
| 882 | \code{lazywds} & \code{\{0|1\}} & Accept WDS connections
|
|---|
| 883 | from anyone \\
|
|---|
| 884 | \hline
|
|---|
| 885 | \code{wds-bridge} & \code{br\{X\}} & Add WDS peers to bridge
|
|---|
| 886 | brX \\
|
|---|
| 887 | \hline
|
|---|
| 888 | \code{wds-security} & \code{\{wpa-psk\}} & secure the wds bridge
|
|---|
| 889 | with WPA (optional)\\
|
|---|
| 890 | \hline
|
|---|
| 891 | \code{wds-encryption} & \code{\{aes|tkip\}} & Use AES or TKIP as
|
|---|
| 892 | cipher\\
|
|---|
| 893 | \hline
|
|---|
| 894 | \code{wds-wpa-key} & \code{<String>} & Password to use with WPA
|
|---|
| 895 | PSK (at least 8, up to 63
|
|---|
| 896 | chars) \\
|
|---|
| 897 | \hline
|
|---|
| 898 | \code{wds} & \code{<MAC1> \ldots <MACn>} & List of WDS peer mac
|
|---|
| 899 | addresses
|
|---|
| 900 | (\code{xx:xx:xx:xx:xx:xx},
|
|---|
| 901 | space separated) \\
|
|---|
| 902 | \hline
|
|---|
| 903 | \end{tabular}
|
|---|
| 904 |
|
|---|
| 905 | \subsubsection{Miscellaneous}
|
|---|
| 906 | \begin{longtable}{l|l|p{10cm}}
|
|---|
| 907 | \strong{Option} & \strong{Parameter} & \strong{Description} \\
|
|---|
| 908 | \hline\hline
|
|---|
| 909 | \code{channel} & \code{\{1--14\}} & The wifi channel \\
|
|---|
| 910 | \hline
|
|---|
| 911 | \code{maxassoc} & \code{\{1--255\}} & Maximum number of associated clients \\
|
|---|
| 912 | \hline
|
|---|
| 913 | % TODO: add descriptions to the different gmode settings
|
|---|
| 914 | \code{gmode} & & Set the 54g Mode \\
|
|---|
| 915 | & \code{\strong{Auto}} & default \\
|
|---|
| 916 | & \code{LegacyB} & \\
|
|---|
| 917 | & \code{GOnly} & \\
|
|---|
| 918 | & \code{BDeferred} & \\
|
|---|
| 919 | & \code{Performance} & \\
|
|---|
| 920 | & \code{LRS} & \\
|
|---|
| 921 | \hline
|
|---|
| 922 | \code{frameburst} & \code{\{\strong{0}|1\}} & Disable/Enable frameburst mode. \\
|
|---|
| 923 | \hline
|
|---|
| 924 | \code{txpower} & \code{\{0--255|\strong{$-1$}\}} & Set the transmit power in dBm \\
|
|---|
| 925 | \hline
|
|---|
| 926 | \code{rate} & \code{<Int> (\strong{$-1$})} & force a fixed rate \\
|
|---|
| 927 | & & valid values for 802.11a are (6,
|
|---|
| 928 | 9, 12, 18, 24, 36, 48, 54) \\
|
|---|
| 929 | & & valid values for 802.11b are (1,
|
|---|
| 930 | 2, 5.5, 11) \\
|
|---|
| 931 | & & valid values for 802.11g are (1,
|
|---|
| 932 | 2, 5.5, 6, 9, 11, 12, 18, 24, 36,
|
|---|
| 933 | 48, 54) \\
|
|---|
| 934 | & & $-1$ means automatically determine
|
|---|
| 935 | the best rate \\
|
|---|
| 936 | \hline
|
|---|
| 937 | \code{rts} & \code{\{0-2347\}} & Set the RTS threshhold. \\
|
|---|
| 938 | \hline
|
|---|
| 939 | \code{frag} & \code{\{256-2346\}} & Set the fragmentation
|
|---|
| 940 | threshhold. \\
|
|---|
| 941 | \hline
|
|---|
| 942 | \code{afterburner} & \code{\{\strong{0}|1\}} & Enable Afterburner capability
|
|---|
| 943 | \\
|
|---|
| 944 | \hline
|
|---|
| 945 | \code{isolate} & \code{\{\strong{0}|1\}} & Hide Clients from each other \\
|
|---|
| 946 | \hline
|
|---|
| 947 | \code{bridge-if} & \code{\{br0..brX\}} & The bridge interface (optional)
|
|---|
| 948 | \\
|
|---|
| 949 | \hline
|
|---|
| 950 | \end{longtable}
|
|---|
| 951 |
|
|---|
| 952 | \subsubsection{Examples for wireless configuration}
|
|---|
| 953 |
|
|---|
| 954 | \paragraph{WLAN with WPA1/WPA2 AES+TKIP}
|
|---|
| 955 |
|
|---|
| 956 | This combination works with any kind of WPA client implementation.
|
|---|
| 957 |
|
|---|
| 958 | \begin{Verbatim}[label=\file{/etc/network/interfaces}]
|
|---|
| 959 | auto eth1
|
|---|
| 960 | iface eth1 inet static
|
|---|
| 961 | address 192.168.10.1
|
|---|
| 962 | netmask 255.255.255.0
|
|---|
| 963 | broadcast +
|
|---|
| 964 | wireless-type broadcom
|
|---|
| 965 | wireless-country DE
|
|---|
| 966 | wireless-mode ap
|
|---|
| 967 | wireless-ssid FreeWRT
|
|---|
| 968 | wireless-security wpa-psk
|
|---|
| 969 | wireless-authorization psk psk2
|
|---|
| 970 | wireless-encryption aes+tkip
|
|---|
| 971 | wireless-wpa-key 12345678
|
|---|
| 972 | wireless-channel 11
|
|---|
| 973 | \end{Verbatim}
|
|---|
| 974 |
|
|---|
| 975 | If you want to do MAC filtering, add the following to the sample above:
|
|---|
| 976 | \begin{Verbatim}[label=\file{/etc/network/interfaces}]
|
|---|
| 977 | wireless-macmode 2
|
|---|
| 978 | wireless-mac 00:01:02:03:04:05 06:07:08:09:0a:0b
|
|---|
| 979 | \end{Verbatim}
|
|---|
| 980 | this enables the filter and defines the list to contain addresses that should be allowed.
|
|---|
| 981 |
|
|---|
| 982 | \paragraph{WLAN without encryption}
|
|---|
| 983 |
|
|---|
| 984 | If you already use VPN to secure your connection, you can just use an unencrypted setup
|
|---|
| 985 | and setup the firewall on your embedded device.
|
|---|
| 986 |
|
|---|
| 987 | \begin{Verbatim}[label=\file{/etc/network/interfaces}]
|
|---|
| 988 | auto eth1
|
|---|
| 989 | iface eth1 inet static
|
|---|
| 990 | address 192.168.10.1
|
|---|
| 991 | netmask 255.255.255.0
|
|---|
| 992 | broadcast +
|
|---|
| 993 | wireless-type broadcom
|
|---|
| 994 | wireless-country DE
|
|---|
| 995 | wireless-mode ap
|
|---|
| 996 | wireless-ssid FreeWRT
|
|---|
| 997 | wireless-security none
|
|---|
| 998 | wireless-channel 11
|
|---|
| 999 | \end{Verbatim}
|
|---|
| 1000 |
|
|---|
| 1001 | \paragraph{WLAN client with WPA2 (AES)}
|
|---|
| 1002 |
|
|---|
| 1003 | This can only be used in routing mode, you can not bridge it with LAN or WAN interfaces.
|
|---|
| 1004 |
|
|---|
| 1005 | \begin{Verbatim}[label=\file{/etc/network/interfaces}]
|
|---|
| 1006 | auto eth1
|
|---|
| 1007 | iface eth1 inet static
|
|---|
| 1008 | address 192.168.10.1
|
|---|
| 1009 | netmask 255.255.255.0
|
|---|
| 1010 | broadcast +
|
|---|
| 1011 | wireless-type broadcom
|
|---|
| 1012 | wireless-country DE
|
|---|
| 1013 | wireless-mode sta
|
|---|
| 1014 | wireless-ssid FreeWRT
|
|---|
| 1015 | wireless-security wpa-psk
|
|---|
| 1016 | wireless-authorization psk2
|
|---|
| 1017 | wireless-encryption aes
|
|---|
| 1018 | wireless-wpa-key 12345678
|
|---|
| 1019 | \end{Verbatim}
|
|---|
| 1020 |
|
|---|
| 1021 | WLAN with WDS nodes, the WDS nodes need to have the same
|
|---|
| 1022 | SSID, channel and encryption parameters. The WDS connection is separetely
|
|---|
| 1023 | secured via WPA1 and AES. WPA2 for WDS connection security is \_not\_ working.
|
|---|
| 1024 |
|
|---|
| 1025 | WDS node 1 (MAC of Wireless \code{06:05:04:03:02:01})
|
|---|
| 1026 | \begin{Verbatim}[label=\file{/etc/network/interfaces}]
|
|---|
| 1027 | auto br0
|
|---|
| 1028 | iface br0 inet static
|
|---|
| 1029 | bridge-ifaces eth1
|
|---|
| 1030 | address 192.168.10.1
|
|---|
| 1031 | netmask 255.255.255.0
|
|---|
| 1032 | broadcast +
|
|---|
| 1033 | wireless-type broadcom
|
|---|
| 1034 | wireless-country DE
|
|---|
| 1035 | wireless-mode wds
|
|---|
| 1036 | wireless-ssid FreeWRT-WDS
|
|---|
| 1037 | wireless-security wpa-psk
|
|---|
| 1038 | wireless-authorization psk psk2
|
|---|
| 1039 | wireless-encryption aes+tkip
|
|---|
| 1040 | wireless-wpa-key apkey
|
|---|
| 1041 | wireless-lazywds 1
|
|---|
| 1042 | wireless-wds-security wpa-psk
|
|---|
| 1043 | wireless-wds-encryption aes
|
|---|
| 1044 | wireless-wds-wpa-key wdskey
|
|---|
| 1045 | wireless-wds 01:02:03:04:05:06
|
|---|
| 1046 | wireless-wds-bridge br0
|
|---|
| 1047 | \end{Verbatim}
|
|---|
| 1048 | WDS node 2 (MAC of Wireless \code{01:02:03:04:05:06})
|
|---|
| 1049 | \begin{Verbatim}[label=\file{/etc/network/interfaces}]
|
|---|
| 1050 | auto br0
|
|---|
| 1051 | iface br0 inet static
|
|---|
| 1052 | bridge-ifaces eth1
|
|---|
| 1053 | address 192.168.10.2
|
|---|
| 1054 | netmask 255.255.255.0
|
|---|
| 1055 | broadcast +
|
|---|
| 1056 | wireless-type broadcom
|
|---|
| 1057 | wireless-country DE
|
|---|
| 1058 | wireless-mode wds
|
|---|
| 1059 | wireless-ssid FreeWRT-WDS
|
|---|
| 1060 | wireless-security wpa-psk
|
|---|
| 1061 | wireless-authorization psk psk2
|
|---|
| 1062 | wireless-encryption aes+tkip
|
|---|
| 1063 | wireless-wpa-key apkey
|
|---|
| 1064 | wireless-lazywds 1
|
|---|
| 1065 | wireless-wds-security wpa-psk
|
|---|
| 1066 | wireless-wds-encryption aes
|
|---|
| 1067 | wireless-wds-wpa-key wdskey
|
|---|
| 1068 | wireless-wds 06:05:04:03:02:01
|
|---|
| 1069 | wireless-wds-bridge br0
|
|---|
| 1070 | \end{Verbatim}
|
|---|
| 1071 |
|
|---|
| 1072 | \paragraph{Peer-to-Peer/AdHoc mode (no encryption, IP must be static)}
|
|---|
| 1073 | \begin{Verbatim}[label=\file{/etc/network/interfaces}]
|
|---|
| 1074 | auto eth1
|
|---|
| 1075 | iface eth1 inet static
|
|---|
| 1076 | address 192.168.10.1
|
|---|
| 1077 | netmask 255.255.255.0
|
|---|
| 1078 | broadcast +
|
|---|
| 1079 | wireless-type broadcom
|
|---|
| 1080 | wireless-country DE
|
|---|
| 1081 | wireless-mode adhoc
|
|---|
| 1082 | wireless-ssid FreeWRT
|
|---|
| 1083 | wireless-security none
|
|---|
| 1084 | wireless-channel 11
|
|---|
| 1085 | \end{Verbatim}
|
|---|
| 1086 |
|
|---|
| 1087 | \subsection{Bridging}
|
|---|
| 1088 |
|
|---|
| 1089 | This is mostly needed to combine LAN and WLAN to a homogeneous network.
|
|---|
| 1090 | Be sure you have installed the package \app{bridge-utils}.
|
|---|
| 1091 | See the example for a bridging setup, WLAN is secured via WPA/WPA2.
|
|---|
| 1092 |
|
|---|
| 1093 | \begin{Verbatim}[label=\file{/etc/network/interfaces}]
|
|---|
| 1094 | auto eth0.0
|
|---|
| 1095 | iface eth0.0 inet manual
|
|---|
| 1096 | switch-ports 1 2 3 4 5*
|
|---|
| 1097 |
|
|---|
| 1098 | auto eth1
|
|---|
| 1099 | iface eth1 inet manual
|
|---|
| 1100 | wireless-type broadcom
|
|---|
| 1101 | wireless-country DE
|
|---|
| 1102 | wireless-mode ap
|
|---|
| 1103 | wireless-ssid FreeWRT
|
|---|
| 1104 | wireless-channel 11
|
|---|
| 1105 | wireless-security wpa-psk
|
|---|
| 1106 | wireless-authorization psk psk2
|
|---|
| 1107 | wireless-encryption aes+tkip
|
|---|
| 1108 | wireless-wpa-key MyWlanSecret
|
|---|
| 1109 | wireless-bridge-if br0
|
|---|
| 1110 |
|
|---|
| 1111 | auto br0
|
|---|
| 1112 | iface br0 inet static
|
|---|
| 1113 | bridge-ifaces eth0.0 eth1
|
|---|
| 1114 | address 192.168.1.1
|
|---|
| 1115 | netmask 255.255.255.0
|
|---|
| 1116 | broadcast +
|
|---|
| 1117 | \end{Verbatim}
|
|---|
| 1118 |
|
|---|
| 1119 | This creates a new bridging interface \code{br0} which combines the VLAN
|
|---|
| 1120 | interface \code{eth0.0} (representing the LAN-ports 1--4) and the WLAN interface
|
|---|
| 1121 | \code{eth1} (on some devices like \term{Asus WL500gP} this might be \code{eth2}).
|
|---|
| 1122 | The bridge interface needs always be the last one, otherwise it can not find
|
|---|
| 1123 | the interfaces in \code{bridge-ifaces}.
|
|---|
| 1124 |
|
|---|
| 1125 | \subsection{PPP}
|
|---|
| 1126 |
|
|---|
| 1127 | PPP comes in various flavours for different situations, the most commonly
|
|---|
| 1128 | needed will likely be DSL and for \term{WRT54G3G} users UMTS. So there exists a
|
|---|
| 1129 | hook-script that evaluates a \code{use-template} option and generates a
|
|---|
| 1130 | ppp-peer. This way everything needed so far can be configured within the
|
|---|
| 1131 | \code{interfaces} file. Be sure you have installed the packages \app{kmod-ppp},
|
|---|
| 1132 | \app{ppp} and \app{ppp-mod-pppoe}. For providers using PPTP for authentication,
|
|---|
| 1133 | instead of PPPoE, you need to install \app{pptp}.
|
|---|
| 1134 |
|
|---|
| 1135 | \subsubsection{DSL with PPPoE}
|
|---|
| 1136 | \begin{Verbatim}[label=\file{/etc/network/interfaces}]
|
|---|
| 1137 | auto ppp0
|
|---|
| 1138 | iface ppp0 inet ppp
|
|---|
| 1139 | use-template dsl
|
|---|
| 1140 | provider foobar
|
|---|
| 1141 | ppp-username 1234567890121234567890120001@bar.de
|
|---|
| 1142 | ppp-password bar
|
|---|
| 1143 | ppp-device eth0.1
|
|---|
| 1144 | \end{Verbatim}
|
|---|
| 1145 |
|
|---|
| 1146 | Now your DSL connection will be started on boot (\code{auto ppp0}) and you can
|
|---|
| 1147 | manually shut it down with \command{ifdown ppp0} or start it up with
|
|---|
| 1148 | \command{ifup ppp0}. The template \code{dsl} will configure a typical PPPoE
|
|---|
| 1149 | peer for you.
|
|---|
| 1150 |
|
|---|
| 1151 | \subsubsection{DSL with PPTP}
|
|---|
| 1152 | \begin{Verbatim}[label=\file{/etc/network/interfaces}]
|
|---|
| 1153 | auto ppp0
|
|---|
| 1154 | iface ppp0 inet ppp
|
|---|
| 1155 | use-template pptp
|
|---|
| 1156 | provider foobar
|
|---|
| 1157 | ppp-username foo
|
|---|
| 1158 | ppp-password bar
|
|---|
| 1159 | ppp-modemip 10.0.0.1
|
|---|
| 1160 | ppp-mtu 1480
|
|---|
| 1161 | ppp-device eth0.1
|
|---|
| 1162 | \end{Verbatim}
|
|---|
| 1163 |
|
|---|
| 1164 | Now your DSL connection will be started on boot (\code{auto ppp0}) and you can
|
|---|
| 1165 | manually shut it down with \command{ifdown ppp0} or start it up with
|
|---|
| 1166 | \command{ifup ppp0}. The template \code{pptp} will configure a typical PPTP
|
|---|
| 1167 | peer for you.
|
|---|
| 1168 |
|
|---|
| 1169 | \subsubsection{UMTS}
|
|---|
| 1170 | Same footprint different template and some specific options. That is all that
|
|---|
| 1171 | is needed for an UMTS connection to Vodafone as it can be seen in this example.
|
|---|
| 1172 | \begin{Verbatim}[label=\file{/etc/network/interfaces}]
|
|---|
| 1173 | iface ppp0 inet ppp
|
|---|
| 1174 | use-template umts
|
|---|
| 1175 | provider umts
|
|---|
| 1176 | #ppp-username ""
|
|---|
| 1177 | #ppp-password ""
|
|---|
| 1178 | ppp-device /dev/noz0
|
|---|
| 1179 | umts-apn web.vodafone.de
|
|---|
| 1180 | umts-pincode 1234
|
|---|
| 1181 | umts-mode umts_first
|
|---|
| 1182 | \end{Verbatim}
|
|---|
| 1183 | As you can see: unneeded options like \code{ppp-username} or
|
|---|
| 1184 | \code{ppp-password} can just be removed or commented out. Don't leave them
|
|---|
| 1185 | without a value as that causes a failure in \app{ipup}. It does work if you
|
|---|
| 1186 | give empty double quotes as value like \code{""}.
|
|---|
| 1187 |
|
|---|
| 1188 | Note that you have to set the correct APN, username and password for your
|
|---|
| 1189 | provider!
|
|---|
| 1190 |
|
|---|
| 1191 | You may also remove the pin from your SIM-card and the configuration if you
|
|---|
| 1192 | like.
|
|---|
| 1193 |
|
|---|
| 1194 | For \term{Linksys WRT54G3G} a package called \app{broadcom-watchbutton} will be
|
|---|
| 1195 | installed, this is a small daemon that monitors the UMTS-button of the router
|
|---|
| 1196 | and executes \command{ifup umts} or \command{ifdown umts} on a button press.
|
|---|
| 1197 | You have to set \code{watchbutton=YES} in /etc/rc.conf to have it start
|
|---|
| 1198 | automatically.
|
|---|
| 1199 |
|
|---|
| 1200 | This is totally independent from the \code{auto umts} setting. Even if you
|
|---|
| 1201 | start the connection on bootup you can shut it down again with a button press.
|
|---|
| 1202 |
|
|---|
| 1203 | \subsection{custom interface hooks}
|
|---|
| 1204 | \subsubsection{per interface}
|
|---|
| 1205 | You can execute various commands on interface startup or shutdown with special
|
|---|
| 1206 | option:
|
|---|
| 1207 | \begin{Verbatim}[label=\file{/etc/network/interfaces}]
|
|---|
| 1208 | iface foobar inet static
|
|---|
| 1209 | [...]
|
|---|
| 1210 | pre-up <command>
|
|---|
| 1211 | up <command>
|
|---|
| 1212 | up <command>
|
|---|
| 1213 | down <command>
|
|---|
| 1214 | post-down <command>
|
|---|
| 1215 | \end{Verbatim}
|
|---|
| 1216 |
|
|---|
| 1217 | You can give each option multiple times and their commands will be executed in
|
|---|
| 1218 | given order.
|
|---|
| 1219 | \begin{description}
|
|---|
| 1220 | \item[pre-up] before the interface will be started
|
|---|
| 1221 | \item[up] after the interface was started successfully
|
|---|
| 1222 | \item[down] before the interface goes down
|
|---|
| 1223 | \item[post-down] after the interface shut down
|
|---|
| 1224 | \end{description}
|
|---|
| 1225 |
|
|---|
| 1226 | \subsubsection{general hooks}
|
|---|
| 1227 | Additionally you can write scripts executed for each interface if you put them
|
|---|
| 1228 | in
|
|---|
| 1229 | \begin{itemize}
|
|---|
| 1230 | \item \texttt{/etc/network/if-pre-up.d}
|
|---|
| 1231 | \item \texttt{/etc/network/if-up.d}
|
|---|
| 1232 | \item \texttt{/etc/network/if-down.d}
|
|---|
| 1233 | \item \texttt{/etc/network/if-post-down.d}
|
|---|
| 1234 | \end{itemize}
|
|---|
| 1235 | Same semantics as above.
|
|---|
| 1236 |
|
|---|
| 1237 |
|
|---|
| 1238 | \section{Traffic Control}
|
|---|
| 1239 |
|
|---|
| 1240 | To aid in setting up Quality of Service and Traffic Shaping, FreeWRT provides a
|
|---|
| 1241 | configurable script via the \app{fwrtc} package. Though this package will allow
|
|---|
| 1242 | you to choose between different implementations of Queueing Disciplines, for
|
|---|
| 1243 | now there exists only a single implementation using HTB.
|
|---|
| 1244 |
|
|---|
| 1245 | \subsection{Concept}
|
|---|
| 1246 |
|
|---|
| 1247 | In general, \app{fwrtc} allows classifying of network traffic into three classes:
|
|---|
| 1248 | \begin{description}
|
|---|
| 1249 | \item[REAL] high priority, mid bandwidth \\
|
|---|
| 1250 | use this for low delay applications like \app{SSH}, \app{VoIP}
|
|---|
| 1251 | or \app{DNS}
|
|---|
| 1252 | \item[BULK] mid priority, high bandwidth \\
|
|---|
| 1253 | this is a generic class for everything that doesn't fit above
|
|---|
| 1254 | or below
|
|---|
| 1255 | \item[P2P] low priority, low bandwidth \\
|
|---|
| 1256 | use this class for all unwanted traffic disturbing normal use
|
|---|
| 1257 | of the internet connection (\app{P2P} and other parasites)
|
|---|
| 1258 | \end{description}
|
|---|
| 1259 |
|
|---|
| 1260 | \paragraph{Note} that fwrtc does not actually classify the traffic, it just
|
|---|
| 1261 | provides the classes above and allows comfortable configuration of the
|
|---|
| 1262 | necessary values. For classifying traffic, use \app{iptables} (see below for
|
|---|
| 1263 | more details).
|
|---|
| 1264 |
|
|---|
| 1265 | \subsection{Installation}
|
|---|
| 1266 |
|
|---|
| 1267 | This is done just like with any other FreeWRT package, so using the ADK to
|
|---|
| 1268 | integrate it into the firmware image right from the start or by installing it
|
|---|
| 1269 | afterwards using \app{ipkg}.
|
|---|
| 1270 |
|
|---|
| 1271 | \subsection{Configuration}
|
|---|
| 1272 |
|
|---|
| 1273 | \app{fwrtc} basically exists of two files:
|
|---|
| 1274 | \begin{itemize}
|
|---|
| 1275 | \item the script itself \file{/etc/hotplug.d/net/10-fwrtc}
|
|---|
| 1276 | \item a configuration file \file{/etc/fwrtc.conf}
|
|---|
| 1277 | \end{itemize}
|
|---|
| 1278 | It should not be necessary to touch the hotplug script, so adjusting the
|
|---|
| 1279 | configuration values should be enough to complete the first part of the setup
|
|---|
| 1280 | process.
|
|---|
| 1281 |
|
|---|
| 1282 | The second part consists of defining \app{iptables} rules for classifying
|
|---|
| 1283 | traffic. \app{fwrtc} provides three \app{tc}-filters (one for each class),
|
|---|
| 1284 | matching different firewall marks (see the \code{MARK} target of
|
|---|
| 1285 | \app{iptables}).
|
|---|
| 1286 |
|
|---|
| 1287 | See the example below to gather some inspiration on how to actually
|
|---|
| 1288 | implementing the rules:
|
|---|
| 1289 |
|
|---|
| 1290 | \begin{Verbatim}[label=sample set of iptables rules for fwrtc]
|
|---|
| 1291 | iptables -t mangle -A POSTROUTING -o eth0 -j tc
|
|---|
| 1292 |
|
|---|
| 1293 | ### match ip tos Minimum-Delay
|
|---|
| 1294 | iptables -t mangle -A tc -m tos --tos 0x10 -j MARK --set-mark 0x1
|
|---|
| 1295 | iptables -t mangle -A tc -m tos --tos 0x10 -j RETURN
|
|---|
| 1296 |
|
|---|
| 1297 | ## fish out tcp syn, syn-ack and ack packets (no piggyback!)
|
|---|
| 1298 | iptables -t mangle -A tc -p tcp -m length --length 44:84 \
|
|---|
| 1299 | --tcp-flags SYN,FIN,RST SYN -j MARK --set-mark 0x1
|
|---|
| 1300 | iptables -t mangle -A tc -p tcp -m length --length 44:84 \
|
|---|
| 1301 | --tcp-flags SYN,FIN,RST SYN -j RETURN
|
|---|
| 1302 | iptables -t mangle -A tc -p tcp -m length --length 44:84 \
|
|---|
| 1303 | --tcp-flags SYN,ACK,FIN,RST ACK -j MARK --set-mark 0x1
|
|---|
| 1304 | iptables -t mangle -A tc -p tcp -m length --length 44:84 \
|
|---|
| 1305 | --tcp-flags SYN,ACK,FIN,RST ACK -j RETURN
|
|---|
| 1306 |
|
|---|
| 1307 | ### prioritize icmp packets
|
|---|
| 1308 | iptables -t mangle -A tc -p icmp -j MARK --set-mark 0x1
|
|---|
| 1309 | iptables -t mangle -A tc -p icmp -j RETURN
|
|---|
| 1310 |
|
|---|
| 1311 | ### dns traffic
|
|---|
| 1312 | iptables -t mangle -A tc -p tcp --dport 53 -j MARK --set-mark 0x1
|
|---|
| 1313 | iptables -t mangle -A tc -p tcp --dport 53 -j RETURN
|
|---|
| 1314 | iptables -t mangle -A tc -p udp --dport 53 -j MARK --set-mark 0x1
|
|---|
| 1315 | iptables -t mangle -A tc -p udp --dport 53 -j RETURN
|
|---|
| 1316 |
|
|---|
| 1317 | ### games
|
|---|
| 1318 | iptables -t mangle -A tc -m layer7 --l7proto quake-halflife -j MARK --set-mark 0x1
|
|---|
| 1319 | iptables -t mangle -A tc -m layer7 --l7proto quake-halflife -j RETURN
|
|---|
| 1320 | iptables -t mangle -A tc -m layer7 --l7proto battlefield1942 -j MARK --set-mark 0x1
|
|---|
| 1321 | iptables -t mangle -A tc -m layer7 --l7proto battlefield1942 -j RETURN
|
|---|
| 1322 | iptables -t mangle -A tc -m layer7 --l7proto battlefield2 -j MARK --set-mark 0x1
|
|---|
| 1323 | iptables -t mangle -A tc -m layer7 --l7proto battlefield2 -j RETURN
|
|---|
| 1324 |
|
|---|
| 1325 | ### voip
|
|---|
| 1326 | iptables -t mangle -A tc -m layer7 --l7proto sip -j MARK --set-mark 0x1
|
|---|
| 1327 | iptables -t mangle -A tc -m layer7 --l7proto sip -j RETURN
|
|---|
| 1328 | iptables -t mangle -A tc -m layer7 --l7proto rtp -j MARK --set-mark 0x1
|
|---|
| 1329 | iptables -t mangle -A tc -m layer7 --l7proto rtp -j RETURN
|
|---|
| 1330 | iptables -t mangle -A tc -m layer7 --l7proto skypetoskype -j MARK --set-mark 0x1
|
|---|
| 1331 | iptables -t mangle -A tc -m layer7 --l7proto skypetoskype -j RETURN
|
|---|
| 1332 |
|
|---|
| 1333 | ### crappy p2p traffic
|
|---|
| 1334 | iptables -t mangle -A tc -m layer7 --l7proto bittorrent -j MARK --set-mark 0x3
|
|---|
| 1335 | iptables -t mangle -A tc -m layer7 --l7proto bittorrent -j RETURN
|
|---|
| 1336 | iptables -t mangle -A tc -m layer7 --l7proto edonkey -j MARK --set-mark 0x3
|
|---|
| 1337 | iptables -t mangle -A tc -m layer7 --l7proto edonkey -j RETURN
|
|---|
| 1338 | iptables -t mangle -A tc -m layer7 --l7proto fasttrack -j MARK --set-mark 0x3
|
|---|
| 1339 | iptables -t mangle -A tc -m layer7 --l7proto fasttrack -j RETURN
|
|---|
| 1340 | iptables -t mangle -A tc -m layer7 --l7proto gnutella -j MARK --set-mark 0x3
|
|---|
| 1341 | iptables -t mangle -A tc -m layer7 --l7proto gnutella -j RETURN
|
|---|
| 1342 | iptables -t mangle -A tc -m layer7 --l7proto napster -j MARK --set-mark 0x3
|
|---|
| 1343 | iptables -t mangle -A tc -m layer7 --l7proto napster -j RETURN
|
|---|
| 1344 | \end{Verbatim}
|
|---|
| 1345 |
|
|---|
| 1346 | \section{FWCF - FreeWRT Configuration Filesystem}
|
|---|
| 1347 |
|
|---|
| 1348 | FWCF is a separate flash partition for all changes made to the \file{/etc/}
|
|---|
| 1349 | directory. There is a small tool named \app{fwcf}, which is used to setup the
|
|---|
| 1350 | system or to commit changes to the fwcf partition.
|
|---|
| 1351 |
|
|---|
| 1352 | On bootup the script \file{/sbin/mount\_root} is executed, which calls
|
|---|
| 1353 | \command{fwcf setup} to setup \file{/etc/} as memory filesystem and overlay the
|
|---|
| 1354 | changes committed to the fwcf partition.
|
|---|
| 1355 |
|
|---|
| 1356 | If you change anything in \file{/etc/} and like to keep the change, it is
|
|---|
| 1357 | required to execute \command{fwcf commit}. This will compress all changed or
|
|---|
| 1358 | new files in \file{/etc/} and write the result into the fwcf partition. The
|
|---|
| 1359 | fwcf partition is 128 Kb in size. This size is not changeable at the moment.
|
|---|
| 1360 |
|
|---|
| 1361 | If you need more detailed information, please read the specification of FWCF,
|
|---|
| 1362 | which can be found at
|
|---|
| 1363 | \url{http://www.freewrt.org/trac/wiki/Documentation/Specs/FwCf}
|
|---|
| 1364 |
|
|---|
| 1365 | If you want to remove all your changes and start your configuration from
|
|---|
| 1366 | scratch, use \command{fwcf erase}. This is also required if you switch between
|
|---|
| 1367 | compression plugins. Right now LZO plugin is default.
|
|---|
| 1368 |
|
|---|
| 1369 | \section{IPKG - Packagemanagement}
|
|---|
| 1370 |
|
|---|
| 1371 | All software for FreeWRT is available as a IPKG package. IPKG is a package
|
|---|
| 1372 | manager very similar to Debian's \app{dpkg/apt-get} utilities. It is specially
|
|---|
| 1373 | designed for embedded systems and is widely used. The FreeWRT project use a
|
|---|
| 1374 | special version, which is embedded to the busybox binary. Normally the command
|
|---|
| 1375 | line tool \app{ipkg} is pre-installed.
|
|---|
| 1376 |
|
|---|
| 1377 | IPKG uses a configuration file similar to \file{/etc/apt/sources.list}, which
|
|---|
| 1378 | contains a list of software repositories available via HTTP or FTP. The
|
|---|
| 1379 | configuration file \file{/etc/ipkg.conf} contains the official FreeWRT 1.0
|
|---|
| 1380 | repository for your board and kernel version.
|
|---|
| 1381 |
|
|---|
| 1382 | To update the list of available packages execute following command as root:
|
|---|
| 1383 | \begin{Verbatim}[label=update list of available packages]
|
|---|
| 1384 | # ipkg update
|
|---|
| 1385 | \end{Verbatim}
|
|---|
| 1386 |
|
|---|
| 1387 | This command requires a working internet connection, because it will fetch a
|
|---|
| 1388 | package list from every repository declared in \file{/etc/ipkg.conf}.
|
|---|
| 1389 |
|
|---|
| 1390 | To install a new package use following command:
|
|---|
| 1391 | \begin{Verbatim}[label=example installation of \app{tcpdump}]
|
|---|
| 1392 | # ipkg install tcpdump
|
|---|
| 1393 | \end{Verbatim}
|
|---|
| 1394 |
|
|---|
| 1395 | This will install the package \app{tcpdump} and all dependencies onto the
|
|---|
| 1396 | flash. Where the data is saved depends on the root filesystem you decided to
|
|---|
| 1397 | use while installing FreeWRT. If you use jffs2 as root filesystem, then the
|
|---|
| 1398 | package is installed on the big linux partition. If you use squashfs-overlay,
|
|---|
| 1399 | then the package is installed on the mini-fo overlay filesystem which writes
|
|---|
| 1400 | its data to the jffs2 data partition. If you use a squashfs-symlinks
|
|---|
| 1401 | filesystem, then the package data is directly install into the jffs2 data
|
|---|
| 1402 | partition, containing symlinks to the read-only squashfs partition.
|
|---|
| 1403 |
|
|---|
| 1404 | You can also remove packages, but this is only useful if you are using jffs2 as
|
|---|
| 1405 | root filesystem:
|
|---|
| 1406 | \begin{Verbatim}[label=example removal of \app{tcpdump}]
|
|---|
| 1407 | # ipkg remove tcpdump
|
|---|
| 1408 | \end{Verbatim}
|
|---|
| 1409 |
|
|---|
| 1410 | This will not remove any dependencies, installed earlier. For example,
|
|---|
| 1411 | \app{libpcap} is still installed after executing this command. On jffs2 root
|
|---|
| 1412 | filesystem you should never remove any essential packages like \app{busybox},
|
|---|
| 1413 | \app{fwcf} or \app{uclibc}, otherwise you make the embedded system unusable.
|
|---|
| 1414 |
|
|---|
| 1415 | Nearly the same as for removing packages, counts for \command{ipkg upgrade}.
|
|---|
| 1416 | Please \strong{never ever} use \command{ipkg upgrade} to update your embedded
|
|---|
| 1417 | system. This command is only useful to upgrade single packages on a jffs2
|
|---|
| 1418 | rootfilesystem or data partition.
|
|---|
| 1419 |
|
|---|
| 1420 | \section{Startup scripts}
|
|---|
| 1421 |
|
|---|
| 1422 | Some of the available packages containing software which start services at boot
|
|---|
| 1423 | time. For that we provide simple startup scripts, which are installed into the
|
|---|
| 1424 | directory \file{/etc/init.d}. See following example for the package
|
|---|
| 1425 | \app{dnsmasq}, a combined dns and dhcp server daemon:
|
|---|
| 1426 |
|
|---|
| 1427 | \begin{Verbatim}[label=\file{/etc/init.d/S50dnsmasq}]
|
|---|
| 1428 | #!/bin/sh
|
|---|
| 1429 |
|
|---|
| 1430 | . /etc/rc.conf
|
|---|
| 1431 |
|
|---|
| 1432 | case $1 in
|
|---|
| 1433 | autostart)
|
|---|
| 1434 | test x"${dns_dhcp:-NO}" = x"NO" && exit 0
|
|---|
| 1435 | exec $0 start
|
|---|
| 1436 | ;;
|
|---|
| 1437 | start)
|
|---|
| 1438 | [ -f /etc/dnsmasq.conf ] || exit
|
|---|
| 1439 | /usr/sbin/dnsmasq
|
|---|
| 1440 | ;;
|
|---|
| 1441 | stop)
|
|---|
| 1442 | killall dnsmasq
|
|---|
| 1443 | ;;
|
|---|
| 1444 | restart)
|
|---|
| 1445 | $0 stop
|
|---|
| 1446 | $0 start
|
|---|
| 1447 | ;;
|
|---|
| 1448 | *)
|
|---|
| 1449 | echo "Usage: $0 {start | stop | restart}"
|
|---|
| 1450 | ;;
|
|---|
| 1451 | esac
|
|---|
| 1452 | exit 0
|
|---|
| 1453 | \end{Verbatim}
|
|---|
| 1454 |
|
|---|
| 1455 | After installation the package postinst script will add all needed changes to
|
|---|
| 1456 | the \file{/etc/} directory. For example packages can add new user and groups,
|
|---|
| 1457 | add new variables to \file{/etc/rc.conf} or just add new values to existing
|
|---|
| 1458 | files as \file{/etc/services}. It is FreeWRT policy not to start any services
|
|---|
| 1459 | after installation or in case of a new boot. To start services on bootup you
|
|---|
| 1460 | need to set \code{\$servicename=YES} in \file{/etc/rc.conf} and commit your
|
|---|
| 1461 | changes via \command{fwcf commit}. For every policy exists an exception, we
|
|---|
| 1462 | start all essential services by default, like ssh daemon, syslog and network
|
|---|
| 1463 | initialisation.
|
|---|
| 1464 |
|
|---|
| 1465 | For some services you can control the startup behaviour by modifying the
|
|---|
| 1466 | \code{\$servicename\_flags} variable in \file{/etc/rc.conf}.
|
|---|
| 1467 |
|
|---|
| 1468 | For example the variable \code{\$ssh\_opts} is provided as an argument to the
|
|---|
| 1469 | dropbear ssh daemon to control its behaviour.
|
|---|
| 1470 |
|
|---|
| 1471 | Having this policy helps you to configure your FreeWRT embedded system without
|
|---|
| 1472 | shooting yourself in the foot. For example if you try to realize a firewall
|
|---|
| 1473 | system and trying to set the rules in \file{/etc/firewall.user}, which is read
|
|---|
| 1474 | by \file{/etc/init.d/S45firewall}, if the iptables package is installed. You
|
|---|
| 1475 | can just reload the changed ruleset via \code{/etc/init.d/S45firewall restart}.
|
|---|
| 1476 | If you managed to kick you out of the system, you can just reboot the system
|
|---|
| 1477 | and you gain access again. As soon as your are ready with the firewall
|
|---|
| 1478 | configuration and you decide to activate the firewall rules on bootup, you set
|
|---|
| 1479 | \code{firewall=YES} in \file{/etc/rc.conf}, commit your changes via
|
|---|
| 1480 | \command{fwcf commit} and reboot. Now the firewall rules will be activated on
|
|---|
| 1481 | bootup.
|
|---|
| 1482 |
|
|---|
| 1483 | \section{Network Logging}
|
|---|
| 1484 |
|
|---|
| 1485 | Administered networks often make use of a central Log Server to store the
|
|---|
| 1486 | SysLog output of the local servers. This is also a good approach when setting
|
|---|
| 1487 | up a Log Analyser or IDS.
|
|---|
| 1488 |
|
|---|
| 1489 | To enable sending SysLog output via network for \command{syslogd}, simply alter
|
|---|
| 1490 | it's flags in \file{/etc/rc.conf}. Use \code{-R Host[:Port]} to send all
|
|---|
| 1491 | messages to \code{Host}, and \code{Port} (optional). To keep the messages
|
|---|
| 1492 | locally also, give \code{-L} as additional flag.
|
|---|
| 1493 |
|
|---|
| 1494 | \section{Accessing USB storage devices}
|
|---|
| 1495 |
|
|---|
| 1496 | Many routers now ship with USB onboard, which makes them fine for dealing as a
|
|---|
| 1497 | fileserver. If you have such a device and want to setup your own low--cost NAS,
|
|---|
| 1498 | follow the instructions below.
|
|---|
| 1499 |
|
|---|
| 1500 | \subsection{Firmware image preparation}
|
|---|
| 1501 |
|
|---|
| 1502 | What you need is:
|
|---|
| 1503 | \begin{itemize}
|
|---|
| 1504 | \item kernel support for \code{usb-storage}
|
|---|
| 1505 | \item kernel support for the filesystem(s) to be used, e.g. \code{xfs}
|
|---|
| 1506 | \item optionally: \app{lsusb} to check for attached devices
|
|---|
| 1507 | \end{itemize}
|
|---|
| 1508 |
|
|---|
| 1509 | When all prerequisites are met, all that has to be done is to connect the USB
|
|---|
| 1510 | mass storage device to the USB port of the router. FreeWRT provides a
|
|---|
| 1511 | hotplugging script which mounts all connected partitions under
|
|---|
| 1512 | \file{/mnt/discN\_Y} while \code{N} is the index of the connected disk (i.e.
|
|---|
| 1513 | starting with 0) and \code{Y} is the number of the partition on the disk (i.e.
|
|---|
| 1514 | starting with 1).
|
|---|
| 1515 |
|
|---|
| 1516 | \subsection{Sharing storage via NFS}
|
|---|
| 1517 |
|
|---|
| 1518 | There are two implementations available, one residing in kernel space and
|
|---|
| 1519 | another one implemented purely in user space. If you wish to use the user space
|
|---|
| 1520 | implementation of NFS, just enable \app{nfs-server}. To use the kernel
|
|---|
| 1521 | implementation of NFS, activate \app{nfs-utils} for your target. Although
|
|---|
| 1522 | kernel space is somewhat faster, this implementation has the drawback that only
|
|---|
| 1523 | directory structures within a single mount point can be exported. So you have
|
|---|
| 1524 | to supply at least a single entry for each mounted partition in
|
|---|
| 1525 | \file{/etc/exports}. (Using the user space \app{nfsd}, you can also export the
|
|---|
| 1526 | complete \file{/mnt} directory.
|
|---|
| 1527 |
|
|---|
| 1528 | \begin{Verbatim}[label=sample /etc/exports]
|
|---|
| 1529 | /mnt/disc0_1 *(ro,no_root_squash,insecure,no_subtree_check)
|
|---|
| 1530 | /mnt/disc0_2 *(rw,root_squash,insecure,no_subtree_check)
|
|---|
| 1531 | \end{Verbatim}
|
|---|
| 1532 |
|
|---|
| 1533 | Finally, start \app{portmap} and \app{knfsd} (\app{nfsd} when using the user
|
|---|
| 1534 | space implementation):
|
|---|
| 1535 | \begin{Verbatim}[label=starting the daemons]
|
|---|
| 1536 | # /etc/init.d/portmap start
|
|---|
| 1537 | # /etc/init.d/knfsd start
|
|---|
| 1538 | \end{Verbatim}
|
|---|
| 1539 |
|
|---|
| 1540 | \chapter{Troubleshooting}\label{ch:troubleshooting}
|
|---|
| 1541 |
|
|---|
| 1542 | \section{Failsafe Mode}
|
|---|
| 1543 |
|
|---|
| 1544 | Failsafe mode is very useful if you misconfigured your embedded system, so that
|
|---|
| 1545 | you can not access it anymore. E.g. if you accidentially disabled secure shell
|
|---|
| 1546 | or misconfigured the firewall, so that you can not login any more.
|
|---|
| 1547 |
|
|---|
| 1548 | When in failsafe mode, the device won't interpret any networking setup files.
|
|---|
| 1549 | It stops even before the root filesystem gets mounted read--write, and fwcf is
|
|---|
| 1550 | set up. It will just set the LAN interface up and give it the IP address
|
|---|
| 1551 | \file{192.168.1.1} and netmask \file{255.255.255.0}. Then it will start a
|
|---|
| 1552 | \app{telnet} daemon, so you get straight access (without depending on the
|
|---|
| 1553 | installed SSH daemon).
|
|---|
| 1554 |
|
|---|
| 1555 | \subsection{How It Works}
|
|---|
| 1556 |
|
|---|
| 1557 | To get FreeWRT into failsafe mode you need physical access to the device and
|
|---|
| 1558 | the failsafe utility. The failsafe utility is built inside our ADK and is
|
|---|
| 1559 | available in the directory \file{bin/} after a successful build.
|
|---|
| 1560 |
|
|---|
| 1561 | If you just want to compile the tool and not a complete firmware image, use
|
|---|
| 1562 | following command:
|
|---|
| 1563 |
|
|---|
| 1564 | \begin{Verbatim}[label=building the failsafe utility for the host system]
|
|---|
| 1565 | $ make subdir=tools/failsafe install
|
|---|
| 1566 | \end{Verbatim}
|
|---|
| 1567 |
|
|---|
| 1568 | For some operating systems we provide ready to go binaries of failsafe.
|
|---|
| 1569 | Take a look at \url{http://www.freewrt.org/downloads/tools/failsafe}
|
|---|
| 1570 |
|
|---|
| 1571 | The tool just opens a network socket and waits for a special UDP packet
|
|---|
| 1572 | from the embedded device. FreeWRT sends the UDP packet via the first
|
|---|
| 1573 | recognized network interface (eth0).
|
|---|
| 1574 |
|
|---|
| 1575 | \subsection{Enabling Failsafe Mode}
|
|---|
| 1576 |
|
|---|
| 1577 | Connect your computer to the embedded system via direct or crossed network
|
|---|
| 1578 | cable. Use the failsafe port (in most cases one of the LAN ports), see the
|
|---|
| 1579 | device specific page for the exact network port.
|
|---|
| 1580 |
|
|---|
| 1581 | Configure your network interface to the IP address \file{192.168.1.2} with
|
|---|
| 1582 | network mask \file{255.255.255.0}. Now start the failsafe utility on your
|
|---|
| 1583 | computer.
|
|---|
| 1584 |
|
|---|
| 1585 | \begin{Verbatim}
|
|---|
| 1586 | $ ./failsafe
|
|---|
| 1587 | \end{Verbatim}
|
|---|
| 1588 |
|
|---|
| 1589 | After that power on your embedded system and wait for the following message in
|
|---|
| 1590 | your failsafe application running on your computer:
|
|---|
| 1591 |
|
|---|
| 1592 | \begin{Verbatim}
|
|---|
| 1593 | Press reset now to enter Failsafe!
|
|---|
| 1594 | \end{Verbatim}
|
|---|
| 1595 |
|
|---|
| 1596 | As soon as this message is displayed you should push the reset button of
|
|---|
| 1597 | your embedded system. You have 2 seconds time to push the button. If you
|
|---|
| 1598 | successfully enabled the failsafe mode, following message will be displayed:
|
|---|
| 1599 |
|
|---|
| 1600 | \begin{Verbatim}
|
|---|
| 1601 | Entering Failsafe!
|
|---|
| 1602 | \end{Verbatim}
|
|---|
| 1603 |
|
|---|
| 1604 | Now you should be able to login to your embedded system via a telnet
|
|---|
| 1605 | application. Just use:
|
|---|
| 1606 |
|
|---|
| 1607 | \begin{Verbatim}
|
|---|
| 1608 | $ telnet 192.168.1.1
|
|---|
| 1609 | \end{Verbatim}
|
|---|
| 1610 |
|
|---|
| 1611 | \subsection{Repairing Your FreeWRT Configuration}
|
|---|
| 1612 |
|
|---|
| 1613 | If you want to repair your configuration, you first need to mount the root
|
|---|
| 1614 | filesystem read--writeable. This is best done via:
|
|---|
| 1615 |
|
|---|
| 1616 | \begin{Verbatim}
|
|---|
| 1617 | # mount_root
|
|---|
| 1618 | \end{Verbatim}
|
|---|
| 1619 |
|
|---|
| 1620 | After that you need to enable the FreeWRT configuration filesystem:
|
|---|
| 1621 |
|
|---|
| 1622 | \begin{Verbatim}
|
|---|
| 1623 | # fwcf setup
|
|---|
| 1624 | \end{Verbatim}
|
|---|
| 1625 |
|
|---|
| 1626 | Now you can change files in \file{/etc/} and repair your broken configuration.
|
|---|
| 1627 | Do not forget to commit your changes afterwards.
|
|---|
| 1628 |
|
|---|
| 1629 | \begin{Verbatim}
|
|---|
| 1630 | # fwcf commit
|
|---|
| 1631 | \end{Verbatim}
|
|---|
| 1632 |
|
|---|
| 1633 | If you want to start over with the default \file{/etc/} directory, just remove
|
|---|
| 1634 | the fwcf partition content with following command:
|
|---|
| 1635 |
|
|---|
| 1636 | \begin{Verbatim}
|
|---|
| 1637 | mtd erase fwcf
|
|---|
| 1638 | \end{Verbatim}
|
|---|
| 1639 |
|
|---|
| 1640 | You can either use \command{reboot -f} or the option \command{-r} for \app{mtd}
|
|---|
| 1641 | to reboot the system.
|
|---|
| 1642 |
|
|---|
| 1643 | %\section{Serial Console}
|
|---|
| 1644 |
|
|---|
| 1645 | %\section{JTAG}
|
|---|
| 1646 |
|
|---|
| 1647 | % Erstmal auskommentieren. Sind ja paar Seiten die erstmal keiner braucht
|
|---|
| 1648 | %\begin{appendix}
|
|---|
| 1649 | %\include{A-blaetter}
|
|---|
| 1650 | %\end{appendix}
|
|---|
| 1651 |
|
|---|
| 1652 | %\cleardoublepage
|
|---|
| 1653 | %\addcontentsline{toc}{chapter}{\glossaryname}
|
|---|
| 1654 | \end{document}
|
|---|