diff options
author | Ludovic Pouzenc <ludovic@pouzenc.fr> | 2011-08-11 14:44:07 +0000 |
---|---|---|
committer | Ludovic Pouzenc <ludovic@pouzenc.fr> | 2011-08-11 14:44:07 +0000 |
commit | 984ed687a8a8612ce5105afdfb26cd43c9f65bda (patch) | |
tree | 7c74221b3f1ea87703fd1234961ba6ba2c2ebd10 /tam3517-build-everything.sh | |
download | 2011-tam3517-984ed687a8a8612ce5105afdfb26cd43c9f65bda.tar.gz 2011-tam3517-984ed687a8a8612ce5105afdfb26cd43c9f65bda.tar.bz2 2011-tam3517-984ed687a8a8612ce5105afdfb26cd43c9f65bda.zip |
Suppression stub README.txt et création du tag de la version 1.0.0
git-svn-id: file:///var/svn/2011-tam3517/tags/1.0.0@3 e2e0d7dd-b64d-407c-a7ae-d180efd4e19e
Diffstat (limited to 'tam3517-build-everything.sh')
-rwxr-xr-x | tam3517-build-everything.sh | 195 |
1 files changed, 195 insertions, 0 deletions
diff --git a/tam3517-build-everything.sh b/tam3517-build-everything.sh new file mode 100755 index 0000000..d073d3f --- /dev/null +++ b/tam3517-build-everything.sh @@ -0,0 +1,195 @@ +#!/bin/bash -ex + +# Copyright 2011 Ludovic Pouzenc <lpouzenc@gmail.com> + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +VERSION='1.0.0' + +# Some tweakable parameters follows + +# This script was tested upon Debian Squeeze and Debian Lenny +# You have to specify which one you use (yes I'm lazy) +DEBIAN_CODENAME=squeeze + +# This is the path within all stuff will be downloaded, compiled, crunshed and so on +BASEPATH=/root/tam3517 + +# This is the size of your SD card image. I've put 240 Mio (this IS small). +# No problem if image is smaller that real card (but you will not access at the extra space without resizing the last partition manually +# Big problems if you pickup a size bigger that your real card. +SD_SECTOR_COUNT=$((240*1024*2)) + +# End of teakable parameters + +# Some helpers for code factoring +function install_once() { + last_update=$(stat -c%Y /var/lib/dpkg/info) + now=$(date +%s) + delta=$((now-last_update)) + [ $delta -lt 86400 ] || apt-get update + + while [ -n "$1" ] # Quotes are mandatory (WTF !!!) + do + state=$(dpkg -l $1 | tail -1) + [ "${state:0:3}" = "ii " ] || apt-get -y install $1 + shift + done +} + +function mkdir_once() { + [ -d "$1" ] || mkdir -p "$1" +} + +function wget_once() { + [ -f "$2" ] || wget -O "$2" "$1" +} + +# Begin of main code + +# Env checks +[ $UID -eq 0 ] || ( echo "Must be run as root"; false ) + +# Add emdebian.org keys (used for their arm toolchain) +install_once emdebian-archive-keyring + +# Add emdebian.org sources +if [ ! -f "/etc/apt/sources.list.d/emdebian.list" ] +then echo "deb http://www.emdebian.org/debian/ squeeze main" > "/etc/apt/sources.list.d/emdebian.list" + apt-get update +fi + +# Install all necessary stuff for cross compiling and making up everything +install_once coreutils build-essential tar rsync gcc-4.3-arm-linux-gnueabi + +# Envrionnement creation for target-system compilation +mkdir_once "$BASEPATH/dl" + +# Downloading of everything that is necessary +wget_once "http://technexion.com/index.php/support-center/downloads/ti-cpu-modules/tam-3517/546-xuk-src-tar/download" "$BASEPATH/dl/xuk-src.tar.bz2" +wget_once "http://technexion.com/index.php/support-center/downloads/ti-cpu-modules/tam-3517/543-tam3517-sd-angstrom-img/download" "$BASEPATH/dl/tam3517-sd-angstrom.img.bz2" +wget_once "http://www.pouzenc.fr/misc/bin/tam3517-rootfs-image-am3517-evm.tar.gz" "$BASEPATH/dl/tam3517-rootfs-image-am3517-evm.tar.gz" + +mkdir_once "$BASEPATH/crosscompil/xuk" + +# x-loader, u-boot and kernel source extraction +[ -d "$BASEPATH/crosscompil/xuk/tam3517" ] || tar -xf "$BASEPATH/dl/xuk-src.tar.bz2" -C "$BASEPATH/crosscompil/xuk/" + +# Cross-compilation +( + # Some common env variable for cross compiling everything + ARCH=arm + CROSS_COMPILE=arm-linux-gnueabi- + export ARCH CROSS_COMPILE + + # u-bot building (mainly for mkimage bin, used for uImage generation) + if [ ! -x "$BASEPATH/crosscompil/xuk/tam3517/u-boot/tools/mkimage" ] + then cd "$BASEPATH/crosscompil/xuk/tam3517/u-boot" + make tam3517_twister_config + make + fi + # Check u-boot building result files + [ -x "$BASEPATH/crosscompil/xuk/tam3517/u-boot/tools/mkimage" ] + + # Kernel building + extra_path="$BASEPATH/crosscompil/xuk/tam3517/u-boot/tools:$PATH" + cd "$BASEPATH/crosscompil/xuk/tam3517/kernel" + [ -f ".config" ] || make tam3517_twister_defconfig + [ -f "./arch/arm/boot/uImage" ] || make PATH="$extra_path" uImage modules + + # Compilation check for kernel + [ -f "$BASEPATH/crosscompil/xuk/tam3517/kernel/arch/arm/boot/uImage" ] +) + +# Preparing the generated SD image +mkdir_once "$BASEPATH/system/technexion/mount-loop/p2" +mkdir_once "$BASEPATH/system/from-narcissius/mount-loop/p1" +mkdir_once "$BASEPATH/system/from-narcissius/mount-loop/p2" + +# Reuse of some part of the demo SD image from Technexion (boot partition with x-loader installed + technexion_tools folder) +[ -f "$BASEPATH/system/technexion/tam3517-sd-angstrom.img" ] || bzip2 -d -c "$BASEPATH/dl/tam3517-sd-angstrom.img.bz2" > "$BASEPATH/system/technexion/tam3517-sd-angstrom.img" + +tech_p1_offset=$(fdisk -ul "$BASEPATH/system/technexion/tam3517-sd-angstrom.img" 2>/dev/null | sed -n 's/.*img1[^0-9]*\([0-9]\+\).*/\1/p') +tech_p2_offset=$(fdisk -ul "$BASEPATH/system/technexion/tam3517-sd-angstrom.img" 2>/dev/null | sed -n 's/.*img2[^0-9]*\([0-9]\+\).*/\1/p') + +if [ ! -f "$BASEPATH/system/from-narcissius/tam3517-sd.img" ]; then + # Boot partition sector-to-sector copy (includes a functionnal x-loader) + dd if="$BASEPATH/system/technexion/tam3517-sd-angstrom.img" of="$BASEPATH/system/from-narcissius/tam3517-sd.img" count=$tech_p2_offset + + # MBR alteration for keeping only the first partition (boot partition) + dd if=/dev/zero of="$BASEPATH/system/from-narcissius/tam3517-sd.img" bs=1 seek=464 count=32 conv=notrunc + + # Creating room space for the second partition (rootfs) + dd if=/dev/zero of="$BASEPATH/system/from-narcissius/tam3517-sd.img" seek=$tech_p2_offset count=$((SD_SECTOR_COUNT-tech_p2_offset)) + + # Creating the second partition (rootfs) + echo -e "n\np\n2\n\n\np\nw\n" | fdisk -C $((SD_SECTOR_COUNT/255/63)) -H 255 -S 63 -b 512 "$BASEPATH/system/from-narcissius/tam3517-sd.img" + + # Formatting the newly created partition + nar_p2_offset=$(fdisk -ul "$BASEPATH/system/from-narcissius/tam3517-sd.img" 2>/dev/null | sed -n 's/.*img2[^0-9]*\([0-9]\+\).*/\1/p') + + losetup -o $((nar_p2_offset*512)) -f "$BASEPATH/system/from-narcissius/tam3517-sd.img" + nar_p2_loop_dev=$(losetup -j "$BASEPATH/system/from-narcissius/tam3517-sd.img" | cut -d ':' -f 1) + mkfs.ext3 $nar_p2_loop_dev + losetup -d $nar_p2_loop_dev +fi + +# Some offset computation and mount loop to work with demo and generated sd image +nar_p1_offset=$(fdisk -ul "$BASEPATH/system/from-narcissius/tam3517-sd.img" 2>/dev/null | sed -n 's/.*img1[^0-9]*\([0-9]\+\).*/\1/p') +nar_p2_offset=$(fdisk -ul "$BASEPATH/system/from-narcissius/tam3517-sd.img" 2>/dev/null | sed -n 's/.*img2[^0-9]*\([0-9]\+\).*/\1/p') + +umount "$BASEPATH/system/technexion/mount-loop/p2" 2>/dev/null || true +mount -o loop,ro,offset=$((tech_p2_offset*512)) "$BASEPATH/system/technexion/tam3517-sd-angstrom.img" "$BASEPATH/system/technexion/mount-loop/p2" + +umount "$BASEPATH/system/from-narcissius/mount-loop/p2" 2>/dev/null || true +mount -o loop,rw,offset=$((nar_p2_offset*512)) "$BASEPATH/system/from-narcissius/tam3517-sd.img" "$BASEPATH/system/from-narcissius/mount-loop/p2" + +# rootfs construction +if [ ! -d "$BASEPATH/system/from-narcissius/mount-loop/p2/var" ]; then + # Use narcissus generated rootfs as a base + tar -xvf "$BASEPATH/dl/tam3517-rootfs-image-am3517-evm.tar.gz" -C "$BASEPATH/system/from-narcissius/mount-loop/p2/" + + # Add the technexion_tools folder from the demo image for flash-to-NAND stuff (without Android) + rsync -ai --exclude 'technexion_tools/binary/android' --exclude 'technexion_tools/binary/angstrom/angstrom.tar.bz2' --exclude 'technexion_tools/binary/angstrom/modules.tar.bz2' "$BASEPATH/system/technexion/mount-loop/p2/technexion_tools" "$BASEPATH/system/from-narcissius/mount-loop/p2/" + + # Apply Technexion extra work above Angstrom (mainly for tuning hardware details) + tar -xvf "$BASEPATH/system/technexion/mount-loop/p2/technexion_tools/binary/angstrom/extra.tar.bz2" -C "$BASEPATH/system/from-narcissius/mount-loop/p2/" + + # Replace their demo kernel for flash-to-nand + cp -v "$BASEPATH/crosscompil/xuk/tam3517/kernel/arch/arm/boot/uImage" "$BASEPATH/system/from-narcissius/mount-loop/p2/technexion_tools/binary/angstrom/uImage" + + # Install our freshly built kernel modules + ( + cd "$BASEPATH/crosscompil/xuk/tam3517/kernel" + make INSTALL_MOD_PATH="$BASEPATH/system/from-narcissius/mount-loop/p2/" modules_install + ) + + # Build angstrom.tar.bz2 for flash-to-NAND + tar -cj --exclude './technexion_tools' -f "$BASEPATH/system/from-narcissius/mount-loop/p2/technexion_tools/binary/angstrom/angstrom.tar.bz2" -C "$BASEPATH/system/from-narcissius/mount-loop/p2" . + + # TODO : modules.tar.bz2 ? +fi + +umount "$BASEPATH/system/technexion/mount-loop/p2" 2>/dev/null || true +umount "$BASEPATH/system/from-narcissius/mount-loop/p2" 2>/dev/null || true + +# Boot partition customization +umount "$BASEPATH/system/from-narcissius/mount-loop/p1" 2>/dev/null || true +mount -o loop,rw,offset=$((nar_p1_offset*512)) "$BASEPATH/system/from-narcissius/tam3517-sd.img" "$BASEPATH/system/from-narcissius/mount-loop/p1" +# Replace their demo kernel for SD card boot +cp -v "$BASEPATH/crosscompil/xuk/tam3517/kernel/arch/arm/boot/uImage" "$BASEPATH/system/from-narcissius/mount-loop/p1/boot/0/" +umount "$BASEPATH/system/from-narcissius/mount-loop/p1" 2>/dev/null || true + +echo "Finished !!! If you can read this message, you have probably a correctly-generated SD card image at '$BASEPATH/system/from-narcissius/tam3517-sd.img'" + |