From 68777f0059c7d82e957b49a3c8039b667517f054 Mon Sep 17 00:00:00 2001
From: Bob Mottram <bob@freedombone.net>
Date: Tue, 30 May 2017 10:20:12 +0100
Subject: [PATCH] beaglebone uenv parameters

---
 src/freedombone-image-hardware-setup | 144 ++++++++++++++++++++++++++-
 1 file changed, 143 insertions(+), 1 deletion(-)

diff --git a/src/freedombone-image-hardware-setup b/src/freedombone-image-hardware-setup
index b8a5858a0..b48445a83 100755
--- a/src/freedombone-image-hardware-setup
+++ b/src/freedombone-image-hardware-setup
@@ -31,7 +31,14 @@ PROJECT_NAME='freedombone'
 export TEXTDOMAIN=${PROJECT_NAME}-image-hardware-setup
 export TEXTDOMAINDIR="/usr/share/locale"
 
-setup_flash_kernel() {
+function enable_serial_console {
+    # By default, spawn a console on the serial port
+    device="$1"
+    echo $"Adding a getty on the serial port"
+    echo "T0:12345:respawn:/sbin/getty -L $device 115200 vt100" >> /etc/inittab
+}
+
+function setup_flash_kernel {
     if [ ! -d /etc/flash-kernel ] ; then
        mkdir /etc/flash-kernel
     fi
@@ -49,29 +56,164 @@ setup_flash_kernel() {
     apt-get -yq install flash-kernel
 }
 
+function a20_env {
+    dtb="$1"
+
+    # Setup boot.cmd
+    if grep -q btrfs /etc/fstab ; then
+        fstype=btrfs
+    else
+        fstype=ext4
+    if [ -n "$command_line" ] ; then
+        echo flash-kernel flash-kernel/linux_cmdline string "$command_line" | debconf-set-selections
+    fi
+    kernelVersion=$(ls /usr/lib/*/$dtb | head -1 | cut -d/ -f4)
+    version=$(echo $kernelVersion | sed 's/linux-image-\(.*\)/\1/')
+    initRd=initrd.img-$version
+    vmlinuz=vmlinuz-$version
+
+    # Create boot.cmd
+    cat >> /boot/boot.cmd <<EOF
+setenv mmcdev 0
+setenv mmcpart 1
+
+setenv mmcroot /dev/mmcblk0p2 ro
+setenv mmcrootfstype $fstype rootwait fixrtc
+setenv mmcrootflags subvol=@
+
+setenv console ttyS0,115200n8
+
+setenv kernel_file $vmlinuz
+setenv initrd_file $initRd
+setenv fdtfile $dtb
+
+setenv loadaddr 0x46000000
+setenv initrd_addr 0x48000000
+setenv fdtaddr 0x47000000
+
+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 console=\${console} root=\${mmcroot} rootfstype=\${mmcrootfstype} rootflags=\${mmcrootflags}
+
+run loadfiles; run mmcargs; bootz \${loadaddr} \${initrd_addr}:\${initrd_size} \${fdtaddr}
+EOF
+
+    # boot.scr for Allwinner A20 based device
+    mkimage -C none -A arm -T script -d /boot/boot.cmd /boot/boot.scr
+
+    # Copy all DTBs
+    mkdir -p /boot/dtbs
+    cp /usr/lib/$kernelVersion/* /boot/dtbs
+
+    # extra boot modules
+    echo "rtc_sunxi" >> /etc/initramfs-tools/modules
+}
+
+function beaglebone_env {
+    bbb_version=$1
+
+    # Setup uEnv.txt
+    if grep -q btrfs /etc/fstab ; then
+        fstype=btrfs
+    else
+        fstype=ext4
+    fi
+    if [ ! $bbb_version ]; then
+        kernelVersion=$(ls /usr/lib/*/am335x-boneblack.dtb | head -1 | cut -d/ -f4)
+    else
+        kernelVersion=$(ls /usr/lib/*/am335x-boneblack-${1}.dtb | head -1 | cut -d/ -f4)
+    fi
+    version=$(echo $kernelVersion | sed 's/linux-image-\(.*\)/\1/')
+    initRd=initrd.img-$version
+    vmlinuz=vmlinuz-$version
+
+    #bbb_loadaddr='0x80200000'
+    #bbb_initrd_addr='0x81000000'
+    #bbb_fdtaddr='0x80F80000'
+    #if [[ "$bbb_version" == "wireless" ]]; then
+        bbb_loadaddr='0x82000000'
+        bbb_initrd_addr='0x88080000'
+        bbb_fdtaddr='0x88000000'
+    #fi
+
+    # uEnv.txt for Beaglebone
+    # based on https://github.com/beagleboard/image-builder/blob/master/target/boot/beagleboard.org.txt
+    cat >> /boot/uEnv.txt <<EOF
+mmcroot=/dev/mmcblk0p2 ro
+mmcrootfstype=$fstype rootwait fixrtc
+mmcrootflags=subvol=@
+
+console=ttyO0,115200n8
+
+kernel_file=$vmlinuz
+initrd_file=$initRd
+
+loadaddr=$bbb_loadaddr
+initrd_addr=$bbb_initrd_addr
+fdtaddr=$bbb_fdtaddr
+
+initrd_high=0xffffffff
+fdt_high=0xffffffff
+
+loadkernel=load mmc \${mmcdev}:\${mmcpart} \${loadaddr} \${kernel_file}
+loadinitrd=load mmc \${mmcdev}:\${mmcpart} \${initrd_addr} \${initrd_file}; setenv intrd_size \${filesize}
+loadfdt=load mmc \${mmcdev}:\${mmcpart} \${fdtaddr} /dtbs/\${fdtfile}
+
+loadfiles=run loadkernel; run loadinitrd; run loadfdt
+mmcargs=setenv bootargs console=tty0 console=\${console} root=\${mmcroot} rootfstype=\${mmcrootfstype} rootflags=\${mmcrootflags}
+
+uenvcmd=run loadfiles; run mmcargs; bootz \${loadaddr} \${initrd_addr}:\${initrd_size} \${fdtaddr}
+EOF
+
+    mkdir -p /boot/dtbs
+    cp /usr/lib/linux-image-*-armmp/* /boot/dtbs
+}
+
 case "$MACHINE" in
     beaglebone)
+        beaglebone_env
+        enable_serial_console ttyO0
         setup_flash_kernel 'TI AM335x BeagleBone Black' 'ttyO0'
         ;;
     beaglebonewifi)
+        beaglebone_env
+        enable_serial_console ttyO0
         setup_flash_kernel 'TI AM335x BeagleBone Black Wireless' 'ttyO0'
         ;;
     cubietruck)
+        a20_env sun7i-a20-cubietruck.dtb
+        enable_serial_console ttyO0
         setup_flash_kernel 'Cubietech Cubietruck'
         ;;
     a20-olinuxino-lime)
+        a20_env sun7i-a20-olinuxino-lime.dtb
+        enable_serial_console ttyO0
         setup_flash_kernel 'Olimex A20-OLinuXino-LIME'
         ;;
     a20-olinuxino-lime2)
+        a20_env sun7i-a20-olinuxino-lime2.dtb
+        enable_serial_console ttyO0
         setup_flash_kernel 'Olimex A20-OLinuXino-LIME2'
         ;;
     a20-olinuxino-micro)
+        a20_env sun7i-a20-olinuxino-micro.dtb
+        enable_serial_console ttyO0
         setup_flash_kernel 'Olimex A20-Olinuxino Micro'
         ;;
     cubieboard2)
+        a20_env sun7i-a20-cubieboard2.dtb
+        enable_serial_console ttyO0
         setup_flash_kernel 'Cubietech Cubieboard2'
         ;;
     pcduino3)
+        a20_env sun7i-a20-pcduino3.dtb
+        enable_serial_console ttyO0
         setup_flash_kernel 'LinkSprite pcDuino3'
         ;;
 esac
-- 
GitLab