grubby/Add-uboot-support-for-ARM-7...

207 lines
6.5 KiB
Diff

From 6e6cb85fd77b7d026a30cd099a2392e2e3c5f5a1 Mon Sep 17 00:00:00 2001
From: David Marlin <dmarlin@redhat.com>
Date: Thu, 9 Jun 2011 14:13:36 -0700
Subject: [PATCH] Add uboot support for ARM (#712199)
---
new-kernel-pkg | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-
uboot | 29 ++++++++++++++++
2 files changed, 131 insertions(+), 1 deletions(-)
create mode 100644 uboot
diff --git a/new-kernel-pkg b/new-kernel-pkg
index e1cdaff..9154f40 100755
--- a/new-kernel-pkg
+++ b/new-kernel-pkg
@@ -37,9 +37,11 @@ else
fi
[ -f /etc/sysconfig/kernel ] && . /etc/sysconfig/kernel
+[ -f /etc/sysconfig/uboot ] && . /etc/sysconfig/uboot
cfgGrub=""
cfgLilo=""
+cfguBoot=""
runLilo=""
grubConfig=""
@@ -70,6 +72,18 @@ elif [ $ARCH = 's390' -o $ARCH = 's390x' ]; then
lilo=/sbin/zipl
runLilo="yes"
isx86=""
+elif [ $ARCH = 'armv7l' ]; then
+ liloConfig=""
+ bootPrefix=/boot
+ ubootDir=${UBOOT_DIR:-"/boot/uboot"}
+ ubootScript=$ubootDir/${UBOOT_SCR:-"boot.scr"}
+ ubootKList=${UBOOT_KLIST:-"klist.txt"}
+ ubootDevice=/dev/${UBOOT_DEVICE:-"mmcblk0p1"}
+ ubootDefaultImage=${UBOOT_UIMAGE:-"uImage"}
+ ubootDefaultInitrd=${UBOOT_UINITRD:-"uInitrd"}
+ mounted=""
+ liloFlag=""
+ isx86=""
else
# this leaves i?86 and x86_64
liloConfig=/etc/lilo.conf
@@ -194,7 +208,6 @@ install() {
else
[ -n "$verbose" ] && echo "$liloConfig does not exist, not running grubby"
fi
-
}
rpmposttrans()
@@ -250,6 +263,52 @@ remove() {
else
[ -n "$verbose" ] && echo "$liloConfig does not exist, not running grubby"
fi
+
+ if [ -n "$cfguBoot" ]; then
+ [ -n "$verbose" ] && echo "removing $version from $ubootDir..."
+
+ if [ -f $ubootDir/$ubootKList ]; then
+ tmpKList=`mktemp $ubootDir/$ubootKList.XXXX`
+ curversion=`tail -n1 $ubootDir/$ubootKList`
+ sed "/$version/d" $ubootDir/$ubootKList > $tmpKList
+ newversion=`tail -n1 $tmpKList`
+ if [ -f $ubootDir/uImage-$newversion -a -f $ubootDir/uInitrd-$newversion ]; then
+ if [ "$curversion" != "$newversion" ]; then
+ cp -fp $ubootDir/uImage-$newversion $ubootDir/${ubootDefaultImage}
+ if [ $? -ne 0 ]; then
+ [ -n "$verbose" ] && echo "copy uImage-$newversion error, default kernel not replaced!" && exit
+ fi
+ cp -fp $ubootDir/uInitrd-$newversion $ubootDir/${ubootDefaultInitrd}
+ if [ $? -ne 0 ]; then
+ [ -n "$verbose" ] && echo "copy uInitrd-$newversion error, default Initrd not replaced!" && exit
+ fi
+ fi
+
+ [ -n "$verbose" ] && echo "removing uImage-$version"
+ if [ -f $ubootDir/uImage-$version ]; then
+ rm -f $ubootDir/uImage-$version
+ else
+ [ -n "$verbose" ] && echo "uImage-$version did not exist!"
+ fi
+
+ [ -n "$verbose" ] && echo "removing uInitrd-$version"
+ if [ -f $ubootDir/uInitrd-$version ]; then
+ rm -f $ubootDir/uInitrd-$version
+ else
+ [ -n "$verbose" ] && echo "uInitrd-$version did not exist!"
+ fi
+
+ mv $tmpKList $ubootDir/$ubootKList
+ else
+ [ -n "$verbose" ] && echo "uImage $newversion does not exist!"
+ [ -f $tmpKList ] && rm -f $tmpKList
+ fi
+ else
+ [ -n "$verbose" ] && echo "No previous kernel version. uBoot images not removed!"
+ fi
+ else
+ [ -n "$verbose" ] && echo "$ubootScript does not exist, not modifying $ubootDir"
+ fi
}
update() {
@@ -300,6 +359,34 @@ update() {
else
[ -n "$verbose" ] && echo "$liloConfig does not exist, not running grubby"
fi
+
+ if [ -n "$cfguBoot" ]; then
+ [ -n "$verbose" ] && echo "adding $version to $ubootDir..."
+
+ [ -n "$verbose" ] && echo "creating uImage-$version"
+ mkimage -A arm -O linux -T kernel -C none -a 0x80008000 -e 0x80008000 \
+ -n $version -d $bootPrefix/$kernelName-$version $ubootDir/uImage-$version
+
+ [ -n "$verbose" ] && echo "creating uInitrd-$version"
+ mkimage -A arm -O linux -T ramdisk -C none -a 0 -e 0 \
+ -n initramfs -d $initrdfile $ubootDir/uInitrd-$version
+
+ if [ -f $ubootDir/uImage-$version -a -f $ubootDir/uInitrd-$version ]; then
+ cp -fp $ubootDir/uImage-$version $ubootDir/${ubootDefaultImage}
+ if [ $? -ne 0 ]; then
+ [ -n "$verbose" ] && echo "copy uImage-$version error, kernel not installed!" && exit
+ fi
+ cp -fp $ubootDir/uInitrd-$version $ubootDir/${ubootDefaultInitrd}
+ if [ $? -ne 0 ]; then
+ [ -n "$verbose" ] && echo "copy uInitrd-$version error, kernel not installed!" && exit
+ fi
+ echo $version >> $ubootDir/$ubootKList
+ else
+ [ -n "$verbose" ] && echo "cannot make $version the default"
+ fi
+ else
+ [ -n "$verbose" ] && echo "$ubootScript does not exist, not setting up $ubootDir"
+ fi
}
mkinitrd() {
@@ -534,6 +621,17 @@ fi
[ -n "$grubConfig" ] && [ -f "$grubConfig" ] && cfgGrub=1;
[ -n "$liloConfig" ] && [ -f "$liloConfig" ] && cfgLilo=1;
+# if we have a uBoot directory, check if it is mounted.
+# if not, mount it. Then check if a boot script exists.
+if [ -n "$ubootDir" ]; then
+ mountEntry=`mount | grep $ubootDir`
+ if [ -z "$mountEntry" ]; then
+ mount $ubootDevice $ubootDir
+ mounted=1
+ fi
+ [ -f "$ubootScript" ] && cfguBoot=1;
+fi
+
# if we have a lilo config on an x86 box, see if the default boot loader
# is lilo to determine if it should be run
if [ -n "$cfgLilo" -a -n "$isx86" ]; then
@@ -550,4 +648,7 @@ elif [ "$mode" == "--rpmposttrans" ]; then
rpmposttrans
fi
+# if we mounted the uBoot directory, unmount it.
+[ -n "$mounted" ] && umount $ubootDir
+
exit 0
diff --git a/uboot b/uboot
new file mode 100644
index 0000000..46c0801
--- /dev/null
+++ b/uboot
@@ -0,0 +1,29 @@
+# Settings for uBoot setup in /sbin/new-kernel-pkg
+#
+# Default values are provided below (as comments)
+#
+# WARNING: These values affect where grubby installs and removes
+# uBoot kernel images. Changing these _after_ kernels have
+# been installed may cause removing a kernel image to fail.
+
+# directory where uBoot images and scripts are found
+#UBOOT_DIR=/boot/uboot
+
+# name of the text file containing the list of installed kernel versions
+# NOTE: The versions are in order of installation. The last entry should
+# always be the default boot kernel version.
+#UBOOT_KLIST=klist.txt
+
+# device partition where uBoot images reside; mounted on $UBOOT_DIR
+#UBOOT_DEVICE=mmcblk0p1
+
+
+# NOTE: Both of the following files are automatically overwritte
+# when a kernel package is installed or removed.
+
+# default kernel uImage file name
+#UBOOT_UIMAGE=uImage
+
+# default initrd uInitrd file name
+#UBOOT_UINITRD=uInitrd
+
--
1.7.4.4