From a91f8e90381f6886d1f7473f3b422797b988b1db Mon Sep 17 00:00:00 2001 From: baiywt Date: Thu, 27 Mar 2025 16:32:54 +0800 Subject: [PATCH] opi4a: update sun55iw3 boot script, kernel config and add spinor support --- .../orangepi-config/debian-config-functions | 1 + external/config/boards/orangepi4a.conf | 5 +- external/config/bootenv/sun55iw3.txt | 2 + external/config/bootscripts/boot-sun55iw3.cmd | 60 ++++++++++ .../kernel/linux-5.15-sun55iw3-current.config | 111 ++++++++++++------ .../config/sources/families/sun55iw3.conf | 36 ++++-- .../orangepi/orangepi-hardware-optimization | 2 + .../packages/bsp/common/usr/sbin/opi-bkimg | 10 +- .../bsp/overlays_arm64/etc/docker/daemon.json | 5 - .../pack-uboot/sun55iw3/bin/boot0_spinor.fex | Bin 0 -> 61440 bytes 10 files changed, 173 insertions(+), 59 deletions(-) create mode 100644 external/config/bootenv/sun55iw3.txt create mode 100644 external/config/bootscripts/boot-sun55iw3.cmd delete mode 100644 external/packages/bsp/overlays_arm64/etc/docker/daemon.json create mode 100644 external/packages/pack-uboot/sun55iw3/bin/boot0_spinor.fex diff --git a/external/cache/sources/orangepi-config/debian-config-functions b/external/cache/sources/orangepi-config/debian-config-functions index bae48c80def3..9c2629417344 100644 --- a/external/cache/sources/orangepi-config/debian-config-functions +++ b/external/cache/sources/orangepi-config/debian-config-functions @@ -62,6 +62,7 @@ function main(){ [[ "$LINUXFAMILY" == "rockchip-rk3588" ]] && OVERLAYDIR="/boot/dtb/rockchip/overlay"; [[ "$LINUXFAMILY" == "sun50iw9" && "$BRANCH" == "current" ]] && OVERLAYDIR="/boot/dtb/sunxi/overlay"; [[ "$LINUXFAMILY" == "sun50iw9" && "$BRANCH" == "next" ]] && OVERLAYDIR="/boot/dtb/allwinner/overlay"; + [[ "$LINUXFAMILY" == "sun55iw3" ]] && OVERLAYDIR="/boot/dtb/allwinner/overlay"; [[ "$LINUXFAMILY" == "rockchip-rk356x" ]] && OVERLAYDIR="/boot/dtb/rockchip/overlay"; [[ "$LINUXFAMILY" == "ky" ]] && OVERLAYDIR="/boot/dtb/ky/overlay"; # detect desktop diff --git a/external/config/boards/orangepi4a.conf b/external/config/boards/orangepi4a.conf index f3390cf342e2..4d74b162562a 100755 --- a/external/config/boards/orangepi4a.conf +++ b/external/config/boards/orangepi4a.conf @@ -6,6 +6,5 @@ BOOT_FDT_FILE="allwinner/sun55i-t527-orangepi-4a.dtb" MODULES="bcmdhd vin_v4l2" KERNEL_TARGET="current" DISTRIB_TYPE_CURRENT="bookworm jammy" -BOOT_LOGO="desktop" -REVISION="1.0.2" -SRC_EXTLINUX="yes" +REVISION="1.0.4" +SKIP_BOOTSPLASH="yes" # Skip boot splash patch, conflicts with CONFIG_VT=yes diff --git a/external/config/bootenv/sun55iw3.txt b/external/config/bootenv/sun55iw3.txt new file mode 100644 index 000000000000..dce9fd90c1fc --- /dev/null +++ b/external/config/bootenv/sun55iw3.txt @@ -0,0 +1,2 @@ +verbosity=1 +bootlogo=true diff --git a/external/config/bootscripts/boot-sun55iw3.cmd b/external/config/bootscripts/boot-sun55iw3.cmd new file mode 100644 index 000000000000..695c4f41d477 --- /dev/null +++ b/external/config/bootscripts/boot-sun55iw3.cmd @@ -0,0 +1,60 @@ +# DO NOT EDIT THIS FILE +# +# Please edit /boot/orangepiEnv.txt to set supported parameters +# + +setenv load_addr "0x43100000" +setenv overlay_error "false" +# default values +setenv verbosity "1" +setenv console "both" +setenv bootlogo "false" +setenv rootfstype "ext4" +setenv docker_optimizations "on" +setenv earlycon "on" + +echo "Boot script loaded from ${devtype} ${devnum}" + +if test -e ${devtype} ${devnum} ${prefix}orangepiEnv.txt; then + load ${devtype} ${devnum} ${load_addr} ${prefix}orangepiEnv.txt + env import -t ${load_addr} ${filesize} +fi + +if test "${logo}" = "disabled"; then setenv logo "logo.nologo"; fi + +if test "${console}" = "display" || test "${console}" = "both"; then setenv consoleargs "console=tty1"; fi +if test "${console}" = "serial" || test "${console}" = "both"; then setenv consoleargs "console=ttyAS0,115200 ${consoleargs}"; fi +if test "${earlycon}" = "on"; then setenv consoleargs "earlycon=uart8250,mmio32,0x02500000 ${consoleargs}"; fi +if test "${bootlogo}" = "true"; then + setenv consoleargs "splash plymouth.ignore-serial-consoles ${consoleargs}"; +else + setenv consoleargs "splash=verbose ${consoleargs}" +fi + +setenv bootargs "root=${rootdev} rootwait rootfstype=${rootfstype} ${consoleargs} consoleblank=0 loglevel=${verbosity} clk_ignore_unused swiotlb=65536 usb-storage.quirks=${usbstoragequirks} ${extraargs} ${extraboardargs}" + +if test "${docker_optimizations}" = "on"; then setenv bootargs "${bootargs} cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory swapaccount=1"; fi + +load ${devtype} ${devnum} ${ramdisk_addr_r} ${prefix}uInitrd +load ${devtype} ${devnum} ${kernel_addr_r} ${prefix}uImage + +load ${devtype} ${devnum} ${fdt_addr_r} ${prefix}dtb/${fdtfile} +fdt addr ${fdt_addr_r} +fdt resize 65536 +for overlay_file in ${overlays}; do + if load ${devtype} ${devnum} ${load_addr} ${prefix}dtb/allwinner/overlay/${overlay_prefix}-${overlay_file}.dtbo; then + echo "Applying kernel provided DT overlay ${overlay_prefix}-${overlay_file}.dtbo" + fdt apply ${load_addr} || setenv overlay_error "true" + fi +done +for overlay_file in ${user_overlays}; do + if load ${devtype} ${devnum} ${load_addr} ${prefix}overlay-user/${overlay_file}.dtbo; then + echo "Applying user provided DT overlay ${overlay_file}.dtbo" + fdt apply ${load_addr} || setenv overlay_error "true" + fi +done + +bootm ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r} + +# Recompile with: +# mkimage -C none -A arm -T script -d /boot/boot.cmd /boot/boot.scr diff --git a/external/config/kernel/linux-5.15-sun55iw3-current.config b/external/config/kernel/linux-5.15-sun55iw3-current.config index f4b6c1a769e7..40c7852de6d3 100644 --- a/external/config/kernel/linux-5.15-sun55iw3-current.config +++ b/external/config/kernel/linux-5.15-sun55iw3-current.config @@ -200,6 +200,14 @@ CONFIG_AW_MMC_V5P3X=y CONFIG_AW_MMC_CQHCI=y # end of SD/MMC Drivers +# +# NAND Drivers +# +CONFIG_AW_NAND=y +CONFIG_AW_RAWNAND=y +# CONFIG_AW_RAWNAND_CD is not set +# end of NAND Drivers + # CONFIG_AW_MTD is not set # CONFIG_SUNXI_REDEPOSIT is not set @@ -351,8 +359,8 @@ CONFIG_AW_DRM_DE=y CONFIG_AW_DRM_TCON=y CONFIG_AW_DRM_TCON_TV=y CONFIG_AW_DRM_TCON_TOP=y -# CONFIG_AW_DRM_LVDS is not set -# CONFIG_AW_DRM_RGB is not set +CONFIG_AW_DRM_LVDS=y +CONFIG_AW_DRM_RGB=y CONFIG_AW_DRM_DSI=y CONFIG_AW_DRM_HDMI_TX=y # CONFIG_AW_DRM_HDMI14 is not set @@ -367,8 +375,8 @@ CONFIG_AW_DRM_INNO_EDP13=y # sunxi drm panels select # CONFIG_PANEL_DSI_GENERAL=y -# CONFIG_PANEL_LVDS_GENERAL is not set -# CONFIG_PANEL_RGB_GENERAL is not set +CONFIG_PANEL_LVDS_GENERAL=y +CONFIG_PANEL_RGB_GENERAL=y CONFIG_PANEL_EDP_GENERAL=y # end of sunxi drm panels select @@ -434,6 +442,7 @@ CONFIG_SND_SOC_SUNXI_AAUDIO=y CONFIG_SND_SOC_SUNXI_I2S=y CONFIG_SND_SOC_SUNXI_CODEC_HDMI=y # CONFIG_SND_SOC_SUNXI_CODEC_EDP is not set +# CONFIG_SND_SOC_SUNXI_CODEC_AV is not set CONFIG_SND_SOC_SUNXI_COMPONENTS=y # CONFIG_SND_SOC_SUNXI_SFX is not set # CONFIG_SND_SOC_SUNXI_TEST_CLK is not set @@ -484,6 +493,7 @@ CONFIG_AW_SID=y # CONFIG_AW_PCIE_RC=y # CONFIG_AW_PCIE_EP is not set +# CONFIG_AW_PCIE_NONE is not set # end of PCIe Drivers # @@ -512,8 +522,9 @@ CONFIG_AW_GMAC_MDIO=y # Stmmac Drivers # CONFIG_AW_STMMAC_ETH=y +CONFIG_AW_DWMAC_SUNXI=y CONFIG_AW_STMMAC_SELFTESTS=y -# CONFIG_AW_STMMAC_PCI is not set +# CONFIG_AW_STMMAC_UIO is not set # end of Stmmac Drivers # @@ -559,6 +570,8 @@ CONFIG_USB_SUNXI_UDC0=y # # USB Type-C Multiplexer/DeMultiplexer Switch support # +# CONFIG_TYPEC_MUX_GPIO_GMA340 is not set +# CONFIG_TYPEC_MUX_SUNXI_PHY_SWITCHER is not set # end of USB Type-C Multiplexer/DeMultiplexer Switch support # end of USB Type-C Support @@ -566,7 +579,41 @@ CONFIG_USB_SUNXI_UDC0=y # USB Gadget Drivers # # CONFIG_USB_SUNXI_GADGET is not set + +# +# USB Gadget precomposed configurations +# +# CONFIG_USB_ZERO is not set +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_ETH is not set +# CONFIG_USB_G_NCM is not set +# CONFIG_USB_GADGETFS is not set +# CONFIG_USB_FUNCTIONFS is not set +# CONFIG_USB_MASS_STORAGE is not set +# CONFIG_USB_G_SERIAL is not set +# CONFIG_USB_MIDI_GADGET is not set +# CONFIG_USB_G_PRINTER is not set +# CONFIG_USB_CDC_COMPOSITE is not set +# CONFIG_USB_G_ACM_MS is not set +# CONFIG_USB_G_MULTI is not set +# CONFIG_USB_G_HID is not set +# CONFIG_USB_G_DBGP is not set +# CONFIG_USB_G_WEBCAM is not set +# CONFIG_USB_RAW_GADGET is not set +# end of USB Gadget precomposed configurations # end of USB Gadget Drivers + +# +# USB EXTCON Support +# +# CONFIG_USB_SUNXI_EXTCON is not set +# end of USB EXTCON Support + +# +# USB PHY Support +# +# CONFIG_USB_SUNXI_PHY is not set +# end of USB PHY Support # end of USB Drivers # @@ -779,7 +826,7 @@ CONFIG_NVMEM_AW_SID=y # CONFIG_AW_GPU_PM_DOMAINS is not set CONFIG_AW_PM_DOMAINS=y CONFIG_AW_PCK600_DOMAINS=y -# CONFIG_AW_POWER_DOMAIN_TEST is not set +CONFIG_AW_POWER_DOMAIN_TEST=y # end of Power Domain Drivers # @@ -797,6 +844,7 @@ CONFIG_AW_MFD_PMU_EXT_I2C=y # CONFIG_AW_REGULATOR_AXP2101=y CONFIG_AW_REGULATOR_PMU_EXT=y +CONFIG_AW_AXP1530_WORKAROUND_DVM=y # CONFIG_AW_REGULATOR_PWM is not set # @@ -845,6 +893,7 @@ CONFIG_AW_EVENT_DDR=y # CONFIG_AW_SUNXI_DSUFREQ=y # CONFIG_AW_SUNXI_DSUFREQ_TEST is not set +# CONFIG_AW_SUNXI_DSUFREQ_ADJUST is not set # end of sunxi dsufreq Drivers # @@ -957,17 +1006,17 @@ CONFIG_FAT_DEFAULT_CODEPAGE=437 CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" # CONFIG_FAT_DEFAULT_UTF8 is not set +# +# AW andes adaption +# +# CONFIG_AW_ANDES_DMA_ADAPT is not set +# end of AW andes adaption + # # AWLINK Drivers # # end of AWLINK Drivers # end of Device Drivers - -# -# Avaota SBC Drivers -# -# CONFIG_AVA_FB_TFT is not set -# end of Avaota SBC Drivers # end of Allwinner BSP CONFIG_CC_VERSION_TEXT="aarch64-none-linux-gnu-gcc (GNU Toolchain for the Arm Architecture 11.2-2022.02 (arm-11.14)) 11.2.1 20220111" @@ -2684,8 +2733,12 @@ CONFIG_MTD_OF_PARTS=y # # User Modules And Translation Layers # -# CONFIG_MTD_BLOCK is not set -# CONFIG_MTD_BLOCK_RO is not set +CONFIG_MTD_BLKDEVS=y +CONFIG_MTD_BLOCK=y + +# +# Note that in some cases UBI block is preferred. See MTD_UBI_BLOCK. +# # CONFIG_FTL is not set # CONFIG_NFTL is not set # CONFIG_INFTL is not set @@ -3185,7 +3238,15 @@ CONFIG_NET_VENDOR_SMSC=y # CONFIG_SMSC9420 is not set CONFIG_NET_VENDOR_SOCIONEXT=y CONFIG_NET_VENDOR_STMICRO=y -# CONFIG_STMMAC_ETH is not set +CONFIG_STMMAC_ETH=y +CONFIG_STMMAC_SELFTESTS=y +CONFIG_STMMAC_PLATFORM=y +# CONFIG_DWMAC_DWC_QOS_ETH is not set +CONFIG_DWMAC_GENERIC=y +CONFIG_DWMAC_SUNXI=y +CONFIG_DWMAC_SUN8I=y +# CONFIG_DWMAC_INTEL_PLAT is not set +# CONFIG_STMMAC_PCI is not set CONFIG_NET_VENDOR_SUN=y # CONFIG_HAPPYMEAL is not set # CONFIG_SUNGEM is not set @@ -3283,6 +3344,7 @@ CONFIG_MDIO_DEVRES=y # # MDIO Multiplexers # +CONFIG_MDIO_BUS_MUX=y # CONFIG_MDIO_BUS_MUX_GPIO is not set # CONFIG_MDIO_BUS_MUX_MULTIPLEXER is not set # CONFIG_MDIO_BUS_MUX_MMIOREG is not set @@ -3290,7 +3352,7 @@ CONFIG_MDIO_DEVRES=y # # PCS device drivers # -# CONFIG_PCS_XPCS is not set +CONFIG_PCS_XPCS=y # end of PCS device drivers # CONFIG_PPP is not set @@ -5745,23 +5807,6 @@ CONFIG_USB_CONFIGFS_F_HID=y # # USB Gadget precomposed configurations # -# CONFIG_USB_ZERO is not set -# CONFIG_USB_AUDIO is not set -# CONFIG_USB_ETH is not set -# CONFIG_USB_G_NCM is not set -# CONFIG_USB_GADGETFS is not set -# CONFIG_USB_FUNCTIONFS is not set -# CONFIG_USB_MASS_STORAGE is not set -# CONFIG_USB_G_SERIAL is not set -# CONFIG_USB_MIDI_GADGET is not set -# CONFIG_USB_G_PRINTER is not set -# CONFIG_USB_CDC_COMPOSITE is not set -# CONFIG_USB_G_ACM_MS is not set -# CONFIG_USB_G_MULTI is not set -# CONFIG_USB_G_HID is not set -# CONFIG_USB_G_DBGP is not set -# CONFIG_USB_G_WEBCAM is not set -# CONFIG_USB_RAW_GADGET is not set # end of USB Gadget precomposed configurations CONFIG_TYPEC=y diff --git a/external/config/sources/families/sun55iw3.conf b/external/config/sources/families/sun55iw3.conf index 8372f4fea7a9..2d96f7db8f49 100644 --- a/external/config/sources/families/sun55iw3.conf +++ b/external/config/sources/families/sun55iw3.conf @@ -1,13 +1,13 @@ source "${BASH_SOURCE%/*}/include/sunxi64_common.inc" LINUXFAMILY=sun55iw3 -NAME_KERNEL="uImage" -NAME_INITRD="uInitrd" +#NAME_KERNEL="uImage" +#NAME_INITRD="uInitrd" -SRC_CMDLINE="earlycon=uart8250,mmio32,0x02500000 clk_ignore_unused initcall_debug=0 console=ttyAS0,115200 console=tty0 loglevel=8 cma=64M init=/sbin/init rw no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0 splash plymouth.ignore-serial-consoles" +#SRC_CMDLINE="earlycon=uart8250,mmio32,0x02500000 clk_ignore_unused initcall_debug=0 console=ttyAS0,115200 console=tty0 loglevel=8 cma=64M init=/sbin/init rw no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0 splash plymouth.ignore-serial-consoles" -[[ -z $CPUMIN ]] && CPUMIN=480000 -[[ -z $CPUMAX ]] && CPUMAX=1512000 +[[ -z $CPUMIN ]] && CPUMIN=408000 +[[ -z $CPUMAX ]] && CPUMAX=1800000 GOVERNOR=ondemand #ASOUND_STATE=asound.state.sun55iw3-${BRANCH} @@ -22,11 +22,11 @@ case $BRANCH in [[ $BOARD =~ orangepi4a ]] && BOOTBRANCH='branch:v2018.05-t527' KERNELPATCHDIR=${BOARDFAMILY}-${BRANCH} - UBOOT_TARGET_MAP=";;dts/${BOARD}-u-boot.dts boot0_sdcard.fex boot_package.fex" + UBOOT_TARGET_MAP=";;dts/${BOARD}-u-boot.dts boot0_sdcard.fex boot0_spinor.fex boot_package.fex" UBOOT_COMPILER="arm-linux-gnueabi-" UBOOT_USE_GCC='> 6.0' - BOOTENV_FILE=sun50iw9-default.txt - BOOTSCRIPT='boot-sun50iw9.cmd:boot.cmd' + BOOTENV_FILE='sun55iw3.txt' + BOOTSCRIPT='boot-sun55iw3.cmd:boot.cmd' KERNEL_USE_GCC='> 10.0' OFFSET=20 ATFSOURCE="" @@ -48,6 +48,8 @@ family_tweaks_s() run_on_sdcard "systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target" > /dev/null 2>&1 fi + [[ $RELEASE == jammy && ${DESKTOP_ENVIRONMENT} == xfce ]] && chroot $SDCARD /bin/bash -c "apt-get -y -qq install ocl-icd-libopencl1" >/dev/null 2>&1 + if [[ "${BOARD}x" == orangepi4ax ]]; then nvram=$EXTER/cache/sources/orangepi-firmware-git [[ -f ${nvram}/nvram_ap6256.txt-$BOARD ]] && cp ${nvram}/nvram_ap6256.txt-${BOARD} ${SDCARD}/lib/firmware/nvram_ap6256.txt @@ -55,7 +57,7 @@ family_tweaks_s() rsync -a --chown=root:root "${EXTER}"/packages/bsp/overlays_arm64/* ${SDCARD}/ - chroot $SDCARD /bin/bash -c "apt-get -y -qq install rfkill bluetooth bluez bluez-tools ir-keytable tree lirc v4l-utils dnsmasq" >/dev/null 2>&1 + chroot $SDCARD /bin/bash -c "apt-get -y -qq install mtd-utils rfkill bluetooth bluez bluez-tools ir-keytable tree lirc v4l-utils dnsmasq" >/dev/null 2>&1 if [[ $BUILD_DESKTOP == yes ]]; then @@ -68,10 +70,12 @@ family_tweaks_s() echo "load-module module-alsa-sink device=hw:0,0 sink_name=AudioCodec-Playback sink_properties=\"device.description='Audio Codec'\"" >> ${SDCARD}/etc/pulse/default.pa echo "load-module module-alsa-sink device=hw:2,0 sink_name=HDMI-Playback sink_properties=\"device.description='HDMI Audio'\"" >> ${SDCARD}/etc/pulse/default.pa fi + + chroot $SDCARD /bin/bash -c "apt-get -y -qq install vlc mpv" >/dev/null 2>&1 fi if [[ ${BRANCH} == current ]]; then - [[ ${SRC_EXTLINUX} != "yes" ]] && sed -i 's/^debug_uart.*/debug_uart=ttyAS0/' "${SDCARD}"/boot/orangepiEnv.txt + #[[ ${SRC_EXTLINUX} != "yes" ]] && sed -i 's/^debug_uart.*/debug_uart=ttyAS0/' "${SDCARD}"/boot/orangepiEnv.txt SERIALCON="ttyAS0" fi @@ -143,3 +147,15 @@ uboot_custom_postprocess() fi fi } + +write_uboot_platform_mtd() +{ + if [[ -b /dev/mtdblock0 ]]; then + flash_erase /dev/mtd0 0 512 + size=$(stat --format="%s" $1/boot0_spinor.fex) + mtd_debug write /dev/mtd0 0 $size $1/boot0_spinor.fex + size=$(stat --format="%s" $1/boot_package.fex) + mtd_debug write /dev/mtd0 65536 $size $1/boot_package.fex + sync + fi +} diff --git a/external/packages/bsp/common/usr/lib/orangepi/orangepi-hardware-optimization b/external/packages/bsp/common/usr/lib/orangepi/orangepi-hardware-optimization index f5509b87bb16..14dfeecc5755 100755 --- a/external/packages/bsp/common/usr/lib/orangepi/orangepi-hardware-optimization +++ b/external/packages/bsp/common/usr/lib/orangepi/orangepi-hardware-optimization @@ -356,6 +356,8 @@ prepare_board() { ;; orangepi4a) echo usb_host > /sys/devices/platform/soc@3000000/10.usbc0/otg_role + echo 4 1 > /sys/devices/platform/soc@3000000/2020000.nsi-controller/nsi-pmu/hwmon0/port_abs_bwlen + echo 4 400 > /sys/devices/platform/soc@3000000/2020000.nsi-controller/nsi-pmu/hwmon0/port_abs_bwl chmod 666 /dev/vipcore tinymix -D 0 23 1 tinymix -D 0 26 1 diff --git a/external/packages/bsp/common/usr/sbin/opi-bkimg b/external/packages/bsp/common/usr/sbin/opi-bkimg index 3fe9d5a9244a..08e661bdbc84 100755 --- a/external/packages/bsp/common/usr/sbin/opi-bkimg +++ b/external/packages/bsp/common/usr/sbin/opi-bkimg @@ -91,7 +91,7 @@ sdsize=$(bc -l <<< "scale=0; ((($imagesize * 1.35) / 1 + 0) / 4 + 1) * 4") mnt_free=$(df -BM /mnt | grep ^/dev | head -1 | awk '{print $4}' | tr -cd '[0-9]. \n') -if [ "$mnt_free" -lt "$sdsize" ]; then +if [[ "$mnt_free" -lt "$sdsize" ]]; then display_alert "Not enough space in /mnt" "Required: ${sdsize}MiB, Available: ${mnt_free}MiB" "err" exit 1 fi @@ -120,13 +120,7 @@ display_alert "Creating partitions" "${bootfs:+/boot: $bootfs }root: $ROOTFS_TYP echo "$rootpart : name=\"rootfs\", start=${next}MiB, type=${type}" } | sfdisk $image >> "$logfile" 2>&1 -LOOP=$(losetup -f) -[[ -z $LOOP ]] && echo "error" && exit - -losetup $LOOP $image - -partprobe $LOOP - +LOOP=$(losetup -fP --show $image) rootdevice="${LOOP}p${rootpart}" display_alert "Creating rootfs" "$ROOTFS_TYPE on $rootdevice" diff --git a/external/packages/bsp/overlays_arm64/etc/docker/daemon.json b/external/packages/bsp/overlays_arm64/etc/docker/daemon.json deleted file mode 100644 index fa5438ac536b..000000000000 --- a/external/packages/bsp/overlays_arm64/etc/docker/daemon.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "registry-mirrors": [ - "https://docker.mirrors.ustc.edu.cn" - ] -} diff --git a/external/packages/pack-uboot/sun55iw3/bin/boot0_spinor.fex b/external/packages/pack-uboot/sun55iw3/bin/boot0_spinor.fex new file mode 100644 index 0000000000000000000000000000000000000000..6ac23a3949d0f719bb6a42592d9843ac591dc96e GIT binary patch literal 61440 zcmeFa3wTu3)jzz?WiFW+l1U~&Zopg;2n?5jfJQ)>%!ETS0TPI|h_;>(gb7*`#lBK& z%>=xl*cuJAA+a@zwHC1wG_9yT*$+iMZtYoNxdB z?7_20#junK6Ls0B%SBy2>T04cjr;%8KSkNQm%{&-s-Km$K70MT`SY$RiPXx3{-7vY zVnTnQ?pOV7`3mCtyGp({591}w{D^R^_#zMB=C&{zLCH;68J^}-$>va349}g zZzS-I1iq2LHxl?p0^dmB8wq?)0#H_U5faxig|v2BNT9P7z?xb+iDc_A$Hkvx4XvFz zgt5jzCj-AZjyacnqM;K^y3fua1BvA6PZG^fe?qJcojhqc!;qqmAw_vTR%+-7*fiwr zd797V_eJCusj|-%=Q`K0sG%d)WjUQjh=DXTbndl2+U`nd=+K#&(=1tqvXR%#FT2l` zBffcx>zvNYoaU`tPb*&1`Akk?d*UtS9ZIFH^O^se*siN?=t#V^p+md>(T?PG)ZNkX z-4@+BruxRyG89RS`})&;aM^}OPa8;aN2j9vh2}~5uLOUZ$7E$rhqQ9m+5c9QZfRxn z8H#_g>=fr*=F_CLp~Fc?3X@pX!6X4(4IO5(x)XJIUCNntmT@<9Fhu|nPyq-4+8a7V z#F;|U4nqfda!SB-+8Xem)>}R8`k(CYkjTDF7ulD`FiD*>K5u?3(QRFQdLU=t3ls)X zW~r)KZzTzxz>~~yktRvXX+EQe-vB=km!@OkGUj&@Rfzg&eR%K-qpes{Ov7IV90PpJ zS+}iX_NH0If0NaB3V0m*ApM} zZa@)01XKV5fc7UoM!a?!ClW7!cz_~+2&e!A0PTT~KUS0(?M(BTt#kIH9fFCBJDAS2 z0$i=|x5D3=9`9~Ga~-We@@L7-orre?@t$MagC8Rv{H@QKP;REZ_2bVVA6nNVieli* zhdOC|TAmr`r^ST)h1MTB=1AQsKlcY_lhxx&B4lAZH|wlK8qdt0-_SwpPKq1P@Qb%~ zq~|ttXqG?Fk#Rlx=FJawOkIzDe)~fm)9!BQ(BJoPN9F?!9Wjq>@0h-`p~LjlBONo3 zU~IheSchzBIMW5$wR6p9sQh#&1LaN2!?)giIu^WnSK#A*+Mm(4{)xDpIp_2nXv_bo zoY`Z_nT>Mhp`3Xr=NgoA4a(_9IsGW-7L;=f%DElo+>UbAqMWrT=i4af+gB(jcwZ_f zcz>~+EXw)Be_GDPW6C)nru}8P|mwi&c{&B2T;zZP|lqw z=Q}9pkt>uFyf2j#yuVmZ2Ibs{a#j$Lj*X5{SH5M|*%#h=`je+vww=Me#9|Jp9gDjg zI<}9+F&}Ihi;E2%{;@dbi8W(!%mI00@#=<-?6G)5Lx-%3%)cKfN{ak+^O-npLuV1@ zYi2IywuNWT(J@cUNie?6#{Hj}cQk&shH+n5Yx7*VIVbnRcT0o|=c~l?z0YhoKXAx@ zzPaP}^Vb#J@R>$@0CV5BI&p`R!eUPNH~16M&`I;q666b4`ak5$iGNgi<4#89eJ;vd z0#90A%74^P%g(ymJ6Lx^2V2zMVP53^QQG5Z8t00&1!rG@PFpg_8YCwf|Y9--(-DD#j;i@y=uG1 zeSSh!yoX2=tM(5BE;J5Qoqx8Q;|}*s;rM6SZq8CD5%y_;w7h(Q1on3ysw6F*ZkEk# zY3M#wvA?@&3|<91XAGVLoEd{Nzz>y=NiQP(7`zI2&KNugI5P%kfFHVLO!^|EAA?r` z&l!W~0B6SF4DdsRW74~kehgj(JZB7^1DqLyGr$im8I#_H^keWU;5lRP9N^3toB@7l z&Y1L8q#uJ<0nZtO=KyEM;0*9XQ^uq>BmEe>3V6;KJO?;424{dDiW`%jApID;3V6;K zJO?;424{#_s90udVXVYjv5fYVw|b_q)&W+kSf+0*loS_{HXJ0=<+fR8IkysiX9P2a zn;j$(Xl-H8)@l7Vulq!zowRk-{&<`i8{m@bM%D}es;4U?w zpV1un2GY$YpdXT-Mf>3^YCm*$6O!4or~A<6SJZwuidO-r{cse|0Z#kjD9!+<{csdN zREqRt@G9W6AC89S0H^(M6lZ|bemIIBDn|M-colHk4@bjufYW|BiZj4zKODsmd69k$ zUIm=?!_n{@;Ito(;tX)w4@dDsSx7$yuL4f{;b?dcaM}+?aRxZ;hokr*2hxwhtANvf zI2xVYz;V6E{g7jnXD&Vvqj)vy|r~PmgXModwIEo+QkbVqa1)TQ7(eNDL zv>%S*4EJUaiOXwodn%Sa)ivtNZXs5_rLgO>3b(|N%l(tab)b(%;*-p`TgoNkeys)l z$xWo#*U0qVXn%d>OZ}B?DwOnukyZ?_&BdR^&S49l9poHq474xzB>$J@GA${F(q7!V zckisT6?v;Zi!FalNV4U5=Or!gAsq0y9UgtlR!{$X&1WjM7xvz}d5u>IpKaOSN6Ot7 zyNWYg3VVrYZXz1@#nac5p2{N9=Qgu~N9Gq5_6988E}r4~0+v^L0)?QZUJR1Hz-pwt zo`zTuLaB04e{SLuw`3vgIddF)&J|ZE-H^qdGcRemQ2u!QIdkE9s}lZ=k}mO_w>MDi zl^BkRhMJqrO`|b>uB0Q>A?YrK5{K^G_$9h??}Jm}S%l9a@H2hH zk|O*>p#GK%w>+*dND`?_>}$oeb47DJ635ciCip2YSIcn74bu+ldMC#?x1)6w7v)KR z2{AX()Qn?>&!X~)v+)b#Ro`1Oe-#bO$T!#xD&?8J$~%p!kH02DVfvUaP@cIsH1~^f z0;~8h(4Oggd{x>tk$7AWo5fv>=TcP8h60kFruw)(vN_`0(GbdG^BCzmnPS=k#-1YTn>Bej!?_tL>owAn=U{bD zB8?mFi*PHOh;(pB34f>%t6uv3ko){{w_f_q5V6KcgEGlX`p|Aqv0Y_lrM>|g79;JK z_0nrY3w?i>s1*W(tm6;edpOpa)W$hywiWi4+&#XXa{7TnGWic9-2OiDNr>`W3V!WT zTD@{AByr}*j* zFf|snwudk1EbL`}7FWa78ymTLwuY_u9%SlY>3gowgx+6rcVX{_yZ;=bzkdwbgt$Dt zG0$GuDgv$eb1b+|U z6F@hmW6jbxDd7_%sChHR2#GD2bvEpcvkchayM2H*8XYV45OOT7}=Ok39?#;a2JQy$}{ zc)ZBZ`>I$G8mGpwi2ARI#RVDu*=6>t~m8 z99zRL=4iT<Nv4}1Y9t0Up&tkD?%X$t-S11bLBS*rhi z&HwlH__`E^cG4nNROzLmA;mnNKz+pM%w~eMVQfo}w(S4Dv|P`#rQF5GHjnlQ_gD6r z!i(&kDI#mVWjQ0=)lcWe=E1^?oI0vE^*hx5ccbs{1=ed3BbZm3=A~tHL~#e!(NS8W z)gcn;_I?`vk(^hRbAE4`Z{^!Esm@Y4IV4scnL=TfxJadVdx^@e+O|j>*P~oNrmko41qACE4K@4F z_NuSEH*hDPWyp!d0f1X@T`tu_D*2P-U&(Y z-we7sYh&gf7o8Qz49m$c&I}&OT0(PA7Cn+dZEwb!B4W0uGky|bQ+(M?8X+=gVb)ah zpRjzr)gmfk+hDYPqjT(f)K3Xd7^Oz*9-$fsX)ZAZlScbQZ@@t*G_?6lHqJi-uUl>yn!Vqx#^?jq9b0~Axj+ZAhzwS~r0!oOE&TI-m!X5?XJ zHKY}5nZ8LMUA-eKq4u~EE>Myh>8=E6Th#I(Uf|US_mh{mh{Q1{8rzBE4Uuhs!_Q>B zA->_C>+C-<2>+ls;Qyh&&hzi1q$Tm{W+Cuq#WGgy>x_dNV0z+JsWY@yNOlu1&^p)) zIFXBv5K>AhqxdA>3V(|Gul`it+odV~u|LM|^m@A(hehQw#l}H`ZOUYu5`I_FSe5W~ z1Cwl4K?(m+NdfJ!5^2*@WZ?Zogw7dARYQLlr8^{2Omj=Ijkep~7LpjqlSr#F>#UN) zSfBDewcO&zDBVokDsI5xXRLI@(7vHpG1{6GW1?XZY(Sj@e&Rz()ltCq`8^NJi})Wc zbf4E`MaJRwm5CU4O8B%I|G^a`J<(by&Ct&T?RbBgur-g_`L0X?@1A9ImGDNTOt?Sq z-LvF@2!4w)$x$Z!5OGLNgz_zAp(@9FmfPJP$$b~CU7~d%xHb0AQ$xnm=YjsqerH7T zZm;B4_bp}16Rl2!)b`ue5He%!$y>1p`*>je@`yZ%^Zt_}D5nM}f3bkYsE^FEqj}PC zr-biOYjtCR=1bu>ERV$4FgoA#2GpGmok5lGO{3K4NO7n#ER+J?=lVXq+aWSmC7iGF z&Mjcn6rO%Y`pXC-%~0GZ*W&{`-Kk-W-17LfKD!vHhewL6CYSNZKH@SS*)`asqxxjD z*Ca+uGum4m;=Litd0N5c*)h_OF5>~Ue_qBTBYPAd?T;ZjBG1d5zZELNTxjMP-J25$ zOV`KsfZG8)zy#0(6lF-ZVy*m+Rzou3()H5{Fd+?ewr}49y1CSrXSy`AL|WD&j@=Q` zIz)OTSAZTlPn{`SC@-3CcGI{OGu8ITd2l|B%UWr#{IQ%H#b=64PB55z4Xb%}|a%i*jJ8j(Y3g5+dqU%YCB3efJN>kkE{5KH=bd*Z@HmtHrEZZv zGv>IqAgMxIklYAOKm{E)$rXd4sP3aBFi}IcV_$@RwuSaHigWOD1*uz%jdUkav1~L> z?5j(fbbD7r6QnEPtJxQrCp9%n_=6F?p4L&j|2s0@&F!yP_DKa#;$Dp}a5X)$KWWQr zjm%3VeI)#ok#YH~kO>)|QZm0|ZDi&XX-&UrCbUWgR2vNDO+0%Z;;m zv^)=BuK723KB9k;NKIxJ$#^71D-@mOmvPfEKFQ+TB01?k`kRQ~j9im&?gKKD`+(1D zP07ran!hFUPG<4=++LjHuesfDi@C`nBnpgO3IDfZO-WL74LTB2ZgwT{><@GHXs zds2Qfd}L%#nI%6qkIsdAO0XvxzO{r{!B?N%Tw3;XPfYN%AL&Xcx1T`sBAqnl9S@n1 z@*2gIcNFE{hcbSEI!x1Oh*qZ|a{%-$R5n~%Zd&GD@UI5^fQF&3P|#ri$K)P9%d=)- zt(YvHDmf|A`acGKQd3?d>51dxeCbjg&-YkOL4V9ay&yGD@ZaE%^P9T0oHO@n4|jBP zG8aq|&W8-bzd~G(S$EH>!?0q=7EXvq#Zc%e@G>`QeMkM=LG)1nb`Kjo#L}&i!+D zdY6W`d)>0l>O%kX#+YAqrQhr|Ktri1FrWwSY~g#z=G5dQ!Tculb1kGrn#Ah7F)q8S zX)WTlULfNOyWC`Zi?M)6lS!e(@wF{1((nVMcY8~H5`*yJsTVy9k%0u48(f5+2|POXHOeYon*4!v`2^t=sI0+|1vrIPHsnzGdXC_;|j{V z2sIyVozFO3D|0#yKn#`8kcFRnlVzLtc zhobEkh;epd*Kw|}i8(}KJEHELY@DW=Xepzn{B804x4x0slf zU3iB0B&4F@f5zA8pMKqwaFjUR(uDxAmWH=Rq_<8!zA*xU!Pq7c(3 zp*dT2$xJnw6KX5$N=_*3I$_j2sjK^`psD-mQa1Q|+yw6n(Ar0|+H8G_KDw zQusC+%G7gp7E#x|jMdZ|=M;9~ey(d9VY_!QKRC`n=8*eckT*}|Ze0keCsCQFMS4eF zf}cD&R^kbMM#X6fclERFF_KRETSBF3Iu&PU2efibU3!-E5Mf$i$&0jp6Tc;mjM)JzmeY&qoJ^o&F(ZtwtI5Mfa=MxuMsbvG z6$nn$?aD})8KmR*ELO2z?25CSNc#8{l+v!SLQ-R7rvKX@GhaXRLXgEt?U)i

WF= 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≫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 F{~ux1+DiZc literal 0 HcmV?d00001