DENX Software Engineering GmbH
Kirchenstraße 5
82194 Gröbenzell
Agenda:
- 1. Embedded Linux Training course
- 2. About This Document
- 3. General Introduction
- 4. General part
- 5. Host Linux Setup
- 6. Using the BDM/JTAG Debugger, BDI2000, Part 1
- 7. Connecting to target for the first time
- 8. DENX Embedded Linux Development Kit ELDK
- 9. Building U-Boot and the Linux kernel for the first time
- 10. Booting Embedded Linux on the target
- 11. The powerful U-Boot command line interface
- 12. Build, configuration of the Linux kernel, more details
- 13. SELF, Simple Embedded Linux Framework (RAMdisk)
- 14. Using FLASH filesystems
- 15. Compact Flash Card Support, PCMCIA, Hotplug, IDE
- 16. Installing and using Embedded WEB Servers
- 17. Customizing U-Boot
- 18. General Debugging Techniques
- 19. RTAI, the Real Time Application Interface
- 20. Linux Trace Toolkit
- 21. Tools, Scripts, Tipps and Tricks
- 22. More information
- 23. Happy Hacking
The newest version of this document can be found at
http://www.denx.de/twiki/bin/view/Training/GenericOverview.
This section gives an overview of who we are and what services we provide.
Contents of this section:
DENX == two companies:
- DENX Software Engineering GmbH
- provide software engineering services in the area of Embedded and Real-Time Systems
- high level of expertise
- strong focus on Open Source Software, especially Linux, but also FreeBSD, NetBSD, etc.
- We port firmware and operating systems to your hardware and write device drivers and other low-level or hardware-related software components. We develop, tailor and install the base software for your embedded systems and provide solutions to problems as performance optimization, security concepts or tools for automatic software updates. This allows you to put all your resources in the development of your applications. We also provide on-the-job training for engineers who need to ramp up quickly on how to develop software for Embedded Linux systems.
- DENX Computer Systems GmbH
- single source for ready-to-run hardware and software solutions that guarantee a trouble-free start of your projects
- We offer PowerPC evaluation boards, development systems and standard modules with Open Source firmware and Linux pre-installed, of course with full source code for both the U-Boot firmware and the Linux Kernel ("BSP" Board Support Packages). All boards ship with a free CDROM with our Embedded Linux Development Kit. Our BDM/JTAG debuggers interface perfectly to Linux tools (like GDB / DDD debuggers) and provide full MMU support for Linux kernel and device driver debugging.
- DENX Software Engineering:
- Dipl.-Ing. Wolfgang Denk (Managing Director)
- Dipl.-Math. techn. Detlev Zundel (Managing Director)
- Dipl.-Kauffr. Friederike Denk (CFO)
- Dr. Wolfgang Grandegger (Senior Software Engineer)
- Gary Jennejohn (Senior Software Engineer)
- Dipl.-Inf. Markus Klotzbücher (Software Engineer)
- Dipl.-Ing. Stefan Roese (Senior Software Engineer)
- Dipl.-Ing. Heiko Schocher (Software Engineer)
- Dipl.-Ing. Gunnar Larisch (Senior Software Engineer)
- Partner Company in Moscow, Russia: up to 12 engineers
- Partner Company in Krakow, Poland: 3 Engineers
- more developers (freelancers) as required for project
- DENX Computer Systems:
- Dipl.-Kauffr. Friederike Denk (CEO)
- Dipl.-Ing. Wolfgang Denk (CTO)
Customer Projects:
- Alcatel, Strasbourg, France: Webphone, ADSL Router
- Daimler Chrysler, Sindelfingen, Germany: Display Unit for Test Cars
- Daimler Chrysler, Stuttgart, Germany: FlexRay tools
- Dependable Computer Systems, Vienna, Austria: Analyzer for serial data bus (FlexRay)
- Fast TV Server AG, Munich, Germany: Digital Video Recorder (see http://www.tv-server.de/)
- Liebherr Werke, Ehingen, Germany: Main Controller for Mobile Cranes
- Lucent Technologies, Holmdel, New Jersey, USA: PPCBoot support for Optical Cross-Connect Board
- MicroSys Electronics GmbH, Sauerlach, Germany: U-Boot + Linux support for several boards (IP860, CU824, CPU86, PM825, PM826)
- Multidata GmbH, Darmstadt, Germany: ISDN Router with integrated 8 x hub
- Siemens AG, Munich, Germany: Peripheral Controller Unit, Card Controller Module, and Shelf Controller Module for Optical Network Elements
- Siemens AG, Vienna, Austria: Bluetooth Lan Access Point
- Speech Design, Germering, Germany: Tele-Server, Integrated Voicemail System
- TQ Components GmbH, Wessling, Germany: U-Boot + Linux support for all of their PowerPC boards
Public Projects:
This section gives a very general introduction to RTAI-Linux with special
regards to the VRTXsa RTOS.
Contents of this section:
- Unix started as "pet" project by Ken Thompson at Bell Labs
- First OS in a high level language C (invented by Dennis Ritchie), which
evolved together with Unix
- Used at university OS classes
- When it was successful, AT&T wanted to "make money" with it.
As AT&T wasn't allowed to sell it, so they licences the code
- As source was available, Unix evolved fast and diversified.
-> AT&T Unix, BSD (Berkeley Unix), Ultrix (DEC), AIX (IBM),
Solaris (Sun), HP-UX (HP), Xenix (Microsoft), etc.
- As source was available, Unix evolved fast and diversified.
-> AT&T Unix, BSD (Berkeley Unix), Ultrix (DEC), AIX (IBM),
Solaris (Sun), HP-UX (HP), Xenix (Microsoft), etc.
- Andrew Tanenbaum rewrote a Unix kernel for his OS classes for IBM PCs
-> Minix (also Copyrighted)
- Linus Torvalds (as a second year student in 1991) used Minix as a model for a Unix kernel
for Intel 286 CPUs (first Intel CPU with MMU features)
-> Linux
- No Minix code was used. Torvalds chose the GPL (GNU Public License)
- In September 1983 Richard Stallman started the GNU project to build complete free operating
system.
- As it was a voluntary project, he chose Unix as a model so coordination of
contributors would be easier.
- Stallman wrote Emacs, GCC and GDB as a foundation
- Many volunteers contributed GPLd rewrites of Unix utilities (make, vi, sed, awk, etc.)
- Most of the GNU project was done by 1992 - last thing missing: a kernel
- FSF started work on The Hurd, a micro-kernel architecture based on Mach kernel
- Together with the tools from the GNU project there suddenly was a
complete system consisting only of free software
- Everyone called it Linux despite Linux being only the kernel
- GNU/Linux is more appropriate to differentiate to GNU/Hurd which is still experimental
- Alan Cox ported Linux to the 68k platform
- Today Linux supports x86, 68k, PowerPC (Motorola, IBM), ARM (StrongARM, X-Scale), MIPS, System/390, etc.
- In 70s software was not a product. Usually complete OS was distributed with hardware
- Advent of microcomputers opened a "market" for software
- How to treat software: Is it a Formula or Prose?
- Richard Stallman realized the implications of copyright
- Using the machinery for his purpose, he inverted the copyright
-> GPL also called Copyleft
- GPL guarantees the following freedoms (as in free speech, not free beer)
- You can run the program as you wish for any purpose
- You can study the source code and change it to do what you want
- You can make copies and distribute them
- You can distribute modified versions
- Derivative work inherits license (mistermed virus nature of GPL)
- Linking is considered derivative work in GPL but not in Lesser GNU Public License (LGPL)
-> GNU libc is most prominent LGPLd program
- "Open Source" licenses usually omit the fourth freedom from list above (Mozilla license MPL)
- BSD style licenses have no such derivative work clause and thus
cannot prevent "misuse" of software (OpenBSD, FreeBSD, NetBSD)
- Because of so many licenses all dubbed "open source", check which freedoms they
really entail
- Linux is multiuser, timesharing system
- Kernels up until 2.4 are not preemptible
(2.5 started to integrate low latency and kernel preemption patches)
- Alternatives are
- Enhance linux kernel performance (Timesys patch + proprietary modules)
- Introduce new lower, real-time level
- RT-Linux (Victor Yodaiken FSM Labs) is patented . Not clear
if patent would stand up in court.
- RTAI (Paolo Montegazza) is GPLd
- Two-level structure is faster but more complicated
4.8. RTAI-Linux (Part One)
- RTAI has two possible implementations
- Real time hardware abstraction layer RTHAL (kernel patch)
- Adaptive Domain Environment for Operating Systems ADEOS by Philippe Gerume
ADEOS is (not yet) available on PowerPC platform so RTHAL is assumed below
- RTAI functionality is modularized. Functionality can be added by loading apropriate module:
- RTAI module
- Scheduler (only UP on PowerPC)
- Shared memory
- FIFOs
- Mailboxes
- POSIX
- RTAI is started by loading kernel module rtai.o (needs patched kernel)
4.9. RTAI-Linux (Part Two)
- Linux is "idle thread" for RTAI
- RTAI tasks are Linux kernel modules (actually below Linux) which never block
- Standard Linux drivers are therefore not real-time (e.g. networking)
- Memory corruption possible because kernel address space is used in real-time tasks
- LXRT (not yet available for PowerPC) allows user space real-time
- Split application in real-time part (kernel module) and rest (user space)
- Differences
- VRTXsa and other proprietary OSes come from one source, whereas Linux
bears more resemblance to a toolbox with tools from different sources.
- Get support from knowledgable people you choose yourself - not only from vendor
(i.e. take your car to a garage, not to the vendor)
- Advantages
- Linux is supported on large number of systems. Support can not be abandoned
because all sources are available.
- Build environment is the same as target environment
- Huge amount of programs available (and protocols supported)
- Very good compiler suite for C/C++ (GCC) (ever traced a compiler bug?)
- Disadvantages
- Different API (although the Xenomai project aimed at VRTX API emulation)
- Two-level structure, i.e. real-time tasks in kernel space, rest in user space
- Programming with RTAI-Linux (RTHAL) entails three levels of code execution
- RTAI real-time (RTAI tasks)
Communication with user space through RTAI calls. Limited POSIX implementation (threads, queues)
- Linux kernel (executed on behalf of user space programs)
Communication with user space through syscalls (libc)
- User space (processes, threads if used)
Can use Unix IPC (POSIX threading and IPC, shared memory, message queues)
- RTAI tasks resemble Linux kernel drivers
- RTAI / Linux kernel / Userspace division
- Synchronization possible through usual means, i.e.
- Semaphores
- Conditional variables
- Blocking read/writes
- Passing of data possible through various means, i.e.
- Interrupts can be shared with Linux kernel
- RTAI modules and Linux kernel fully debuggable with BDM/JTAG Debugger, i.e. BDI2000
- NFS environment allows for very fast turn-around times during development
TFTP Server Configuration
Depending on the version and default configuration your TFTP server may or may not change it's root directory on startup. If that happens the remote host does not need to pass along the directory name as part of the transfer. To avoid confusion in the examples we recommend to make sure that a file name /tftpboot/foo will always work with your TFTP server, no matter if it changes root or not. A simple trick is to create a symbolic link in the TFTP server's root directory to itself, for example:
bash# cd /tftpboot
bash# ln -s . tftpboot
bash# ls -l
...
lrwxrwxrwx 1 root root 1 May 3 16:36 tftpboot -> .
...
If you have to support more than one board it is usually a good idea to create a subdirectory for each board on your TFTP server.
BOOTP / DHCP Server Setup
Recent versions of the DHCP server may require that a ddns-update-style statement is added to the /etc/dhcpd.conf configuration file. Please read the dhcpd.conf manual page for more information.
NFS Server Setup
Recent versions of the NFS server require that either async or sync is used as export option. Using async usually improves performance, but at the cost or reliability (i. e. data can be lost or corrupted). Therefore we recommend to always use sync only.
bash$ cd gdbcop21-1.16-6xx-7xx-82xx-2003-04-01
bash$ mkdir bdisetup
bash$ cd bdisetup
bash$ unzip ../bdisetup.zip
Archive: ../bdisetup.zip
inflating: bdidll.c
inflating: bdisetup.c
inflating: bdicmd.h
inflating: bdidll.h
inflating: bdierror.h
inflating: makefile
inflating: bdicnf.c
inflating: bdicnf.h
bash$ make
gcc -O -c -o bdicnf.o bdicnf.c
gcc -O -c -o bdidll.o bdidll.c
gcc -O -c -o bdisetup.o bdisetup.c
gcc -o ./bdisetup ./bdicnf.o ./bdidll.o ./bdisetup.o -s
bash$ cp -p bdisetup /usr/local/bin/bdisetup
bash$ bdisetup
Usage of BDI setup program V1.10:
bdisetup -v [-pP] [-bB] [-s]
-v Read current versions
P Port e.g. /dev/ttyS0
B Baudrate 9, 19, 38, 57 or 115
-s if present, exit loader and start firmware
bdisetup -e [-pP] [-bB]
-e Erase firmware and logic
P Port e.g. /dev/ttyS0
B Baudrate 9, 19, 38, 57 or 115
bdisetup -u [-pP] [-bB] [-aA] [-tT] [-dD]
-u Update firmware and/or logic
P Port e.g. /dev/ttyS0
B Baudrate 9, 19, 38, 57 or 115
A Application type STD,GDB,ADA,TOR,ACC
T Target type: PPC400,MPC500,PPC600,PPC700,MPC800,MPC8200,MPC7400,MPC7450
CPU32,ARM,TRICORE,MCF,HC12,MCORE,MIPS,MIPS64,XSCALE
D Directory with the firmware/logic files
bdisetup -c [-pP] [-bB] [-iI] [-hH] [-mM] [-gG] [-fF]
-c Program network configuration
P Port e.g. /dev/ttyS0
B Baudrate 9, 19, 38, 57 or 115
I BDI IP address e.g. 100.100.100.100
H Host IP address
M Subnet mask (default: 255.255.255.255)
G Gateway IP address (default: 255.255.255.255)
F Configuration file name
(Note: this is a simple tool. It does not perform any device locking, so root permissions are required to access the serial port.)
bash# bdisetup -u -p/dev/ttyS0 -b115 -aGDB -tMPC8200 -d.
Connecting to BDI loader
Firmware is already up to date
CPLD is already up to date
bash# bdisetup -c -p/dev/ttyS0 -h10.0.0.11 \
> -i10.0.0.10 -m255.0.0.0 -f/tftpboot/ATC/ATC.cfg
Connecting to BDI loader
Writing network configuration
Writing init list and mode
Configuration passed
bash# bdisetup -v -p/dev/ttyS0 -b115 -s
BDI Type : BDI2000 Rev.C (SN: 93202220)
Loader : V1.05
Firmware : V1.16 bdiGDB for PPC6xx/PPC7xx
Logic : V1.02 PPC6xx/PPC7xx
MAC : 00-0c-01-93-20-22
IP Addr : 10.0.0.10
Subnet : 255.0.0.0
Gateway : 255.255.255.255
Host IP : 10.0.0.11
Config : /tftpboot/ATC/ATC.cfg
bash$ telnet bdi
Trying 10.0.0.10...
Connected to bdi.denx.de (10.0.0.10).
Escape character is '^]'.
BDI Debugger for Embedded PowerPC
=================================
PHYS <address> converts an effective to a physical address
MD [<address>] [<count>] display target memory as word (32bit)
MDD [<address>] [<count>] display target memory as double word (64bit)
MDH [<address>] [<count>] display target memory as half word (16bit)
MDB [<address>] [<count>] display target memory as byte (8bit)
DUMP <addr> <size> [<file>] dump target memory to a file
MM <addr> <value> [<cnt>] modify word(s) (32bit) in target memory
MMD <addr> <value> [<cnt>] modify double word(s) (64bit) in target memory
MMH <addr> <value> [<cnt>] modify half word(s) (16bit) in target memory
MMB <addr> <value> [<cnt>] modify byte(s) (8bit) in target memory
MC [<address>] [<count>] calculates a checksum over a memory range
MV verifies the last calculated checksum
RD [<name>] display general purpose or user defined register
RDUMP [<file>] dump all user defined register to a file
RDSPR <number> display special purpose register
RDSR <number> display segment register
RDVR [<number>] display vector register
RM {<nbr>|<name>} <value> modify general purpose or user defined register
RMSPR <number> <value> modify special purpose register
RMSR <number> <value> modify segment register
RMVR <nbr><val val val val> modify vector register (four 32bit values)
DCACHE <addr | set> display L1 data cache content
UPMS <MCR-addr> <MDR-addr> set address of register MCR and MDR
UPMA display UPMA setup
UPMB display UPMB setup
BOOT reset the BDI and reload the configuration
RESET [HALT | RUN [time]] reset the target system, change startup mode
BREAK [SOFT | HARD] display or set current breakpoint mode
GO [<pc>] set PC and start target system
TI [<pc>] trace on instuction (single step)
TC [<pc>] trace on change of flow
HALT force target to enter debug mode
BI <addr> set instruction hardware breakpoint
CI [<id>] clear instruction hardware breakpoint(s)
BD [R|W] <addr> set data watchpoint via DABR (DABR[BT]=0)
BDT [R|W] <addr> set data watchpoint via DABR (DABR[BT]=1)
CD [<id>] clear data watchpoint(s)
INFO display information about the current state
LOAD [<offset>] [<file> [<format>]] load program file to target memory
VERIFY [<offset>] [<file> [<format>]] verify a program file to target memory
PROG [<offset>] [<file> [<format>]] program flash memory
<format> : SREC, BIN, AOUT or ELF
ERASE [<address> [<mode>]] erase a flash memory sector, chip or block
<mode> : CHIP, BLOCK or SECTOR (default is sector)
ERASE <addr> <step> <count> erase multiple flash sectors
UNLOCK <addr> <step> <count> unlock multiple flash sectors
FLASH <type> <size> <bus> change flash configuration
HOST <ip> change IP address of program file host
PROMPT <string> defines a new prompt string
CONFIG display BDI configuration
HELP display command list
QUIT terminate the Telnet session
*** TARGET: Init JTAG communication failed
# PPC: target has no power
*** TARGET: target powerfail detected
- TARGET: waiting for target Vcc
- TARGET: waiting for target Vcc
- TARGET: waiting for target Vcc
ATC>q
Connection closed by foreign host.
-
RAM: 0x00000000 ...
-
Flash: 0xFF000000 ...
- Begin of U-Boot image: Begin of Flash
- Size of U-Boot image: approx. 120 kb, reserved: 256 kB
- ATC board uses AMD 29LV641D flash chips (64 Mbit, uniform sectors)
- all erase blocks (sectors) = 64 kB
- Erase first 256 kB (= first 4 sectors)
ATC>era 0
Erasing flash at 0x00000000
Erasing flash passed
ATC>era 0x10000
Erasing flash at 0x00010000
Erasing flash passed
ATC>era 0x20000
Erasing flash at 0x00020000
Erasing flash passed
ATC>era 0x30000
Erasing flash at 0x00030000
Erasing flash passed
- Program U-Boot binary image starting at address
0x00000000
ATC>prog 0x00000000 /tftpboot/ATC/u-boot.bin-wd bin
Programming /tftpboot/ATC/u-boot.bin-wd , please wait ....
Programming flash passed
- Start U-Boot image
ATC>reset
- TARGET: processing user reset request
- BDI asserts HRESET
- Reset JTAG controller passed
- Bypass check: 0x55 => 0xAA
- Bypass check: 0x55 => 0xAA
- JTAG exists check passed
- Target PVR is 0x80911014
- COP status is 0x01
- Check running state passed
- BDI scans COP freeze command
- BDI removes HRESET
- COP status is 0x05
- Check stopped state passed
- Check LSRL length passed
- BDI sets breakpoint at 0x00000100
- BDI resumes program execution
- Waiting for target stop passed
- TARGET: Target PVR is 0x80911014
- TARGET: resetting target passed
- TARGET: processing target startup ....
- TARGET: processing target startup passed
ATC>go
- Set defaults for flash sectors to erase and image to program
[FLASH]
...
FILE /tftpboot/ATC/u-boot.bin
FORMAT BIN 0x00000000
ERASE 0x00000000 BLOCK
ERASE 0x00010000 BLOCK
ERASE 0x00020000 BLOCK
ERASE 0x00030000 BLOCK
- Now use simple commands
ATC>era
Erasing flash at 0x00000000
Erasing flash at 0x00010000
Erasing flash at 0x00020000
Erasing flash at 0x00030000
Erasing flash passed
ATC>prog
Programming /tftpboot/ATC/u-boot.bin , please wait ....
Programming flash passed
Introduction to the ELDK
Booting Embedded Linux on the target
The powerful U-Boot command line interface
- Using environment variables to simplify boot.
- Example: run net_nfs, flash_nfs, flash_self
- preboot
- This variable can be used to run specific code before the normal startup
(i.e. CONFIG_BOOTDELAY loop, autostart or interactive mode) begins.
This is especially useful when its contents are generated automatically, i.e. by checking for keypresses, etc.
- update
- [todo: explain update procedures using U-Boot]
- Loading Compressed Images
- Sometimes you may want to store
some data in compressed format (for example to save flash memory), while
your application needs the data in uncompressed form. You can trick U-Boot
to do this uncompressing like this:
Generate a compressed U-Boot image of type "standalone" (="mkimage ... -T
standalone -C gzip ..."=) and make sure that the envrionment variable
autostart is set to no (i. e. enter
"setenv autostart no;saveenv"). If you then use "bootm" for such an
image, U-Boot will uncompress the contents of the image and store it at the
"load address" ("-a" option for mkimage), but not attempt to start it yet.
If the image contains executable code, you can omit the setting of
"autostart", and U-Boot will automagically start the image by jumping
to the entry point address ("-e" option for mkimage).
Build, configuration of the Linux kernel, more details
13. SELF, Simple Embedded Linux Framework (RAMdisk)
Using FLASH filesystems
- JFFS, JFFS2, CramFS
- (For MTD Tools see next section)
- Configure and install a JFFS2 filesystem
- JFFS2 performance considerations
The current version of the ELDK does not include all tools provided by the MTD package. For example, you might find that the mkfs.jffs2 tool is missing. If you want to create a JFFS2 target filesystem on your development host you have to download and build the tool yourself:
- Download the MTD tools from the public CVS server:
bash$ cvs -d :pserver:anoncvs@cvs.infradead.org:/home/cvs login
Logging in to :pserver:anoncvs@cvs.infradead.org:2401/home/cvs
CVS password: anoncvs
bash$ cvs -d :pserver:anoncvs@cvs.infradead.org:/home/cvs co -P mtd
cvs server: Updating mtd
...
- Build the
mkfs.jffs2 tool:
bash$ cd mtd/util
bash$ make mkfs.jffs2
...
Compact Flash Card Support, PCMCIA, Hotplug, IDE
- Kernel support (IDE) vs. PCMCIA Card Services
- PCMCIA card services in the ELDK
- Using the CF card via kernel support
- (Using the CF card via PCMCIA Card Service see next section)
- Partitioning, file systems (ext2, vfat, etc.)
Customizing U-Boot
General Debugging Techniques
19. RTAI, the Real Time Application Interface
- (Installation and configuration see next section)
- Showing some examples
- Sources available at project aweb page at http://www.opersys.com/LTT/
- Install kernel patch
- Compile kernel
- Compile host part of LTT (LibLTT, Visualizer)
- Compile target part of LTT (LibUserTrace, Daemon)
- (Re-)Compile RTAI for rtai_tracer module
- Create device file in target fs
- Show usage
There are quite a few scripts/tools out there that will help
in automatically generating a toolchain, a root filesystem,
a ROM image, and other components of an embedded Linux system.
This is a collection of such tools, scripts, tipps and tricks:
- buildroot: http://www.uclibc.org/cgi-bin/cvsweb/buildroot/
This is a set of scripts maintained by Erik Andersen (uClibc,
BusyBox, TinyLogin, etc.) that can be used to build quite a
few components (including toolchain for host and target
binaries.) Though I haven't used buildroot, the content of
the scripts is one of the best I've seen (well organized
and thorough).
- PTXdist: http://www.pengutronix.de/software/ptxdist_en.html
This tool is maintained by Robert Schwebel (utelnetd, RTAI
documentation, etc.) that creates root filesystems. It
relies on the use of a KConfig-based frontend. There are
nice screenshots.
- Bill Gatliff's build script:
http://billgatliff.com/twiki/bin/view/Crossgcc/BuildToolchainScript
This is one script which builds a toolchain made by Bill
Gatliff (gdb stubs, regular contributor to Embedded Systems
Programing, reviewed my book, etc.)
- Craig Hollabaugh's build scripts:
http://www.embeddedlinuxinterfacing.com/sourcecode.shtml
These are the scripts Craig used in his "Embedded Linux"
book. There is a buildtoolchain.tar.gz, which is the set
of script used to build the toolchain, and there's
buildrootfilesystem, which is used to ... well, build
the root filesystem
- Richard Atterer's build script:
http://home.in.tum.de/~atterer/debian/
Again, a script to build a toolchain.
- David A. Desrosiers' build script:
http://libarynth.f0.am/cgi-bin/view/Libarynth/CrossCompiler
Yet another toolchain build script.
- "Peewee Linux":
http://www.peeweelinux.com
"an environment that makes the configuration and installation of a Linux operating system on an embedded platform as easy and painless as possible"
- http://www.bluewaternz.com/startoff/armlinux.htm
[For ARM targets] a script which conveniently builds binutils, cross compiler, glibc, and the kernel.
[From: Karim Yaghmour et. al. on the etux mailing list.]
Pointers to more information are colleted in the DULG document
in the MoreIformation topic.
Well, that's all for now folks.
Happy Hacking! and may the source be with you.