[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[RFC] flash-kernel hook to prepend to boot script

 A couple of projects we're working on at work require some
tweaking of u-boot settings. These requirements can be summed up by:

 A) Maintain the console= setting, and ideally all userargs (the
    cmdline args after "--") after install. This seems like standard
    Debian functionality that exists on other architectures, but is
    currently missing on flash-kernel platforms. 

 B) The ability to let a package change settings in the u-boot
    environment. We have a case where a u-boot envvar setting
    needs to differ depending on whether or not certain software
    will be used (their u-boot has special code that reconfigures
    the hardware depending on the setting of this variable).

The systems we're dealing with use a boot.scr script generated by
flash-kernel. So, we figure we could solve both by letting packages
drop in u-boot code snippets that will be prepended to the
boot.scr. To do this, we propose a scheme similar to initramfs-tools
where packages can drop snippets in a path under /usr/share (solving
B), and users can add their own new setings or override the /usr/share
versions by dropping snippets under /etc. With this scheme in place,
flash-kernel-installer could be extended to drop in a file in /etc
that does a 'setenv bootargs $userargs' to solve (A). Comments?

diff -urpN flash-kernel-3.17.orig/debian/dirs flash-kernel-3.17/debian/dirs
--- flash-kernel-3.17.orig/debian/dirs	2012-03-31 00:48:17.000000000 -0600
+++ flash-kernel-3.17/debian/dirs	2014-05-21 14:15:37.775191416 -0600
@@ -1 +1,3 @@
diff -urpN flash-kernel-3.17.orig/debian/flash-kernel-installer.postinst flash-kernel-3.17/debian/flash-kernel-installer.postinst
--- flash-kernel-3.17.orig/debian/flash-kernel-installer.postinst	2014-02-28 20:20:00.000000000 -0700
+++ flash-kernel-3.17/debian/flash-kernel-installer.postinst	2014-05-21 14:55:40.397881137 -0600
@@ -100,6 +100,10 @@ fi
 mv /target/tmp/flash-kernel.$$ /target/usr/sbin/flash-kernel
+user_params="$(echo $(user-params))"
+echo "setenv bootargs '$user_params'" > \
+    /target/etc/flash-kernel/ubootenv.d/00bootargs
 # We need the udev /dev which has the MTD devices
 mount -o bind /dev /target/dev
 if ! in-target flash-kernel; then
diff -urpN flash-kernel-3.17.orig/functions flash-kernel-3.17/functions
--- flash-kernel-3.17.orig/functions	2014-04-11 09:50:32.000000000 -0600
+++ flash-kernel-3.17/functions	2014-05-21 14:17:19.616268524 -0600
@@ -215,6 +215,19 @@ gen_kernel() {
 	} >"$output"
+gen_ubootenv() {
+	ENVSTUBDIRS="/etc/flash-kernel/ubootenv.d /usr/share/flash-kernel/ubootenv.d"
+	ENVSTUBS="$(find $ENVSTUBDIRS -type f -regex '.*/[0-9a-zA-Z_-]+' -printf '%f\n' | LC_ALL=C sort -u)"
+	for file in $ENVSTUBS; do
+		for dir in $ENVSTUBDIRS; do
+			if [ -f $dir/$file ]; then
+				cat $dir/$file
+				break
+			fi
+		done
+	done
 append_dtb() {
 	local kernel="$1"
 	local dtb="$2"
@@ -623,7 +636,9 @@ case "$method" in
 		if [ -n "$boot_script_path" ]; then
-			boot_script="$BOOTSCRIPTS_DIR/$usname"
+			boot_script="$tmpdir/bootscript"
+			gen_ubootenv > "$boot_script"
+			cat "$BOOTSCRIPTS_DIR/$usname" >> "$boot_script"
 			mkimage_script "$usaddr" "boot script" "$boot_script" \

Reply to: