diff --git a/embedded/build.sh b/embedded/build.sh index 80ff4cb..6800abe 100755 --- a/embedded/build.sh +++ b/embedded/build.sh @@ -3,10 +3,11 @@ set -e BUILDROOT=buildroot -BUILDROOT_TAR=buildroot-20220122.tar.bz2 +BUILDROOT_TAR=buildroot-20231002.tar.bz2 if [ ! -e $BUILDROOT ]; then tar xjf $BUILDROOT_TAR + patch -p0 < buildroot-mesa3d-pi5.patch fi if [ ! -e $BUILDROOT/.config ]; then @@ -24,7 +25,7 @@ make -C $BUILDROOT BR2_EXTERNAL="$PWD/imager" # # Copy Linux kernel and initramfs -cp $BUILDROOT/output/images/rootfs.cpio.zst $BUILDROOT/output/images/zImage output +cp $BUILDROOT/output/images/rootfs.cpio.zst $BUILDROOT/output/images/Image.gz output # Raspberry Pi firmware files cp $BUILDROOT/output/images/rpi-firmware/start4.elf output cp $BUILDROOT/output/images/rpi-firmware/fixup4.dat output @@ -36,10 +37,13 @@ touch output/bootcode.bin mkdir -p output/overlays mv -f output/dwc2-overlay.dtb output/overlays/dwc2.dtbo -mv -f output/vc4-fkms-v3d-pi4-overlay.dtb output/overlays/vc4-fkms-v3d-pi4.dtbo +mv -f output/vc4-kms-v3d-pi5-overlay.dtb output/overlays/vc4-kms-v3d-pi5.dtbo mv -f output/vc4-kms-v3d-pi4-overlay.dtb output/overlays/vc4-kms-v3d-pi4.dtbo mv -f output/disable-bt-overlay.dtb output/overlays/disable-bt.dtbo mv -f output/disable-wifi-overlay.dtb output/overlays/disable-wifi.dtbo +mv -f output/disable-bt-pi5-overlay.dtb output/overlays/disable-bt-pi5.dtbo +mv -f output/disable-wifi-pi5-overlay.dtb output/overlays/disable-wifi-pi5.dtbo +mv -f output/overlay_map.dtb output/overlays/overlay_map.dtb echo echo Build complete. Files are in output folder. diff --git a/embedded/buildroot-20220122.tar.bz2 b/embedded/buildroot-20220122.tar.bz2 deleted file mode 100644 index 4afa46e..0000000 Binary files a/embedded/buildroot-20220122.tar.bz2 and /dev/null differ diff --git a/embedded/buildroot-20231002.tar.bz2 b/embedded/buildroot-20231002.tar.bz2 new file mode 100644 index 0000000..ca8a6c4 Binary files /dev/null and b/embedded/buildroot-20231002.tar.bz2 differ diff --git a/embedded/buildroot-mesa3d-pi5.patch b/embedded/buildroot-mesa3d-pi5.patch new file mode 100644 index 0000000..4e18c32 --- /dev/null +++ b/embedded/buildroot-mesa3d-pi5.patch @@ -0,0 +1,150 @@ +diff -urN buildroot/package/mesa3d.orig/0004-Fix-uClibc-build.patch buildroot/package/mesa3d/0004-Fix-uClibc-build.patch +--- buildroot/package/mesa3d.orig/0004-Fix-uClibc-build.patch 2023-10-01 23:05:28.000000000 +0200 ++++ buildroot/package/mesa3d/0004-Fix-uClibc-build.patch 1970-01-01 01:00:00.000000000 +0100 +@@ -1,69 +0,0 @@ +-From 09ce52fe375a6fc1ccf51b6b691aaa2c3f53fbd5 Mon Sep 17 00:00:00 2001 +-From: Bernd Kuhls +-Date: Fri, 3 Jun 2022 16:26:03 +0200 +-Subject: [PATCH] Fix uClibc build +-MIME-Version: 1.0 +-Content-Type: text/plain; charset=UTF-8 +-Content-Transfer-Encoding: 8bit +- +-Fixes build errors with uClibc and gcc-9.3.0: +- +-../src/gallium/drivers/lima/lima_texture.c:47:15: error: expected +- declaration specifiers or ‘...’ before ‘__builtin_offsetof’ +- 47 | static_assert(offsetof(lima_tex_desc, va) == 24, +- "lima_tex_desc->va offset isn't 24"); +- +-../src/egl/main/egldisplay.c: In function ‘_eglGetNativePlatformFromEnv’: +- ../src/egl/main/egldisplay.c:101:4: error: implicit declaration of +- function ‘static_assert’ [-Werror=implicit-function-declaration] 101 | +- static_assert(ARRAY_SIZE(egl_platforms) == _EGL_NUM_PLATFORMS, +- +-../src/util/macros.h:74:4: error: implicit declaration of function +- ‘static_assert’ [-Werror=implicit-function-declaration] +- 74 | static_assert(cond, #cond); \ +- | ^~~~~~~~~~~~~ +- +-Upstream: https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13898 +- +-Signed-off-by: Bernd Kuhls +---- +- src/util/compiler.h | 10 ++++++++++ +- src/util/macros.h | 1 + +- 2 files changed, 11 insertions(+) +- +-diff --git a/src/util/compiler.h b/src/util/compiler.h +-index d184ad455af..b5c56807acc 100644 +---- a/src/util/compiler.h +-+++ b/src/util/compiler.h +-@@ -36,6 +36,16 @@ +- +- #include +- +-+/* +-+ * C11 static_assert() macro +-+ * assert.h only defines that name for C11 and above +-+ */ +-+#if !defined(__cplusplus) +-+#ifndef static_assert +-+#define static_assert _Static_assert +-+#endif +-+#endif +-+ +- #include "util/macros.h" +- +- +-diff --git a/src/util/macros.h b/src/util/macros.h +-index 22b18303826..8f73ee72693 100644 +---- a/src/util/macros.h +-+++ b/src/util/macros.h +-@@ -27,6 +27,7 @@ +- #include +- #include +- #include +-+#include "util/compiler.h" +- +- /* Compute the size of an array */ +- #ifndef ARRAY_SIZE +--- +-2.34.1 +- +diff -urN buildroot/package/mesa3d.orig/0006-meson-ensure-i915-Gallium-driver-includes-Intel-sour.patch buildroot/package/mesa3d/0006-meson-ensure-i915-Gallium-driver-includes-Intel-sour.patch +--- buildroot/package/mesa3d.orig/0006-meson-ensure-i915-Gallium-driver-includes-Intel-sour.patch 2023-10-01 23:05:28.000000000 +0200 ++++ buildroot/package/mesa3d/0006-meson-ensure-i915-Gallium-driver-includes-Intel-sour.patch 1970-01-01 01:00:00.000000000 +0100 +@@ -1,46 +0,0 @@ +-From cd861b7f38e448822ce765aee61304d1e0a3a8b5 Mon Sep 17 00:00:00 2001 +-From: James Knight +-Date: Thu, 13 Apr 2023 16:38:51 -0400 +-Subject: meson: ensure i915 Gallium driver includes Intel sources +- +-Ensure builds flag the use of Intel sources when the i915 Gallium driver +-is configured (`-Dgallium-drivers=i915`). Otherwise, a build may fail if +-other Intel-based configuration options are not enabled: +- +- ./src/gallium/winsys/i915/drm/meson.build:21:0: ERROR: Unknown variable "libintel_common". +- +-Signed-off-by: James Knight +-Part-of: +- +-Upstream: https://gitlab.freedesktop.org/mesa/mesa/-/commit/cd861b7f38e448822ce765aee61304d1e0a3a8b5 +- +-Signed-off-by: Bernd Kuhls +---- +- meson.build | 9 ++++++++- +- 1 file changed, 8 insertions(+), 1 deletion(-) +- +-(limited to 'meson.build') +- +-diff --git a/meson.build b/meson.build +-index 23d2d965b37..a3e3c5478a8 100644 +---- a/meson.build +-+++ b/meson.build +-@@ -245,7 +245,14 @@ with_microsoft_vk = _vulkan_drivers.contains('microsoft-experimental') +- with_any_vk = _vulkan_drivers.length() != 0 +- +- with_any_broadcom = with_gallium_vc4 or with_gallium_v3d or with_broadcom_vk +--with_any_intel = with_intel_vk or with_intel_hasvk or with_gallium_iris or with_gallium_crocus or with_intel_tools +-+with_any_intel = [ +-+ with_gallium_crocus, +-+ with_gallium_i915, +-+ with_gallium_iris, +-+ with_intel_hasvk, +-+ with_intel_tools, +-+ with_intel_vk, +-+].contains(true) +- +- if with_swrast_vk and not with_gallium_softpipe +- error('swrast vulkan requires gallium swrast') +--- +-cgit v1.2.1 +- +diff -urN buildroot/package/mesa3d.orig/mesa3d.hash buildroot/package/mesa3d/mesa3d.hash +--- buildroot/package/mesa3d.orig/mesa3d.hash 2023-10-01 23:05:28.000000000 +0200 ++++ buildroot/package/mesa3d/mesa3d.hash 1970-01-01 01:00:00.000000000 +0100 +@@ -1,5 +0,0 @@ +-# From https://lists.freedesktop.org/archives/mesa-announce/2023-September/000730.html +-sha256 45434ff91a709844130a3174d9c0ef39c6b50725b2bb0c13e736f36134db14ad mesa-23.1.8.tar.xz +-sha512 02dc6f8b10dd3827a2b62fba3035726b1b60ec0c3188817deea2ad14f80f332a37272e9f15c5f653f20cecb14f8ff91697d73c89afc83674c19b686a674b677d mesa-23.1.8.tar.xz +-# License +-sha256 a00275a53178e2645fb65be99a785c110513446a5071ff2c698ed260ad917d75 docs/license.rst +diff -urN buildroot/package/mesa3d.orig/mesa3d.mk buildroot/package/mesa3d/mesa3d.mk +--- buildroot/package/mesa3d.orig/mesa3d.mk 2023-10-01 23:05:28.000000000 +0200 ++++ buildroot/package/mesa3d/mesa3d.mk 2023-10-16 22:07:23.863228341 +0200 +@@ -4,10 +4,10 @@ + # + ################################################################################ + +-# When updating the version, please also update mesa3d-headers +-MESA3D_VERSION = 23.1.8 +-MESA3D_SOURCE = mesa-$(MESA3D_VERSION).tar.xz +-MESA3D_SITE = https://archive.mesa3d.org ++# gitid that has Pi 5 support ++MESA3D_VERSION = cba898a53059b12b948fba7c69634a033c6dccad ++MESA3D_SITE = https://gitlab.freedesktop.org/mesa/mesa.git ++MESA3D_SITE_METHOD = git + MESA3D_LICENSE = MIT, SGI, Khronos + MESA3D_LICENSE_FILES = docs/license.rst + MESA3D_CPE_ID_VENDOR = mesa3d diff --git a/embedded/imager/board/bcm2711_defconfig_minus_modules b/embedded/imager/board/bcm2711_defconfig_minus_modules index 5aa3952..a49abc6 100644 --- a/embedded/imager/board/bcm2711_defconfig_minus_modules +++ b/embedded/imager/board/bcm2711_defconfig_minus_modules @@ -1,17 +1,21 @@ -CONFIG_LOCALVERSION="-v7l" +CONFIG_LOCALVERSION="-v8" # CONFIG_LOCALVERSION_AUTO is not set CONFIG_SYSVIPC=y CONFIG_POSIX_MQUEUE=y CONFIG_GENERIC_IRQ_DEBUGFS=y CONFIG_NO_HZ=y CONFIG_HIGH_RES_TIMERS=y -CONFIG_PREEMPT_VOLUNTARY=y +CONFIG_BPF_SYSCALL=y +CONFIG_BPF_JIT=y +CONFIG_PREEMPT=y CONFIG_BSD_PROCESS_ACCT=y CONFIG_BSD_PROCESS_ACCT_V3=y CONFIG_TASKSTATS=y CONFIG_TASK_DELAY_ACCT=y CONFIG_TASK_XACCT=y CONFIG_TASK_IO_ACCOUNTING=y +CONFIG_PSI=y +CONFIG_PSI_DEFAULT_DISABLED=y CONFIG_IKCONFIG_PROC=y CONFIG_MEMCG=y CONFIG_BLK_CGROUP=y @@ -25,21 +29,28 @@ CONFIG_CGROUP_PERF=y CONFIG_CGROUP_BPF=y CONFIG_NAMESPACES=y CONFIG_USER_NS=y +CONFIG_CHECKPOINT_RESTORE=y CONFIG_SCHED_AUTOGROUP=y CONFIG_BLK_DEV_INITRD=y -CONFIG_BPF_SYSCALL=y CONFIG_EMBEDDED=y -# CONFIG_COMPAT_BRK is not set CONFIG_PROFILING=y CONFIG_ARCH_BCM=y CONFIG_ARCH_BCM2835=y -CONFIG_ARM_LPAE=y -# CONFIG_CACHE_L2X0 is not set -CONFIG_SMP=y -CONFIG_HIGHMEM=y -CONFIG_UACCESS_WITH_MEMCPY=y -# CONFIG_ATAGS is not set +CONFIG_ARCH_BRCMSTB=y +# CONFIG_CAVIUM_ERRATUM_22375 is not set +# CONFIG_CAVIUM_ERRATUM_23154 is not set +# CONFIG_CAVIUM_ERRATUM_27456 is not set +CONFIG_COMPAT=y +CONFIG_ARMV8_DEPRECATED=y +CONFIG_SWP_EMULATION=y +CONFIG_CP15_BARRIER_EMULATION=y +CONFIG_SETEND_EMULATION=y +CONFIG_RANDOMIZE_BASE=y CONFIG_CMDLINE="console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait" +# CONFIG_SUSPEND is not set +CONFIG_PM=y +CONFIG_PM_DEBUG=y +CONFIG_CPU_IDLE=y CONFIG_CPU_FREQ=y CONFIG_CPU_FREQ_STAT=y CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE=y @@ -50,28 +61,27 @@ CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y CONFIG_CPUFREQ_DT=y CONFIG_ARM_RASPBERRYPI_CPUFREQ=y -CONFIG_VFP=y -CONFIG_NEON=y -CONFIG_KERNEL_MODE_NEON=y -# CONFIG_SUSPEND is not set -CONFIG_PM=y -CONFIG_RASPBERRYPI_FIRMWARE=y +CONFIG_VIRTUALIZATION=y +CONFIG_KVM=y CONFIG_JUMP_LABEL=y CONFIG_MODULES=y CONFIG_MODULE_UNLOAD=y CONFIG_MODVERSIONS=y CONFIG_MODULE_SRCVERSION_ALL=y +CONFIG_MODULE_COMPRESS_XZ=y CONFIG_BLK_DEV_THROTTLING=y CONFIG_PARTITION_ADVANCED=y CONFIG_MAC_PARTITION=y -CONFIG_CLEANCACHE=y -CONFIG_FRONTSWAP=y -CONFIG_CMA=y CONFIG_ZSWAP=y +# CONFIG_COMPAT_BRK is not set +CONFIG_CMA=y +CONFIG_LRU_GEN=y +CONFIG_LRU_GEN_ENABLED=y CONFIG_NET=y CONFIG_PACKET=y CONFIG_UNIX=y -CONFIG_XFRM_USER=y +CONFIG_XFRM_SUB_POLICY=y +CONFIG_XFRM_STATISTICS=y CONFIG_INET=y CONFIG_IP_MULTICAST=y CONFIG_IP_ADVANCED_ROUTER=y @@ -94,12 +104,15 @@ CONFIG_IPV6_SUBTREES=y CONFIG_IPV6_MROUTE=y CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y CONFIG_IPV6_PIMSM_V2=y +CONFIG_MPTCP=y +CONFIG_NETWORK_PHY_TIMESTAMPING=y CONFIG_NETFILTER=y CONFIG_NF_CONNTRACK_ZONES=y CONFIG_NF_CONNTRACK_EVENTS=y CONFIG_NF_CONNTRACK_TIMESTAMP=y CONFIG_NF_TABLES_INET=y CONFIG_NF_TABLES_NETDEV=y +CONFIG_IP_VS_IPV6=y CONFIG_IP_VS_PROTO_TCP=y CONFIG_IP_VS_PROTO_UDP=y CONFIG_IP_VS_PROTO_ESP=y @@ -111,6 +124,7 @@ CONFIG_L2TP_V3=y CONFIG_VLAN_8021Q_GVRP=y CONFIG_NET_SCHED=y CONFIG_CLS_U32_MARK=y +CONFIG_NET_CLS_BPF=y CONFIG_NET_EMATCH=y CONFIG_NET_CLS_ACT=y CONFIG_GACT_PROB=y @@ -126,12 +140,15 @@ CONFIG_MAC80211_MESH=y CONFIG_RFKILL_INPUT=y CONFIG_PCI=y CONFIG_PCIEPORTBUS=y -# CONFIG_PCIEASPM is not set -CONFIG_PCI_MSI=y -CONFIG_PCIE_BRCMSTB=y +CONFIG_PCIEAER=y +CONFIG_PCIEASPM_POWERSAVE=y +CONFIG_PCIE_DPC=y CONFIG_UEVENT_HELPER=y CONFIG_DEVTMPFS=y CONFIG_DEVTMPFS_MOUNT=y +# CONFIG_BRCMSTB_GISB_ARB is not set +CONFIG_RASPBERRYPI_FIRMWARE=y +# CONFIG_EFI_VARS_PSTORE is not set CONFIG_OF_CONFIGFS=y CONFIG_BLK_DEV_LOOP=y CONFIG_BLK_DEV_RAM=y @@ -143,6 +160,7 @@ CONFIG_SCSI_ISCSI_ATTRS=y CONFIG_MD=y CONFIG_NETDEVICES=y CONFIG_BCMGENET=y +CONFIG_MACB=y CONFIG_MICREL_PHY=y CONFIG_PPP_FILTER=y CONFIG_PPP_MULTILINK=y @@ -175,13 +193,12 @@ CONFIG_INPUT_TOUCHSCREEN=y CONFIG_INPUT_MISC=y CONFIG_BRCM_CHAR_DRIVERS=y CONFIG_BCM_VCIO=y -CONFIG_BCM2835_DEVGPIOMEM=y # CONFIG_LEGACY_PTYS is not set CONFIG_SERIAL_8250=y # CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set CONFIG_SERIAL_8250_CONSOLE=y # CONFIG_SERIAL_8250_DMA is not set -CONFIG_SERIAL_8250_NR_UARTS=1 +CONFIG_SERIAL_8250_NR_UARTS=5 CONFIG_SERIAL_8250_RUNTIME_UARTS=0 CONFIG_SERIAL_8250_EXTENDED=y CONFIG_SERIAL_8250_SHARE_IRQ=y @@ -193,30 +210,33 @@ CONFIG_SERIAL_SC16IS7XX_SPI=y CONFIG_SERIAL_DEV_BUS=y CONFIG_TTY_PRINTK=y CONFIG_HW_RANDOM=y -CONFIG_RAW_DRIVER=y -CONFIG_RANDOM_TRUST_BOOTLOADER=y CONFIG_I2C=y CONFIG_SPI=y +CONFIG_SPI_DW_DMA=y CONFIG_SPI_SLAVE=y +CONFIG_PINCTRL_RP1=y +CONFIG_PINCTRL_BCM2712=y CONFIG_GPIO_SYSFS=y CONFIG_GPIO_BCM_VIRT=y CONFIG_GPIO_PCA953X_IRQ=y CONFIG_GPIO_STMPE=y -CONFIG_POWER_RESET=y +# CONFIG_POWER_RESET_BRCMSTB is not set CONFIG_POWER_RESET_GPIO=y -CONFIG_THERMAL=y CONFIG_BCM2711_THERMAL=y +CONFIG_BCM2835_THERMAL=y CONFIG_WATCHDOG=y CONFIG_BCM2835_WDT=y CONFIG_MFD_STMPE=y CONFIG_STMPE_SPI=y +CONFIG_MFD_SYSCON=y CONFIG_MFD_WM5102=y +CONFIG_MFD_RP1=y CONFIG_REGULATOR=y CONFIG_REGULATOR_FIXED_VOLTAGE=y CONFIG_REGULATOR_GPIO=y CONFIG_RC_CORE=y -CONFIG_LIRC=y CONFIG_BPF_LIRC_MODE2=y +CONFIG_LIRC=y CONFIG_RC_DECODERS=y CONFIG_RC_DEVICES=y CONFIG_MEDIA_CEC_RC=y @@ -224,6 +244,7 @@ CONFIG_MEDIA_USB_SUPPORT=y CONFIG_VIDEO_AU0828_RC=y CONFIG_DVB_USB_DIBUSB_MB_FAULTY=y CONFIG_V4L_PLATFORM_DRIVERS=y +CONFIG_V4L_TEST_DRIVERS=y CONFIG_DRM_LOAD_EDID_FIRMWARE=y CONFIG_DRM_VC4_HDMI_CEC=y CONFIG_FB=y @@ -237,21 +258,23 @@ CONFIG_LOGO=y CONFIG_SOUND=y CONFIG_SND_OSSEMUL=y CONFIG_SND_USB_CAIAQ_INPUT=y +CONFIG_SND_DESIGNWARE_PCM=y CONFIG_HID_BATTERY_STRENGTH=y CONFIG_HIDRAW=y CONFIG_LOGITECH_FF=y CONFIG_LOGIRUMBLEPAD2_FF=y CONFIG_LOGIG940_FF=y +CONFIG_PLAYSTATION_FF=y CONFIG_SONY_FF=y CONFIG_HID_PID=y CONFIG_USB_HIDDEV=y CONFIG_USB=y CONFIG_USB_ANNOUNCE_NEW_DEVICES=y CONFIG_USB_XHCI_HCD=y -CONFIG_USB_XHCI_PLATFORM=y CONFIG_USB_DWCOTG=y CONFIG_USB_STORAGE=y CONFIG_USB_UAS=y +CONFIG_USB_DWC3=y CONFIG_USB_SERIAL_GENERIC=y CONFIG_NOP_USB_XCEIV=y CONFIG_USB_GADGET=y @@ -297,19 +320,30 @@ CONFIG_ACCESSIBILITY=y CONFIG_RTC_CLASS=y CONFIG_DMADEVICES=y CONFIG_DMA_BCM2835=y +CONFIG_DW_AXI_DMAC=y CONFIG_DMA_BCM2708=y CONFIG_DMABUF_HEAPS=y CONFIG_DMABUF_HEAPS_SYSTEM=y CONFIG_DMABUF_HEAPS_CMA=y CONFIG_AUXDISPLAY=y +CONFIG_VHOST_CROSS_ENDIAN_LEGACY=y CONFIG_STAGING=y CONFIG_STAGING_MEDIA=y +CONFIG_STAGING_MEDIA_DEPRECATED=y CONFIG_BCM2835_VCHIQ=y +CONFIG_COMMON_CLK_RP1=y +CONFIG_COMMON_CLK_RP1_SDIO=y CONFIG_CLK_RASPBERRYPI=y CONFIG_MAILBOX=y CONFIG_BCM2835_MBOX=y -# CONFIG_IOMMU_SUPPORT is not set +CONFIG_BCM2712_IOMMU=y CONFIG_RASPBERRYPI_POWER=y +CONFIG_PWM=y +CONFIG_PWM_BRCMSTB=y +CONFIG_PWM_RP1=y +CONFIG_BCM2712_MIP=y +CONFIG_ANDROID_BINDER_IPC=y +CONFIG_ANDROID_BINDERFS=y CONFIG_EXT4_FS=y CONFIG_EXT4_FS_POSIX_ACL=y CONFIG_EXT4_FS_SECURITY=y @@ -330,7 +364,6 @@ CONFIG_FANOTIFY=y CONFIG_AUTOFS4_FS=y CONFIG_FSCACHE=y CONFIG_FSCACHE_STATS=y -CONFIG_FSCACHE_HISTOGRAM=y CONFIG_CACHEFILES=y CONFIG_JOLIET=y CONFIG_ZISOFS=y @@ -344,6 +377,9 @@ CONFIG_JFFS2_SUMMARY=y CONFIG_SQUASHFS_XATTR=y CONFIG_SQUASHFS_LZO=y CONFIG_SQUASHFS_XZ=y +CONFIG_PSTORE=y +CONFIG_PSTORE_CONSOLE=y +CONFIG_PSTORE_RAM=y CONFIG_NFS_FS=y CONFIG_NFS_V3_ACL=y CONFIG_NFS_V4=y @@ -354,7 +390,6 @@ CONFIG_ROOT_NFS=y CONFIG_NFS_FSCACHE=y CONFIG_NFSD_V3_ACL=y CONFIG_NFSD_V4=y -CONFIG_CIFS_WEAK_PW_HASH=y CONFIG_CIFS_UPCALL=y CONFIG_CIFS_XATTR=y CONFIG_CIFS_POSIX=y @@ -380,7 +415,6 @@ CONFIG_KGDB_KDB=y CONFIG_KDB_KEYBOARD=y CONFIG_DEBUG_MEMORY_INIT=y CONFIG_DETECT_HUNG_TASK=y -# CONFIG_RCU_TRACE is not set CONFIG_LATENCYTOP=y CONFIG_FUNCTION_PROFILER=y CONFIG_STACK_TRACER=y @@ -388,3 +422,4 @@ CONFIG_IRQSOFF_TRACER=y CONFIG_SCHED_TRACER=y CONFIG_BLK_DEV_IO_TRACE=y # CONFIG_UPROBE_EVENTS is not set +# CONFIG_STRICT_DEVMEM is not set diff --git a/embedded/imager/board/kernel_config_fragment_imager b/embedded/imager/board/kernel_config_fragment_imager index 831fe1b..4e35ea9 100644 --- a/embedded/imager/board/kernel_config_fragment_imager +++ b/embedded/imager/board/kernel_config_fragment_imager @@ -153,4 +153,7 @@ CONFIG_AUDIT=n CONFIG_KALLSYMS=n CONFIG_USB_DWCOTG=n - +CONFIG_VIRTUALIZATION=n +CONFIG_KVM=n +# We don't need 32-bit support +CONFIG_COMPAT=n diff --git a/embedded/imager/board/overlay/init b/embedded/imager/board/overlay/init index ced0448..bf73fe2 100755 --- a/embedded/imager/board/overlay/init +++ b/embedded/imager/board/overlay/init @@ -22,11 +22,11 @@ mkdir -p /var/run dhcpcd -f /etc/dhcpcd.conf --noarp 2>/dev/null & if grep -q debugconsole /proc/cmdline; then - /sbin/getty -L ttyAMA0 0 vt100 & + /sbin/getty -L console 0 vt100 & fi if grep -q blockingconsole /proc/cmdline; then - /sbin/getty -L ttyAMA0 0 vt100 + /sbin/getty -L console 0 vt100 fi /etc/init.d/S99rpi-imager start diff --git a/embedded/imager/board/overlay/usr/lib/fonts b/embedded/imager/board/overlay/usr/lib/fonts new file mode 120000 index 0000000..a728c5b --- /dev/null +++ b/embedded/imager/board/overlay/usr/lib/fonts @@ -0,0 +1 @@ +/usr/share/fonts/truetype/droid \ No newline at end of file diff --git a/embedded/imager/configs/rpi-imager_defconfig b/embedded/imager/configs/rpi-imager_defconfig index d4d7198..9de8447 100644 --- a/embedded/imager/configs/rpi-imager_defconfig +++ b/embedded/imager/configs/rpi-imager_defconfig @@ -1,11 +1,10 @@ -BR2_arm=y +BR2_aarch64=y BR2_cortex_a72=y -BR2_ARM_FPU_NEON_VFPV4=y -# BR2_COMPILER_PARANOID_UNSAFE_PATH is not set -BR2_TOOLCHAIN_BUILDROOT_GLIBC=y -BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_10=y +BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_6_1=y BR2_TOOLCHAIN_BUILDROOT_CXX=y -BR2_GCC_ENABLE_LTO=y +BR2_OPTIMIZE_2=y +BR2_SSP_NONE=y +BR2_FORTIFY_SOURCE_NONE=y BR2_INIT_NONE=y BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y BR2_ROOTFS_MERGED_USR=y @@ -14,13 +13,14 @@ BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_IMAGER_PATH)/board/overlay/" BR2_ROOTFS_POST_BUILD_SCRIPT="$(BR2_EXTERNAL_IMAGER_PATH)/board/post-build.sh" BR2_LINUX_KERNEL=y BR2_LINUX_KERNEL_CUSTOM_TARBALL=y -BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,raspberrypi,linux,b42c23e39f9f5ada0c1dba16cadd93d3f376fdbd)/linux-b42c23e39f9f5ada0c1dba16cadd93d3f376fdbd.tar.gz" +BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,raspberrypi,linux,2a47ccf97c6a91bc56f8cfb387d47f59cc347dd5)/linux-2a47ccf97c6a91bc56f8cfb387d47f59cc347dd5.tar.gz" BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_IMAGER_PATH)/board/bcm2711_defconfig_minus_modules" BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_IMAGER_PATH)/board/kernel_config_fragment_imager" +BR2_LINUX_KERNEL_IMAGEGZ=y BR2_LINUX_KERNEL_ZSTD=y BR2_LINUX_KERNEL_DTS_SUPPORT=y -BR2_LINUX_KERNEL_INTREE_DTS_NAME="bcm2711-rpi-4-b bcm2711-rpi-400 bcm2711-rpi-cm4 overlays/dwc2-overlay overlays/vc4-fkms-v3d-pi4-overlay overlays/vc4-kms-v3d-pi4-overlay overlays/disable-bt-overlay overlays/disable-wifi-overlay" +BR2_LINUX_KERNEL_INTREE_DTS_NAME="broadcom/bcm2711-rpi-4-b broadcom/bcm2711-rpi-400 broadcom/bcm2711-rpi-cm4 broadcom/bcm2712-rpi-5-b overlays/overlay_map overlays/dwc2-overlay overlays/vc4-kms-v3d-pi4-overlay overlays/vc4-kms-v3d-pi5-overlay overlays/disable-bt-overlay overlays/disable-wifi-overlay overlays/disable-bt-pi5-overlay overlays/disable-wifi-pi5-overlay" BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y BR2_PACKAGE_XZ=y BR2_PACKAGE_MESA3D=y diff --git a/embedded/imager/package/rpi-firmware-custom/Config.in b/embedded/imager/package/rpi-firmware-custom/Config.in index 15876af..e6d0fec 100644 --- a/embedded/imager/package/rpi-firmware-custom/Config.in +++ b/embedded/imager/package/rpi-firmware-custom/Config.in @@ -1,6 +1,6 @@ config BR2_PACKAGE_RPI_FIRMWARE_CUSTOM bool "rpi-firmware" - depends on BR2_arm + depends on BR2_arm || BR2_aarch64 help RaspberryPi Firmware Pre-compiled binaries of the current bootloader and GPU firmware diff --git a/embedded/imager/package/rpi-firmware-custom/rpi-firmware-custom.mk b/embedded/imager/package/rpi-firmware-custom/rpi-firmware-custom.mk index 9659957..f1502a0 100644 --- a/embedded/imager/package/rpi-firmware-custom/rpi-firmware-custom.mk +++ b/embedded/imager/package/rpi-firmware-custom/rpi-firmware-custom.mk @@ -4,7 +4,7 @@ # ################################################################################ -RPI_FIRMWARE_CUSTOM_VERSION = a585b376a2e7e657287543d196ae1f8881ede559 +RPI_FIRMWARE_CUSTOM_VERSION = 7e9c2063fc15274fbc4dab1ca614f9228834d881 RPI_FIRMWARE_CUSTOM_SITE = $(call github,raspberrypi,firmware,$(RPI_FIRMWARE_CUSTOM_VERSION)) RPI_FIRMWARE_CUSTOM_LICENSE = BSD-3c RPI_FIRMWARE_CUSTOM_LICENSE_FILES = boot/LICENCE.broadcom diff --git a/embedded/imager/package/rpi-imager/0001-rpi-imager-change-window-to-popup.patch b/embedded/imager/package/rpi-imager/0001-rpi-imager-change-window-to-popup.patch new file mode 100644 index 0000000..105c6fb --- /dev/null +++ b/embedded/imager/package/rpi-imager/0001-rpi-imager-change-window-to-popup.patch @@ -0,0 +1,29 @@ +diff --git a/src/OptionsPopup.qml b/src/OptionsPopup.qml +index 568d1cd..9e36607 100644 +--- a/src/OptionsPopup.qml ++++ b/src/OptionsPopup.qml +@@ -10,13 +10,19 @@ import QtQuick.Controls.Material 2.2 + import QtQuick.Window 2.15 + import "qmlcomponents" + +-Window { ++Popup { + id: popup + width: cl.implicitWidth+cl.spacing +- minimumWidth: width +- maximumWidth: width +- minimumHeight: 125 +- height: Math.min(750, cl.implicitHeight) ++ /* Only in embedded version */ ++ x: (parent.width-width)/2 ++ y: 10 ++ height: parent.height-20 ++ property string title ++ ++ function show() { open() } ++ function raise() { } ++ /* */ ++ + title: qsTr("Advanced options") + + property bool initialized: false diff --git a/embedded/output/cmdline.txt b/embedded/output/cmdline.txt index fe3f2f0..e61c857 100644 --- a/embedded/output/cmdline.txt +++ b/embedded/output/cmdline.txt @@ -1 +1 @@ -quiet console=ttyAMA0,115200 console=tty1 debugconsole +quiet console=tty1 console=serial0,115200 debugconsole diff --git a/embedded/output/config.txt b/embedded/output/config.txt index 4f2be77..03e9891 100644 --- a/embedded/output/config.txt +++ b/embedded/output/config.txt @@ -1,16 +1,13 @@ -[HDMI:0] -hdmi_pixel_freq_limit=200000000 -[HDMI:1] -hdmi_pixel_freq_limit=200000000 [all] -kernel=zImage +kernel=Image.gz initramfs rootfs.cpio.zst disable_overscan=1 enable_uart=1 -dtoverlay=vc4-fkms-v3d-pi4 +dtoverlay=vc4-kms-v3d dtoverlay=disable-bt dtoverlay=disable-wifi arm_boost=1 +arm_64bit=1 [cm4] dtoverlay=dwc2,dr_mode=host diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d338580..20a94dc 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -118,6 +118,11 @@ if(${QT}DBus_FOUND AND UNIX AND NOT APPLE) set(EXTRALIBS ${EXTRALIBS} ${QT}::DBus) message("udisks2 support enabled") endif() +# NOT ${QT}Widgets_FOUND AND +if (UNIX AND NOT APPLE) + find_package(PkgConfig REQUIRED) + pkg_check_modules(LIBDRM REQUIRED libdrm) +endif() if(${QT}WinExtras_FOUND) set(EXTRALIBS ${EXTRALIBS} ${QT}::WinExtras) endif() @@ -352,5 +357,5 @@ else() install(FILES "${CMAKE_CURRENT_BINARY_DIR}/rpi-imager.metainfo.xml" DESTINATION share/metainfo) endif() -include_directories(${CURL_INCLUDE_DIR} ${LibArchive_INCLUDE_DIR} ${OPENSSL_INCLUDE_DIR} ${LIBLZMA_INCLUDE_DIR}) -target_link_libraries(${PROJECT_NAME} PRIVATE ${QT}::Core ${QT}::Quick ${QT}::Svg ${CURL_LIBRARIES} ${LibArchive_LIBRARIES} ${OPENSSL_LIBRARIES} ${ATOMIC_LIBRARY} ${EXTRALIBS}) +include_directories(${CURL_INCLUDE_DIR} ${LibArchive_INCLUDE_DIR} ${OPENSSL_INCLUDE_DIR} ${LIBLZMA_INCLUDE_DIR} ${LIBDRM_INCLUDE_DIRS}) +target_link_libraries(${PROJECT_NAME} PRIVATE ${QT}::Core ${QT}::Quick ${QT}::Svg ${CURL_LIBRARIES} ${LibArchive_LIBRARIES} ${OPENSSL_LIBRARIES} ${LIBDRM_LIBRARIES} ${ATOMIC_LIBRARY} ${EXTRALIBS}) diff --git a/src/main.cpp b/src/main.cpp index 8406771..b4876ac 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -22,6 +22,11 @@ #include #include #include +#ifdef QT_NO_WIDGETS +#include +#include +#include +#endif #ifndef QT_NO_WIDGETS #include #endif @@ -44,6 +49,84 @@ static void consoleMsgHandler(QtMsgType, const QMessageLogContext &, const QStri } #endif +#ifdef QT_NO_WIDGETS +/* Embedded: deal with Pi having multiple DRI devices when vc4-kms (instead of fkms) is used */ +bool handleDri() +{ + QByteArray driDev; + QDir driDir("/dev/dri"); + QStringList entries = driDir.entryList(QDir::System, QDir::Name); + + for (const QString &fn : entries) + { + QFile f("/dev/dri/"+fn); + if (f.open(f.ReadWrite)) + { + drmModeResPtr resources = drmModeGetResources(f.handle()); + if (resources) + { + driDev = "/dev/dri/"+fn.toLatin1(); + cerr << "Using " << driDev << endl; + + /* Get current resolution to calculate scaling factor while we are at it */ + for (int i=0; icount_connectors; i++) + { + drmModeConnectorPtr connector = drmModeGetConnector(f.handle(), resources->connectors[i]); + if (connector) + { + if (connector->connection != DRM_MODE_DISCONNECTED) + { + drmModeEncoderPtr encoder = drmModeGetEncoder(f.handle(), connector->encoder_id); + if (encoder) + { + drmModeModeInfo crtcMode = {0}; + drmModeCrtcPtr crtc = drmModeGetCrtc(f.handle(), encoder->crtc_id); + if (crtc) + { + if (crtc->mode_valid) + { + cerr << "Current mode: connector " << i << " crtc_id " << crtc->crtc_id << " width: " << crtc->width << "px height: " << crtc->height << "px" << endl; + /*if (crtc->height > 720) + { + qputenv("QT_SCALE_FACTOR", QByteArray::number(crtc->height / 720.0, 'f', 2)); + }*/ + + break; + } + drmModeFreeCrtc(crtc); + } + drmModeFreeEncoder(encoder); + } + } + drmModeFreeConnector(connector); + } + } + + drmModeFreeResources(resources); + } + f.close(); + } + else + { + cerr << "Error opening /dev/dri/"+fn << endl; + } + } + + if (driDev.isEmpty()) + { + cerr << "No capable /dev/dri device found" << endl; + return false; + } + QFile f("/tmp/qt-kms-config.json"); + f.open(f.WriteOnly); + f.write("{ \"device\": \""+driDev+"\", \"hwcursor\": false }\n"); + f.close(); + qputenv("QT_QPA_EGLFS_KMS_CONFIG", "/tmp/qt-kms-config.json"); + + return true; +} +#endif + int main(int argc, char *argv[]) { for (int i = 1; i < argc; i++) @@ -62,14 +145,8 @@ int main(int argc, char *argv[]) QCoreApplication::setAttribute(Qt::AA_UseOpenGLES); #endif #ifdef QT_NO_WIDGETS - { - QGuiApplication tmp(argc, argv); - int h = QGuiApplication::primaryScreen()->geometry().height(); - if (h > 720) - { - qputenv("QT_SCALE_FACTOR", QByteArray::number(h / 720.0, 'f', 2)); - } - } + if ( !handleDri() ) + return 1; QGuiApplication app(argc, argv);