207 lines
6.5 KiB
Diff
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
|
|
|