Package: flash-kernel Version: 3.103 Severity: normal Dear Maintainer,
I have done some changes to boot kirkwood-qnap from USB if a prepared USB drive is found, so we are able to run bullseye on this devices. I have test in on TS-2019P+. Patch is attachted. -- System Information: Debian Release: bullseye/sid APT prefers testing APT policy: (500, 'testing') Architecture: armel (armv5tel) Kernel: Linux 5.9.0-4-marvell Locale: LANG=de_DE.UTF-8, LC_CTYPE=de_DE.UTF-8 (charmap=UTF-8), LANGUAGE not set Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system) LSM: AppArmor: enabled Versions of packages flash-kernel depends on: ii debconf [debconf-2.0] 1.5.74 ii devio 1.2-1.2+b1 ii initramfs-tools 0.139 ii linux-base 4.6 ii mtd-utils 1:2.1.2-1 ii ucf 3.0043 Versions of packages flash-kernel recommends: ii u-boot-tools 2020.10+dfsg-1+b1 flash-kernel suggests no packages. -- Configuration Files: /etc/kernel/postinst.d/zz-flash-kernel changed [not included] -- debconf information excluded
diff --git a/functions b/functions index a5a61e0..ef2d1b8 100644 --- a/functions +++ b/functions @@ -3,6 +3,7 @@ # Copyright (C) 2011 Loïc Minier <l...@dooz.org> # Copyright (C) 2011 Julian Andres Klode <j...@debian.org> # Copyright (C) 2013-2016 Ian Campbell <i...@debian.org> +# Copyright (C) 2020 Sebastian Fiedler <s...@unix-solution.de> # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License @@ -24,6 +25,7 @@ FK_ETC_MACHINE="${FK_ETC_MACHINE:-/etc/flash-kernel/machine}" PROC_CPUINFO="${FK_PROC_CPUINFO:-/proc/cpuinfo}" PROC_DTMODEL="${FK_PROC_DTMODEL:-/proc/device-tree/model}" PROC_MTD="/proc/mtd" +USB_DEV=$(lsblk -pr --fs -o NAME,LABEL | awk '/QNAPUSBBOOT/ {print $1}') read_machine_db() { if [ -f "${FK_ETC_DB:-/etc/flash-kernel/db}" ]; then @@ -106,6 +108,10 @@ check_mtd_size() { local actual_size="$3" local what="$4" + if [ x$USB_DEV != x ] && [ $what = kernel ]; then + actual_size=4194300 + fi + if [ $required_size -gt $actual_size ]; then case $what in initrd) @@ -119,6 +125,20 @@ check_mtd_size() { ) >&2 ;; esac + if [ $(get_machine_field "$machine" "DTB-Id") = "!kirkwood-qnap" ] && [ x$USB_DEV = x ];then + echo + echo "kirkwood-qnap found." + echo "You can try too load Kernel and initrd from USB drive. Prepare a FAT32 partition with" + echo "disklabel 'QNAPUSBBOOT' connect it to the device and then run flash-kernel $kvers" + echo + echo "WARNING: Not all USB drives are detect by the bootloader. If it is so the device won't start" + echo "and you need a serial console to fix it." + echo "If you can mount the USB drive there it does NOT indicate the the bootloader will found it." + echo "You also need fw_setenv to set the bootargs and bootcmd of u-boot." + echo + echo "DO IT AT YOUR OWN RISK" + echo + fi error "Not enough space for $what in MTD '$mtd_name' (need $required_size but is actually $actual_size)." fi } @@ -397,10 +417,17 @@ flash_kernel() { use=" (using $kreqsize/$kmtdsize bytes)" fi - printf "Flashing kernel$use... " >&2 gen_kernel "$input_file" "$tmpdir/flash_kernel.raw" "$machine_id" || error "failed." - write_mtd "$tmpdir/flash_kernel.raw" "$output_mtd" || error "failed." - echo "done." >&2 + if [ x$USB_DEV != x ]; then + printf "Flashing kernel$use to $boot_device... " >&2 + cp "$tmpdir/flash_kernel.raw" $boot_mnt_dir/kernel || error "failed." + echo "done." >&2 + set_qnap_bootargs + else + printf "Flashing kernel$use... " >&2 + write_mtd "$tmpdir/flash_kernel.raw" "$output_mtd" || error "failed." + echo "done." >&2 + fi } flash_initrd() { @@ -413,13 +440,23 @@ flash_initrd() { use=" (using $ireqsize/$imtdsize bytes)" fi - printf "Flashing initramfs$use... " >&2 - { - cat "$input_file" - if [ "$pad" -gt 0 ]; then - dd if=/dev/zero bs="$pad" count=1 2>/dev/null - fi - } | write_mtd "-" "$output_mtd" || error "failed." + if [ x$USB_DEV != x ]; then + printf "Flashing initramfs$use to $boot_device... " >&2 + { + cat "$input_file" + if [ "$pad" -gt 0 ]; then + dd if=/dev/zero bs="$pad" count=1 2>/dev/null + fi + } > $boot_mnt_dir/initrd + else + printf "Flashing initramfs$use... " >&2 + { + cat "$input_file" + if [ "$pad" -gt 0 ]; then + dd if=/dev/zero bs="$pad" count=1 2>/dev/null + fi + } | write_mtd "-" "$output_mtd" || error "failed." + fi echo "done." >&2 } @@ -665,6 +702,18 @@ handle_dtb() { fi } +set_qnap_bootargs (){ + if [ -f /usr/bin/fw_setenv ] && [ -f /usr/bin/fw_printenv ]; then + if [ "x$(fw_printenv | awk -F '=' '/usb start/ {print $1}')" != "xbootcmd" ]; then + printf "Set Bootloader to load files from USB...\n" + fw_setenv bootargs "console=ttyS0,115200n8 root=/dev/ram rw initrd=0xc00000,0x1500000 ramdisk=34816" >/dev/null || error "failed." + fw_setenv bootcmd "uart1 0x68;usb start;fatload usb 0:1 0xc00000 initrd;fatload usb 0:1 0x800000 kernel;bootm 0x800000" >/dev/null || error "failed." + fi + else + error "\nCouldn't find fw_setenv and/or fw_printenv.\nInstall it and run flash-kernel $kvers." + fi +} + main() { force="no" if [ "x$1" = "x--force" ]; then @@ -833,6 +882,10 @@ boot_dtb_path_version="$(get_machine_field "$machine" "Boot-DTB-Path-Version")" boot_multi_path="$(get_machine_field "$machine" "Boot-Multi-Path")" || : android_boot_device="$(get_machine_field "$machine" "Android-Boot-Device")" || : +if [ x$USB_DEV != x ]; then + boot_device=$USB_DEV +fi + if [ -n "$dtb_append_from" ]; then if dtb_append_required; then dtb_append="yes"