view www/index.html @ 379:2925f71bce99 0.9.0

Announce 0.9.0 release.
author Rob Landley <>
date Wed, 06 Aug 2008 16:41:42 -0500
parents cede0879d885
children c0d571a25cd4
line wrap: on
line source

<!--#include file="header.html" -->

<h2>August 6, 2008</h2>
<p><a href=downloads/firmware-0.9.0.tar.bz2>Version 0.9.0</a> is out
(<a href=>changeset 378</a>)
and can rebuild itself under itself.  (The packaging step still requires User
Mode Linux to create ext2 images, which only works on x86 and x86-64 hosts.
The next release should replace that with something more portable.)</p>

<p>The root filesystem is now based on BusyBox 1.11.1 (plus a few bug fixes).
The prebuilt binary <a href=downloads/cross-compiler>cross compilers</a> are
statically linked against uClibc for better portability.</p>

<p>The script can now take a number of parallel targets to
launch, for example "./ --fork 3".  (The resulting display is kind
of horrible but the out-$ARCH.txt files are still legible.)  Leaving off the
number still builds all targets in parallel, with the original display.</p>

<p>The script was reorganized so that interesting environment
variables the user might want to export for themselves are set near the top
of the script.  Currently this includes:</p>

<li><p><b>BUILD_SHORT</b> - Makes the stage skip building
development tools.  The resulting mini-native root filesystem contains uClibc
and busybox, but nothing else.  (Export "BUILD_SHORT=headers" to put back the
toolchain headers for use by another compiler, such as tinycc.)</p>

<li><p><b>BUILD_STATIC</b> - Tell to create static
binaries, for a more portable cross compiler toolchain.  (If you want them
linked against uClibc, build a mini-native for your host, chroot into it, and
then rebuild under that.)</li>

<li><p><b>PREFERRED_MIRROR</b> - Tell to fetch packages from a
non-default location (falling back to the standard mirror list if it can't get
one from there).</p></li>

<li><p><b>RECORD_COMMANDS</b> - Record a list of all command lines used during
each build stage log files named "cmdlines.$STAGE.$PACKAGE" under the build
directory.  Each file can be turned into a list of the command names used via
"awk '{print $1}' build/cmdlines* | sort -u".  The script
sources/toys/ gives a report of all commands
used by each package after a call to "RECORD_COMMANDS=1 ./".
(This is an easy way to find out exactly what environmental dependencies a
package needs to build, or at least what it uses out of $PATH).</p></li>

<p>Updated documentation is in progress...</p>

<h2>June 6, 2008</h2>
<p><a href=downloads/firmware-0.4.0.tar.bz2>Version 0.4.0</a> is out
(<a href=>changeset 345</a>),
with kernel and the "distcc trick" working out of the box.</p>

<p>The distcc trick accelerates a native build by calling out to the
cross compiler.  To use it, download the appropriate cross-compiler-$ARCH and
system-image-$ARCH tarballs, run the "" from the system image
directory with the path to the cross compiler directory as its first argument.
(You need to have distcc installed on the host system.)</p>

<p>After building from source, the cross-compiler and system-image directories
remain in the build directory.  The "" runs these with
distcc acceration set up.  The script "" is a wrapper
around which feeds a script into qemu's stdin to compile
and run a multi-threaded "hello world" under the emulator, using distcc and
the cross compiler.</p>

<p>If works for a platform, it means a lot of stuff worked to get
that far.  The cross compiler worked to build the system, and the emulated
system booted so QEMU, the uClibc config, and the kernel config agreed.
The emulated system has a working virtual hard drive and serial port, and for
distcc to work it has a working virtual network connection.  Running "make"
would also require a working realtime clock.</p>

<p>The seven commands missing in order to run the FWL build under itself
are bzip2, sort, diff, wget, install, od, and find.  (The busybox versions,
where available, had a bug, and they're not in toybox yet.)  I'm trying to
get those in for the next release in September.</p>

<p>Sorry I missed a release back in April.  Shouldn't happen again.</p>

<h2>January 29, 2008</h2>
<p><a href=downloads/firmware-0.3.1.tar.bz2>Version 0.3.1</a> is out
(<a href=>changeset 275</a>), with
kernel 2.6.24.  The <a href=downloads/images>images</a>
are now tarballs each containing the ext2, zImage, and run script files.
The run scripts now run by default so /proc, /sys, /dev
and the virtual network are initialized, and the default shell is busybox
ash (so cursor keys and history work).</p>

<p>Sparc is still broken (tracked it down to a dynamic linking bug, I think,
haven't fixed it yet) and m68k is failing to build with an internal compiler
error (next release I should upgrade the compiler).  All the other targets
have a working virtual network, and all but powerpc exit qemu when you
exit the PID 1 command shell.</p>

<p>Building on an x86-64 host< should no longer be insanely slow (the
gcc-min-heapsize arguments that allow 32-bit hosts to build in
128 megs of ram do very impolite things to 64-bit hosts), and the resulting
x86-64 cross compiler should now be properly relocatable.</p>

<p>Better build dependency tracking: the host-tools script is now
populating a single directory with all the commands needed by the build, and
restricting $PATH to that directory (so it can't accidentally call any
commands that aren't explicitly listed).  It's building toybox and busybox to
provide most of these commands (the remaining ones are listed towards the end
of, and creating symlinks to the remaining ones out
of the original $PATH.  This allows it to build on a wider range of host

<h2>November 2, 2007</h2>
<p><a href=downloads/firmware-0.3.0.tar.bz2>Version 0.3.0</a> is out
(changeset 242), with kernel 2.6.23.  PowerPC finally works under
qemu (network and everything), and it's building a m68k target
(although I have no emulator to run that).  That means there are
ten targets, of which eight run under qemu.  (Sparc is still
broken, let me know if anybody actually cares.)</p>

<p>The new "./ --fork" script builds all the targets in
parallel, or use --nofork if you haven't got the memory for that
(and --watch to watch and existing build if you ctrl-c out of
the display before it's done).</p>

<p>The build is now smarter about extracting only one copy of the
source code (in build/sources) and re-using it for multiple builds,
building out of tree (via cp -rs to create a tree full of symlinks
so the package doesn't need native out-of-tree support).</p>

<h2>September 2, 2007</h2>
<p>Added <a href=new_platform.html>a porting guide</a>.  I'm working on
m68k, ppc, big endian arm, and maybe blackfin targets for the next release,
and thought other people might be interested in the process.  (The vast
majority of it is fiddly debugging.  These are the other steps.)</p>

<h2>June 27, 2007</h2>
<p><a href=downloads/firmware-0.2.2.tar.bz2>Version 0.2.2</a> is out
(changeset 185).  Using uClibc 0.9.29 release, several small bugfixes,
new mips big-endian config, actually work when /bin/sh->dash (mostly
by explicitly saying /bin/bash everywhere), automatically detect
the number of CPUs in the machine to feed -j to make, and better
diagnostic output.</p>

<h2>April 9, 2007</h2>
<p><a href=downloads/firmware-0.2.1.tar.bz2>Version 0.2.1</a> is out
(changeset 156).  Significant upgrades to armv4l: the native compiler works
now, and it's using soft-float.  Added armv5l and i586 targets to show how
to do that kind of variant.  Added preliminary powerpc support (although
qemu can't run it yet).  Reorganized the download directory and rewrote
the <a href=downloads/README>README</a>.  Added squashfs back (the kernel
supports it, but it's not using it yet).  Moved uClibc to miniconfig.
(Yes, the patch for this is huge, and yes I need to push it all upstream into
the Linux kernel.  On the bright side, this one builds on a host that doesn't
have curses installed.)  Stopped trying to build qemu (at least until they
get the gcc 3.x dependencies cleaned out), now just warn if it's not there
(so far the build only uses it to sanity-test the cross compiler, which is
now skipped automatically if it's not there).</p>

<p>I note that some versions of Ubuntu (Edgy and up) are pushing a political
agenda.  They install bash, but point /bin/sh to dash instead.  (So why
install bash if you're not going to use it?)  This breaks all sorts of things,
and if somebody can tell me how to force make to run "/bin/bash" instead of
"/bin/sh", I'll consider trying to deal with the mess.  Until then, I suggest
"rm /bin/sh; ln -s bash /bin/sh" to get a working system.  (I'm no fan of
bash, but dash is just broken.)</p>

<p>(Those of you who use vi and want to be able to use the cursor keys while
in insert mode might want to do something similar with vi->vim.  Ubuntu seems
to be trying to train users to change their habits.  Dog biscuits would be a
more honest approach.)</p>

<p>Update: I've been pointed at
<a href=>this</a> as evidence Ubuntu isn't
pushing a political agenda.  Ok, maybe it's just really bad technical judgement.
Are they honestly saying that people write shell scripts for the speed?  And
how do you make a size argument and then install bash by default in ADDITION
to the other shell?  Boggle.  In 1991 after Linus Torvalds taught his term
program to understand the minix filesystem so he could upload and download
without rebooting, he taught it to handle the system calls of bash so he could
rm/mv/mkdir without rebooting.  That's where Linux 0.0.1
came from.  Bash was the default Linux shell _before_ 0.0.1.  Be very
careful messing with that kind of a de-facto standard, guys.  Dash is
garbage.  Background a process with &amp; and then hit ctrl-c: it'll kill it.
It doesn't understand blah/{blah,blah} file list syntax.  It can't do
"source" (just ".", which is unreadable).  I repeat: I'm not a
fan of bash (yeah, the bloat's getting crazy), but dash is broken.</p>

<p>And that still doesn't explain why "vi" can't use the cursor keys in
insert mode, but "vim" can...</p>

<h2>March 6, 2007</h2>
<p>Version 0.2.0 is out.  This one builds ext2 images which can boot up to a
shell prompt under qemu.  This works on i686, armv4l, x86_64, and mipsel.
(Sparc's broken.  Anyone who cares about sparc is welcome to debug it.)</p>

<p>There are now prebuilt ext2 image files in the download directory.
The kernels are in the mini-native tarballs.  (Yeah, I should repackage that
next release.)  The system emulator invocation for each platform is
the appropriate sources/configs file, and invokes 'em.</p>

<p>The mailing list is in the usual place if you have any questions.</p>

<h2>January 14, 2007</h2>
<p>There's a new irc channel for the project, #firmware on freenode.</p>

<p><a href=>Changeset 88</a> builds
i686, x86_64, armv4l, mips, and sparc.  I've made a release tarball of
that (<a href=downloads/firmware-0.1.1.tar.bz2>firmware 0.1.1</a>, "It works
for me"), and updated the prebuilt cross-compiler tarballs in the
<a href=downloads>downloads</a> directory.  I've added a big README and
prebuilt mini-native tarballs for each platform (although packing them up into
something qemu can boot is currently left as an exercise for the reader).</p>

<p>Speaking of which, I'm currently working on adding ext2 packaging
(via <a href=>toybox</a>) to the build scripts,
so qemu system emulation can boot the result and then run the next stage

<h2>December 28, 2006</h2>
<p><a href=>Changeset 68</a> builds
a native build environment with a working toolchain.  And in celebration, I've
revamped the website with an actual navigation bar and content and such.</p>

<p>I should put out a release soon.</p>

<h2>December 5, 2006</h2>
<p><a href=>Changeset 27</a> builds
a relocatable armv4l cross-compile toolchain!  Download the tarball,
run ./, then run ./, then grab the "build/cross-compiler"
directory and use "bin/armv4l-unknown-linux-gnu-gcc" out of that (which
I admit is a bit of a mouthful, for which I blame the FSF).</p>

<h2>August 6, 2006</h2>
<p>Mecurial repository created.  Nothing to see yet, move along...</p>
<!--#include file="footer.html" -->