From 6051971c313ca3558c05631dc7f1c2c4b23a0114 Mon Sep 17 00:00:00 2001 From: Waldemar Brodkorb Date: Sat, 30 Jan 2010 22:19:01 +0100 Subject: implement installation on nand and fix nand bootup rb532 nand usage fixed. Rename cfinstall to adkinstall to abstract from backend device used. --- package/adkinstall/Makefile | 37 ++++++++++++++++ package/adkinstall/src/adkinstall | 61 ++++++++++++++++++++++++++ package/adkinstall/src/adkinstall.rb532 | 78 +++++++++++++++++++++++++++++++++ 3 files changed, 176 insertions(+) create mode 100644 package/adkinstall/Makefile create mode 100644 package/adkinstall/src/adkinstall create mode 100644 package/adkinstall/src/adkinstall.rb532 (limited to 'package/adkinstall') diff --git a/package/adkinstall/Makefile b/package/adkinstall/Makefile new file mode 100644 index 000000000..d250a1e70 --- /dev/null +++ b/package/adkinstall/Makefile @@ -0,0 +1,37 @@ +# This file is part of the OpenADK project. OpenADK is copyrighted +# material, please see the LICENCE file in the top-level directory. + +include ${TOPDIR}/rules.mk + +PKG_NAME:= adkinstall +PKG_VERSION:= 1.0 +PKG_RELEASE:= 3 +PKG_DESCR:= installer for compact flash or nand/mtd devices +PKG_SECTION:= base +PKG_DEPENDS:= parted sfdisk + +PKG_TARGET_DEPENDS:= alix wrap rb532 + +WRKDIST= ${WRKDIR}/${PKG_NAME}-${PKG_VERSION} +NO_DISTFILES:= 1 + +include ${TOPDIR}/mk/package.mk + +$(eval $(call PKG_template,ADKINSTALL,${PKG_NAME},${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION})) + +BUILD_STYLE:= manual +INSTALL_STYLE:= manual + +pre-configure: + mkdir -p ${WRKBUILD} + +do-install: + ${INSTALL_DIR} $(IDIR_ADKINSTALL)/sbin +ifeq ($(ADK_LINUX_MIPS_RB532),y) + ${INSTALL_BIN} ./src/adkinstall.rb532 \ + $(IDIR_ADKINSTALL)/sbin/adkinstall +else + ${INSTALL_BIN} ./src/adkinstall $(IDIR_ADKINSTALL)/sbin +endif + +include ${TOPDIR}/mk/pkg-bottom.mk diff --git a/package/adkinstall/src/adkinstall b/package/adkinstall/src/adkinstall new file mode 100644 index 000000000..7e9a0d1ad --- /dev/null +++ b/package/adkinstall/src/adkinstall @@ -0,0 +1,61 @@ +#!/bin/sh +# installs a rootfs tar archive from OpenADK onto a Compact Flash disk + +if [ -z $1 ];then + printf "Please give your root tar archive as parameter\n" + exit 1 +fi +# create empty partition table +parted -s /dev/sda mklabel msdos +sleep 2 +maxsize=$(env LC_ALL=C parted /dev/sda -s unit cyl print |awk '/^Disk/ { print $3 }'|sed -e 's/cyl//') +rootsize=$(($maxsize-2)) +parted -s /dev/sda unit cyl mkpartfs primary ext2 0 $rootsize +parted -s /dev/sda unit cyl mkpart primary fat32 $rootsize $maxsize +parted -s /dev/sda set 1 boot on +sfdisk --change-id /dev/sda 2 88 >/dev/null 2>&1 +if [ $? -eq 0 ];then + printf "Successfully created partition ${rootpart}\n" +else + printf "Partition creation failed, Exiting.\n" + exit 1 +fi +mount -t ext2 /dev/sda1 /mnt +printf "Extracting install archive\n" +tar -C /mnt -xzpf $1 +chmod 1777 /mnt/tmp +chmod 4755 /mnt/bin/busybox + +speed=$(awk -F \, '/console=ttyS0/ { print $2 }' /proc/cmdline|sed -e "s/ .*$//") + +printf "Install bootloader\n" +mkdir -p /mnt/boot/grub +mount -o bind /dev /mnt/dev +chroot /mnt mount -t proc /proc /proc +chroot /mnt mount -t sysfs /sys /sys +cat << EOF > /mnt/boot/grub/grub.cfg +set default=0 +set timeout=1 +serial --unit=0 --speed=$speed +terminal_output serial +terminal_input serial + +menuentry "GNU/Linux (OpenADK)" { + insmod ext2 + set root=(hd0,1) + linux /boot/vmlinuz-adk root=/dev/sda1 ro init=/init panic=10 +} +EOF +chroot /mnt grub-install /dev/sda >/dev/null 2>&1 +umount /mnt/proc +umount /mnt/sys +umount /mnt/dev + +printf "Creating device nodes\n" +mknod -m 666 /mnt/dev/null c 1 3 +mknod -m 622 /mnt/dev/console c 5 1 +mknod -m 666 /mnt/dev/tty c 5 0 + +umount /mnt +printf "Successfully installed.\n" +exit 0 diff --git a/package/adkinstall/src/adkinstall.rb532 b/package/adkinstall/src/adkinstall.rb532 new file mode 100644 index 000000000..ca2ffde0d --- /dev/null +++ b/package/adkinstall/src/adkinstall.rb532 @@ -0,0 +1,78 @@ +#!/bin/sh +# installs a rootfs tar archive from OpenADK onto +# a Compact Flash disk or NAND device +# special script for routerboard rb532 + +nandinstall=0 +cfinstall=0 + +if [ -z $1 ];then + printf "Please give your target device as first parameter [cf|nand]\n" + exit 1 +fi +if [ -z $2 ];then + printf "Please give your root tar archive as second parameter\n" + exit 1 +fi +if [ -z $3 ];then + printf "Please give your kernel as third parameter\n" + exit 1 +fi +case $1 in + nand) + nandinstall=1 + ;; + cf) + cfinstall=1 + ;; + *) + printf "Target not recognized\n" + exit 1 + ;; +esac + +if [ $cfinstall -eq 1 ];then + # create empty partition table + printf "Creating partition scheme\n" + parted -s /dev/sda mklabel msdos + sleep 2 + maxsize=$(env LC_ALL=C parted /dev/sda -s unit cyl print |awk '/^Disk/ { print $3 }'|sed -e 's/cyl//') + rootsize=$(($maxsize-2)) + parted -s /dev/sda unit cyl mkpart primary ext2 0 1 + parted -s /dev/sda unit cyl mkpartfs primary ext2 1 $rootsize + parted -s /dev/sda unit cyl mkpart primary fat32 $rootsize $maxsize + parted -s /dev/sda set 1 boot on + sfdisk --change-id /dev/sda 1 27 >/dev/null 2>&1 + sfdisk --change-id /dev/sda 3 88 >/dev/null 2>&1 + sleep 2 + sync + printf "Installing kernel\n" + dd if=$3 of=/dev/sda1 bs=2048 >/dev/null 2>&1 + sync + mount -t ext2 /dev/sda2 /mnt +fi + +if [ $nandinstall -eq 1 ];then + printf "Installing kernel\n" + mount -t yaffs2 /dev/mtdblock0 /mnt + cp $3 /mnt/kernel + sync + umount /mnt + mount -t yaffs2 /dev/mtdblock1 /mnt + rm -rf /mnt/* >/dev/null 2>&1 +fi + +printf "Extracting install archive\n" +tar -C /mnt -xzpf $2 + +chmod 1777 /mnt/tmp +chmod 4755 /mnt/bin/busybox + +printf "Creating device nodes\n" +mknod -m 666 /mnt/dev/null c 1 3 +mknod -m 622 /mnt/dev/console c 5 1 +mknod -m 666 /mnt/dev/tty c 5 0 + +umount /mnt +printf "Successfully installed.\n" +exit 0 -- cgit v1.2.3