diff --git a/.build/images/dietpi-build b/.build/images/dietpi-build index fafcc49bb5..c0b9cae9f0 100755 --- a/.build/images/dietpi-build +++ b/.build/images/dietpi-build @@ -177,9 +177,12 @@ case $HW_MODEL in 104) iname='NanoPiZero2' HW_ARCH=3 PTTYPE='gpt' partition_start=16 root_size='rk35xx';; 105) iname='OrangePi4LTS' HW_ARCH=3 partition_start=16 root_size='rockchip64';; 106) iname='OrangePi5B' HW_ARCH=3 PTTYPE='gpt' partition_start=16 root_size='rockchip64';; + 107) iname='OrangePi4Pro' HW_ARCH=3 partition_start=32 root_size='sun60iw2';; + 108) iname='OrangePiZero3W' HW_ARCH=3 partition_start=32 root_size='sun60iw2';; *) Error_Exit "Invalid hardware model \"$HW_MODEL\" passed";; esac case $root_size in + 'sun60iw2') root_size=600;; 'riscv') root_size=650; (( $DISTRO > 8 )) && ((root_size+=100));; 'meson') root_size=650; (( $DISTRO > 7 && ! $boot_size )) && ((root_size+=50));; 'rockchip') root_size=700;; diff --git a/.build/images/dietpi-installer b/.build/images/dietpi-installer index 5ad07de90e..b4e8a0200a 100755 --- a/.build/images/dietpi-installer +++ b/.build/images/dietpi-installer @@ -429,6 +429,7 @@ _EOF_ '89' ': Orange Pi 3 LTS' '96' ': Orange Pi 4A' '105' ': Orange Pi 4 LTS' + '107' ': Orange Pi 4 Pro' '80' ': Orange Pi 5' '106' ': Orange Pi 5B' '93' ': Orange Pi 5 Pro' @@ -438,6 +439,7 @@ _EOF_ '95' ': Orange Pi CM5' '83' ': Orange Pi Zero 3' '88' ': Orange Pi Zero 2W' + '108' ': Orange Pi Zero 3W' '86' ': ASUS Tinker Board 2' '23' ': Generic Rockchip RK3328' '24' ': Generic Rockchip RK3399' @@ -656,7 +658,7 @@ _EOF_ G_EXEC ln -sf /etc/kernel/post{inst,rm}.d/dietpi-initramfs_cleanup # SBCs using Armbian build system for kernel/bootloader packages and boot.scr - elif [[ $G_HW_MODEL =~ ^(12|15|16|17|40|42|43|44|45|46|47|48|52|54|55|56|57|58|59|60|63|64|65|66|67|68|72|73|74|76|77|78|79|80|82|83|85|86|87|88|89|90|91|92|93|94|95|96|99|100|101|102|103|104|105|106)$ ]] + elif [[ $G_HW_MODEL =~ ^(12|15|16|17|40|42|43|44|45|46|47|48|52|54|55|56|57|58|59|60|63|64|65|66|67|68|72|73|74|76|77|78|79|80|82|83|85|86|87|88|89|90|91|92|93|94|95|96|99|100|101|102|103|104|105|106|107|108)$ ]] then # Amlogic 64-bit armbian_packages=1 @@ -820,6 +822,24 @@ setenv rootuuid "true"' /boot/boot.cmd *) G_EXEC sed --follow-symlinks -i 's/ttyAML0/ttyS0/' /boot/dietpiEnv.txt;; esac + # Allwinner A733 64-bit vendor + elif [[ $G_HW_MODEL =~ ^(107|108)$ ]] + then + G_CONFIG_INJECT 'setenv kernel_addr_r ' 'setenv kernel_addr_r "0x41000000"' /boot/boot.cmd + G_CONFIG_INJECT 'setenv fdt_addr_r ' 'setenv fdt_addr_r "0x4a000000"' /boot/boot.cmd + G_CONFIG_INJECT 'setenv ramdisk_addr_r ' 'setenv ramdisk_addr_r "0x4b000000"' /boot/boot.cmd '^setenv fdt_addr_r' + G_CONFIG_INJECT 'setenv scriptaddr ' 'setenv scriptaddr "0x4d000000"' /boot/boot.cmd + # Device tree + case $G_HW_MODEL in + 107) G_CONFIG_INJECT 'fdtfile=' 'fdtfile=allwinner/sun60i-a733-orangepi-4-pro.dtb' /boot/dietpiEnv.txt;; + 108) G_CONFIG_INJECT 'fdtfile=' 'fdtfile=allwinner/sun60i-a733-orangepi-zero3w.dtb' /boot/dietpiEnv.txt;; + *) :;; + esac + # Overlay prefix + G_CONFIG_INJECT 'overlay_prefix=' 'overlay_prefix=sun60i-a733' /boot/dietpiEnv.txt + # Console args + G_EXEC sed --follow-symlinks -i 's/ttyAML0/ttyS0/' /boot/dietpiEnv.txt + # Allwinner H3 (32-bit) elif [[ $G_HW_MODEL =~ ^(48|59|60|63|64|66)$ ]] then @@ -1191,6 +1211,8 @@ _EOF_ 104) model='nanopi-zero2' kernel='rk35xx' branch='vendor';; 105) model='orangepi4-lts' kernel='rockchip64';; 106) model='orangepi5b' kernel='rockchip64';; + 107) model='orangepi4pro' kernel='sun60iw2' branch='vendor';; + 108) model='orangepizero3w' kernel='sun60iw2' branch='vendor';; *) G_DIETPI-NOTIFY 1 "Unknown hardware ID \"$G_HW_MODEL\". Aborting ..."; exit 1;; esac @@ -1273,7 +1295,7 @@ fi' /boot/boot.cmd # Compile U-Boot script local arch='arm' - (( $G_HW_ARCH == 3 )) && arch='arm64' + (( $G_HW_ARCH == 3 && $G_HW_MODEL != 107 && $G_HW_MODEL != 108 )) && arch='arm64' # Orange Pi Allwinner vendor U-Boot is 32-bit [[ -f '/boot/boot.cmd' ]] && G_EXEC mkimage -C none -A "$arch" -T script -d /boot/boot.cmd /boot/boot.scr # Flash U-Boot @@ -2039,7 +2061,7 @@ _EOF_' /boot/dietpi/func/dietpi-set_hardware serialconsole enable ttyAML0 # Allwinner, StarFive, ROCK Pi S, RK3528/RK3576 mainline - elif [[ $kernel == 'sunxi' || $kernel == 'sunxi64' || $G_HW_MODEL =~ ^(73|81|84)$ || ( $G_HW_MODEL =~ ^(102|103|104)$ && $kernel == 'rockchip64' ) ]] + elif [[ $kernel == 'sunxi' || $kernel == 'sunxi64' || $kernel == 'sun60iw2' || $G_HW_MODEL =~ ^(73|81|84)$ || ( $G_HW_MODEL =~ ^(102|103|104)$ && $kernel == 'rockchip64' ) ]] then /boot/dietpi/func/dietpi-set_hardware serialconsole enable ttyS0 diff --git a/.github/workflows/armbian.yml b/.github/workflows/armbian.yml index bbc40d1e64..86025b06b0 100644 --- a/.github/workflows/armbian.yml +++ b/.github/workflows/armbian.yml @@ -59,6 +59,7 @@ jobs: '"kernel sunxi current",'\ '"kernel sunxi64 current",'\ '"kernel sunxi64 edge",'\ + '"kernel sun60iw2 vendor",'\ '"kernel odroidxu4 current",'\ '"uboot nanopct4 current",'\ '"uboot nanopct6 current",'\ @@ -117,6 +118,7 @@ jobs: '"uboot orangepi4-lts current",'\ '"uboot orangepi4-lts edge",'\ '"uboot orangepi-4a edge",'\ + '"uboot orangepi4pro vendor",'\ '"uboot orangepi5 current",'\ '"uboot orangepi5 edge",'\ '"uboot orangepi5 vendor",'\ @@ -138,6 +140,7 @@ jobs: '"uboot orangepicm5 vendor",'\ '"uboot orangepizero2w current",'\ '"uboot orangepizero3 current",'\ + '"uboot orangepizero3w vendor",'\ '"uboot pine64 current",'\ '"uboot pinebook-a64 current",'\ '"uboot pinebook-pro current",'\ diff --git a/.github/workflows/dietpi-build.yml b/.github/workflows/dietpi-build.yml index 5dc36a1f5a..ab8dd3af21 100644 --- a/.github/workflows/dietpi-build.yml +++ b/.github/workflows/dietpi-build.yml @@ -98,7 +98,9 @@ jobs: '"-m 103 -d 7", "-m 103 -d 8", "-m 103 -d 9",'\ '"-m 104 -d 7", "-m 104 -d 8", "-m 104 -d 9", "-m 104 -d 8 --rk35xx-mainline",'\ '"-m 105 -d 7", "-m 105 -d 8", "-m 105 -d 9",'\ - '"-m 106 -d 7", "-m 106 -d 8", "-m 106 -d 9"]' >> "$GITHUB_OUTPUT" + '"-m 106 -d 7", "-m 106 -d 8", "-m 106 -d 9",'\ + '"-m 107 -d 7", "-m 107 -d 8", "-m 107 -d 9",'\ + '"-m 108 -d 7", "-m 108 -d 8", "-m 108 -d 9"]]' >> "$GITHUB_OUTPUT" elif [ "${{ github.event.inputs.buildargs }}" = 'quartz64' ] then echo buildargs=[\ diff --git a/.meta/dietpi-survey_report b/.meta/dietpi-survey_report index fbf2ebe07a..881a85cbf4 100755 --- a/.meta/dietpi-survey_report +++ b/.meta/dietpi-survey_report @@ -96,6 +96,8 @@ shopt -s extglob # +(expr) syntax [104]='NanoPi Zero2' [105]='Orange Pi 4 LTS' [106]='Orange Pi 5B' + [107]='Orange Pi 4 Pro' + [108]='Orange Pi Zero 3W' ) ## Benchmark data arrays: aBENCH_XX[$HW_MODEL,${aBENCH_XX_INDEX[$HW_MODEL]}] diff --git a/CHANGELOG.txt b/CHANGELOG.txt index dadbe212a9..37907c3df1 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,6 +1,9 @@ v10.6 (2026-07-18) +New images: +- Orange Pi 4 Pro / Orange Pi Zero 3W | Support and images for these new SBCs with Allwinner A733 SoC have been added. Mainline Linux support for this SoC is still outstanding, hence Xunlong's Linux 6.6 and U-Boot vendor sources are used. + Enhancements: - Allwinner/Amlogic/Rockchip SBCs | A driver for certain ASUS USB keyboards has been added to all our kernel builds. Many thanks to @rouilj for reporting the issue with one of these: https://dietpi.com/forum/t/25290 - DietPi-Software | BirdNET-Go: The path to the ONNX runtime library is not set in (re)install to enable access to the additional bird classifier models. This can be also applied manually, following the instructions in the next link. Many thanks to @oradke for reporting this issue: https://github.com/MichaIng/DietPi/issues/8196 diff --git a/dietpi/func/dietpi-obtain_hw_model b/dietpi/func/dietpi-obtain_hw_model index ff2b62b0c3..17757e1ee2 100755 --- a/dietpi/func/dietpi-obtain_hw_model +++ b/dietpi/func/dietpi-obtain_hw_model @@ -25,6 +25,7 @@ # G_HW_CPUID 10 Rockchip RK3568 # G_HW_CPUID 11 Rockchip RK3588 # G_HW_CPUID 12 Rockchip RK3576 + # G_HW_CPUID 13 Allwinner A733 #//////////////////////////////////// #///////////////////////////////////////////////////////////////////////////////////// @@ -173,6 +174,8 @@ local model # in case we want to read the revision from /proc/device-tree/model case $G_HW_MODEL in + 108) G_HW_MODEL_NAME='Orange Pi Zero 3W' G_HW_CPUID=13;; + 107) G_HW_MODEL_NAME='Orange Pi 4 Pro' G_HW_CPUID=13;; 106) G_HW_MODEL_NAME='Orange Pi 5B' G_HW_CPUID=11;; 105) G_HW_MODEL_NAME='Orange Pi 4 LTS' G_HW_CPUID=3;; 104) G_HW_MODEL_NAME='NanoPi Zero2';; diff --git a/dietpi/func/dietpi-set_hardware b/dietpi/func/dietpi-set_hardware index 870260b64c..ddcfb3fee5 100755 --- a/dietpi/func/dietpi-set_hardware +++ b/dietpi/func/dietpi-set_hardware @@ -1152,6 +1152,7 @@ _EOF_ 102|103) aBLUETOOTH_MODULES+=('hci_uart');; # NanoPi R76S/M5 official M.2 WiFi card. This kernel module is used by other SBCs, but e.g. on ROCK 4 SE it is needed as well for WiFi: https://github.com/MichaIng/DietPi/issues/6943. On RPi, it is not needed to blacklist it, since it is not loaded with dtoverlay=disable-bt 95) aBLUETOOTH_MODULES+=('btsdio');; # Orange Pi CM5 onboard WiFi 83|88|89|99|105) aBLUETOOTH_MODULES+=('sprdbt_tty');; # Orange Pi Zero 3/Zero 2W/3 LTS/3/4 LTS + 107|108) aBLUETOOTH_MODULES+=('aic8800_btlpm');; # Orange Pi 4 Pro/Zero 3W with Xunlong sun60iw2 vendor kernel in-tree AIC8800 driver 87) [[ $G_HW_REVISION == '1.1' ]] && aBLUETOOTH_MODULES+=('sprdbt_tty');; # Orange Pi 3B v1.1 *) :;; esac @@ -1233,6 +1234,11 @@ _EOF_ then G_EXEC eval 'echo '\''sprdbt_tty'\'' > /etc/modules-load.d/dietpi-enable_bluetooth.conf' G_AG_CHECK_INSTALL_PREREQ sprd-bluetooth + + # - Orange Pi 4 Pro/Zero 3W with Xunlong sun60iw2 vendor kernel in-tree AIC8800 driver module does not load automatically + elif (( $G_HW_MODEL == 107 || $G_HW_MODEL == 108 )) + then + G_EXEC eval 'echo '\''aic8800_btlpm'\'' > /etc/modules-load.d/dietpi-enable_bluetooth.conf' fi else Unknown_Input_Mode @@ -1320,6 +1326,11 @@ _EOF_ elif [[ $G_HW_MODEL =~ ^(83|88|89|99|105)$ || ( $G_HW_MODEL == 87 && $G_HW_REVISION == '1.1' ) ]] then aWIFI_MODULES+=('sprdwl_ng') + + # Orange Pi 4 Pro/Zero 3W with Xunlong sun60iw2 vendor kernel in-tree AIC8800 driver + elif (( $G_HW_MODEL == 107 || $G_HW_MODEL == 108 )) + then + aWIFI_MODULES+=('aic8800_fdrv') fi if [[ $INPUT_DEVICE_VALUE == 'disable' ]]; then @@ -1362,6 +1373,11 @@ _EOF_ elif [[ $G_HW_MODEL =~ ^(83|88|89|99|105)$ || ( $G_HW_MODEL == 87 && $G_HW_REVISION == '1.1' ) ]] then G_EXEC eval 'echo -e '\''cpufreq_dt\nsprdwl_ng'\'' > /etc/modules-load.d/dietpi-enable_wifi.conf' + + # - Orange Pi 4 Pro/Zero 3W with Xunlong sun60iw2 vendor kernel in-tree AIC8800 driver module does not load automatically + elif (( $G_HW_MODEL == 107 || $G_HW_MODEL == 108 )) + then + G_EXEC eval 'echo '\''aic8800_fdrv'\'' > /etc/modules-load.d/dietpi-enable_wifi.conf' fi # Remove blacklists diff --git a/dietpi/func/dietpi-set_software b/dietpi/func/dietpi-set_software index 630afc8917..66536e5d3f 100755 --- a/dietpi/func/dietpi-set_software +++ b/dietpi/func/dietpi-set_software @@ -295,6 +295,8 @@ $FP_SCRIPT rpi_kernel_choice Supported on Debian Bookworm or newer on R 104) all_components='nanopizero2';; 105) all_components='orangepi4lts';; 106) all_components='orangepi5b';; + 107) all_components='orangepi4pro';; + 108) all_components='orangepizero3w';; *) :;; esac G_EXEC eval "echo 'deb https://dietpi.com/apt $G_DISTRO_NAME $components' > /etc/apt/sources.list.d/dietpi.list"