changeset 889:0947cffea3bd

Add a FAQ.
author Rob Landley <>
date Mon, 16 Nov 2009 01:51:18 -0600
parents 626288dd5cf3
children 368cdbe5b0ee
files www/FAQ.html www/header.html
diffstat 2 files changed, 133 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/www/FAQ.html	Mon Nov 16 01:51:18 2009 -0600
@@ -0,0 +1,132 @@
+<!--#include file="header.html" -->
+<title>Frequently Asked Questions</title>
+<li><p><a href=#where_start>Q: Where do I start?</a></p></li>
+<li><p><a href=#ubuntu_mispackaged_qemu>Q: ./ says qemu-system-mips isn't found, but I installed qemu.  Why isn't this working?</a></p></li>
+<li><p><a href=#case_sensitive_patch>Q: I added my uClibc patch to sources/patches but it didn't do anything, what's wrong?</a></p></li>
+<a name=where_start /><h2>Q: Where do I start?</h2>
+<p>The project provides development and test environments for lots of different
+hardware platforms, based on busybox and uClibc and configured to run under
+<p>Most people want to do one of three things:</p>
+<li><p>Download a prebuilt cross compiler and cross-compile stuff with it.</p>
+<p>Go <a href=screenshots.html>here</a> and download the appropriate
+cross-compiler-<b>$TARGET</b>.tar.bz2 for your $TARGET, extract it, add its
+"bin" directory to your $PATH, and use the appropriate $TARGET-cc and
+$TARGET-ld and so on to compile your program.  (The tool names have prefixes
+so they can be in the same $PATH as your host's existing compiler.)</p>
+<li><p>Download a prebuilt system image, boot it up under the emulator, and
+compile stuff natively for a target.</p>
+<p>Go <a href=screenshots.html>here</a> and download the appropriate
+system-image-<b>$ARCH</b>.tar.bz2 for your $TARGET, extract it, cd into it,
+and <b>./</b> to boot it under qemu.</p>
+<p>Alternately, you can run the script <b>./</b>,
+which is a wrapper around that feeds QEMU extra options to add
+memory (256 megs) and writeable disk space (a blank 2 gigabyte disk image
+mounted on /home) to provide a more capable development environment.</p>
+<p>The system images contain native compiler toolchains, but if you install
+distccd on the host and add the appropriate cross compiler to your host's
+$PATH, the ./ script will detect this and set up the system
+image to automatically use distcc to call out to the cross compiler through
+the virtual network, speeding up native builds significantly.<p>
+<li><p>Build their own cross compilers and system images from source, using
+the build scripts.</p>
+<p>Go to the <a href=downloads>downloads directory</a> and grab the highest
+numbered release tarball, extract it, and run <b>./</b> to list
+the available targets.  The run <b>./ $TARGET</b> to compile
+the one you like.  The results are in the "build> directory.</p>
+<p>The build scripts are written in bash, and fairly extensively commented.
+All the scripts at the top level are designed to be run directly, and is just a wrapper script that calls them in order.  The less commonly
+used scripts in <b>sources/more</b> are also designed to be run directly.</p>
+<p>Go to the <a href=/ht/firmware>mercurial archive</a> to grab the latest
+development version out of source control.  If you don't want to use mercurial,
+you can grab a <a href=/hg/firmware/archive/tip.tar.bz2>tarball</a> of the
+current code at any time.</p>
+<p>For the first two, the <a href=downloads/binaries>downloads/binaries
+directory</a> has all the prebuilt binaries for the current release.</p>
+<p>For the third, go to the <a href=downloads>downloads directory and grab
+a release tarball</a>, or else look at the <a href=/ht/firmware>mercurial
+archive</a> to grab the latest development version out of source control.
+(If you don't want to mess with mercurial, you can grab a
+<a href=/hg/firmware/archive/tip.tar.bz2>tarball</a> of the current code
+at any time.</p>
+<p>If all else fails, look at the pretty
+<a href=screenshots.html>screenshots</a>.</p>
+<a name=ubuntu_mispackaged_qemu /><h2>Q: ./ says qemu-system-$TARGET isn't found, but I installed the qemu package and the executable "qemu" is there.  Why isn't this working?</h2>
+<p>A: You're using Ubuntu, aren't you?  You need to install
+"qemu-kvm-extras" to get the non-x86 targets.</p>
+<p>The Ubuntu developers have packaged qemu in an <strike>actively
+misleading</strike> "interesting" way.  They've confused the emulator QEMU
+with the virtualizer KVM.</p>
+<p>QEMU is an emulator that supports multiple hardware
+targets, translating the target code into host code a page at a time.  KVM
+stands for Kernel Virtualization Module, a kernel module which allows newer x86
+chips with support for the "VT" extension to run x86 code in a virtual
+<p>The KVM project started life as a fork of QEMU (replacing QEMU's CPU
+emulation with a kernel module providing VT virtualization support, but
+using QEMU's device emulation for I/O), but KVM only ever offered a
+small subset of the functionality of QEMU, and current versions of QEMU have
+merged KVM support into the base package.  (QEMU 0.11.0 can automatically
+detect and use the KVM module as an accelerator, where appropriate.)</p>
+<p>It's a bit like the X11 project providing a "drm" module (for 3D acceleration
+and such), which was integrated upstream into the Linux kernel.  The Linux
+kernel was never part of the X11 project, and vice versa, and pretending the
+two projects were the same thing would be wrong.</p>
+<p>That said, on Ubuntu the "qemu" package is an alias for "qemu-kvm", a
+package which only supports i386 and x86_64 (because that's all KVM supports
+when running on an x86 PC).  In order to install the rest of qemu (support
+for emulating arm, mips, powerpc, sh4, and so on), you need to install
+the "qemu-kvm-extras" package (which despite the name has nothing whatsoever
+to do with KVM).</p>
+<p>Support for non-x86 targets is part of the base package when you build QEMU
+from source.  If you ignore Ubuntu's packaging insanity and build QEMU
+from source, you shouldn't have to worry about this strangely named
+artificial split.</p>
+<a name=case_sensitive_patch /><h2>Q: I added a uClibc patch to sources/patches but it didn't do anything, what's wrong?</h2>
+<p>The Linux filesystem is case sensitive, so the patch has to start with
+"uClibc-" with a capital C.</p>
+<!--#include file="footer.html" -->
--- a/www/header.html	Mon Nov 16 01:45:56 2009 -0600
+++ b/www/header.html	Mon Nov 16 01:51:18 2009 -0600
@@ -13,6 +13,7 @@
     <li><a href="screenshots">Screenshots</a></li>
     <li><a href="documentation.html">Documentation</a></li>
     <li><a href="downloads/README">README</a></li>
+    <li><a href="FAQ.html">FAQ</a></li>