From 9bc61e6318d0c7e70be937f4d5cd64c210d5be4b Mon Sep 17 00:00:00 2001 From: Jasper van der Neut - Stulen Date: Fri, 28 Dec 2018 11:09:24 +0100 Subject: [PATCH] Intel NUC support (#288) * Add hassos configuration for intel-nuc: * Cloned from ova config * Use default amd64 kernel config * Add support for Intel IGB type nics * Add rng-tools for better random * Build with iwlwifi module & firmware (only newer modules with iwlmvm firmware) * Include firmware for 915, which should improve power efficiency. Build display and audio as a module to make it all work. * Add intel_nuc to build script. * Change directory structure as proposed by @pvizeli * * Fix paths * Remove unused patch directory * Unduplicate barebox config. --- .../board/{ova => intel}/barebox.config | 0 .../board/intel/nuc/hassos-hook.sh | 20 ++++ .../board/intel/nuc/kernel.config | 21 ++++ buildroot-external/board/intel/nuc/meta | 7 ++ .../board/{ => intel}/ova/hassos-hook.sh | 0 .../board/{ => intel}/ova/kernel.config | 0 buildroot-external/board/{ => intel}/ova/meta | 0 .../0001-get-devicetree-from-file.patch | 0 ...-support-finding-devices-by-partuuid.patch | 0 .../patches/rauc/0001-add-i-argument-to.patch | 0 .../configs/intel_nuc_defconfig | 100 ++++++++++++++++++ buildroot-external/configs/ova_defconfig | 8 +- scripts/build-all.sh | 2 +- 13 files changed, 153 insertions(+), 5 deletions(-) rename buildroot-external/board/{ova => intel}/barebox.config (100%) create mode 100755 buildroot-external/board/intel/nuc/hassos-hook.sh create mode 100644 buildroot-external/board/intel/nuc/kernel.config create mode 100644 buildroot-external/board/intel/nuc/meta rename buildroot-external/board/{ => intel}/ova/hassos-hook.sh (100%) rename buildroot-external/board/{ => intel}/ova/kernel.config (100%) rename buildroot-external/board/{ => intel}/ova/meta (100%) rename buildroot-external/board/{ova => intel}/patches/dt-utils/0001-get-devicetree-from-file.patch (100%) rename buildroot-external/board/{ova => intel}/patches/dt-utils/0002-support-finding-devices-by-partuuid.patch (100%) rename buildroot-external/board/{ova => intel}/patches/rauc/0001-add-i-argument-to.patch (100%) create mode 100644 buildroot-external/configs/intel_nuc_defconfig diff --git a/buildroot-external/board/ova/barebox.config b/buildroot-external/board/intel/barebox.config similarity index 100% rename from buildroot-external/board/ova/barebox.config rename to buildroot-external/board/intel/barebox.config diff --git a/buildroot-external/board/intel/nuc/hassos-hook.sh b/buildroot-external/board/intel/nuc/hassos-hook.sh new file mode 100755 index 000000000..e1a22cdbe --- /dev/null +++ b/buildroot-external/board/intel/nuc/hassos-hook.sh @@ -0,0 +1,20 @@ +#!/bin/bash +# shellcheck disable=SC2155 + +function hassos_pre_image() { + local BOOT_DATA="$(path_boot_dir)" + + mkdir -p "${BOOT_DATA}/EFI/BOOT" + mkdir -p "${BOOT_DATA}/EFI/barebox" + + cp "${BINARIES_DIR}/barebox.bin" "${BOOT_DATA}/EFI/BOOT/BOOTx64.EFI" + cp "${BR2_EXTERNAL_HASSOS_PATH}/misc/barebox-state-efi.dtb" "${BOOT_DATA}/EFI/barebox/state.dtb" + + echo "console=tty1" > "${BOOT_DATA}/cmdline.txt" +} + + +function hassos_post_image() { + convert_disk_image_gz +} + diff --git a/buildroot-external/board/intel/nuc/kernel.config b/buildroot-external/board/intel/nuc/kernel.config new file mode 100644 index 000000000..9883a4ec8 --- /dev/null +++ b/buildroot-external/board/intel/nuc/kernel.config @@ -0,0 +1,21 @@ +CONFIG_EFI_STUB=y + +CONFIG_SCSI_LOWLEVEL=y +CONFIG_USB_XHCI_HCD=y + +CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y + +CONFIG_IGB=y + +CONFIG_IWLWIFI=m +CONFIG_IWLMVM=m + +CONFIG_DRM_I915=m +CONFIG_DRM_I915_CAPTURE_ERROR=y +CONFIG_DRM_I915_COMPRESS_ERROR=y +CONFIG_DRM_I915_USERPTR=y + +CONFIG_SND_HDA=m +CONFIG_SND_HDA_INTEL=m +CONFIG_SND_HDA_I915=y +CONFIG_SND_HDA_POWER_SAVE_DEFAULT=1 diff --git a/buildroot-external/board/intel/nuc/meta b/buildroot-external/board/intel/nuc/meta new file mode 100644 index 000000000..25be9438b --- /dev/null +++ b/buildroot-external/board/intel/nuc/meta @@ -0,0 +1,7 @@ +BOARD_ID=intel-nuc +BOARD_NAME="Intel NUC" +CHASSIS=embedded +BOOTLOADER=barebox +KERNEL_FILE=bzImage +BOOT_SYS=efi +DISK_SIZE=6 diff --git a/buildroot-external/board/ova/hassos-hook.sh b/buildroot-external/board/intel/ova/hassos-hook.sh similarity index 100% rename from buildroot-external/board/ova/hassos-hook.sh rename to buildroot-external/board/intel/ova/hassos-hook.sh diff --git a/buildroot-external/board/ova/kernel.config b/buildroot-external/board/intel/ova/kernel.config similarity index 100% rename from buildroot-external/board/ova/kernel.config rename to buildroot-external/board/intel/ova/kernel.config diff --git a/buildroot-external/board/ova/meta b/buildroot-external/board/intel/ova/meta similarity index 100% rename from buildroot-external/board/ova/meta rename to buildroot-external/board/intel/ova/meta diff --git a/buildroot-external/board/ova/patches/dt-utils/0001-get-devicetree-from-file.patch b/buildroot-external/board/intel/patches/dt-utils/0001-get-devicetree-from-file.patch similarity index 100% rename from buildroot-external/board/ova/patches/dt-utils/0001-get-devicetree-from-file.patch rename to buildroot-external/board/intel/patches/dt-utils/0001-get-devicetree-from-file.patch diff --git a/buildroot-external/board/ova/patches/dt-utils/0002-support-finding-devices-by-partuuid.patch b/buildroot-external/board/intel/patches/dt-utils/0002-support-finding-devices-by-partuuid.patch similarity index 100% rename from buildroot-external/board/ova/patches/dt-utils/0002-support-finding-devices-by-partuuid.patch rename to buildroot-external/board/intel/patches/dt-utils/0002-support-finding-devices-by-partuuid.patch diff --git a/buildroot-external/board/ova/patches/rauc/0001-add-i-argument-to.patch b/buildroot-external/board/intel/patches/rauc/0001-add-i-argument-to.patch similarity index 100% rename from buildroot-external/board/ova/patches/rauc/0001-add-i-argument-to.patch rename to buildroot-external/board/intel/patches/rauc/0001-add-i-argument-to.patch diff --git a/buildroot-external/configs/intel_nuc_defconfig b/buildroot-external/configs/intel_nuc_defconfig new file mode 100644 index 000000000..e797a7bda --- /dev/null +++ b/buildroot-external/configs/intel_nuc_defconfig @@ -0,0 +1,100 @@ +BR2_x86_64=y +BR2_DL_DIR="/cache/dl" +BR2_CCACHE=y +BR2_CCACHE_DIR="/cache/cc" +BR2_GLOBAL_PATCH_DIR="$(BR2_EXTERNAL_HASSOS_PATH)/patches $(BR2_EXTERNAL_HASSOS_PATH)/board/intel/patches" +BR2_TOOLCHAIN_BUILDROOT_GLIBC=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_14=y +BR2_GCC_VERSION_7_X=y +BR2_TOOLCHAIN_BUILDROOT_CXX=y +BR2_TARGET_GENERIC_HOSTNAME="hassio" +BR2_TARGET_GENERIC_ISSUE="Welcome to HassOS" +BR2_INIT_SYSTEMD=y +BR2_TARGET_GENERIC_GETTY_PORT="tty1" +# BR2_TARGET_GENERIC_REMOUNT_ROOTFS_RW is not set +BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_HASSOS_PATH)/rootfs-overlay" +BR2_ROOTFS_POST_BUILD_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-build.sh" +BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-image.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_EXTERNAL_HASSOS_PATH)/board/intel/nuc $(BR2_EXTERNAL_HASSOS_PATH)/board/intel/nuc/hassos-hook.sh" +BR2_LINUX_KERNEL=y +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.14.82" +BR2_LINUX_KERNEL_DEFCONFIG="x86_64" +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_HASSOS_PATH)/kernel/hassos-4_14.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/device-support.config $(BR2_EXTERNAL_HASSOS_PATH)/board/intel/nuc/kernel.config" +BR2_LINUX_KERNEL_LZ4=y +BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y +BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y +BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_HASSOS_PATH)/busybox.config" +BR2_PACKAGE_BUSYBOX_INDIVIDUAL_BINARIES=y +BR2_PACKAGE_JQ=y +BR2_PACKAGE_E2FSPROGS=y +BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y +BR2_PACKAGE_SQUASHFS=y +BR2_PACKAGE_LINUX_FIRMWARE=y +BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3160=y +BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_3168=y +BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_7260=y +BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_7265=y +BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_7265D=y +BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_8000=y +BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_8265=y +BR2_PACKAGE_LINUX_FIRMWARE_IWLWIFI_9XXX=y +BR2_PACKAGE_LINUX_FIRMWARE_I915=y +BR2_PACKAGE_DT_UTILS=y +BR2_PACKAGE_GPTFDISK=y +BR2_PACKAGE_GPTFDISK_SGDISK=y +BR2_PACKAGE_CA_CERTIFICATES=y +BR2_PACKAGE_LIBCGROUP=y +BR2_PACKAGE_LIBCGROUP_TOOLS=y +BR2_PACKAGE_AVAHI=y +# BR2_PACKAGE_AVAHI_AUTOIPD is not set +BR2_PACKAGE_AVAHI_DAEMON=y +BR2_PACKAGE_AVAHI_LIBDNSSD_COMPATIBILITY=y +BR2_PACKAGE_BLUEZ5_UTILS=y +BR2_PACKAGE_BLUEZ5_UTILS_CLIENT=y +BR2_PACKAGE_DHCP=y +BR2_PACKAGE_DHCP_CLIENT=y +BR2_PACKAGE_DROPBEAR=y +# BR2_PACKAGE_DROPBEAR_CLIENT is not set +# BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set +BR2_PACKAGE_NETWORK_MANAGER=y +BR2_PACKAGE_NETWORK_MANAGER_MODEM_MANAGER=y +BR2_PACKAGE_TINI=y +BR2_PACKAGE_DOCKER_ENGINE=y +BR2_PACKAGE_OPENVMTOOLS=y +BR2_PACKAGE_RAUC=y +BR2_PACKAGE_RAUC_NETWORK=y +BR2_PACKAGE_RNG_TOOLS=y +# BR2_PACKAGE_SYSTEMD_HWDB is not set +# BR2_PACKAGE_SYSTEMD_NETWORKD is not set +BR2_PACKAGE_SYSTEMD_RANDOMSEED=y +# BR2_PACKAGE_SYSTEMD_RESOLVED is not set +BR2_PACKAGE_UTIL_LINUX_PARTX=y +BR2_PACKAGE_UTIL_LINUX_ZRAMCTL=y +BR2_TARGET_ROOTFS_SQUASHFS=y +BR2_TARGET_ROOTFS_SQUASHFS4_LZ4=y +# BR2_TARGET_ROOTFS_TAR is not set +BR2_TARGET_BAREBOX=y +BR2_TARGET_BAREBOX_CUSTOM_VERSION=y +BR2_TARGET_BAREBOX_CUSTOM_VERSION_VALUE="2018.05.0" +BR2_TARGET_BAREBOX_USE_CUSTOM_CONFIG=y +BR2_TARGET_BAREBOX_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_HASSOS_PATH)/board/intel/barebox.config" +BR2_TARGET_BAREBOX_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_HASSOS_PATH)/bootloader/barebox.config" +BR2_TARGET_BAREBOX_CUSTOM_EMBEDDED_ENV_PATH="$(BR2_EXTERNAL_HASSOS_PATH)/bootloader/barebox" +BR2_PACKAGE_HOST_DOSFSTOOLS=y +BR2_PACKAGE_HOST_E2FSPROGS=y +BR2_PACKAGE_HOST_GPTFDISK=y +BR2_PACKAGE_HOST_MTOOLS=y +BR2_PACKAGE_HOST_RAUC=y +BR2_PACKAGE_HASSOS=y +BR2_PACKAGE_HASSOS_SUPERVISOR="homeassistant/amd64-hassio-supervisor" +BR2_PACKAGE_HASSOS_SUPERVISOR_VERSION="140" +BR2_PACKAGE_HASSOS_SUPERVISOR_ARGS="-e HOMEASSISTANT_REPOSITORY=homeassistant/intel-nuc-homeassistant" +BR2_PACKAGE_HASSOS_SUPERVISOR_PROFILE="hassio-supervisor" +BR2_PACKAGE_HASSOS_SUPERVISOR_PROFILE_URL="http://s3.amazonaws.com/hassio-version/apparmor.txt" +BR2_PACKAGE_HASSOS_CLI="homeassistant/amd64-hassio-cli" +BR2_PACKAGE_HASSOS_CLI_VERSION="7" +BR2_PACKAGE_HASSOS_CLI_ARGS="--network=hassio --add-host hassio:172.30.32.2" +BR2_PACKAGE_HASSOS_CLI_PROFILE="docker-default" +BR2_PACKAGE_HASSOS_APPARMOR_DIR="supervisor/apparmor" +BR2_PACKAGE_APPARMOR=y diff --git a/buildroot-external/configs/ova_defconfig b/buildroot-external/configs/ova_defconfig index 27b956ef7..83906227d 100644 --- a/buildroot-external/configs/ova_defconfig +++ b/buildroot-external/configs/ova_defconfig @@ -2,7 +2,7 @@ BR2_x86_64=y BR2_DL_DIR="/cache/dl" BR2_CCACHE=y BR2_CCACHE_DIR="/cache/cc" -BR2_GLOBAL_PATCH_DIR="$(BR2_EXTERNAL_HASSOS_PATH)/patches $(BR2_EXTERNAL_HASSOS_PATH)/board/ova/patches" +BR2_GLOBAL_PATCH_DIR="$(BR2_EXTERNAL_HASSOS_PATH)/patches $(BR2_EXTERNAL_HASSOS_PATH)/board/intel/patches" BR2_TOOLCHAIN_BUILDROOT_GLIBC=y BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_14=y BR2_GCC_VERSION_7_X=y @@ -15,12 +15,12 @@ BR2_TARGET_GENERIC_GETTY_PORT="tty1" BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_HASSOS_PATH)/rootfs-overlay" BR2_ROOTFS_POST_BUILD_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-build.sh" BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_HASSOS_PATH)/scripts/post-image.sh" -BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_EXTERNAL_HASSOS_PATH)/board/ova $(BR2_EXTERNAL_HASSOS_PATH)/board/ova/hassos-hook.sh" +BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_EXTERNAL_HASSOS_PATH)/board/intel/ova $(BR2_EXTERNAL_HASSOS_PATH)/board/intel/ova/hassos-hook.sh" BR2_LINUX_KERNEL=y BR2_LINUX_KERNEL_CUSTOM_VERSION=y BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.14.82" BR2_LINUX_KERNEL_DEFCONFIG="x86_64" -BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_HASSOS_PATH)/kernel/hassos-4_14.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/device-support.config $(BR2_EXTERNAL_HASSOS_PATH)/board/ova/kernel.config" +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_HASSOS_PATH)/kernel/hassos-4_14.config $(BR2_EXTERNAL_HASSOS_PATH)/kernel/device-support.config $(BR2_EXTERNAL_HASSOS_PATH)/board/intel/ova/kernel.config" BR2_LINUX_KERNEL_LZ4=y BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y @@ -67,7 +67,7 @@ BR2_TARGET_BAREBOX=y BR2_TARGET_BAREBOX_CUSTOM_VERSION=y BR2_TARGET_BAREBOX_CUSTOM_VERSION_VALUE="2018.05.0" BR2_TARGET_BAREBOX_USE_CUSTOM_CONFIG=y -BR2_TARGET_BAREBOX_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_HASSOS_PATH)/board/ova/barebox.config" +BR2_TARGET_BAREBOX_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_HASSOS_PATH)/board/intel/barebox.config" BR2_TARGET_BAREBOX_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_HASSOS_PATH)/bootloader/barebox.config" BR2_TARGET_BAREBOX_CUSTOM_EMBEDDED_ENV_PATH="$(BR2_EXTERNAL_HASSOS_PATH)/bootloader/barebox" BR2_PACKAGE_HOST_DOSFSTOOLS=y diff --git a/scripts/build-all.sh b/scripts/build-all.sh index 2e345c98e..50d15ab04 100755 --- a/scripts/build-all.sh +++ b/scripts/build-all.sh @@ -3,7 +3,7 @@ set -e mkdir -p /build/release -all_platforms=(ova rpi rpi0_w rpi2 rpi3 rpi3_64 tinker odroid_c2) +all_platforms=(ova rpi rpi0_w rpi2 rpi3 rpi3_64 tinker odroid_c2 intel_nuc) for platform in "${all_platforms[@]}"; do make -C /build/buildroot BR2_EXTERNAL=/build/buildroot-external \ "${platform}_defconfig"