summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorP. J. McDermott <pjm@nac.net>2011-12-30 06:41:12 (EST)
committer P. J. McDermott <pjm@nac.net>2011-12-30 06:41:12 (EST)
commit07e503f8490e6ec5e57102edad1213c342e7ec52 (patch)
treee4c419d30816ca58df4ee57bf918ac716af69835
parent739e06c85a8f33fb2a8f4773ee1275df17d265c7 (diff)
Add notes on building a bootstrap system.
-rw-r--r--bootstrap-system-build-procedure.txt111
1 files changed, 111 insertions, 0 deletions
diff --git a/bootstrap-system-build-procedure.txt b/bootstrap-system-build-procedure.txt
new file mode 100644
index 0000000..89a01f8
--- /dev/null
+++ b/bootstrap-system-build-procedure.txt
@@ -0,0 +1,111 @@
+ABOUT THIS GUIDE
+================
+
+This is a guide to building a custom BusyBox/Linux-libre system with the GNU
+toolchain. It mostly follows Linux From Scratch version 7.0, except that it
+uses more recent versions of some software packages, avoids applying patches
+where possible, builds cross-compiling GCC and other toolchain components in a
+"sysroot" configuration, and uses a BusyBox-based userspace rather than a
+GNU-based one. This guide assumes the use of a GNU/Linux host system with all
+the necessary development software (GCC, GNU Binutils, Subversion, etc.) already
+installed.
+
+It is recommended that you read Linux From Scratch version 7.0 to understand the
+full build process and the rationale behind various elements of the setup.
+
+
+PROCEDURE
+=========
+
+Make a directory in which all work will be done. Under this directory, make
+directories 'src' and sys'.
+
+Download all of the necessary source archives and branches.
+ src$ wget http://www.busybox.net/downloads/busybox-1.19.3.tar.bz2
+ src$ wget http://www.fsfla.org/svnwiki/selibre/linux-libre/download/releases/\
+ > LATEST-3.1.N/linux-3.1.6-libre.tar.bz2
+ src$ svn co svn://svn.eglibc.org/branches/eglibc-2_14 eglibc-2.14
+ src$ wget http://ftp.gnu.org/gnu/gcc/gcc-4.6.2/gcc-4.6.2.tar.bz2
+ src$ wget http://ftp.gnu.org/gnu/binutils/binutils-2.22.tar.bz2
+ src$ wget http://ftp.gnu.org/gnu/make/make-3.82.tar.bz2
+ src$ wget http://ftp.gnu.org/gnu/automake/automake-1.11.2.tar.bz2
+ src$ wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.68.tar.bz2
+ src$ wget http://ftp.gnu.org/gnu/m4/m4-1.4.16.tar.bz2
+ src$ wget ftp://ftp.gmplib.org/pub/gmp-5.0.2/gmp-5.0.2.tar.bz2
+ src$ wget http://www.mpfr.org/mpfr-current/mpfr-3.1.0.tar.bz2
+ src$ wget http://www.multiprecision.org/mpc/download/mpc-0.9.tar.gz
+ src$ for file in *.tar.bz2; do tar -xjf ${file}; done
+ src$ for file in *.tar.gz; do tar -xzf ${file}; done
+
+Make and mount the filesystem.
+ sys$ dd if=/dev/zero of=fs bs=1024 count=$((3*1024*1024))
+ sys$ sudo mkfs -t ext4 fs
+ sys$ mkdir fsmnt
+ sys$ sudo mount -o loop fs fsmnt
+
+Set up the toolchain environment. Be sure to change '<BASE_DIR>' to the
+absolute path to the base work directory you made earlier. We're using GNU Bash
+as the new user's default shell for convenience; this has no effect on the
+target system.
+ sys$ sudo mkdir -v fsmnt/tools fsmnt/tools/usr fsmnt/src
+ sys$ sudo ln -sv "${PWD}/fsmnt/tools" /tools
+ sys$ sudo cp -pR ../src/*/ fsmnt/src/
+ sys$ sudo groupadd bbll
+ sys$ sudo useradd -s /bin/bash -g bbll -m -k /dev/null bbll
+ sys$ sudo passwd bbll
+ sys$ sudo chown -R bbll:bbll fsmnt/tools fsmnt/src
+ sys$ su - bbll
+ $ cat > ~/.bash_profile <<EOF
+ > exec env -i HOME="${HOME}" TERM="${TERM}" PS1='\u:\w$ ' /bin/bash
+ > EOF
+ $ cat > ~/.bashrc <<EOF
+ > set +h
+ > umask 022
+ > BBLL=<BASE_DIR>/sys/fsmnt
+ > LC_ALL=C
+ > BBLL_TARGET=$(uname -m)-bbll-linux-gnu
+ > PATH=/tools/bin:/tools/usr/bin:/bin:/usr/bin
+ > export BBLL LC_ALL BBLL_TARGET PATH
+ > EOF
+ $ source ~/.bash_profile
+
+Configure and build a cross-compiling GNU Binutils.
+ $ cd "${BBLL}/src"
+ $ mkdir binutils-build
+ $ cd binutils-build
+ $ ../binutils-2.22/configure --target=${BBLL_TARGET} --prefix=/tools/usr \
+ > --disable-nls --disable-werror
+ $ make -j 4
+ $ case $(uname -m) in
+ > x86_64)
+ > mkdir -v /tools/lib
+ > ln -sv lib /tools/usr/lib64
+ > ;;
+ > esac
+ $ make install
+
+Configure and build a cross-compiling GCC.
+ $ cd ..
+ $ mv gmp-5.0.2/ gcc-4.6.2/gmp
+ $ mv mpfr-3.1.0/ gcc-4.6.2/mpfr
+ $ mv mpc-0.9/ gcc-4.6.2/mpc
+ $ mkdir gcc-build
+ $ cd gcc-build
+ $ ../gcc-4.6.2/configure --target=${BBLL_TARGET} --prefix=/tools/usr \
+ > --disable-nls --disable-shared --disable-multilib --disable-decimal-float \
+ > --disable-threads --disable-libmudflap --disable-libssp --disable-libgomp \
+ > --disable-libquadmath --enable-languages=c --without-ppl --without-cloog \
+ > --with-mpfr-include=$(pwd)/../gcc-4.6.2/mpfr/src \
+ > --with-mpfr-lib=$(pwd)/mpfr/src/.libs
+ $ make -j 4
+ $ make install
+ $ ln -sv libgcc.a $(${BBLL_TARGET}-gcc -print-libgcc-file-name | sed 's/libgcc/&_eh/')
+
+Install Linux's headers for use by EGLIBC.
+ $ cd ../linux-3.1.6
+ $ make mrproper
+ $ make headers_check
+ $ make INSTALL_HDR_PATH=/tools/usr headers_install
+
+Configure and build a cross-compiling EGLIBC.
+ ...