summaryrefslogtreecommitdiffstats
path: root/temporary-bootstrap-builder-setup-cortexa8.txt
diff options
context:
space:
mode:
authorP. J. McDermott <pjm@nac.net>2012-05-30 15:14:46 (EDT)
committer P. J. McDermott <pjm@nac.net>2012-05-30 15:14:46 (EDT)
commit4ed73fb70187af6417ab5e12b9e1365291ee5312 (patch)
treeb2ba69c8b133c68a0881023086686531df32e5f6 /temporary-bootstrap-builder-setup-cortexa8.txt
parentf03a976b063610b5d51e3e3a5b006f3706b431f0 (diff)
Give cortexa8 TBB procedure a shorter file name.HEADmaster
Diffstat (limited to 'temporary-bootstrap-builder-setup-cortexa8.txt')
-rw-r--r--temporary-bootstrap-builder-setup-cortexa8.txt383
1 files changed, 0 insertions, 383 deletions
diff --git a/temporary-bootstrap-builder-setup-cortexa8.txt b/temporary-bootstrap-builder-setup-cortexa8.txt
deleted file mode 100644
index 7e35043..0000000
--- a/temporary-bootstrap-builder-setup-cortexa8.txt
+++ /dev/null
@@ -1,383 +0,0 @@
-ABOUT THIS GUIDE
-================
-
-This is a guide to building a custom BusyBox/Linux-libre system with the GNU
-toolchain. It mostly follows Cross Linux From Scratch Sysroot version
-SVN-0.0.1-20090726-x86, except that it uses more recent versions of software
-packages 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.
-
-This version of the procedure is designed to build a bootstrap builder system
-capable of cross-compiling software for an ARM Cortex-A8 core.
-
-It is recommended that you read Cross Linux From Scratch Sysroot version
-SVN-0.0.1-20090726-x86 to understand the full build process and the rationale
-behind various elements of the setup.
-
-
-LEGAL NOTICE
-============
-
-THIS GUIDE:
-
- Copyright (C) 2012 Patrick "P. J." McDermott
-
- This guide may be reproduced, distributed, modified, and otherwise dealt in
- under the terms of the Expat/MIT License:
- http://www.jclark.com/xml/copying.txt
-
-CERTAIN COMMAND LINES AND FILE CONTENTS:
-
- Cross-Compiled Linux From Scratch - Sysroot
- Version SVN-0.0.1-20090726-x86
-
- Copyright © 2005-2009, Jim Gifford, & Ryan Oliver
-
- This material may be distributed only subject to the terms and conditions set
- forth in the Open Publication License v1.0 or later (the latest version is
- presently available at http://www.opencontent.org/openpub/).
-
- The latest version of the original book may be downloaded from:
- http://trac.cross-lfs.org/wiki/download#CLFSSysroot1.xUnderDevelopment
- It may also be read online at:
- http://cross-lfs.org/view/clfs-sysroot/x86/
-
-TRADEMARKS:
-
- Linux is a Registered Trademark of Linus Torvalds.
-
-
-PROCEDURE
-=========
-
-Make a directory in which all work will be done. Under this directory, make
-directories 'src' and sys.cortexa8':
- $ mkdir src sys.cortexa8
-
-Download all of the necessary source archives and branches.
- $ cd src
- $ wget http://www.busybox.net/downloads/busybox-1.19.3.tar.bz2
- $ wget http://odin1.pehjota.net/~pj/linux-3.2.7-libre.tar.bz2
- $ svn co svn://svn.eglibc.org/branches/eglibc-2_15 eglibc-2.15
- $ wget http://ftp.gnu.org/gnu/gcc/gcc-4.6.2/gcc-4.6.2.tar.bz2
- $ wget http://ftp.gnu.org/gnu/binutils/binutils-2.22.tar.bz2
- $ wget http://ftp.gnu.org/gnu/make/make-3.82.tar.bz2
- $ wget ftp://ftp.gmplib.org/pub/gmp-5.0.2/gmp-5.0.2.tar.bz2
- $ wget http://www.mpfr.org/mpfr-current/mpfr-3.1.0.tar.bz2
- $ wget http://www.multiprecision.org/mpc/download/mpc-0.9.tar.gz
- $ for file in *.tar.bz2; do tar -xjf ${file}; done
- $ for file in *.tar.gz; do tar -xzf ${file}; done
- $ cd ..
-
-Make and mount the filesystem. mkfs and mount must be run as the superuser, but
-dd shouldn't need to be.
- $ cd sys.cortexa8
- $ dd if=/dev/zero of=fs bs=1024 count=$((3*1024*1024))
- # mkfs -t ext4 fs
- $ mkdir fsmnt
- # mount -o loop fs fsmnt
-
-Set up a new user.
- # groupadd tbb-cortexa8
- # useradd -s /bin/bash -g tbb-cortexa8 -d /home/tbb-cortexa8 tbb-cortexa8
- # mkdir -pv /home/tbb-cortexa8
- # chown -v tbb-cortexa8:tbb-cortexa8 /home/tbb-cortexa8
- # passwd tbb-cortexa8
- # chown -Rv tbb-cortexa8:tbb-cortexa8 fsmnt
-
-Set up the toolchain work environment. Be sure to change '<BASE_DIR>' to the
-absolute path to the base work directory you made earlier, and adjust the
-configuration name in BBL_TARGET if you're building for a different
-architecture. We're using GNU Bash as the new user's default shell for
-convenience; this has no effect on the target system.
- $ su - tbb-cortexa8
- $ cat > ~/.bash_profile <<EOF
- > exec env -i HOME="${HOME}" TERM="${TERM}" /bin/bash
- > EOF
- $ cat > ~/.bashrc <<EOF
- > set +h
- > umask 022
- > BBL=<BASE_DIR>/sys.cortexa8/fsmnt
- > LC_ALL=C
- > PATH=<BASE_DIR>/sys.cortexa8/fsmnt/cross-tools/bin:/bin:/usr/bin
- > export BBL LC_ALL PATH
- > PS1='$ '
- > unset CFLAGS
- > unset CXXFLAGS
- > export BBL_HOST=$(echo ${MACHTYPE} | \
- > sed "s/$(echo ${MACHTYPE} | cut -d - -f 2)/cross/")
- > export BBL_TARGET=arm-cortex_a8-linux-gnu
- > export BBL_GCCTGTOPTS='--with-arch=armv7-a --with-abi=aapcs-linux
- > --with-cpu=cortex-a8 --with-tune=cortex-a8
- > --with-fpu=neon --with-float=hard'
- > EOF
- $ source ~/.bash_profile
-
-Make system directories. These commands should give you a system that is
-compliant with Filesystem Hierarchy Standard version 2.3. Note that the range
-syntax in many of these command lines is a non-standard feature of GNU Bash;
-this may not work on other shells.
- $ mkdir -pv ${BBL}/{bin,boot,dev,etc/opt,home,lib,media,mnt,opt,proc}
- $ install -dv -m 0750 ${BBL}/root
- $ mkdir -pv ${BBL}/{sbin,srv,sys}
- $ install -dv -m 1777 ${BBL}{,/var}/tmp
- $ mkdir -pv ${BBL}/usr/{,local/}{bin,include,lib,sbin,share/{man,misc},src}
- $ mkdir -pv ${BBL}/usr/local/{etc,games}
- $ mkdir -pv ${BBL}/usr/{,local/}share/{doc,info,locale,terminfo,zoneinfo}
- $ mkdir -pv ${BBL}/usr/{,local/}share/man/man{1,2,3,4,5,6,7,8}
- $ ln -sv share/man ${BBL}/usr/local/man
- $ mkdir -pv ${BBL}/var/{cache,lib/misc,local,lock,log,mail,opt,run,spool}
-
-Write the passwd and group files.
- $ cat > ${BBL}/etc/passwd <<EOF
- > root::0:0:root:/root:/bin/bash
- > EOF
- $ cat > ${BBL}/etc/group <<EOF
- > root:x:0:
- > bin:x:1:
- > sys:x:2:
- > kmem:x:3:
- > tty:x:4:
- > tape:x:5:
- > daemon:x:6:
- > floppy:x:7:
- > disk:x:8:
- > lp:x:9:
- > dialout:x:10:
- > audio:x:11:
- > video:x:12:
- > utmp:x:13:
- > usb:x:14:
- > cdrom:x:15:
- > EOF
-
-If CONFIG_FEATURE_UTMP and/or CONFIG_FEATURE_WTMP are enabled in BusyBox,
-certain BusyBox applets (getty, login, init, etc.) will log user logins to
-/var/run/utmp and/or /var/run/wtmp. However, BusyBox's supporting library won't
-create /var/run/wtmp if it doesn't exist. So create these files now and set
-proper modes for them.
- $ touch ${BBL}/var/run/{u,w}tmp
- $ chmod -v 664 ${BBL}/var/run/{u,w}tmp
-/var/run/utmp is used to track logged-in users. /var/run/wtmp is used to record
-when users log into and out of the system. NB: This is an odd location for
-wtmp, but that's where an unpatched BusyBox will expect it.
-
-Make and change to a directory for package source code.
- $ mkdir -v ${BBL}/src
- $ cd ${BBL}/src
-
-At this point and after every milestone (maybe after each package installation),
-I recommend you create a snapshot of the filesystem. To do so, first exit the
-shell environment of user 'tbb-cortexa8'.
- $ exit
-As the superuser, unmount the filesystem.
- # umount fs
-Make a copy of the filesystem. Replace '<UNIQUE_NAME>' with something to
-identify the milestone (for example, at this point I named my snapshot image
-'fs.01-fs-hier' to note that it was the first snapshot and that I just finished
-making the filesystem hierarchy).
- $ cp -p fs fs.<UNIQUE_NAME>
-As the superuser, mount the filesystem again.
- # mount -o loop fs fsmnt
-Log in as user 'tbb-cortexa8' and return to the src directory in the filesystem.
- $ su - tbb-cortexa8
- $ cd ${BBL}/src
-Now, if something goes wrong, you can revert to a previous filesystem image by
-going through this section and swapping the arguments to 'cp'.
-
-Install Linux's headers for use by EGLIBC.
- $ cp -pR ${BBL}/../../src/linux-3.2.7 .
- $ cd linux-3.2.7
- $ make mrproper
- $ make ARCH=arm headers_check
- $ make ARCH=arm INSTALL_HDR_PATH=${BBL}/usr headers_install
- $ find ${BBL}/usr/include/ -name .install -o -name ..install.cmd | \
- > xargs rm -fv
- $ cd ..
- $ rm -Rf linux-3.2.7
-
-Install GMP for use by the cross-compiling GCC build.
- $ cp -pR ${BBL}/../../src/gmp-5.0.2 .
- $ cd gmp-5.0.2
- $ CPPFLAGS=-fexceptions ./configure --prefix=${BBL}/cross-tools --enable-cxx
- $ make
- $ make install
- $ make check
- $ cd ..
- $ rm -Rf gmp-5.0.2
-
-Install MPFR for use by the cross-compiling GCC build.
- $ cp -pR ${BBL}/../../src/mpfr-3.1.0 .
- $ cd mpfr-3.1.0
- $ LDFLAGS="-Wl,-rpath,${BBL}/cross-tools/lib" ./configure \
- > --prefix=${BBL}/cross-tools --enable-shared --with-gmp=${BBL}/cross-tools
- $ make
- $ make install
- $ cd ..
- $ rm -Rf mpfr-3.1.0
-
-Install MPC for use by the cross-compiling GCC build.
- $ cp -pR ${BBL}/../../src/mpc-0.9 .
- $ cd mpc-0.9
- $ LDFLAGS="-Wl,-rpath,${BBL}/cross-tools/lib" ./configure \
- > --prefix=${BBL}/cross-tools --with-mpfr=${BBL}/cross-tools \
- > --with-gmp=${BBL}/cross-tools
- $ make
- $ make install
- $ cd ..
- $ rm -Rf mpc-0.9
-
-Configure and build a cross-compiling GNU Binutils.
- $ cp -pR ${BBL}/../../src/binutils-2.22 .
- $ mkdir -v binutils-build
- $ cd binutils-build
- $ AR=ar AS=as ../binutils-2.22/configure --prefix=${BBL}/cross-tools \
- > --host=${BBL_HOST} --target=${BBL_TARGET} --with-sysroot=${BBL} \
- > --disable-nls --enable-shared --disable-multilib
- $ make configure-host
- $ make
- $ make install
- $ cp -v ../binutils-2.22/include/libiberty.h ${BBL}/usr/include
- $ cd ..
- $ rm -Rf binutils-2.22 binutils-build
-
-Configure and build a cross-compiling GCC with a static libgcc and no threads.
- $ cp -pR ${BBL}/../../src/gcc-4.6.2 .
- $ mkdir -v gcc-build
- $ cd gcc-build
- $ AR=ar LDFLAGS="-Wl,-rpath,${BBL}/cross-tools/lib" ../gcc-4.6.2/configure \
- > --prefix=${BBL}/cross-tools --build=${BBL_HOST} --host=${BBL_HOST} \
- > --target=${BBL_TARGET} ${BBL_GCCTGTOPTS} --disable-multilib \
- > --with-sysroot=${BBL} --disable-nls \
- > --without-headers --with-newlib --disable-decimal-float \
- > --disable-libgomp --disable-libmudflap --disable-libssp \
- > --with-mpfr=${BBL}/cross-tools --with-gmp=${BBL}/cross-tools \
- > --with-mpc=${BBL}/cross-tools --without-ppl --without-cloog \
- > --disable-shared --disable-threads --enable-languages=c
- $ make all-gcc all-target-libgcc
- $ make install-gcc install-target-libgcc
- $ cd ..
- $ rm -Rf gcc-4.6.2 gcc-build
-
-Configure and build a cross-compiling EGLIBC.
- $ cp -pR ${BBL}/../../src/eglibc-2.15 .
- $ cd eglibc-2.15
- $ find . -depth -name .svn -exec rm -Rf {} \;
- $ cd libc
- $ ln -s ../ports ports
- $ cp -v Makeconfig{,.orig}
- $ sed -e 's/-lgcc_eh//g' Makeconfig.orig > Makeconfig
- $ cd ../..
- $ mkdir -v eglibc-build
- $ cd eglibc-build
- $ cat > config.cache <<EOF
- > libc_cv_forced_unwind=yes
- > libc_cv_c_cleanup=yes
- > libc_cv_gnu89_inline=yes
- > libc_cv_ssp=no
- > EOF
- $ cat > configparams <<EOF
- > install_root=${BBL}
- > EOF
- $ BUILD_CC=gcc CC=${BBL_TARGET}-gcc AR=${BBL_TARGET}-ar \
- > RANLIB=${BBL_TARGET}-ranlib \
- > ../eglibc-2.15/libc/configure --prefix=/usr --libexecdir=/usr/lib/eglibc \
- > --host=${BBL_TARGET} --build=${BBL_HOST} --without-fp \
- > --disable-profile --enable-add-ons --with-tls --enable-kernel=3.2.0 \
- > --with-__thread --with-binutils=${BBL}/cross-tools/bin \
- > --with-headers=${BBL}/usr/include --cache-file=config.cache
- $ make
- $ make install_root=${BBL} install
- $ rm -Rf *
-
-Build EGLIBC's localedef and install locales.
- $ CPPFLAGS=-DNOT_IN_libc ../eglibc-2.15/localedef/configure \
- > --prefix=${BBL}/usr --with-glibc=../eglibc-2.15/libc
- $ make
- $ make SUPPORTED-LOCALES='\
- > de_DE.UTF-8/UTF-8 de_DE/ISO-8859-1 de_DE@euro/ISO-8859-15 \
- > en_HK.UTF-8/UTF-8 en_HK/ISO-8859-1 \
- > en_PH.UTF-8/UTF-8 en_PH/ISO-8859-1 \
- > en_US.UTF-8/UTF-8 en_US/ISO-8859-1 \
- > es_MX.UTF-8/UTF-8 es_MX/ISO-8859-1 \
- > fa_IR/UTF-8 \
- > fr_FR.UTF-8/UTF-8 fr_FR/ISO-8859-1 fr_FR@euro/ISO-8859-15 \
- > it_IT.UTF-8/UTF-8 it_IT/ISO-8859-1 \
- > ja_JP.EUC-JP/EUC-JP ja_JP.UTF-8/UTF-8' install-locales
- $ cd ..
- $ rm -Rf eglibc-2.15 eglibc-build
-
-Write the Name Service Switch configuration file.
- $ cat > ${BBL}/etc/nsswitch.conf <<EOF
- > # /etc/nsswitch.conf
- >
- > passwd: files
- > group: files
- > shadow: files
- >
- > hosts: files dns
- > networks: files
- >
- > protocols: files
- > services: files
- > ethers: files
- > rpc: files
- > EOF
-
-Set the system's timezone.
- $ TZDIR=${BBL}/usr/share/zoneinfo ${BBL}/usr/bin/tzselect
-Answer the prompts and the tzselect script will output the name of a time zone.
-Substitute '<TZ>' below with this name.
- $ ln -sfv ../usr/share/zoneinfo/<TZ> ${BBL}/etc/localtime
-
-Configure the dynamic loader to search for libraries in /usr/local/lib and
-/opt/lib in addition to its default locations /lib and /usr/lib.
- $ cat > ${BBL}/etc/ld.so.conf <<EOF
- > # /etc/ld.so.conf
- >
- > /usr/local/lib
- > /opt/lib
- > EOF
-
-Configure and build a final cross-compiling GCC.
- $ cp -pR ${BBL}/../../src/gcc-4.6.2 .
- $ mkdir -v gcc-build
- $ cd gcc-build
- $ AR=ar LDFLAGS="-Wl,-rpath,${BBL}/cross-tools/lib" ../gcc-4.6.2/configure \
- > --prefix=${BBL}/cross-tools --build=${BBL_HOST} --host=${BBL_HOST} \
- > --target=${BBL_TARGET} ${BBL_GCCTGTOPTS} --disable-multilib \
- > --with-sysroot=${BBL} --disable-nls --enable-shared \
- > --enable-languages=c,c++ --enable-__cxa_atexit \
- > --with-mpfr=${BBL}/cross-tools --with-gmp=${BBL}/cross-tools \
- > --with-mpc=${BBL}/cross-tools --without-ppl --without-cloog \
- > --enable-c99 --enable-long-long --enable-threads=posix
- $ make AS_FOR_TARGET="${BBL_TARGET}-as" LD_FOR_TARGET="${BBL_TARGET}-ld"
- $ make install
- $ cd ..
- $ rm -Rf gcc-4.6.2 gcc-build
-
-
-
-Set up environment variables to have all further packages built using the cross-
-compiling toolchain.
- $ cat >> ~/.bashrc <<EOF
- > export CC=${BBL_TARGET}-gcc
- > export CXX=${BBL_TARGET}-g++
- > export AR=${BBL_TARGET}-ar
- > export AS=${BBL_TARGET}-as
- > export RANLIB=${BBL_TARGET}-ranlib
- > export LD=${BBL_TARGET}-ld
- > export STRIP=${BBL_TARGET}-strip
- > export READELF=${BBL_TARGET}-readelf
- > EOF
- $ source ~/.bashrc
-
-
-
-Install opkg to /opkgbootstrap with an etc dir under /opkgbootstrap/etc.
-Install opkhelper to /opkgbootstrap.
-Install fakeroot to /opkgbootstrap.
-Write an opkg.conf under /opkgbootstrap/etc.
-opkbuild and opkg-install packages.
-