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

Bug#667681: Updated patches for Dreamplug / Marvell Kirkwood FDT



On Thu, 2012-06-21 at 09:45 +0200, Loïc Minier wrote:
> On Wed, Jun 20, 2012, Ian Campbell wrote:
> > Are you suggesting that I should move the non-flash-kernel related
> > content of /dev/sdb1 (e.g. vmlinuz, initramfs etc) to /dev/sdb2:/boot
> > and remove sdb1 from the fstab, leaving it unmounted the majority of the
> > time?
> 
> Exactly; also it should also keep working if you leave your system
> untouched (if you keep /dev/sdb1 in fstab and if f-k tries to mount it
> in /tmp to update boot files, it should just get bind-mounted
> automatically).

Thanks, I just left my partitions as they were in the end and switched
to Boot-Device and everything was fine.

I've also added support for appending a DTB to the kernel and a test
case for detection via /proc/device-tree/model.

> > I'm happy to do that, just want to make sure I understand before I start
> > moving stuff about.
> 
> Yup; it's also best if you have some recovery mechanism -- like being
> able to pull the SD card and changing it from another device -- and some
> debug mechanism -- like serial console over mini-USB.

I've got things setup so I can boot from the network (via u-boot) so I'm
pretty good to mess around.

> > It is possible that other DP users will want /dev/sda* (the internal
> > sdcard) instead of /dev/sdb* (the external sdcard). Can I express sda vs
> > sdb in the flash-kernel db somehow?
> 
> Ah, yes; that's indeed a problem.  That means we need some config file
> to override the boot device (ideally an installer would create this file
> for you).  This is currently missing in flash-kernel, but here I think
> it should allow overriding parts of the machine db entry.

That sounds very sensible, I didn't look at that here though. Seems like
it shouldn't be too hard to add to get_machine_field().

3 patches attached. Also pushed to gitorious

Ian.

>From 2f9d5d7e2eee338cc8b65d31ff38b0579f7da3a7 Mon Sep 17 00:00:00 2001
From: Ian Campbell <ijc@hellion.org.uk>
Date: Sat, 31 Mar 2012 07:00:54 +0000
Subject: [PATCH 1/3] Use /proc/device-tree/model in preference to
 /proc/cpuinfo:Hardware

If a system uses Device Tree then this node will be present and will identify
the actual hardware platform whereas /proc/cpuinfo:Hardware will only identify
the general class of platform.

Add support for "Globalscale Technologies Dreamplug" using this scheme.
---
 db/all.db        |   10 ++++++++++
 debian/changelog |    9 +++++++++
 functions        |   13 ++++++++++++-
 test_functions   |   39 ++++++++++++++++++++++++++++++++++++++-
 4 files changed, 69 insertions(+), 2 deletions(-)

diff --git a/db/all.db b/db/all.db
index b7f7caa..31246ad 100644
--- a/db/all.db
+++ b/db/all.db
@@ -199,6 +199,16 @@ Boot-Initrd-Path: /boot/uInitrd
 Required-Packages: u-boot-tools
 Bootloader-sets-root: no
 
+Machine: Globalscale Technologies Dreamplug
+Kernel-Flavors: kirkwood
+U-Boot-Kernel-Address: 0x00008000
+U-Boot-Initrd-Address: 0x0
+Boot-Device: /dev/sdb1
+Boot-Kernel-Path: uImage
+Boot-Initrd-Path: uInitrd
+Required-Packages: u-boot-tools
+Bootloader-sets-root: no
+
 Machine: Marvell GuruPlug Reference Board
 Kernel-Flavors: kirkwood
 U-Boot-Kernel-Address: 0x00008000
diff --git a/debian/changelog b/debian/changelog
index 01bed30..3b9c842 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,12 @@
+flash-kernel (3.1) unstable; urgency=low
+
+  [ Ian Campbell ]
+  * Add support for FDT based devices using /proc/device-tree/model for
+    detection.
+  * Add support for DreamPlug.
+
+ -- Ian Campbell <ijc@hellion.org.uk>  Sat, 23 Jun 2012 16:59:12 +0000
+
 flash-kernel (3.0) unstable; urgency=low
 
   [ Aurelien Jarno ]
diff --git a/functions b/functions
index bbfa772..82bb09e 100644
--- a/functions
+++ b/functions
@@ -21,6 +21,7 @@
 BOOTSCRIPTS_DIR="${FK_CHECKOUT:-$FK_DIR}/bootscript"
 MACHINE_DB="$(cat "${FK_CHECKOUT:-$FK_DIR}/db/"*.db)"
 PROC_CPUINFO="${FK_PROC_CPUINFO:-/proc/cpuinfo}"
+PROC_DTMODEL="${FK_PROC_DRMODEL:-/proc/device-tree/model}"
 PROC_MTD="/proc/mtd"
 
 
@@ -94,6 +95,16 @@ check_supported() {
 get_cpuinfo_hardware() {
 	grep "^Hardware" "$PROC_CPUINFO" | sed 's/Hardware\s*:\s*//'
 }
+get_dt_model() {
+	cat "$PROC_DTMODEL"
+}
+get_machine() {
+	if [ -f "$PROC_DTMODEL" ] ; then
+		get_dt_model
+	else
+		get_cpuinfo_hardware
+	fi
+}
 
 get_kfile_suffix() {
 	local kfile="$1"
@@ -302,7 +313,7 @@ elif [ -n "$FK_MACHINE" ]; then
 	machine="$FK_MACHINE"
 	[ "x$machine" = "xnone" ] && exit
 else
-	machine="$(get_cpuinfo_hardware)"
+	machine="$(get_machine)"
 fi
 
 if [ "x$1" = "x--supported" ]; then
diff --git a/test_functions b/test_functions
index 604a296..6f3fbe8 100755
--- a/test_functions
+++ b/test_functions
@@ -155,7 +155,8 @@ EOF
     (
         . "$functions"
         PROC_CPUINFO="$mock_proc_cpuinfo"
-        machine=$(get_cpuinfo_hardware)
+        PROC_DTMODEL="/this/must/not/exist"
+        machine=$(get_machine)
         if [ "$machine" != "Marvell SheevaPlug Reference Board" ]; then
             echo "Expected machine to be Marvell SheevaPlug Reference Board but got $machine" >&2
             exit 1
@@ -164,6 +165,42 @@ EOF
 }
 add_test test_get_cpuinfo_hardware
 
+test_get_dt_hardware() {
+    get_tempfile
+    mock_proc_cpuinfo="$last_tempfile"
+    cat >"$mock_proc_cpuinfo" <<EOF
+Processor       : Feroceon 88FR131 rev 1 (v5l)
+BogoMIPS        : 1191.11
+Features        : swp half thumb fastmult edsp 
+CPU implementer : 0x56
+CPU architecture: 5TE
+CPU variant     : 0x2
+CPU part        : 0x131
+CPU revision    : 1
+
+Hardware        : Marvell Kirkwood (Flattened Device Tree)
+Revision        : 0000
+Serial          : 0000000000000000
+EOF
+
+    get_tempfile
+    mock_dt_model="$last_tempfile"
+    echo -n "Globalscale Technologies Dreamplug" >"$mock_dt_model"
+
+    (
+        . "$functions"
+        PROC_CPUINFO="$mock_proc_cpuinfo"
+        PROC_DTMODEL="$mock_dt_model"
+        machine=$(get_machine)
+        if [ "$machine" != "Globalscale Technologies Dreamplug" ]; then
+            echo "Expected machine to be Globalscale Technologies Dreamplug but got $machine" >&2
+            exit 1
+        fi
+    )
+
+}
+add_test test_get_dt_hardware
+
 test_get_kfile_suffix() {
     (
         . "$functions"
-- 
1.7.9.1

>From 7e68068116e15770119503e9a8a16326dceff4f3 Mon Sep 17 00:00:00 2001
From: Ian Campbell <ijc@hellion.org.uk>
Date: Sat, 21 Apr 2012 20:06:10 +0100
Subject: [PATCH 2/3] Add support for installing a DTB binary into /boot

Use this new functionality for the dreamplug
---
 README           |    6 ++++++
 db/all.db        |    2 ++
 debian/changelog |    1 +
 functions        |   12 ++++++++++++
 4 files changed, 21 insertions(+), 0 deletions(-)

diff --git a/README b/README
index 1d2c600..f8c2c1e 100644
--- a/README
+++ b/README
@@ -89,6 +89,8 @@ The supported fields are:
 * Machine-Id: (optional) linux mach-type to set before starting vmlinuz;
   will be set by a small piece of ARM code prepended to the kernel image
 
+* DTB-Id: (optional) specifies the name of the DTB file for this device
+
 * U-Boot-Kernel-Address, U-Boot-Initrd-Address: (optional) address where
   to load in (physical) RAM the kernel and initrd, respectively; this
   also indicates that U-Boot images should be generated with mkimage
@@ -108,6 +110,10 @@ The supported fields are:
   Boot-Initrd-Path but for an U-Boot boot script; see also
   U-Boot-Script-Name and Boot-Device
 
+* Boot-DTB-Path: (optional) like Boot-Kernel-Path and Boot-Initrd-Path
+  but for a DTB file. The DTB file named by DTB-Id will be copied
+  here; see also DTB-Id
+
 * Required-packages: (optional) list of packages which must be added
   during installer phase for flash-kernel to work properly; failure to
   add these packages aborts the installation
diff --git a/db/all.db b/db/all.db
index 31246ad..dbf3bf6 100644
--- a/db/all.db
+++ b/db/all.db
@@ -201,11 +201,13 @@ Bootloader-sets-root: no
 
 Machine: Globalscale Technologies Dreamplug
 Kernel-Flavors: kirkwood
+DTB-Id: kirkwood-dreamplug.dtb
 U-Boot-Kernel-Address: 0x00008000
 U-Boot-Initrd-Address: 0x0
 Boot-Device: /dev/sdb1
 Boot-Kernel-Path: uImage
 Boot-Initrd-Path: uInitrd
+Boot-DTB-Path: dtb
 Required-Packages: u-boot-tools
 Bootloader-sets-root: no
 
diff --git a/debian/changelog b/debian/changelog
index 3b9c842..4448c13 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -3,6 +3,7 @@ flash-kernel (3.1) unstable; urgency=low
   [ Ian Campbell ]
   * Add support for FDT based devices using /proc/device-tree/model for
     detection.
+  * Add support for installing a DTB file into the boot partition.
   * Add support for DreamPlug.
 
  -- Ian Campbell <ijc@hellion.org.uk>  Sat, 23 Jun 2012 16:59:12 +0000
diff --git a/functions b/functions
index 82bb09e..586140f 100644
--- a/functions
+++ b/functions
@@ -382,6 +382,7 @@ machine_id="$(get_machine_field "$machine" "Machine-Id")" || :
 method="$(get_machine_field "$machine" "Method")" || method="generic"
 mtd_kernel="$(get_machine_field "$machine" "Mtd-Kernel")" || :
 mtd_initrd="$(get_machine_field "$machine" "Mtd-Initrd")" || :
+dtb_name="$(get_machine_field "$machine" "DTB-Id")" || :
 ukaddr="$(get_machine_field "$machine" "U-Boot-Kernel-Address")" || :
 uiaddr="$(get_machine_field "$machine" "U-Boot-Initrd-Address")" || :
 umaddr="$(get_machine_field "$machine" "U-Boot-Multi-Address")" || :
@@ -391,6 +392,7 @@ boot_device="$(get_machine_field "$machine" "Boot-Device")" || :
 boot_kernel_path="$(get_machine_field "$machine" "Boot-Kernel-Path")" || :
 boot_initrd_path="$(get_machine_field "$machine" "Boot-Initrd-Path")" || :
 boot_script_path="$(get_machine_field "$machine" "Boot-Script-Path")" || :
+boot_dtb_path="$(get_machine_field "$machine" "Boot-DTB-Path")" || :
 boot_multi_path="$(get_machine_field "$machine" "Boot-Multi-Path")" || :
 android_boot_device="$(get_machine_field "$machine" "Android-Boot-Device")" || :
 
@@ -537,6 +539,16 @@ case "$method" in
 			boot_script="$tmpdir/boot.scr"
 			backup_and_install "$boot_script" "$boot_script_path"
 		fi
+		if [ -n "$boot_dtb_path" ] ; then
+			boot_dtb_path="$boot_mnt_dir/$boot_dtb_path"
+			boot_dtb="/usr/lib/linux-image-$kvers/$dtb_name"
+			if [ ! -f "$boot_dtb" ] ; then
+				error "Couldn't find $boot_dtb"
+			fi
+			dtb="$tmpdir/dtb"
+			cp "$boot_dtb" "$dtb"
+			backup_and_install "$dtb" "$boot_dtb_path"
+		fi
 	;;
 	"symlink")
 		rm -f /boot/initrd /boot/zImage
-- 
1.7.9.1

>From e7fc8e9ef6de21428acba96b8cec97744a46da6b Mon Sep 17 00:00:00 2001
From: Ian Campbell <ijc@hellion.org.uk>
Date: Sat, 23 Jun 2012 12:07:03 +0000
Subject: [PATCH 3/3] Support for appended DTB

Use it on DreamPlug
---
 README           |    3 +++
 db/all.db        |    1 +
 debian/changelog |    1 +
 functions        |   20 ++++++++++++++++++++
 4 files changed, 25 insertions(+), 0 deletions(-)

diff --git a/README b/README
index f8c2c1e..81b65d2 100644
--- a/README
+++ b/README
@@ -91,6 +91,9 @@ The supported fields are:
 
 * DTB-Id: (optional) specifies the name of the DTB file for this device
 
+* DTB-Append: (optional) when yes the DTB specified by DTB-Id will be appended
+  to the kernel image.
+
 * U-Boot-Kernel-Address, U-Boot-Initrd-Address: (optional) address where
   to load in (physical) RAM the kernel and initrd, respectively; this
   also indicates that U-Boot images should be generated with mkimage
diff --git a/db/all.db b/db/all.db
index dbf3bf6..f1917fe 100644
--- a/db/all.db
+++ b/db/all.db
@@ -202,6 +202,7 @@ Bootloader-sets-root: no
 Machine: Globalscale Technologies Dreamplug
 Kernel-Flavors: kirkwood
 DTB-Id: kirkwood-dreamplug.dtb
+DTB-Append: yes
 U-Boot-Kernel-Address: 0x00008000
 U-Boot-Initrd-Address: 0x0
 Boot-Device: /dev/sdb1
diff --git a/debian/changelog b/debian/changelog
index 4448c13..f4621c1 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -4,6 +4,7 @@ flash-kernel (3.1) unstable; urgency=low
   * Add support for FDT based devices using /proc/device-tree/model for
     detection.
   * Add support for installing a DTB file into the boot partition.
+  * Add support for appending a DTB to the kernel.
   * Add support for DreamPlug.
 
  -- Ian Campbell <ijc@hellion.org.uk>  Sat, 23 Jun 2012 16:59:12 +0000
diff --git a/functions b/functions
index 586140f..df00a86 100644
--- a/functions
+++ b/functions
@@ -186,6 +186,17 @@ gen_kernel() {
 	} >"$output"
 }
 
+append_dtb() {
+	local kernel="$1"
+	local dtb="$2"
+	local output="$3"
+
+	{
+		cat "$kernel"
+		cat "$dtb"
+	} >"$output"
+}
+
 flash_kernel() {
 	local input_file="$1"
 	local output_mtd="$2"
@@ -383,6 +394,7 @@ method="$(get_machine_field "$machine" "Method")" || method="generic"
 mtd_kernel="$(get_machine_field "$machine" "Mtd-Kernel")" || :
 mtd_initrd="$(get_machine_field "$machine" "Mtd-Initrd")" || :
 dtb_name="$(get_machine_field "$machine" "DTB-Id")" || :
+dtb_append="$(get_machine_field "$machine" "DTB-Append")" || :
 ukaddr="$(get_machine_field "$machine" "U-Boot-Kernel-Address")" || :
 uiaddr="$(get_machine_field "$machine" "U-Boot-Initrd-Address")" || :
 umaddr="$(get_machine_field "$machine" "U-Boot-Multi-Address")" || :
@@ -472,6 +484,14 @@ case "$method" in
 			gen_kernel "$kernel" "$tmpdir/kernel" "$machine_id"
 			kernel="$tmpdir/kernel"
 		fi
+		if [ x"$dtb_append" = "xyes" ] ; then
+			dtb="/usr/lib/linux-image-$kvers/$dtb_name"
+			if [ ! -f "$dtb" ] ; then
+				error "Couldn't find $dtb"
+			fi
+			append_dtb "$kernel" "$dtb" "$tmpdir/kernel"
+			kernel="$tmpdir/kernel"
+		fi
 		if [ -n "$ukaddr" ]; then
 			mkimage_kernel "$ukaddr" "$desc" "$kernel" \
 				"$tmpdir/uImage"
-- 
1.7.9.1


Reply to: