Refresh the BeagleBone Black image
Barebox won't build (it complains about <linux/list.h> not found and I
cannot easily solve that), so let's go back to U-Boot.
The 2019.01 U-Boot release is buggy in its recognizing of partition
tables (`fatls` complains, for example), and the whole thing reverts to
a "legacy boot", so let's use the latest release, the 2019.07.
I'm also giving up on the g_cdc module because the board that I'm using
has a microUSB header for the debug console.
- FIXME: Properly distinguish between an SD-card boot and an eMMC boot
(right now it is hardcoded to boot from the SD card)
- FIXME: test Rauc updates once eMMC works
- FIXME: activate watchdog from U-Boot
Change-Id: I013f145cf2fe24e41ea0dafd225e3feb1854712c
diff --git a/board/czechlight/beaglebone/barebox.env/boot/sd b/board/czechlight/beaglebone/barebox.env/boot/sd
deleted file mode 100644
index 2aa7912..0000000
--- a/board/czechlight/beaglebone/barebox.env/boot/sd
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/sh
-
-global.bootm.image=/boot/zImage
-
-global.bootm.oftree=/boot/czechlight-bbb.dtb
-
-# No initrd
-# global.bootm.initrd=<path to initrd>
-
-global.linux.bootargs.dyn.root="root=/dev/mmcblk0p2 rootfstype=ext4 rootwait"
-global.linux.bootargs.base="omap_wdt.early_enable=1"
diff --git a/board/czechlight/beaglebone/barebox.env/config-board b/board/czechlight/beaglebone/barebox.env/config-board
deleted file mode 100644
index 042ed45..0000000
--- a/board/czechlight/beaglebone/barebox.env/config-board
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-
-global.boot.default=sd
-global.boot.watchdog_timeout=60
diff --git a/board/czechlight/beaglebone/boot.scr.txt b/board/czechlight/beaglebone/boot.scr.txt
new file mode 100644
index 0000000..9a8adc7
--- /dev/null
+++ b/board/czechlight/beaglebone/boot.scr.txt
@@ -0,0 +1,8 @@
+setenv bootargs root=/dev/mmcblk0p${rauc_part} console=ttyO0,115200n8 init=/sbin/init-czechlight.sh rauc.slot=${rauc_slot} czechlight=${czechlight} systemd.machine_id=${machineid} panic=10 oops=panic
+if test -n ${czechlight} && load mmc 0:${rauc_part} ${fdt_addr_r} /boot/${czechlight}-bbb.dtb; then
+ echo "DTS: ${czechlight}-bbb"
+else
+ load mmc 0:${rauc_part} ${fdt_addr_r} /boot/czechlight-bbb.dtb || reset
+fi
+load mmc 0:${rauc_part} ${kernel_addr_r} /boot/zImage || reset
+bootz ${kernel_addr_r} - ${fdt_addr_r} || reset
diff --git a/board/czechlight/beaglebone/create-uEnv.sh b/board/czechlight/beaglebone/create-uEnv.sh
new file mode 100755
index 0000000..9808fdd
--- /dev/null
+++ b/board/czechlight/beaglebone/create-uEnv.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+install -m 0644 -D $BINARIES_DIR/boot.scr $TARGET_DIR/boot/boot.scr
+
+# prepare the static script with RAUC logic
+${HOST_DIR}/bin/mkimage -C none -A arm -T script \
+ -d ${BR2_EXTERNAL_CZECHLIGHT_PATH}/board/czechlight/beaglebone/rauc.scr.txt ${BINARIES_DIR}/rauc.scr
+
+# ...and a simplified one for SD-card booting (no image determination)
+${HOST_DIR}/bin/mkimage -C none -A arm -T script \
+ -d ${BR2_EXTERNAL_CZECHLIGHT_PATH}/board/czechlight/beaglebone/sd.scr.txt ${BINARIES_DIR}/sd.scr
diff --git a/board/czechlight/beaglebone/genimage.cfg b/board/czechlight/beaglebone/genimage.cfg
index a1cb8c9..dc9f7c1 100644
--- a/board/czechlight/beaglebone/genimage.cfg
+++ b/board/czechlight/beaglebone/genimage.cfg
@@ -1,33 +1,82 @@
-image boot.vfat {
+image boot-sd.vfat {
vfat {
- file MLO {
- image = "barebox-am33xx-beaglebone-mlo.img"
- }
- file barebox.bin {
- image = "barebox-am33xx-beaglebone.img"
- }
files = {
- "barebox.env",
- "czechlight-bbb.dtb",
- "zImage"
+ "MLO",
+ "u-boot.img"
+ }
+ file boot.scr {
+ image = "sd.scr"
}
}
- size = 32M
+ size = 8M
}
image sdcard.img {
hdimage {
}
- partition boot {
+ partition u-boot {
partition-type = 0xC
- in-partition-table = "yes"
bootable = "true"
- image = "boot.vfat"
+ image = "boot-sd.vfat"
}
partition rootfs {
partition-type = 0x83
image = "rootfs.ext4"
}
+
+ partition cfg {
+ partition-type = 0x83
+ image = "cfg.ext4"
+ }
}
+
+# this is largely untested...
+#image boot-emmc.vfat {
+# vfat {
+# files = {
+# "MLO",
+# "u-boot.img"
+# }
+# file boot.scr {
+# image = "rauc.scr"
+# }
+# }
+# size = 8M
+#}
+#
+#image emmc.img {
+# hdimage {
+# }
+#
+# partition u-boot {
+# partition-type = 0xC
+# bootable = "true"
+# image = "boot-emmc.vfat"
+# }
+#
+# partition rootfs-A {
+# partition-type = 0x83
+# image = "rootfs.ext4"
+# size = 1024M
+# }
+#
+# partition cfg-A {
+# partition-type = 0x83
+# image = "cfg.ext4"
+# size = 512M
+# }
+#
+# partition rootfs-B {
+# partition-type = 0x83
+# image = "rootfs.ext4"
+# size = 1024M
+# }
+#
+# partition cfg-B {
+# partition-type = 0x83
+# image = "cfg.ext4"
+# size = 512M
+# }
+#}
diff --git a/board/czechlight/beaglebone/linux.fragment b/board/czechlight/beaglebone/linux.fragment
index 5dcd313..2871883 100644
--- a/board/czechlight/beaglebone/linux.fragment
+++ b/board/czechlight/beaglebone/linux.fragment
@@ -1,5 +1 @@
CONFIG_OMAP_WATCHDOG=y
-
-# CONFIG_USB_ZERO is not set
-CONFIG_USB_CDC_COMPOSITE=m
-# CONFIG_USB_G_NOKIA is not set
diff --git a/board/czechlight/beaglebone/overlay/etc/modules-load.d/usb-serial-gadget.conf b/board/czechlight/beaglebone/overlay/etc/modules-load.d/usb-serial-gadget.conf
deleted file mode 100644
index 41c481d..0000000
--- a/board/czechlight/beaglebone/overlay/etc/modules-load.d/usb-serial-gadget.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-# composite module for serial console and Ethernet over the miniUSB port
-g_cdc
diff --git a/board/czechlight/beaglebone/overlay/etc/systemd/system/network/30-usbnet-apipa.network b/board/czechlight/beaglebone/overlay/etc/systemd/system/network/30-usbnet-apipa.network
deleted file mode 100644
index 807dcc4..0000000
--- a/board/czechlight/beaglebone/overlay/etc/systemd/system/network/30-usbnet-apipa.network
+++ /dev/null
@@ -1,6 +0,0 @@
-[Match]
-Name=usb0
-
-[Network]
-Description=miniUSB console
-LinkLocalAddressing=yes
diff --git a/board/czechlight/beaglebone/post-image.sh b/board/czechlight/beaglebone/post-image.sh
deleted file mode 100755
index 149ffb1..0000000
--- a/board/czechlight/beaglebone/post-image.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/sh
-
-BOARD_DIR="$(dirname $0)"
-GENIMAGE_CFG="${BOARD_DIR}/genimage.cfg"
-GENIMAGE_TMP="${BUILD_DIR}/genimage.tmp"
-
-rm -rf "${GENIMAGE_TMP}"
-
-genimage \
- --rootpath "${TARGET_DIR}" \
- --tmppath "${GENIMAGE_TMP}" \
- --inputpath "${BINARIES_DIR}" \
- --outputpath "${BINARIES_DIR}" \
- --config "${GENIMAGE_CFG}"
-
-exit $?
-
diff --git a/board/czechlight/beaglebone/rauc.scr.txt b/board/czechlight/beaglebone/rauc.scr.txt
new file mode 100644
index 0000000..8e5ba65
--- /dev/null
+++ b/board/czechlight/beaglebone/rauc.scr.txt
@@ -0,0 +1,35 @@
+echo CzechLight BeagleBone Black RAUC
+
+test -n "${BOOT_A_LEFT}" || setenv BOOT_A_LEFT 3;
+test -n "${BOOT_B_LEFT}" || setenv BOOT_B_LEFT 3;
+test -n "${BOOT_ORDER}" || setenv BOOT_ORDER "A B";
+for BOOT_SLOT in "${BOOT_ORDER}"; do
+ if test "x${rauc_part}" != "x"; then
+ ;
+ elif test "x${BOOT_SLOT}" = "xA"; then
+ if test ${BOOT_A_LEFT} -gt 0; then
+ setexpr BOOT_A_LEFT ${BOOT_A_LEFT} - 1;
+ echo "Found valid slot A, ${BOOT_A_LEFT} attempts remaining";
+ rauc_part=2;
+ rauc_slot=A;
+ fi;
+ elif test "x${BOOT_SLOT}" = "xB"; then
+ if test ${BOOT_B_LEFT} -gt 0; then
+ setexpr BOOT_B_LEFT ${BOOT_B_LEFT} - 1;
+ echo "Found valid slot B, ${BOOT_B_LEFT} attempts remaining";
+ rauc_part=4;
+ rauc_slot=B;
+ fi;
+ fi;
+done;
+if test -n "${rauc_part}"; then
+ saveenv;
+else
+ echo "No valid slot found, resetting tries to 3";
+ setenv BOOT_A_LEFT 3;
+ setenv BOOT_B_LEFT 3;
+ saveenv;
+ reset;
+fi;
+load mmc 0:${rauc_part} ${scriptaddr} /boot/boot.scr || reset;
+source ${scriptaddr} || reset;
diff --git a/board/czechlight/beaglebone/sd.scr.txt b/board/czechlight/beaglebone/sd.scr.txt
new file mode 100644
index 0000000..9d02237
--- /dev/null
+++ b/board/czechlight/beaglebone/sd.scr.txt
@@ -0,0 +1,4 @@
+rauc_part=2
+rauc_slot=A
+load mmc 0:${rauc_part} ${scriptaddr} /boot/boot.scr || reset
+source ${scriptaddr} || reset
diff --git a/board/czechlight/beaglebone/uboot.fragment b/board/czechlight/beaglebone/uboot.fragment
new file mode 100644
index 0000000..d231b5d
--- /dev/null
+++ b/board/czechlight/beaglebone/uboot.fragment
@@ -0,0 +1 @@
+CONFIG_CMD_SETEXPR=y
diff --git a/configs/czechlight_beaglebone_defconfig b/configs/czechlight_beaglebone_defconfig
index a89c7e0..e7641dd 100644
--- a/configs/czechlight_beaglebone_defconfig
+++ b/configs/czechlight_beaglebone_defconfig
@@ -1,56 +1,92 @@
BR2_arm=y
BR2_cortex_a8=y
BR2_ARM_FPU_VFPV3=y
+BR2_ENABLE_DEBUG=y
+BR2_STRIP_EXCLUDE_FILES="cla-* netopeer2* sysrepo* libsysrepo* libSysrepo* libnetconf2* libyang* netconf-cli"
+BR2_STRIP_EXCLUDE_DIRS="/usr/lib/libyang /usr/lib/sysrepo"
+BR2_GLOBAL_PATCH_DIR="$(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/common/patches"
+BR2_REPRODUCIBLE=y
+BR2_PER_PACKAGE_DIRECTORIES=y
+BR2_SSP_STRONG=y
BR2_TOOLCHAIN_EXTERNAL=y
+BR2_TOOLCHAIN_EXTERNAL_GDB_SERVER_COPY=y
BR2_TARGET_GENERIC_HOSTNAME="czechlight"
-BR2_TARGET_GENERIC_ISSUE="Welcome to CzechLight"
-BR2_TARGET_GENERIC_PASSWD_SHA256=y
+BR2_TARGET_GENERIC_ISSUE="Welcome to Czech Light"
BR2_INIT_SYSTEMD=y
BR2_TARGET_GENERIC_GETTY_PORT="ttyO0"
# BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW is not set
BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/common/overlay/ $(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/beaglebone/overlay/"
-BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/beaglebone/post-image.sh"
+BR2_ROOTFS_POST_BUILD_SCRIPT="$(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/beaglebone/create-uEnv.sh"
+BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh"
+BR2_ROOTFS_POST_SCRIPT_ARGS="-c $(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/beaglebone/genimage.cfg"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.9.44"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.2.5"
BR2_LINUX_KERNEL_DEFCONFIG="omap2plus"
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/common/linux.fragment $(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/beaglebone/linux.fragment"
BR2_LINUX_KERNEL_DTS_SUPPORT=y
-BR2_LINUX_KERNEL_USE_CUSTOM_DTS=y
BR2_LINUX_KERNEL_CUSTOM_DTS_PATH="$(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/beaglebone/czechlight-bbb.dts"
+BR2_LINUX_KERNEL_INSTALL_TARGET=y
+BR2_PACKAGE_LINUX_TOOLS_GPIO=y
BR2_PACKAGE_LINUX_TOOLS_PERF=y
BR2_PACKAGE_BUSYBOX_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/common/busybox-config"
+BR2_PACKAGE_STRACE=y
+BR2_PACKAGE_E2FSPROGS=y
+BR2_PACKAGE_MMC_UTILS=y
BR2_PACKAGE_I2C_TOOLS=y
+BR2_PACKAGE_PICOCOM=y
+BR2_PACKAGE_PMBUS_PEEK=y
+BR2_PACKAGE_SPI_TOOLS=y
+BR2_PACKAGE_UBOOT_TOOLS=y
+BR2_PACKAGE_LIBGPIOD_TOOLS=y
+BR2_PACKAGE_MSTPD=y
BR2_PACKAGE_AVAHI=y
BR2_PACKAGE_AVAHI_DAEMON=y
-# BR2_PACKAGE_NETSNMP_SERVER is not set
-# BR2_PACKAGE_NETSNMP_CLIENTS is not set
-# BR2_PACKAGE_NETSNMP_ENABLE_MIBS is not set
-BR2_PACKAGE_OPENSSH=y
+BR2_PACKAGE_ETHTOOL=y
+BR2_PACKAGE_IPROUTE2=y
+BR2_PACKAGE_NETCONF_CLI=y
+BR2_PACKAGE_TCPDUMP=y
BR2_PACKAGE_BASH=y
+BR2_PACKAGE_INOTIFY_TOOLS=y
+BR2_PACKAGE_DDRESCUE=y
BR2_PACKAGE_RAUC=y
BR2_PACKAGE_RAUC_NETWORK=y
# BR2_PACKAGE_SYSTEMD_HWDB is not set
-BR2_PACKAGE_SYSTEMD_LOGIND=y
-# BR2_PACKAGE_SYSTEMD_MYHOSTNAME is not set
-BR2_PACKAGE_UTIL_LINUX_AGETTY=y
+BR2_PACKAGE_SYSTEMD_RANDOMSEED=y
+# BR2_PACKAGE_SYSTEMD_VCONSOLE is not set
BR2_PACKAGE_VIM=y
# BR2_PACKAGE_VIM_RUNTIME is not set
+BR2_TARGET_ROOTFS_CPIO=y
+BR2_TARGET_ROOTFS_CPIO_GZIP=y
+BR2_TARGET_ROOTFS_CPIO_UIMAGE=y
BR2_TARGET_ROOTFS_EXT2=y
BR2_TARGET_ROOTFS_EXT2_4=y
-BR2_TARGET_ROOTFS_EXT2_SIZE="131072"
-BR2_TARGET_BAREBOX=y
-BR2_TARGET_BAREBOX_BOARD_DEFCONFIG="am335x"
-BR2_TARGET_BAREBOX_IMAGE_FILE="images/barebox-am33xx-beaglebone.img"
-BR2_TARGET_BAREBOX_BAREBOXENV=y
-BR2_TARGET_BAREBOX_CUSTOM_ENV=y
-BR2_TARGET_BAREBOX_CUSTOM_ENV_PATH="$(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/beaglebone/barebox.env"
-BR2_TARGET_BAREBOX_AUX=y
-BR2_TARGET_BAREBOX_AUX_BOARD_DEFCONFIG="am335x_mlo"
-BR2_TARGET_BAREBOX_AUX_IMAGE_FILE="images/barebox-am33xx-beaglebone-mlo.img"
+BR2_TARGET_ROOTFS_EXT2_SIZE="307200"
+BR2_TARGET_ROOTFS_TAR_XZ=y
+BR2_TARGET_UBOOT=y
+BR2_TARGET_UBOOT_BUILD_SYSTEM_KCONFIG=y
+BR2_TARGET_UBOOT_CUSTOM_VERSION=y
+BR2_TARGET_UBOOT_CUSTOM_VERSION_VALUE="2019.07"
+BR2_TARGET_UBOOT_BOARD_DEFCONFIG="am335x_evm"
+BR2_TARGET_UBOOT_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/beaglebone/uboot.fragment"
+BR2_TARGET_UBOOT_NEEDS_DTC=y
+# BR2_TARGET_UBOOT_FORMAT_BIN is not set
+BR2_TARGET_UBOOT_FORMAT_IMG=y
+BR2_TARGET_UBOOT_FORMAT_CUSTOM=y
+BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="spl/u-boot-spl.bin"
+BR2_TARGET_UBOOT_SPL=y
+BR2_TARGET_UBOOT_SPL_NAME="MLO"
+BR2_TARGET_UBOOT_BOOT_SCRIPT=y
+BR2_TARGET_UBOOT_BOOT_SCRIPT_SOURCE="$(BR2_EXTERNAL_CZECHLIGHT_PATH)/board/czechlight/beaglebone/boot.scr.txt"
BR2_PACKAGE_HOST_DOSFSTOOLS=y
-BR2_PACKAGE_HOST_DTC=y
BR2_PACKAGE_HOST_GENIMAGE=y
BR2_PACKAGE_HOST_MTOOLS=y
-BR2_PACKAGE_HOST_RAUC=y
+CZECHLIGHT_CFG_FS_PERSIST_SYSREPO=y
+CZECHLIGHT_CFG_FS_PERSIST_KEYS=y
+CZECHLIGHT_RAUC_ROOTFS=y
+CZECHLIGHT_RAUC_COMPATIBLE="beaglebone-black"
+CZECHLIGHT_RAUC_SLOT_A_ROOTFS_DEV="/dev/mmcblk0p2"
+CZECHLIGHT_RAUC_SLOT_A_CFG_DEV="/dev/mmcblk0p3"
+CZECHLIGHT_RAUC_SLOT_B_ROOTFS_DEV="/dev/mmcblk0p4"
+CZECHLIGHT_RAUC_SLOT_B_CFG_DEV="/dev/mmcblk0p5"
CZECHLIGHT_NETCONF=y