tinker: Initial support (#140)

* tinker: initial support

* Fix info

* Fix uboot defconfig

* Split kernel config

* Fix name

* Add post-image

* Init different boot

* Add SPL images

* Dynamic rauc config

* Support SPL for OTA

* Fix expand script style

* Fix SPL

* Bump build u-boot

* Cleanup

* Add cmd for scritps

* Use kernel from armbian

* Fix u-boot

* Add bluetooth support

* Fix bt

* Fix env

* Change uart debug like rpi

* move config
This commit is contained in:
Pascal Vizeli
2018-08-03 13:21:55 +02:00
committed by GitHub
parent 48500a6c6e
commit fbb45e1544
111 changed files with 1402795 additions and 93 deletions

View File

@@ -9,7 +9,8 @@ KERNEL1_UUID="fc02a4f0-5350-406f-93a2-56cbed636b5f"
OVERLAY_UUID="f1326040-5236-40eb-b683-aaa100a9afcf"
DATA_UUID="a52a4597-fa3a-4851-aefd-2fbe9f849079"
BOOT_SIZE=32M
SPL_SIZE=8M
BOOT_SIZE=(32M 24M)
BOOTSTATE_SIZE=8M
SYSTEM_SIZE=256M
KERNEL_SIZE=24M
@@ -17,12 +18,31 @@ OVERLAY_SIZE=96M
DATA_SIZE=1G
function get_boot_size() {
if [ "${BOOT_SYS}" == "spl" ]; then
echo "${BOOT_SIZE[1]}"
else
echo "${BOOT_SIZE[0]}"
fi
}
function create_spl_image() {
local spl_data="${BINARIES_DIR}/${1}"
local spl_img="${BINARIES_DIR}/spl.img"
local spl_seek=$(($2-2))
dd if=/dev/zero of=${spl_img} bs=512 count=16382
dd if=${spl_data} of=${spl_img} conv=notrunc bs=512 seek=${spl_seek}
}
function create_boot_image() {
local boot_data="${BINARIES_DIR}/boot"
local boot_img="${BINARIES_DIR}/boot.vfat"
echo "mtools_skip_check=1" > ~/.mtoolsrc
dd if=/dev/zero of=${boot_img} bs=${BOOT_SIZE} count=1
dd if=/dev/zero of=${boot_img} bs=$(get_boot_size) count=1
mkfs.vfat -n "hassos-boot" ${boot_img}
mcopy -i ${boot_img} -sv ${boot_data}/* ::
}
@@ -68,46 +88,69 @@ function create_disk_image() {
local hdd_img="$(hassos_image_name img)"
local hdd_count=${1:-2}
local loop_dev="/dev/mapper/$(losetup -f | cut -d'/' -f3)"
local boot_offset=0
local rootfs_offset=0
local kernel_offset=0
local overlay_offset=0
local data_offset=0
##
# Write new image & GPT
dd if=/dev/zero of=${hdd_img} bs=1G count=${hdd_count}
sgdisk -o ${hdd_img}
##
# Partition layout
# SPL
if [ "${BOOT_SYS}" == "spl" ]; then
sgdisk -j 16384 ${hdd_img}
fi
# boot
boot_offset="$(sgdisk -F ${hdd_img})"
sgdisk -n 1:0:+${BOOT_SIZE} -c 1:"hassos-boot" -t 1:"C12A7328-F81F-11D2-BA4B-00A0C93EC93B" -u 1:${BOOT_UUID} ${hdd_img}
sgdisk -n 0:${boot_offset}:+$(get_boot_size) -c 0:"hassos-boot" -t 0:"C12A7328-F81F-11D2-BA4B-00A0C93EC93B" -u 0:${BOOT_UUID} ${hdd_img}
# Kernel 0
kernel_offset="$(sgdisk -F ${hdd_img})"
sgdisk -n 2:0:+${KERNEL_SIZE} -c 2:"hassos-kernel0" -t 2:"0FC63DAF-8483-4772-8E79-3D69D8477DE4" -u 2:${KERNEL0_UUID} ${hdd_img}
sgdisk -n 0:0:+${KERNEL_SIZE} -c 0:"hassos-kernel0" -t 0:"0FC63DAF-8483-4772-8E79-3D69D8477DE4" -u 0:${KERNEL0_UUID} ${hdd_img}
# System 0
rootfs_offset="$(sgdisk -F ${hdd_img})"
sgdisk -n 3:0:+${SYSTEM_SIZE} -c 3:"hassos-system0" -t 3:"0FC63DAF-8483-4772-8E79-3D69D8477DE4" -u 3:${SYSTEM0_UUID} ${hdd_img}
sgdisk -n 0:0:+${SYSTEM_SIZE} -c 0:"hassos-system0" -t 0:"0FC63DAF-8483-4772-8E79-3D69D8477DE4" -u 0:${SYSTEM0_UUID} ${hdd_img}
sgdisk -n 4:0:+${KERNEL_SIZE} -c 4:"hassos-kernel1" -t 4:"0FC63DAF-8483-4772-8E79-3D69D8477DE4" -u 4:${KERNEL1_UUID} ${hdd_img}
# Kernel 1
sgdisk -n 0:0:+${KERNEL_SIZE} -c 0:"hassos-kernel1" -t 0:"0FC63DAF-8483-4772-8E79-3D69D8477DE4" -u 0:${KERNEL1_UUID} ${hdd_img}
sgdisk -n 5:0:+${SYSTEM_SIZE} -c 5:"hassos-system1" -t 5:"0FC63DAF-8483-4772-8E79-3D69D8477DE4" -u 5:${SYSTEM1_UUID} ${hdd_img}
# System 1
sgdisk -n 0:0:+${SYSTEM_SIZE} -c 0:"hassos-system1" -t 0:"0FC63DAF-8483-4772-8E79-3D69D8477DE4" -u 0:${SYSTEM1_UUID} ${hdd_img}
sgdisk -n 6:0:+${BOOTSTATE_SIZE} -c 6:"hassos-bootstate" -u 6:${BOOTSTATE_UUID} ${hdd_img}
# Bootstate
sgdisk -n 0:0:+${BOOTSTATE_SIZE} -c 0:"hassos-bootstate" -u 0:${BOOTSTATE_UUID} ${hdd_img}
# Overlay
overlay_offset="$(sgdisk -F ${hdd_img})"
sgdisk -n 7:0:+${OVERLAY_SIZE} -c 7:"hassos-overlay" -t 7:"0FC63DAF-8483-4772-8E79-3D69D8477DE4" -u 7:${OVERLAY_UUID} ${hdd_img}
sgdisk -n 0:0:+${OVERLAY_SIZE} -c 0:"hassos-overlay" -t 0:"0FC63DAF-8483-4772-8E79-3D69D8477DE4" -u 0:${OVERLAY_UUID} ${hdd_img}
# Data
data_offset="$(sgdisk -F ${hdd_img})"
sgdisk -n 8:0:+${DATA_SIZE} -c 8:"hassos-data" -t 8:"0FC63DAF-8483-4772-8E79-3D69D8477DE4" -u 8:${DATA_UUID} ${hdd_img}
sgdisk -n 0:0:+${DATA_SIZE} -c 0:"hassos-data" -t 0:"0FC63DAF-8483-4772-8E79-3D69D8477DE4" -u 0:${DATA_UUID} ${hdd_img}
##
# Write Images
sgdisk -v
dd if=${boot_img} of=${hdd_img} conv=notrunc bs=512 obs=512 seek=${boot_offset}
dd if=${kernel_img} of=${hdd_img} conv=notrunc bs=512 obs=512 seek=${kernel_offset}
dd if=${rootfs_img} of=${hdd_img} conv=notrunc bs=512 obs=512 seek=${rootfs_offset}
dd if=${overlay_img} of=${hdd_img} conv=notrunc bs=512 obs=512 seek=${overlay_offset}
dd if=${data_img} of=${hdd_img} conv=notrunc bs=512 obs=512 seek=${data_offset}
dd if=${boot_img} of=${hdd_img} conv=notrunc bs=512 seek=${boot_offset}
dd if=${kernel_img} of=${hdd_img} conv=notrunc bs=512 seek=${kernel_offset}
dd if=${rootfs_img} of=${hdd_img} conv=notrunc bs=512 seek=${rootfs_offset}
dd if=${overlay_img} of=${hdd_img} conv=notrunc bs=512 seek=${overlay_offset}
dd if=${data_img} of=${hdd_img} conv=notrunc bs=512 seek=${data_offset}
# Fix boot
if [ "${BOOT_SYS}" == "mbr" ]; then
fix_disk_image_mbr
elif [ "${BOOT_SYS}" == "spl" ]; then
fix_disk_image_spl
fi
}
@@ -119,6 +162,15 @@ function fix_disk_image_mbr() {
}
function fix_disk_image_spl() {
local hdd_img="$(hassos_image_name img)"
local spl_img="${BINARIES_DIR}/spl.img"
sgdisk -t 1:"E3C9E316-0B5C-4DB8-817D-F92DF00215AE" ${hdd_img}
dd if=${spl_img} of=${hdd_img} conv=notrunc bs=512 seek=2
}
function convert_disk_image_vmdk() {
local hdd_img="$(hassos_image_name img)"
local hdd_vmdk="$(hassos_image_name vmdk)"

0
buildroot-external/scripts/name.sh Normal file → Executable file
View File

12
buildroot-external/scripts/ota.sh Normal file → Executable file
View File

@@ -6,6 +6,7 @@ function create_ota_update() {
local boot="${BINARIES_DIR}/boot.vfat"
local kernel="${BINARIES_DIR}/kernel.ext4"
local rootfs="${BINARIES_DIR}/rootfs.squashfs"
local spl="${BINARIES_DIR}/spl.img"
local key="/build/key.pem"
local cert="/build/cert.pem"
@@ -32,5 +33,16 @@ function create_ota_update() {
echo "filename=rootfs.img"
) > ${rauc_folder}/manifest.raucm
# SPL
if [ "${BOOT_SYS}" != "spl" ]; then
cp -f ${spl} ${rauc_folder}/spl.img
(
echo "[image.spl]"
echo "filename=spl.img"
echo "hooks=install"
) >> ${rauc_folder}/manifest.raucm
fi
rauc bundle -d --cert=${cert} --key=${key} ${rauc_folder} ${ota_file}
}

View File

@@ -8,6 +8,7 @@ BOARD_DIR=${2}
. ${BR2_EXTERNAL_HASSOS_PATH}/info
. ${BOARD_DIR}/info
. ${SCRIPT_DIR}/name.sh
. ${SCRIPT_DIR}/rauc.sh
# HassOS tasks
@@ -33,21 +34,9 @@ install_hassos_cli
echo "DEPLOYMENT=${DEPLOYMENT}"
) > ${TARGET_DIR}/etc/machine-info
# Settup rauc
sed -i "s/%COMPATIBLE%/$(hassos_rauc_compatible)/g" ${TARGET_DIR}/etc/rauc/system.conf
sed -i "s/%BOOTLOADER%/${BOOTLOADER}/g" ${TARGET_DIR}/etc/rauc/system.conf
# Settup the correct CA
if [ "${DEPLOYMENT}" == "production" ]; then
cp ${BR2_EXTERNAL_HASSOS_PATH}/misc/rel-ca.pem ${TARGET_DIR}/etc/rauc/keyring.pem
else
cp ${BR2_EXTERNAL_HASSOS_PATH}/misc/dev-ca.pem ${TARGET_DIR}/etc/rauc/keyring.pem
fi
# Bootloader options
if [ "${BOOTLOADER}" == "uboot" ]; then
cp ${BR2_EXTERNAL_HASSOS_PATH}/misc/fw_env.config ${TARGET_DIR}/etc/fw_env.config
else
cp ${BR2_EXTERNAL_HASSOS_PATH}/misc/barebox-state-efi.dtb ${TARGET_DIR}/etc/barebox-state.dtb
fi
# Setup rauc
write_rauc_config
install_rauc_certs
install_bootloader_config

View File

@@ -0,0 +1,83 @@
#!/bin/bash
set -e
function _create_rauc_header() {
(
echo "[system]"
echo "compatible=$(hassos_rauc_compatible)"
echo "mountprefix=/run/rauc"
echo "statusfile=/mnt/data/rauc.db"
echo "bootloader=${BOOTLOADER}"
echo "[handlers]"
echo "pre-install=/usr/lib/rauc/pre-install"
echo "post-install=/usr/lib/rauc/post-install"
echo "[keyring]"
echo "path=/etc/rauc/keyring.pem"
) > ${TARGET_DIR}/etc/rauc/system.conf
}
function _write_rauc_boot() {
(
echo "[slot.boot.0]"
echo "device=/dev/disk/by-partlabel/hassos-boot"
echo "type=vfat"
) >> ${TARGET_DIR}/etc/rauc/system.conf
if [ "${BOOT_SYS}" != "spl" ]; then
return 0
fi
(
echo "[slot.spl.0]"
echo "device=/dev/disk/by-partlabel/hassos-boot"
echo "type=raw"
) >> ${TARGET_DIR}/etc/rauc/system.conf
}
function _write_rauc_system() {
local slot_num=${1}
local slot_name=${2}
(
echo "[slot.kernel.${slot_num}]"
echo "device=/dev/disk/by-partlabel/hassos-kernel${slot_num}"
echo "type=ext4"
echo "bootname=${slot_name}"
echo "[slot.rootfs.${slot_num}]"
echo "device=/dev/disk/by-partlabel/hassos-system${slot_num}"
echo "type=raw"
echo "parent=kernel.${slot_num}"
) >> ${TARGET_DIR}/etc/rauc/system.conf
}
function write_rauc_config() {
_create_rauc_header
_write_rauc_boot
_write_rauc_system 0 A
_write_rauc_system 1 B
}
function install_rauc_certs() {
if [ "${DEPLOYMENT}" == "production" ]; then
cp ${BR2_EXTERNAL_HASSOS_PATH}/misc/rel-ca.pem ${TARGET_DIR}/etc/rauc/keyring.pem
else
cp ${BR2_EXTERNAL_HASSOS_PATH}/misc/dev-ca.pem ${TARGET_DIR}/etc/rauc/keyring.pem
fi
}
function install_bootloader_config() {
if [ "${BOOTLOADER}" == "uboot" ]; then
cp ${BR2_EXTERNAL_HASSOS_PATH}/misc/fw_env.config ${TARGET_DIR}/etc/fw_env.config
else
cp ${BR2_EXTERNAL_HASSOS_PATH}/misc/barebox-state-efi.dtb ${TARGET_DIR}/etc/barebox-state.dtb
fi
}

0
buildroot-external/scripts/rootfs-layer.sh Normal file → Executable file
View File