From ee04458c7d5e2645d6ca0d45e30b34b846e32560 Mon Sep 17 00:00:00 2001 From: Bob Mottram <bob@robotics.uk.to> Date: Thu, 10 Jan 2019 14:03:36 +0000 Subject: [PATCH] Move flash functions to the end of boot setup --- src/freedombone-image-hardware-setup | 188 ++++++++++++++------------- 1 file changed, 98 insertions(+), 90 deletions(-) diff --git a/src/freedombone-image-hardware-setup b/src/freedombone-image-hardware-setup index 768749a44..2f83e99c3 100755 --- a/src/freedombone-image-hardware-setup +++ b/src/freedombone-image-hardware-setup @@ -38,87 +38,6 @@ enable_serial_console() { echo "T0:12345:respawn:/sbin/getty -L $device 115200 vt100" >> /etc/inittab } -arm_setup_boot() { - dtb="$1" - arm_root_device='mmcblk0p2' - if [ "$EXTERNAL_DRIVE" ]; then - arm_root_device="$EXTERNAL_DRIVE" - fi - - # Setup boot.cmd - if grep -q btrfs /etc/fstab ; then - fstype=btrfs - else - fstype=ext4 - fi - - # shellcheck disable=SC2012,SC2086 - kernelVersion=$(ls /usr/lib/*/${dtb}.dtb | head -1 | cut -d/ -f4) - version=$(echo "$kernelVersion" | sed 's/linux-image-\(.*\)/\1/') - initRd=initrd.img-$version - vmlinuz=vmlinuz-$version - - arm_loadaddr='0x46000000' - arm_initrd_addr='0x48000000' - arm_fdtaddr='0x47000000' - - case "$dtb" in - "am"*) arm_loadaddr='0x82000000' - arm_initrd_addr='0x88080000' - arm_fdtaddr='0x88000000' - ;; - esac - - cat >> /boot/boot.cmd <<EOF -setenv mmcdev 0 -setenv mmcpart 1 - -setenv mmcroot /dev/${arm_root_device} ro -setenv mmcrootfstype $fstype rootwait fixrtc -setenv mmcrootflags subvol=@ - -setenv console ttyS0,115200n8 - -setenv kernel_file $vmlinuz -setenv initrd_file $initRd -setenv fdtfile ${dtb}.dtb - -setenv loadaddr $arm_loadaddr -setenv initrd_addr $arm_initrd_addr -setenv fdtaddr $arm_fdtaddr - -setenv initrd_high 0xffffffff -setenv fdt_high 0xffffffff - -setenv loadkernel load mmc \${mmcdev}:\${mmcpart} \${loadaddr} \${kernel_file} -setenv loadinitrd load mmc \${mmcdev}:\${mmcpart} \${initrd_addr} \${initrd_file}\\; setenv initrd_size \\\${filesize} -setenv loadfdt load mmc \${mmcdev}:\${mmcpart} \${fdtaddr} /dtbs/\${fdtfile} - -setenv loadfiles run loadkernel\\; run loadinitrd\\; run loadfdt -setenv mmcargs setenv bootargs init=/lib/systemd/systemd console=\${console} root=\${mmcroot} rootfstype=\${mmcrootfstype} rootflags=\${mmcrootflags} ifnames=0 slub_debug=FZP slab_nomerge page_poison=1 - -run loadfiles; run mmcargs; bootz \${loadaddr} \${initrd_addr}:\${initrd_size} \${fdtaddr} -EOF - - # Create boot.scr - mkimage -C none -A arm -T script -d /boot/boot.cmd /boot/boot.scr - - # Copy all DTBs - mkdir -p /boot/dtbs - # shellcheck disable=SC2086 - cp /usr/lib/$kernelVersion/* /boot/dtbs - - # extra boot modules - case "$dtb" in - "sun"*) - { echo "rtc_sunxi"; - echo "vfat"; } >> /etc/initramfs-tools/modules - ;; - "r"*) echo "vfat" >> /etc/initramfs-tools/modules - ;; - esac -} - beaglebone_flash() { # allow flash-kernel to work without valid /proc contents # ** this doesn't *really* work, since there are too many checks @@ -207,21 +126,110 @@ setup_flash_kernel() { $INSTALL_PACKAGES flash-kernel } +arm_setup_boot() { + dtb="$1" + arm_root_device='mmcblk0p2' + if [ "$EXTERNAL_DRIVE" ]; then + arm_root_device="$EXTERNAL_DRIVE" + fi + + arm_flash_name= + if [ "$2" ]; then + arm_flash_name="$2" + fi + + # Setup boot.cmd + if grep -q btrfs /etc/fstab ; then + fstype=btrfs + else + fstype=ext4 + fi + + # shellcheck disable=SC2012,SC2086 + kernelVersion=$(ls /usr/lib/*/${dtb}.dtb | head -1 | cut -d/ -f4) + version=$(echo "$kernelVersion" | sed 's/linux-image-\(.*\)/\1/') + initRd=initrd.img-$version + vmlinuz=vmlinuz-$version + + arm_loadaddr='0x46000000' + arm_initrd_addr='0x48000000' + arm_fdtaddr='0x47000000' + + case "$dtb" in + "am"*) arm_loadaddr='0x82000000' + arm_initrd_addr='0x88080000' + arm_fdtaddr='0x88000000' + ;; + esac + + cat >> /boot/boot.cmd <<EOF +setenv mmcdev 0 +setenv mmcpart 1 + +setenv mmcroot /dev/${arm_root_device} ro +setenv mmcrootfstype $fstype rootwait fixrtc +setenv mmcrootflags subvol=@ + +setenv console ttyS0,115200n8 + +setenv kernel_file $vmlinuz +setenv initrd_file $initRd +setenv fdtfile ${dtb}.dtb + +setenv loadaddr $arm_loadaddr +setenv initrd_addr $arm_initrd_addr +setenv fdtaddr $arm_fdtaddr + +setenv initrd_high 0xffffffff +setenv fdt_high 0xffffffff + +setenv loadkernel load mmc \${mmcdev}:\${mmcpart} \${loadaddr} \${kernel_file} +setenv loadinitrd load mmc \${mmcdev}:\${mmcpart} \${initrd_addr} \${initrd_file}\\; setenv initrd_size \\\${filesize} +setenv loadfdt load mmc \${mmcdev}:\${mmcpart} \${fdtaddr} /dtbs/\${fdtfile} + +setenv loadfiles run loadkernel\\; run loadinitrd\\; run loadfdt +setenv mmcargs setenv bootargs init=/lib/systemd/systemd console=\${console} root=\${mmcroot} rootfstype=\${mmcrootfstype} rootflags=\${mmcrootflags} ifnames=0 slub_debug=FZP slab_nomerge page_poison=1 + +run loadfiles; run mmcargs; bootz \${loadaddr} \${initrd_addr}:\${initrd_size} \${fdtaddr} +EOF + + # Create boot.scr + mkimage -C none -A arm -T script -d /boot/boot.cmd /boot/boot.scr + + # Copy all DTBs + mkdir -p /boot/dtbs + # shellcheck disable=SC2086 + cp /usr/lib/$kernelVersion/* /boot/dtbs + + # extra boot modules + case "$dtb" in + "sun"*) + { echo "rtc_sunxi"; + echo "vfat"; } >> /etc/initramfs-tools/modules + ;; + "r"*) echo "vfat" >> /etc/initramfs-tools/modules + ;; + esac + + if [ "$arm_flash_name" ]; then + case "$arm_flash_name" in + "TI "*) + beaglebone_flash "$arm_flash_name" + beaglebone_repack_kernel "${dtb}" + ;; + esac + fi +} + case "$MACHINE" in beagleboneblack) - arm_setup_boot am335x-boneblack - beaglebone_flash "TI AM335x BeagleBone Black" - beaglebone_repack_kernel am335x-boneblack + arm_setup_boot am335x-boneblack "TI AM335x BeagleBone Black" ;; beaglebonegreen) - arm_setup_boot am335x-bonegreen - beaglebone_flash "TI AM335x BeagleBone Green" - beaglebone_repack_kernel am335x-bonegreen + arm_setup_boot am335x-bonegreen "TI AM335x BeagleBone Green" ;; beaglex15) - arm_setup_boot am57xx-beagle-x15 - beaglebone_flash "TI AM5728 BeagleBoard-X15" - beaglebone_repack_kernel am57xx-beagle-x15 + arm_setup_boot am57xx-beagle-x15 "TI AM5728 BeagleBoard-X15" ;; cubietruck) arm_setup_boot sun7i-a20-cubietruck -- GitLab