Chris. I've been working thorough your instructions, and am confused over a couple of issues.
Let me start out by thanking you for your dedication to the open source community, and for posting this very detailed site. I appreciate it.
As I've worked through your instructions, step-by-step, I'm confused over a couple of things.
1) You installed the Linksys source relative to root (~), and sometimes in your instructions reference full paths, and sometimes relative, but don't state where you're sitting when you run them. Using FIND I've been able to work through most of these issues. At the end of this posting is a complete list showing these changes to the point that I got stuck.
2) You sometimes reference the source path in upper case (WRT54G) and sometimes in lower case (wrt54g)--do you have a symbolic link on your system that allows this to work? Or is there some other assumed step not in your insturctions to extract another source to this other path--say from Seattle Wireless or another location? I assume not, but not sure. For the purposes of my try at setting up the environment, I assumed they are the same path.
Here is where I'm at so far:
#Corrected instructions for WiFiVPN
# revised 10/23/2004 Thomas Johnson
# Tomj@id-company.net
#
#
#
cd ~
wget http://www.linksys.com/support/opensourcecode/wrt54gv2/2.04.4/wrt54g.2.04.4.tgz
tar -xzvf wrt54g.2.04.4.tgz
cd ~/WRT54G/release/src/linux/linux
cp ~/WRT54G/release/src/linux/linux/arch/mips/defconfig-bcm947xx ~/WRT54G/release/src/linux/linux/arch/mips/defconfig-bcm947xx
cp arch/mips/defconfig-bcm947xx .config
make menuconfig
make depend
# will make a WRT54G source directory. . . .
#
# Make uClibc
#
rm ~/WRT54G/tools/brcm/hndtools-mipsel-uclibc/lib/*.a ~/WRT54G/tools/brcm/hndtools-mipsel-uclibc/lib/*.so*
rm -rf ~/WRT54G/tools/brcm/hndtools-mipsel-uclibc/include
cd WRT54G/tools-src
#
#Get uClibC - from your favorite source location--here is one:
#
wget http://kernel.mirror.nedlinux.nl/pub/linux/libs/uclibc/uClibc-0.9.26.tar.bz2
tar -xjvf uClibc-0.9.26.tar.bz2
cd ~/WRT54G/tools-src/uClibc-0.9.26
cp ~/WRT54G/tools-src/uClibc/.config .
# Chris References a patch statement
# for a patch that is not in the source code. . . weird.
# Skipping: patch -sp1 < ~/wrt54g/uclibc/uclibc-wrt54g.diff
#
# No mention here of which option to take--
# so I picked #10-MIPA, #1 Generic, and #1 Little Endian (Guesses),
#
# When in doubt--picked all default answsers for the rest:
#
make CROSS=mipsel-uclibc- all
root@idix:~/WRT54G/tools-src/uClibc-0.9.26# make CROSS=mipsel-uclibc- all
/bin/sh: line 1: mipsel-uclibc-gcc: command not found
/bin/sh: line 1: mipsel-uclibc-gcc: command not found
make: mipsel-uclibc-gcc: Command not found
rm -f -r include/bits
install -d include/bits
#
# using defaults found in .config
#
.config:23: trying to assign nonexistent symbol ADD_LIBGCC_FUNCTIONS
.config:30: trying to assign nonexistent symbol MALLOC_930716
.config:54: trying to assign nonexistent symbol SYSTEM_DEVEL_PREFIX
.config:55: trying to assign nonexistent symbol DEVEL_TOOL_PREFIX
*
* uClibc Configuration
*
Target Architecture
1. alpha (TARGET_alpha) (NEW)
2. arm (TARGET_arm) (NEW)
3. cris (TARGET_cris) (NEW)
4. e1 (TARGET_e1) (NEW)
5. h8300 (TARGET_h8300) (NEW)
> 6. i386 (TARGET_i386) (NEW)
7. i960 (TARGET_i960) (NEW)
8. m68k (TARGET_m68k) (NEW)
9. microblaze (TARGET_microblaze) (NEW)
10. mips (TARGET_mips) (NEW)
11. powerpc (TARGET_powerpc) (NEW)
12. SuperH (TARGET_sh) (NEW)
13. sparc (TARGET_sparc) (NEW)
14. v850 (TARGET_v850) (NEW)
choice[1-14?]: 10
*
* Target Architecture Features and Options
*
Target Processor Architecture
> 1. Generic (MIPS I) (CONFIG_MIPS_ISA_1) (NEW)
2. MIPS II (CONFIG_MIPS_ISA_2) (NEW)
3. MIPS III (CONFIG_MIPS_ISA_3) (NEW)
4. MIPS IV (CONFIG_MIPS_ISA_4) (NEW)
5. MIPS32 (CONFIG_MIPS_ISA_MIPS32) (NEW)
6. MIPS64 (CONFIG_MIPS_ISA_MIPS64) (NEW)
choice[1-6?]: 1
Target Processor Endianness
> 1. Little Endian (ARCH_LITTLE_ENDIAN) (NEW)
2. Big Endian (ARCH_BIG_ENDIAN) (NEW)
choice[1-2?]:
Target CPU has a memory management unit (MMU) (UCLIBC_HAS_MMU) [Y/n/?] y
Enable floating point number support (UCLIBC_HAS_FLOATS) [Y/n/?] y
Target CPU has a floating point unit (FPU) (HAS_FPU) [Y/n/?] y
Enable full C99 math library support (DO_C99_MATH) [Y/n/?] y
Compiler Warnings (WARNINGS) [-Wall] -Wall
Linux kernel header location (KERNEL_SOURCE) [~/WRT54G/tools/brcm/hndtools-mipsel-linux/mipsel-linux] ~/WRT54G/tools/brcm/hndtools-mipsel-linux/mipsel-linux
*
* General Library Settings
*
Generate Position Independent Code (PIC) (DOPIC) [Y/n/?] y
Enable support for shared libraries (HAVE_SHARED) [Y/n/?] y
Compile native shared library loader (BUILD_UCLIBC_LDSO) [Y/n/?] y
Support ET_DYN in shared library loader (UCLIBC_PIE_SUPPORT) [N/y/?] (NEW)
Native shared library loader 'ldd' support (LDSO_LDD_SUPPORT) [Y/n/?] y
Support global constructors and destructors (UCLIBC_CTOR_DTOR) [Y/n/?] y
Support for propolice stack protection (UCLIBC_PROPOLICE) [N/y/?] (NEW)
Support gprof profiling (UCLIBC_PROFILING) [Y/n/?] (NEW)
POSIX Threading Support (UCLIBC_HAS_THREADS) [Y/n/?] y
Build pthreads debugging support (PTHREADS_DEBUG_SUPPORT) [N/y/?] (NEW)
Large File Support (UCLIBC_HAS_LFS) [Y/n/?] y
Malloc Implementation
1. malloc (MALLOC)
2. malloc-simple (MALLOC_SIMPLE) (NEW)
> 3. malloc-standard (MALLOC_STANDARD) (NEW)
choice[1-3?]:
Malloc returns live pointer for malloc(0) (MALLOC_GLIBC_COMPAT) [N/y/?] (NEW)
Dynamic atexit() Support (UCLIBC_DYNAMIC_ATEXIT) [Y/n/?] y
Shadow Password Support (HAS_SHADOW) [Y/n/?] y
Support only Unix 98 PTYs (UNIX98PTY_ONLY) [Y/n/?] y
Assume that /dev/pts is a devpts or devfs file system (ASSUME_DEVPTS) [Y/n/?] y
Support 'struct tm' timezone extension fields (UCLIBC_HAS_TM_EXTENSIONS) [Y/n/?] (NEW)
Enable caching of the last valid timezone 'TZ' string (UCLIBC_HAS_TZ_CACHING) [Y/n/?] (NEW)
Enable '/etc/TZ' file support to set a default timezone (uClibc-specific) (UCLIBC_HAS_TZ_FILE) [Y/n/?] (NEW)
Repeatedly read the '/etc/TZ' file (UCLIBC_HAS_TZ_FILE_READ_MANY) [Y/n/?] (NEW)
Path to the 'TZ' file for setting the global timezone (UCLIBC_TZ_FILE_PATH) [/etc/TZ] (NEW)
*
* Networking Support
*
IP version 6 Support (UCLIBC_HAS_IPV6) [N/y/?] n
Remote Procedure Call (RPC) support (UCLIBC_HAS_RPC) [N/y/?] n
*
* String and Stdio Support
*
Use Table Versions Of 'ctype.h' Functions. (UCLIBC_HAS_CTYPE_TABLES) [Y/n/?] (NEW)
Support Signed Characters In 'ctype.h' Functions. (UCLIBC_HAS_CTYPE_SIGNED) [Y/n/?] (NEW)
ctype argument checking
> 1. Do not check -- unsafe (UCLIBC_HAS_CTYPE_UNSAFE) (NEW)
2. Detect and handle appropriately (UCLIBC_HAS_CTYPE_CHECKED) (NEW)
3. Issue a diagnostic and abort() (UCLIBC_HAS_CTYPE_ENFORCED) (NEW)
choice[1-3?]:
Wide Character Support (UCLIBC_HAS_WCHAR) [N/y/?] n
Locale Support (UCLIBC_HAS_LOCALE) [N/y/?] (NEW)
Support hexadecimal float notation (UCLIBC_HAS_HEXADECIMAL_FLOATS) [N/y/?] (NEW)
Support glibc's register_printf_function() (glibc-compat) (UCLIBC_HAS_GLIBC_CUSTOM_PRINTF) [N/y/?] (NEW)
Use the old vfprintf implementation (USE_OLD_VFPRINTF) [N/y/?] n
Maximum number of positional args. Either 0 or >= 9. (UCLIBC_PRINTF_SCANF_POSITIONAL_ARGS) [9] (NEW)
Support glibc's 'a' flag for scanf string conversions (UCLIBC_HAS_SCANF_GLIBC_A_FLAG) [N/y/?] (NEW)
Stdio buffer size
1. none (WARNING - BUFSIZ will be 256 in stdio.h) (UCLIBC_HAS_STDIO_BUFSIZ_NONE) (NEW)
2. 256 (minimum ANSI/ISO C99 value) (UCLIBC_HAS_STDIO_BUFSIZ_256) (NEW)
3. 512 (UCLIBC_HAS_STDIO_BUFSIZ_512) (NEW)
4. 1024 (UCLIBC_HAS_STDIO_BUFSIZ_1024) (NEW)
5. 2048 (UCLIBC_HAS_STDIO_BUFSIZ_2048) (NEW)
> 6. 4096 (UCLIBC_HAS_STDIO_BUFSIZ_4096) (NEW)
7. 8192 (UCLIBC_HAS_STDIO_BUFSIZ_8192) (NEW)
choice[1-7?]:
Stdio builtin buffer size (uClibc-specific)
> 1. None (UCLIBC_HAS_STDIO_BUILTIN_BUFFER_NONE) (NEW)
2. 4 (UCLIBC_HAS_STDIO_BUILTIN_BUFFER_4) (NEW)
3. 8 (UCLIBC_HAS_STDIO_BUILTIN_BUFFER_8) (NEW)
choice[1-3?]:
Provide a macro version of getc() (UCLIBC_HAS_STDIO_GETC_MACRO) [Y/n/?] (NEW)
Provide a macro version of putc() (UCLIBC_HAS_STDIO_PUTC_MACRO) [Y/n/?] (NEW)
Support auto-r/w transition (UCLIBC_HAS_STDIO_AUTO_RW_TRANSITION) [Y/n/?] (NEW)
Support an fopen() 'F' flag for large file mode (uClibc-specific) (UCLIBC_HAS_FOPEN_LARGEFILE_MODE) [N/y/?] (NEW)
Support an fopen() 'x' flag for exclusive mode (glibc-compat) (UCLIBC_HAS_FOPEN_EXCLUSIVE_MODE) [N/y/?] (NEW)
Support fmemopen(), open_memstream(), and fopencookie() (glibc-compat) (UCLIBC_HAS_GLIBC_CUSTOM_STREAMS) [N/y/?] (NEW)
Support the '%m' specifier in printf format strings (glibc-compat) (UCLIBC_HAS_PRINTF_M_SPEC) [N/y/?] (NEW)
Include the errno message text in the library (UCLIBC_HAS_ERRNO_MESSAGES) [Y/n/?] (NEW)
Support sys_errlist[] (obsolete-compat) (UCLIBC_HAS_SYS_ERRLIST) [N/y/?] (NEW)
Include the signum message text in the library (UCLIBC_HAS_SIGNUM_MESSAGES) [Y/n/?] (NEW)
Support sys_siglist[] (bsd-compat) (UCLIBC_HAS_SYS_SIGLIST) [N/y/?] (NEW)
Support gnu getopt (UCLIBC_HAS_GNU_GETOPT) [Y/n/?] (NEW)
*
* Big and Tall
*
Regular Expression Support (UCLIBC_HAS_REGEX) [Y/n/?] y
Support the wordexp() interface (UCLIBC_HAS_WORDEXP) [N/y/?] (NEW)
Support the ftw() and nftw() interfaces (UCLIBC_HAS_FTW) [N/y/?] (NEW)
Support the glob() interface (UCLIBC_HAS_GLOB) [Y/n/?] (NEW)
*
* Library Installation Options
*
Shared library loader path (SHARED_LIB_LOADER_PREFIX) [$(DEVEL_PREFIX)/lib] (NEW)
uClibc runtime library directory (RUNTIME_PREFIX) [/usr/$(TARGET_ARCH)-linux-uclibc/] (NEW)
uClibc development environment directory (DEVEL_PREFIX) [~/WRT54G/tools/brcm/hndtools-mipsel-uclibc-0.9.19] ~/WRT54G/tools/brcm/hndtools-mipsel-uclibc-0.9.19
*
* uClibc development/debugging options
*
Build uClibc with debugging symbols (DODEBUG) [N/y/?] n
Build uClibc with run-time assertion testing (DOASSERTS) [N/y/?] n
Build the shared library loader with debugging support (SUPPORT_LD_DEBUG) [N/y/?] n
Build the shared library loader with early debugging support (SUPPORT_LD_DEBUG_EARLY) [N/y/?] n
Manuel's hidden warnings (UCLIBC_MJN3_ONLY) [N/y/?] (NEW)
+ ./extra/scripts/fix_includes.sh -k '~/WRT54G/tools/brcm/hndtools-mipsel-linux/mipsel-linux' -t
usage: fix_includes.sh -k KERNEL_SOURCE_DIRECTORY -t TARGET_ARCH
This utility scans the KERNEL_SOURCE_DIRECTORY directory and
checks that it contains well formed kernel headers suitable
for inclusion as the include/linux/ directory provided by
uClibc.
If the specified kernel headers are present and already
configured for the architecture specified by TARGET_ARCH,
they will be used as-is.
If the specified kernel headers are missing entirely, this
script will return an error.
If the specified kernel headers are present, but are either
not yet configured or are configured for an architecture
different than that specified by TARGET_ARCH, this script
will attempt to 'fix' the kernel headers and make them
suitable for use by uClibc. This fixing process may fail.
It is therefore best to always provide kernel headers that
are already configured for the selected architecture.
Most Linux distributions provide 'kernel-headers' packages
that are suitable for use by uClibc.
make: *** [headers] Error 1
What I get is this--CAN YOU HELP ME BECAUSE I'M STUCK HERE:

WRT54G vs. wrt54g, PATH environment variable
There is a difference between WRT54G and wrt54g: WRT54G refers to the untarred WRT54G source tree, whereas wrt54g (which should always be hyperlinked to the Subversion repository in the documentation) refers to a file in my Subversion repository.
BTW, it seems that you haven't set up the /opt/brcm symlink (this is documented in the Linksys source code README). You should really try to build the original Linksys firmware first and only if you have successfully built the Linksys firmware, you should apply my patches...
Gotcha! Going to build the vanilla first.
GOTCHA!
Thanks--I'll build a vanilla firmware first, then move on, and will reread the README in the WRT source code. I just kicked off a make . . . and it is making/linking away. . .
Just looked at your Subversion tree--do you have a tarball of it, to save me an hour in downloading each file directly from the web site?
Thanks.
Tarbal
I was hung up on how to download your SUBVERSION at http://svn.cmeerw.net/src/wrt54g. I finanly figured it out: You install the SUBVERSION SVN package (an alternative to CVS):
cd /usr/src
wget http://subversion.tigris.org/tarballs/subversion-1.1.1.tar.gz
tar -xzvf subversion-1.1.1.tar.gz
cd subversion-1.1.1
.configure
make
make install
then you can actually grab the source with these commands
cd ~
svn co http://svn.cmeerw.net/src/wrt54g ~/
Good luck everyone else with this addition--you should be able to set up your environment.