Package: flash-kernel Version: 3.8 Severity: normal Tags: patch I am working on getting the Samsung ARM Chromebook supported by the Debian installer.
RFC on this patch, as the vboot on the chromebook does not support initrd I had to change some global stuff. It is also possible to chain boot a second more regular u-boot on this device, which might be the way to go, and would then only require the symlink method (and another partition). -- System Information: Debian Release: jessie/sid APT prefers unstable APT policy: (500, 'unstable'), (1, 'experimental') Architecture: armhf (armv7l) Kernel: Linux 3.4.0 (SMP w/2 CPU cores) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Versions of packages flash-kernel depends on: ii devio 1.2-1 ii initramfs-tools 0.113 ii linux-base 3.5 flash-kernel recommends no packages. Versions of packages flash-kernel suggests: ii u-boot-tools 2013.01.01-4 -- no debconf information
>From c6512836f056bed09212f04cdeddd6e31edfc20f Mon Sep 17 00:00:00 2001 From: Shawn Landden <shawnland...@gmail.com> Date: Fri, 12 Jul 2013 22:52:43 -0700 Subject: [PATCH] add Samsung ARM Chromebook support armmp is to support this (currently does not as it doesn't compile in enough modules - no initrd support without chain loading u-boot-nv) --- README | 1 + db/all.db | 10 ++++++++++ functions | 31 ++++++++++++++++++++++++++++--- test_db | 2 +- 4 files changed, 40 insertions(+), 4 deletions(-) diff --git a/README b/README index 920acb3..9bcf18a 100644 --- a/README +++ b/README @@ -46,6 +46,7 @@ The following systems are supported: - QNAP TS-409 - QNAP TS-410 and TS-410U Turbo NAS - QNAP TS-419P and TS-419U Turbo NAS + - Samsung ARM Chromebook - Seagate FreeAgent DockStar - SheevaPlug - SheevaPlug eSATA diff --git a/db/all.db b/db/all.db index d1ad4bc..db11a46 100644 --- a/db/all.db +++ b/db/all.db @@ -337,3 +337,13 @@ Method: android Android-Boot-Device: /dev/mmcblk0 Required-Packages: abootimg Bootloader-Sets-Root: no + +# /proc/cpuinfo contains Hardware : SAMSUNG EXYNOS5 (Flattened Device Tree) +Machine: Google Snow +Method: chromeos +Kernel-Flavors: armmp +# not with armmp, only chromeos-3.4 +#DTB-Id: exynos5250-spring.dts +#DTB-Append: yes +Part-Kernel: /dev/mmcblk0p6 +Required-Packages: vboot-kernel-utils diff --git a/functions b/functions index df00a86..193c2f3 100644 --- a/functions +++ b/functions @@ -316,6 +316,21 @@ android_flash() { echo "done." >&2 } +# XXX needs testsuite coverage +vboot_sign() { + printf "Signing kernel with kernel.flags\n" + vbutil_kernel --pack /boot/vmlinuz.signed-${kvers} --keyblock \ + /usr/share/vboot/devkeys/kernel.keyblock --version 1 \ + --signprivate /usr/share/vboot/devkeys/kernel_data_key.vbprivk \ + --config /boot/kernel.flags --vmlinuz /boot/vmlinuz-${kvers} \ + --arch arm +} + +chromeos_flash() { + printf "Writing vmlinuz.signed-${kvers} to ${part_kernel}\n" + dd if=/boot/vmlinuz.signed-${kvers}.signed of=${part_kernel} bs=4M +} + main() { if [ "x$1" = "x--machine" ]; then machine="$2" @@ -365,11 +380,13 @@ ifile="/boot/initrd.img-$kvers" desc="kernel $kvers" idesc="ramdisk $kvers" -if [ ! -e $kfile ] || [ ! -e $ifile ]; then - error "Can't find $kfile or $ifile" +if [ ! -e $kfile ]; then + error "Can't find $kfile" fi kfilesize=$(stat -c '%s' "$kfile") -ifilesize=$(stat -c '%s' "$ifile") +if [ -e $ifile ]; then + ifilesize=$(stat -c '%s' "$ifile") +fi if [ -L "$kfile" ]; then kfile=$(readlink -e "$kfile") @@ -393,6 +410,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")" || : +part_kernel="$(get_machine_field "$machine" "Part-Kernel")" || : 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")" || : @@ -591,6 +609,13 @@ case "$method" in pad=$(($imtdsize - $ifilesize)) flash_initrd "$ifile" "$imtd" $pad ;; + "chromeos") + if [ ! -b "$part_kernel" ] ; then + error "Couldn't find $part_kernel or is not block special" + fi + vboot_sign + chromeos_flash + ;; "slug") case "$(dpkg --print-architecture)" in arm|armel) diff --git a/test_db b/test_db index 587899e..0798953 100755 --- a/test_db +++ b/test_db @@ -22,7 +22,7 @@ MACHINE_DB="$(cat "${FK_CHECKOUT:-$FK_DIR}/db/"*.db)" test_no_unknown_fields() { - local expected='Android-Boot-Device Boot-Device Boot-DTB-Path Boot-Initrd-Path Boot-Kernel-Path Boot-Multi-Path Boot-Script-Path Bootloader-Sets-Root DTB-Append DTB-Id Kernel-Flavors Machine Machine-Id Method Mtd-Initrd Mtd-Kernel Optional-Packages Required-Packages U-Boot-Initrd-Address U-Boot-Kernel-Address U-Boot-Multi-Address U-Boot-Script-Address U-Boot-Script-Name' + local expected='Android-Boot-Device Boot-Device Boot-DTB-Path Boot-Initrd-Path Boot-Kernel-Path Boot-Multi-Path Boot-Script-Path Bootloader-Sets-Root DTB-Append DTB-Id Kernel-Flavors Machine Machine-Id Method Mtd-Initrd Mtd-Kernel Optional-Packages Required-Packages U-Boot-Initrd-Address U-Boot-Kernel-Address U-Boot-Multi-Address U-Boot-Script-Address U-Boot-Script-Name Part-Kernel' expected="$(echo "$expected" | sed 's/ /\n/g' | sort -u | xargs)" local fields="$(echo "$MACHINE_DB" | sed -n '/^[^#]*:/s/:.*//p' | sort -u | xargs)" echo $fields -- 1.8.3.2