diff --git a/src/freedombone-image-hardware-setup b/src/freedombone-image-hardware-setup
index 04e784ee60eee962c2c576545e0506c5b3a054ca..868ba97a1e49237376a0577df42c26ea5bf14b05 100755
--- a/src/freedombone-image-hardware-setup
+++ b/src/freedombone-image-hardware-setup
@@ -38,60 +38,86 @@ enable_serial_console() {
     echo "T0:12345:respawn:/sbin/getty -L $device 115200 vt100" >> /etc/inittab
 }
 
-beaglebone_setup_boot() {
-    beaglebone_variant="$1"
-    beaglebone_root_device='mmcblk0p2'
+arm_setup_boot() {
+    dtb="$1"
+    arm_root_device='mmcblk0p2'
     if [ "$2" ]; then
-        beaglebone_root_device="$2"
+        arm_root_device="$2"
     fi
 
-    # Setup uEnv.txt
+    # Setup boot.cmd
     if grep -q btrfs /etc/fstab ; then
         fstype=btrfs
     else
         fstype=ext4
     fi
+
     # shellcheck disable=SC2012,SC2086
-    kernelVersion=$(ls /usr/lib/*/${beaglebone_variant}.dtb | head -1 | cut -d/ -f4)
+    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
 
-    bbb_loadaddr='0x82000000'
-    bbb_initrd_addr='0x88080000'
-    bbb_fdtaddr='0x88000000'
+    arm_loadaddr='0x46000000'
+    arm_initrd_addr='0x48000000'
+    arm_fdtaddr='0x47000000'
 
-    # 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/${beaglebone_root_device} ro
-mmcrootfstype=$fstype rootwait fixrtc
-mmcrootflags=subvol=@
+    case "$dtb" in
+        "am"*) arm_loadaddr='0x82000000'
+               arm_initrd_addr='0x88080000'
+               arm_fdtaddr='0x88000000'
+               ;;
+    esac
 
-console=ttyO0,115200n8
+    # Create boot.cmd
+    cat >> /boot/boot.cmd <<EOF
+setenv mmcdev 0
+setenv mmcpart 1
 
-kernel_file=$vmlinuz
-initrd_file=$initRd
+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
 
-loadaddr=$bbb_loadaddr
-initrd_addr=$bbb_initrd_addr
-fdtaddr=$bbb_fdtaddr
+setenv loadaddr $arm_loadaddr
+setenv initrd_addr $arm_initrd_addr
+setenv fdtaddr $arm_fdtaddr
 
-initrd_high=0xffffffff
-fdt_high=0xffffffff
+setenv initrd_high 0xffffffff
+setenv fdt_high 0xffffffff
 
-loadkernel=load mmc \${mmcdev}:\${mmcpart} \${loadaddr} \${kernel_file}
-loadinitrd=load mmc \${mmcdev}:\${mmcpart} \${initrd_addr} \${initrd_file}; setenv initrd_size \${filesize}
-loadfdt=load mmc \${mmcdev}:\${mmcpart} \${fdtaddr} /dtbs/\${fdtfile}
+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}
 
-loadfiles=run loadkernel; run loadinitrd; run loadfdt
-mmcargs=setenv bootargs init=/lib/systemd/systemd console=tty0 console=\${console} root=\${mmcroot} rootfstype=\${mmcrootfstype} rootflags=\${mmcrootflags} ifnames=0 slub_debug=FZP slab_nomerge page_poison=1
+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
 
-uenvcmd=run loadfiles; run mmcargs; bootz \${loadaddr} \${initrd_addr}:\${initrd_size} \${fdtaddr}
+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
-    cp /usr/lib/linux-image-*-armmp/* /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() {
@@ -164,71 +190,6 @@ beaglebone_repack_kernel() {
              -d "$initRd" uInitrd )
 }
 
-a20_setup_boot() {
-    dtb="$1"
-    a20_root_device='mmcblk0p2'
-    if [ "$2" ]; then
-        a20_root_device="$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 | 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/${a20_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
-
-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 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
-
-    # 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
-    # shellcheck disable=SC2086
-    cp /usr/lib/$kernelVersion/* /boot/dtbs
-
-    # extra boot modules
-    { echo "rtc_sunxi";
-      echo "vfat"; } >> /etc/initramfs-tools/modules
-}
-
-
 setup_flash_kernel() {
     if [ ! -d /etc/flash-kernel ] ; then
        mkdir /etc/flash-kernel
@@ -247,118 +208,55 @@ setup_flash_kernel() {
     $INSTALL_PACKAGES flash-kernel
 }
 
-rockchip_setup_boot() {
-    dtb="$1"
-    rockchip_root_device='mmcblk0p2'
-    if [ "$2" ]; then
-        rockchip_root_device="$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 | 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/${rockchip_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
-
-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 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
-
-    # boot.scr for rockchip based device
-    mkimage -C none -A arm64 -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
-    { echo "vfat"; } >> /etc/initramfs-tools/modules
-}
-
 case "$MACHINE" in
     beagleboneblack)
-        beaglebone_setup_boot am335x-boneblack "$EXTERNAL_DRIVE"
+        arm_setup_boot am335x-boneblack "$EXTERNAL_DRIVE"
         beaglebone_flash "TI AM335x BeagleBone Black"
         beaglebone_repack_kernel am335x-boneblack
         enable_serial_console ttyO0
         ;;
     beaglebonegreen)
-        beaglebone_setup_boot am335x-bonegreen "$EXTERNAL_DRIVE"
+        arm_setup_boot am335x-bonegreen "$EXTERNAL_DRIVE"
         beaglebone_flash "TI AM335x BeagleBone Green"
         beaglebone_repack_kernel am335x-bonegreen
         enable_serial_console ttyO0
         ;;
     beaglex15)
-        beaglebone_setup_boot am57xx-beagle-x15 "$EXTERNAL_DRIVE"
+        arm_setup_boot am57xx-beagle-x15 "$EXTERNAL_DRIVE"
         beaglebone_flash "TI AM5728 BeagleBoard-X15"
         beaglebone_repack_kernel am57xx-beagle-x15
         enable_serial_console ttyO0
         ;;
     cubietruck)
-        a20_setup_boot sun7i-a20-cubietruck.dtb "$EXTERNAL_DRIVE"
+        arm_setup_boot sun7i-a20-cubietruck "$EXTERNAL_DRIVE"
         enable_serial_console ttyS0
         ;;
     a20-olinuxino-lime)
-        a20_setup_boot sun7i-a20-olinuxino-lime.dtb "$EXTERNAL_DRIVE"
+        arm_setup_boot sun7i-a20-olinuxino-lime "$EXTERNAL_DRIVE"
         enable_serial_console ttyS0
         ;;
     a20-olinuxino-lime2)
-        a20_setup_boot sun7i-a20-olinuxino-lime2.dtb "$EXTERNAL_DRIVE"
+        arm_setup_boot sun7i-a20-olinuxino-lime2 "$EXTERNAL_DRIVE"
         enable_serial_console ttyS0
         ;;
     a20-olinuxino-micro)
-        a20_setup_boot sun7i-a20-olinuxino-micro.dtb "$EXTERNAL_DRIVE"
+        arm_setup_boot sun7i-a20-olinuxino-micro "$EXTERNAL_DRIVE"
         enable_serial_console ttyS0
         ;;
     banana-pro)
-        a20_setup_boot sun7i-a20-bananapro.dtb "$EXTERNAL_DRIVE"
+        arm_setup_boot sun7i-a20-bananapro "$EXTERNAL_DRIVE"
         enable_serial_console ttyS0
         ;;
     cubieboard2)
-        a20_setup_boot sun7i-a20-cubieboard2.dtb "$EXTERNAL_DRIVE"
+        arm_setup_boot sun7i-a20-cubieboard2 "$EXTERNAL_DRIVE"
         enable_serial_console ttyS0
         ;;
     pcduino3)
-        a20_setup_boot sun7i-a20-pcduino3.dtb "$EXTERNAL_DRIVE"
+        arm_setup_boot sun7i-a20-pcduino3 "$EXTERNAL_DRIVE"
         enable_serial_console ttyS0
         ;;
     rock64)
-        rockchip_setup_boot "rockchip/rk3328-rock64.dtb" "$EXTERNAL_DRIVE"
+        arm_setup_boot "rockchip/rk3328-rock64" "$EXTERNAL_DRIVE"
         enable_serial_console ttyS0
         ;;
 esac