From a3f1e837fde8f4cebcd41fa7be7dec35d599bc69 Mon Sep 17 00:00:00 2001 From: lean Date: Tue, 15 Jun 2021 17:58:07 +0800 Subject: [PATCH] x64: fix grub2 booting --- config/Config-build.in | 29 +- config/Config-devel.in | 11 +- config/Config-images.in | 84 +- config/Config-kernel.in | 222 +- feeds.conf.default | 1 - include/cmake.mk | 36 + include/feeds.mk | 8 +- include/image-commands.mk | 466 +-- include/image.mk | 64 +- include/kernel-build.mk | 6 +- include/kernel-defaults.mk | 2 +- include/logo.png | Bin 0 -> 81750 bytes include/logo.svg | 398 +++ include/netfilter.mk | 4 - include/package-ipkg.mk | 2 +- include/package.mk | 6 +- include/prereq-build.mk | 6 +- include/shell.sh | 0 include/target.mk | 46 +- include/u-boot.mk | 3 +- include/unpack.mk | 2 +- include/version.mk | 5 +- package/base-files/Makefile | 12 +- package/base-files/files/bin/board_detect | 2 +- package/base-files/files/bin/config_generate | 34 +- package/base-files/files/etc/bench.log | 0 .../files/etc/board.d/99-default_network | 1 - package/base-files/files/etc/diag.sh | 0 .../files/etc/hotplug.d/net/00-sysctl | 0 package/base-files/files/etc/init.d/boot | 1 - package/base-files/files/etc/profile | 21 +- package/base-files/files/etc/rc.local | 0 package/base-files/files/etc/shinit | 0 .../files/etc/sysctl.d/10-default.conf | 2 + .../files/etc/uci-defaults/10_migrate-shadow | 0 .../etc/uci-defaults/12_network-generate-ula | 0 .../files/etc/uci-defaults/13_fix-group-user | 0 package/base-files/files/lib/functions.sh | 75 +- .../base-files/files/lib/functions/leds.sh | 0 .../base-files/files/lib/functions/network.sh | 0 .../base-files/files/lib/functions/preinit.sh | 0 .../base-files/files/lib/functions/service.sh | 0 .../base-files/files/lib/functions/system.sh | 0 .../files/lib/functions/uci-defaults.sh | 9 +- .../files/lib/preinit/02_default_set_state | 0 .../base-files/files/lib/preinit/02_sysinfo | 0 .../files/lib/preinit/10_indicate_failsafe | 0 .../files/lib/preinit/10_indicate_preinit | 0 .../files/lib/preinit/30_failsafe_wait | 5 +- .../files/lib/preinit/40_run_failsafe_hook | 0 .../lib/preinit/50_indicate_regular_preinit | 0 .../files/lib/preinit/70_initramfs_test | 0 .../files/lib/preinit/80_mount_root | 18 + .../files/lib/preinit/99_10_failsafe_login | 6 - .../files/lib/preinit/99_10_run_init | 0 .../base-files/files/lib/upgrade/common.sh | 240 +- .../base-files/files/lib/upgrade/do_stage2 | 25 + .../base-files/files/lib/upgrade/fwtool.sh | 54 +- package/base-files/files/lib/upgrade/nand.sh | 22 +- package/base-files/files/lib/upgrade/stage2 | 45 +- package/base-files/files/sbin/hotplug-call | 2 +- package/base-files/files/sbin/pkg_check | 130 + package/base-files/files/sbin/sysupgrade | 47 +- package/base-files/files/sbin/wifi | 1 + package/boot/at91bootstrap/at91bootstrap.mk | 0 package/boot/grub2/Makefile | 158 + package/boot/grub2/common.mk | 76 - .../boot/grub2/files}/grub-early.cfg | 0 package/boot/grub2/grub2-efi/Makefile | 23 - package/boot/grub2/grub2/Makefile | 33 - .../grub2/patches/300-CVE-2015-8370.patch | 2 +- package/boot/kexec-tools/files/kdump.config | 0 package/boot/kexec-tools/files/kdump.defaults | 0 package/boot/kexec-tools/files/kdump.init | 3 +- package/boot/mt7623n-preloader/Makefile | 14 - package/boot/tfa-layerscape/Makefile | 2 +- package/boot/uboot-imx6/Makefile | 4 +- ...efconfig-enable-some-useful-commands.patch | 37 + ...s-Make-the-boot-process-more-generic.patch | 123 - .../patches/100-wandboard-enable-fit.patch | 17 - .../patches/110-mx6cuboxi-mmc-fallback.patch | 15 +- ...1-mx6cuboxi_defconfig-force-mmc-boot.patch | 23 + package/boot/uboot-layerscape/Makefile | 2 +- package/boot/uboot-mxs/Makefile | 4 +- .../patches/001-add-i2se-duckbill.patch | 72 +- .../uboot-oxnas/src/board/ox820/MAINTAINERS | 0 .../src/board/ox820/lowlevel_init.S | 0 .../uboot-oxnas/src/board/ox820/spl_start.S | 0 .../src/board/ox820/u-boot-spl.lds | 0 .../uboot-oxnas/src/configs/ox820_defconfig | 0 package/boot/uboot-ramips/Makefile | 34 + ...01-add-support-for-RAVPower-RP-WD009.patch | 290 ++ package/boot/uboot-sunxi/Makefile | 10 - ...nxi-h5-add-support-for-nanopi-r1s-h5.patch | 217 -- package/firmware/armbian-firmware/Makefile | 55 - package/firmware/cypress-firmware/Makefile | 107 +- package/firmware/ipq-wifi/Makefile | 32 +- .../board-devolo_magic-2-wifi-next.qca4019 | Bin 0 -> 24340 bytes ....qca4019 => board-edgecore_oap100.qca4019} | Bin 24308 -> 24324 bytes .../ipq-wifi/board-glinet_gl-ap1300.qca4019 | Bin 0 -> 48596 bytes .../ipq-wifi/board-linksys_mr8300-v0.qca4019 | Bin 0 -> 97268 bytes .../ipq-wifi/board-linksys_mr8300-v0.qca9888 | Bin 0 -> 48644 bytes .../ipq-wifi/board-luma_wrtq-329acn.qca4019 | Bin 0 -> 24324 bytes .../ipq-wifi/board-mikrotik_hap-ac2.qca4019 | Bin 0 -> 24324 bytes .../board-mikrotik_sxtsq-5-ac.qca4019 | Bin 0 -> 12176 bytes ...a4019 => board-plasmacloud_pa1200.qca4019} | Bin 24316 -> 24324 bytes ...a4019 => board-plasmacloud_pa2200.qca4019} | Bin 24300 -> 24324 bytes .../ipq-wifi/board-plasmacloud_pa2200.qca9888 | Bin 0 -> 12172 bytes package/firmware/ixp4xx-microcode/Makefile | 59 - .../ixp4xx-microcode/src/IxNpeMicrocode.h | 148 - .../firmware/ixp4xx-microcode/src/LICENSE.IPL | 27 - .../firmware/layerscape/ls-ddr-phy/Makefile | 2 +- package/firmware/layerscape/ls-dpl/Makefile | 2 +- package/firmware/layerscape/ls-mc/Makefile | 2 +- package/firmware/layerscape/ls-rcw/Makefile | 2 +- .../600-custom-fix-txpower-and-dfs.patch | 32 - package/kernel/acx-mac80211/Makefile | 6 +- package/kernel/ar7-atm/Config.in | 22 - package/kernel/ar7-atm/Makefile | 101 - .../090-no-date-time.patch | 11 - .../patches-D7.04.03.00/100-compile_fix.patch | 768 ---- .../110-interrupt_fix.patch | 37 - .../120-no_dumb_inline.patch | 11 - .../130-powercutback.patch | 44 - .../patches-D7.04.03.00/140-debug_mode.patch | 16 - .../150-tasklet_mode.patch | 11 - .../160-module-params.patch | 589 ---- .../170-bus_id_removal.patch | 19 - .../180-git_headers_include.patch | 39 - .../190-2.6.32_proc_fixes.patch | 92 - .../patches-D7.04.03.00/200-2.6.37_args.patch | 32 - .../210-3.3-remove-smp_lock.h.patch | 33 - .../220-3.10-update_proc_code.patch | 2945 ---------------- .../230-compile_fixes.patch | 44 - .../patches-D7.04.03.00/240-3.18_fixes.patch | 38 - .../patches-D7.04.03.00/250-4.1_fixes.patch | 20 - .../260-fix_function_signatures.patch | 63 - .../090-no-date-time.patch | 11 - .../patches-D7.05.01.00/100-compile_fix.patch | 808 ----- .../110-interrupt_fix.patch | 37 - .../120-no_dumb_inline.patch | 11 - .../130-powercutback.patch | 44 - .../patches-D7.05.01.00/140-debug_mode.patch | 16 - .../150-tasklet_mode.patch | 11 - .../160-module-params.patch | 675 ---- .../170-bus_id_removal.patch | 19 - .../180-git_headers_include.patch | 39 - .../190-2.6.32_proc_fixes.patch | 92 - .../patches-D7.05.01.00/200-2.6.37_args.patch | 32 - .../210-3.3-remove-smp_lock.h.patch | 33 - .../220-3.10-update_proc_code.patch | 3082 ----------------- .../patches-D7.05.01.00/240-3.18_fixes.patch | 38 - .../patches-D7.05.01.00/250-4.1_fixes.patch | 20 - .../260-fix_function_signatures.patch | 63 - package/kernel/ath10k-ct/Makefile | 2 +- package/kernel/avila-wdt/Makefile | 34 - package/kernel/avila-wdt/src/Makefile | 1 - package/kernel/avila-wdt/src/avila-wdt.c | 231 -- .../brcmfmac4366c0-firmware-vendor/Makefile | 33 - .../files/brcmfmac4366c-pcie.bin | Bin 1102643 -> 0 bytes .../etc/hotplug.d/net/00-broadcom-wifi-detect | 0 .../files/etc/hotplug.d/net/20-broadcom_wds | 0 .../broadcom-wl/files/lib/wifi/broadcom.sh | 0 .../patches/916-fix-compilation-for-5_4.patch | 18 + .../button-hotplug/src/button-hotplug.c | 1 + package/kernel/cryptodev-linux/Makefile | 4 +- .../010-fix-build-for-kernel-v5.9-rc1.patch | 32 + package/kernel/exfat/Makefile | 47 - package/kernel/gpio-button-hotplug/Makefile | 2 +- .../src/gpio-button-hotplug.c | 256 +- .../gpio-nxp-74hc153/src/gpio-nxp-74hc153.c | 2 +- package/kernel/hwmon-gsc/Makefile | 2 +- .../kernel/lantiq/ltq-vmmc/files/vmmc.init | 0 .../linux/files/sysctl-nf-conntrack.conf | 3 +- package/kernel/linux/modules/netdevices.mk | 112 +- package/kernel/linux/modules/netfilter.mk | 65 - package/kernel/linux/modules/netsupport.mk | 1 - package/kernel/linux/modules/usb.mk | 7 +- package/kernel/linux/modules/video.mk | 2 - package/kernel/mac80211/broadcom.mk | 1 - .../files/lib/netifd/wireless/mac80211.sh | 4 +- .../mac80211/files/lib/wifi/mac80211.sh | 3 +- .../ath10k/983-ath10k-allow-vht-on-2g.patch | 10 - .../subsys/600-mac80211-allow-vht-on-2g.patch | 36 - package/kernel/mt76/Makefile | 1 + .../mt76/patches/001-allow-vht-on-2g.patch | 45 - package/kernel/mt7601u-ap/Makefile | 67 - ...-fix-control-reaches-end-of-non-void.patch | 19 - package/kernel/mt7621-qtn-rgmii/Makefile | 45 + package/kernel/mt7621-qtn-rgmii/src/Makefile | 1 + .../mt7621-qtn-rgmii/src/mt7621-qtn-rgmii.c | 48 + package/kernel/mtk-eip93/Makefile | 57 - package/kernel/mwlwifi/Makefile | 4 +- .../mwlwifi/patches/002-disable-AMSDU.patch | 11 - package/kernel/om-watchdog/Makefile | 2 +- package/kernel/om-watchdog/files/om-watchdog | 0 .../kernel/om-watchdog/files/om-watchdog.init | 9 +- package/kernel/rtl8188eu/Makefile | 74 - .../patches/001-use-kernel-byteorder.patch | 15 - .../010-disable-default-build-x86.patch | 11 - .../patches/020-remove-repeat-flies.patch | 39 - .../rtl8188eu/patches/030-wireless-5.8.patch | 46 - package/kernel/rtl8189es/Makefile | 73 - package/kernel/rtl8189es/files/50_rtl-wifi | 6 - .../patches/001-use-kernel-byteorder.patch | 15 - .../patches/010-remove-repeat-flies.patch | 39 - .../rtl8189es/patches/020-wireless-5.8.patch | 31 - package/kernel/rtl8192du/Makefile | 66 - .../patches/010-missing-header-in-ipv6.patch | 14 - .../rtl8192du/patches/020-wireless-5.8.patch | 20 - package/kernel/rtl8812au-ac/Makefile | 83 - .../010-disable-default-build-x86.patch | 11 - ...nge-value-of-vht-enable-and-usb-mode.patch | 20 - ...add-missing-code-for-concurrent-mode.patch | 10 - .../patches/040-wireless-5.8.patch | 20 - package/kernel/rtl8812au-ct/Makefile | 54 + .../patches/001-use-kernel-byteorder.patch | 2 +- .../patches/002-vendor_command_policy.patch | 156 + .../patches/003-wireless-5.8.patch | 30 + package/kernel/rtl8821cu/Makefile | 86 - .../patches/001-use-kernel-byteorder.patch | 15 - .../patches/010-remove-extra-cflags.patch | 11 - .../patches/020-remove-repeat-flies.patch | 39 - .../030-change-value-of-vht-enable.patch | 11 - .../rtl8821cu/patches/040-wireless-5.8.patch | 58 - package/kernel/rtl88x2bu/Makefile | 77 - .../patches/001-use-kernel-byteorder.patch | 15 - .../patches/010-remove-repeat-flies.patch | 39 - .../rtl88x2bu/patches/020-wireless-5.8.patch | 38 - package/kernel/trelay/files/trelay.config | 0 package/kernel/trelay/files/trelay.hotplug | 0 package/kernel/trelay/files/trelay.init | 0 package/kernel/trelay/src/trelay.c | 38 +- package/lean/coremark/Makefile | 70 - package/lean/coremark/coremark | 7 - package/lean/coremark/coremark.sh | 12 - package/lean/kcptun/Makefile | 65 - package/lean/nft-qos/Makefile | 59 - package/lean/nft-qos/files/lib/core.sh | 93 - package/lean/nft-qos/files/lib/dynamic.sh | 90 - package/lean/nft-qos/files/lib/monitor.sh | 39 - package/lean/nft-qos/files/lib/priority.sh | 93 - package/lean/nft-qos/files/lib/static.sh | 74 - .../nft-qos/files/nft-qos-dynamic.hotplug | 36 - .../nft-qos/files/nft-qos-monitor.hotplug | 23 - package/lean/nft-qos/files/nft-qos.config | 107 - package/lean/nft-qos/files/nft-qos.init | 47 - package/lean/parted/Makefile | 50 - package/lean/proxychains-ng/Makefile | 66 - package/lean/samba4/Config.in | 53 - package/lean/samba4/Makefile | 434 --- package/lean/samba4/files/samba.config | 4 - package/lean/samba4/files/samba.init | 232 -- package/lean/samba4/files/smb.conf.template | 121 - .../samba4/patches/001-samba-4.4.0-pam.patch | 29 - .../samba4/patches/002-dnsserver-4.7.0.patch | 19 - .../lean/samba4/patches/003-getpwent_r.patch | 80 - .../samba4/patches/004-missing-headers.patch | 38 - .../samba4/patches/005-musl_uintptr.patch | 35 - .../samba4/patches/006-netdb-defines.patch | 19 - ...bldb-fix-musl-libc-unkown-type-error.patch | 31 - ...samba-4.11-add_missing___compar_fn_t.patch | 14 - .../patches/009-samba-4.11-qsort-compar.patch | 22 - ...mba-4-11-fix-host-tools-checks.patch.patch | 40 - .../020-source3-msgsock-nvram-fix.patch | 20 - .../021-source4-msgsock-nvram-fix.patch | 11 - .../101-do-not-check-xsltproc-manpages.patch | 37 - .../102-samba-4.11-unbundle-libbsd.patch | 59 - .../patches/103-tmsize-overflow-fix.patch | 21 - .../lean/samba4/waf-cross-answers/aarch64.txt | 34 - package/lean/samba4/waf-cross-answers/arc.txt | 37 - package/lean/samba4/waf-cross-answers/arm.txt | 34 - .../lean/samba4/waf-cross-answers/armeb.txt | 34 - .../lean/samba4/waf-cross-answers/i386.txt | 34 - .../lean/samba4/waf-cross-answers/mips.txt | 34 - .../lean/samba4/waf-cross-answers/mips64.txt | 34 - .../samba4/waf-cross-answers/mips64el.txt | 34 - .../lean/samba4/waf-cross-answers/mipsel.txt | 34 - .../lean/samba4/waf-cross-answers/powerpc.txt | 34 - .../lean/samba4/waf-cross-answers/x86_64.txt | 34 - package/lean/softethervpn5/Makefile | 169 - package/lean/softethervpn5/files/dummy | 1 - package/lean/softethervpn5/files/launcher.sh | 2 - .../lean/softethervpn5/files/vpnbridge.init | 22 - .../lean/softethervpn5/files/vpnclient.init | 22 - .../lean/softethervpn5/files/vpnserver.init | 22 - .../patches/001-musl-poll-fix.patch | 27 - .../patches/002-iconv-defines-fix.patch | 11 - .../patches/003-iconv-cmake-fix.patch | 11 - .../100-increase-cfg-save-intervall.patch | 17 - .../patches/101-add-config-write-syslog.patch | 22 - package/lean/wget/Makefile | 108 - .../lean/wget/patches/001-prefer_ipv4.patch | 11 - ...900-fix-segfault-in_canon_doc_option.patch | 14 + ...cliude-asm-ptrace.h-for-pt_regs-defi.patch | 34 + .../120-Fix-build-on-powerpc-musl.patch | 12 - package/libs/libiconv-full/Makefile | 11 +- package/libs/libjson-c/Makefile | 3 +- package/libs/libnetfilter-cthelper/Makefile | 72 - package/libs/libnetfilter-cttimeout/Makefile | 72 - package/libs/libnetfilter-log/Makefile | 75 - ...ecessary-pkgconfig-config.status-dep.patch | 25 - ...d-remove-unused-lines-in-Makefile.am.patch | 24 - ...build-resolve-automake-1.12-warnings.patch | 29 - ...e-needed-for-integer-type-definition.patch | 24 - ...0005-configure-uclinux-is-also-linux.patch | 27 - ...thout-ipulog-option-to-disable-libip.patch | 95 - package/libs/libnetfilter-queue/Makefile | 71 - .../patches/100-checksum_computation.patch | 113 - package/libs/libnl-tiny/Makefile | 4 +- package/libs/librpc/Makefile | 42 - package/libs/libubox/Makefile | 24 +- .../patches/001-add-fallthrough-macro.patch | 37 - package/libs/libusb-compat/Makefile | 54 - .../patches/001-fix-musl-stdint.patch | 185 - package/libs/libusb/Makefile | 2 +- package/libs/lzo/Makefile | 57 - package/libs/mbedtls/Makefile | 35 - ...and-GCM-with-ARMv8-Crypto-Extensions.patch | 401 --- package/libs/nghttp2/Makefile | 44 - package/libs/uclient/Makefile | 6 +- package/libs/wolfssl/Makefile | 6 +- package/libs/zlib/Config.in | 1 + package/network/config/netifd/Makefile | 6 + .../config/netifd/files/etc/udhcpc.user | 1 + .../netifd/files/lib/netifd/dhcp.script | 3 + .../files/etc/hotplug.d/atm/15-solos-init | 0 .../soloscli/files/etc/uci-defaults/solos | 0 .../config/soloscli/files/solos-log-stats | 0 .../network/config/swconfig/files/switch.sh | 0 package/network/config/vxlan/Makefile | 1 + package/network/ipv6/odhcp6c/Makefile | 15 +- .../network/ipv6/odhcp6c/files/dhcpv6.script | 3 + .../network/ipv6/odhcp6c/files/odhcp6c.user | 1 + .../services/dropbear/files/dropbear.config | 1 - .../services/dropbear/files/dropbear.init | 7 +- package/network/services/hostapd/Makefile | 7 +- .../network/services/hostapd/files/hostapd.sh | 5 +- .../network/services/hostapd/files/wpad.init | 16 + .../network/services/hostapd/files/wpad.json | 22 + .../services/hostapd/files/wpad_acl.json | 10 + .../services/hostapd/files/wps-hotplug.sh | 0 package/network/services/noddos/Makefile | 84 + .../patches/010-openssl-1.1-fixes.patch | 13 + ...cxx-update-libipset-API-to-version-7.patch | 431 +++ ...viceprofiles-wget-timestamping-check.patch | 28 + .../patches/040-openssl-deprecated.patch | 14 + package/network/services/odhcpd/Makefile | 8 +- .../services/odhcpd/files/odhcpd.defaults | 30 +- .../services/openvpn-easy-rsa/Makefile | 69 - .../files/openvpn-easy-rsa.upgrade | 1 - .../patches/101-static_EASYRSA.patch | 22 - .../services/openvpn/Config-mbedtls.in | 54 - .../network/services/openvpn/Config-nossl.in | 50 - .../services/openvpn/Config-openssl.in | 58 - package/network/services/openvpn/Makefile | 144 - .../files/etc/etc/hotplug.d/openvpn/01-user | 22 - .../openvpn/files/etc/etc/openvpn.user | 11 - .../files/etc/hotplug.d/openvpn/01-user | 22 - .../services/openvpn/files/etc/openvpn.user | 11 - .../files/files/etc/hotplug.d/openvpn/01-user | 22 - .../openvpn/files/files/etc/openvpn.user | 11 - .../files/files/lib/functions/openvpn.sh | 16 - .../openvpn/files/files/openvpn.config | 493 --- .../services/openvpn/files/files/openvpn.init | 209 -- .../openvpn/files/files/openvpn.options | 204 -- .../openvpn/files/files/openvpn.upgrade | 1 - .../files/files/usr/libexec/openvpn-hotplug | 10 - .../openvpn/files/lib/functions/openvpn.sh | 16 - .../services/openvpn/files/openvpn.config | 493 --- .../services/openvpn/files/openvpn.init | 209 -- .../services/openvpn/files/openvpn.options | 205 -- .../services/openvpn/files/openvpn.upgrade | 1 - .../openvpn/files/usr/libexec/openvpn-hotplug | 10 - .../001-reproducible-remove_DATE.patch | 10 - ...bedtls-disable-runtime-version-check.patch | 11 - .../210-build_always_use_internal_lz4.patch | 74 - .../openvpn/patches/220-disable_des.patch | 74 - .../221-tunnelblick-openvpn_xorpatch-a.diff | 27 - .../222-tunnelblick-openvpn_xorpatch-b.diff | 80 - .../223-tunnelblick-openvpn_xorpatch-c.diff | 13 - .../224-tunnelblick-openvpn_xorpatch-d.diff | 59 - .../225-tunnelblick-openvpn_xorpatch-e.diff | 114 - package/network/services/uhttpd/Makefile | 8 +- .../services/uhttpd/files/ubus.default | 11 +- .../services/uhttpd/files/uhttpd.config | 10 +- .../network/services/uhttpd/files/uhttpd.init | 10 +- package/network/services/umdns/Makefile | 2 +- .../network/services/umdns/files/umdns.init | 2 +- .../network/services/umdns/files/umdns.json | 87 +- package/network/utils/comgt/files/ncm.sh | 66 +- package/network/utils/comgt/files/ussd.gcom | 21 + package/network/utils/curl/Config.in | 164 - package/network/utils/curl/Makefile | 185 - .../curl/patches/200-no_docs_tests.patch | 22 - package/network/utils/iproute2/Makefile | 16 +- package/network/utils/iptables/Makefile | 14 - .../patches/611-add-imq-support.patch | 138 - package/network/utils/iw/Makefile | 2 +- package/network/utils/iwinfo/Makefile | 1 - .../network/utils/layerscape/restool/Makefile | 2 - package/network/utils/ltq-dsl-base/Makefile | 2 - package/network/utils/umbim/Makefile | 6 +- package/network/utils/uqmi/Makefile | 2 +- .../utils/uqmi/files/lib/netifd/proto/qmi.sh | 28 +- .../network/utils/wireguard-tools/Makefile | 6 +- package/network/utils/wwan/files/wwan.sh | 2 +- package/system/fstools/Makefile | 12 +- package/system/fstools/files/fstab.default | 0 package/system/fstools/files/fstab.init | 9 +- .../system/fstools/files/media-change.hotplug | 0 package/system/fstools/files/mount.hotplug | 0 package/system/fstools/files/snapshot | 0 .../fstools/patches/000-fix-ntfs-uuid.patch | 56 - .../patches/0001-add-exfat-support.patch | 315 -- .../patches/0005-disable-lazy-init.patch | 13 - ...xtroot-mount-preparation-more-robust.patch | 97 - package/system/fwtool/Makefile | 19 +- package/system/fwtool/src/crc32.h | 48 - package/system/fwtool/src/fwimage.h | 39 - package/system/fwtool/src/fwtool.c | 443 --- package/system/fwtool/src/utils.h | 116 - package/system/openwrt-keyring/Makefile | 11 +- package/system/opkg/Makefile | 8 +- package/system/opkg/files/20_migrate-feeds | 0 package/system/procd/Makefile | 12 +- package/system/rpcd/Makefile | 2 + .../rpcd/files/50-migrate-rpcd-ubus-sock.sh | 8 + package/system/rpcd/files/rpcd.config | 2 +- package/system/rpcd/files/rpcd.init | 4 - package/system/ubox/Makefile | 9 +- package/system/ubus/Makefile | 20 +- package/system/uci/Makefile | 11 +- package/system/uci/files/lib/config/uci.sh | 20 +- ...arse_package-fix-heap-use-after-free.patch | 51 - ...-file-Check-buffer-size-after-strtok.patch | 112 - package/system/urngd/Makefile | 8 +- package/system/zram-swap/files/zram.init | 5 +- package/utils/busybox/Config-defaults.in | 4 +- package/utils/busybox/Makefile | 3 +- package/utils/busybox/files/ntpd-hotplug | 12 +- package/utils/busybox/files/ntpd_acl.json | 8 + package/utils/busybox/files/sysntpd | 9 +- .../900-add-e-f-option-for-docker.patch | 11 - package/utils/lua/Makefile | 3 +- package/utils/maccalc/Makefile | 43 - package/utils/maccalc/src/Makefile | 14 - package/utils/maccalc/src/main.c | 256 -- package/utils/px5g-wolfssl/Makefile | 2 +- package/utils/ugps/Makefile | 2 +- package/utils/usbutils/Makefile | 60 - rules.mk | 10 +- scripts/checkpatch.pl | 2 +- scripts/clean-package.sh | 2 +- scripts/config/.gitignore | 2 +- scripts/download.pl | 19 +- scripts/gen_image_generic.sh | 11 +- scripts/getver.sh | 2 +- scripts/json_add_image_info.py | 6 +- scripts/metadata.pm | 4 + scripts/om-fwupgradecfg-gen.sh | 6 +- scripts/qemustart | 2 +- scripts/target-metadata.pl | 2 + target/Config.in | 3 +- target/imagebuilder/Makefile | 5 +- target/imagebuilder/files/Makefile | 15 +- target/linux/apm821xx/Makefile | 4 +- .../apm821xx/base-files/etc/board.d/01_leds | 47 +- .../base-files/etc/board.d/02_network | 1 - .../etc/hotplug.d/ieee80211/10_fix_wifi_mac | 2 - .../base-files/lib/preinit/79_move_config | 4 +- .../base-files/lib/upgrade/platform.sh | 3 - .../apm821xx/base-files/lib/upgrade/wdbook.sh | 15 +- target/linux/apm821xx/dts/meraki-mr24.dts | 14 +- target/linux/apm821xx/dts/meraki-mx60.dts | 16 +- .../linux/apm821xx/dts/netgear-wndap620.dts | 4 +- .../linux/apm821xx/dts/netgear-wndap660.dts | 8 +- .../linux/apm821xx/dts/netgear-wndap6x0.dtsi | 14 +- .../linux/apm821xx/dts/netgear-wndr4700.dts | 18 +- target/linux/apm821xx/dts/wd-mybooklive.dts | 6 +- target/linux/apm821xx/image/Makefile | 4 + target/linux/apm821xx/image/sata.mk | 2 +- target/linux/apm821xx/nand/target.mk | 4 +- .../apm821xx/sata/profiles/00-default.mk | 2 +- target/linux/apm821xx/sata/target.mk | 3 +- target/linux/arc770/Makefile | 3 +- .../arc770/base-files/etc/board.d/02_network | 1 - .../arc770/generic/profiles/00-default.mk | 2 +- .../arc770/image/gen_axs10x_sdcard_img.sh | 2 +- target/linux/archs38/Makefile | 3 +- .../archs38/base-files/etc/board.d/02_network | 1 - .../archs38/generic/profiles/00-default.mk | 2 +- target/linux/armvirt/Makefile | 2 - .../armvirt/base-files/etc/board.d/00_model | 1 - target/linux/at91/Makefile | 2 - .../at91/base-files/etc/board.d/02_network | 1 - .../at91/files/arch/arm/boot/dts/wb50n.dts | 6 +- target/linux/ath25/Makefile | 3 +- .../ath25/base-files/etc/board.d/01_leds | 1 - .../ath25/base-files/etc/board.d/02_network | 1 - .../ath25/base-files/lib/upgrade/platform.sh | 2 +- target/linux/ath25/image/Makefile | 44 +- .../ath79/dts/qca9558_arris_sbr-ac1750.dts | 205 -- .../ath79/dts/qca9558_domywifi_dw33d-nor.dts | 20 - .../ath79/dts/qca9558_domywifi_dw33d.dts | 29 +- target/linux/ath79/dts/qca9563_xwrt_csac.dts | 181 - .../generic/base-files/etc/board.d/01_leds | 5 - .../generic/base-files/etc/board.d/02_network | 9 +- .../base-files/etc/board.d/03_gpio_switches | 1 - .../etc/hotplug.d/firmware/10-ath9k-eeprom | 2 +- .../etc/hotplug.d/firmware/11-ath10k-caldata | 31 +- .../etc/uci-defaults/05_fix-compat-version | 11 + .../base-files/lib/upgrade/platform.sh | 10 +- target/linux/ath79/image/generic.mk | 57 +- target/linux/ath79/image/nand.mk | 49 - .../mikrotik/base-files/etc/board.d/01_leds | 1 - .../base-files/etc/board.d/02_network | 1 - .../etc/hotplug.d/firmware/10-ath9k-eeprom | 4 +- .../base-files/lib/upgrade/platform.sh | 2 +- .../ath79/nand/base-files/etc/board.d/01_leds | 1 - .../nand/base-files/etc/board.d/02_network | 5 +- .../etc/hotplug.d/firmware/11-ath10k-caldata | 11 +- target/linux/ath79/nand/config-default | 2 - .../910-unaligned_access_hacks.patch | 2 +- .../ath79/tiny/base-files/etc/board.d/01_leds | 1 - .../tiny/base-files/etc/board.d/02_network | 1 - target/linux/bcm27xx/Makefile | 6 +- .../bcm27xx/base-files/etc/board.d/02_network | 1 - .../base-files/lib/preinit/79_move_config | 2 +- .../base-files/lib/upgrade/platform.sh | 17 +- target/linux/bcm27xx/bcm2708/config-5.4 | 1 - target/linux/bcm27xx/bcm2709/config-5.4 | 1 - target/linux/bcm27xx/bcm2710/config-5.4 | 1 - target/linux/bcm27xx/bcm2711/config-5.4 | 2 - target/linux/bcm27xx/image/Makefile | 8 +- target/linux/bcm27xx/image/config.txt | 9 - .../linux/bcm27xx/image/gen_rpi_sdcard_img.sh | 3 + ...e-link-events-to-minimize-poll-storm.patch | 4 +- target/linux/bcm47xx/Makefile | 2 +- .../bcm47xx/base-files/etc/board.d/01_network | 2 +- .../generic/profiles/101-Broadcom-wl.mk | 2 +- .../generic/profiles/105-Broadcom-none.mk | 2 +- .../generic/profiles/201-Broadcom-b44-wl.mk | 2 +- .../generic/profiles/205-Broadcom-b44-none.mk | 2 +- .../generic/profiles/211-Broadcom-tg3-wl.mk | 2 +- .../generic/profiles/215-Broadcom-tg3-none.mk | 2 +- .../generic/profiles/221-Broadcom-bgmac-wl.mk | 2 +- .../profiles/225-Broadcom-bgmac-none.mk | 2 +- .../bcm47xx/generic/profiles/PS-1208MFG.mk | 2 +- target/linux/bcm47xx/generic/target.mk | 2 +- target/linux/bcm47xx/image/Makefile | 2 +- target/linux/bcm47xx/image/generic.mk | 24 +- target/linux/bcm47xx/image/legacy.mk | 124 +- target/linux/bcm47xx/image/mips74k.mk | 217 +- .../legacy/profiles/101-Broadcom-wl.mk | 2 +- target/linux/bcm47xx/legacy/target.mk | 2 +- .../mips74k/profiles/102-Broadcom-wl.mk | 2 +- .../mips74k/profiles/103-Broadcom-none.mk | 2 +- target/linux/bcm47xx/mips74k/target.mk | 2 +- .../bcm4908/base-files/etc/board.d/02_network | 1 - target/linux/bcm4908/image/Makefile | 2 +- ...4908_ENET-should-not-default-to-y-un.patch | 33 + ...oadcom-bcm4908_enet-read-MAC-from-OF.patch | 48 + ...bcm4908-enet-add-optional-TX-interru.patch | 50 + ...om-bcm4908_enet-support-TX-interrupt.patch | 300 ++ target/linux/bcm53xx/Makefile | 4 +- .../bcm53xx/base-files/etc/board.d/01_leds | 5 +- .../bcm53xx/base-files/etc/board.d/02_network | 24 +- target/linux/bcm53xx/base-files/etc/diag.sh | 3 + .../base-files/etc/init.d/clear_partialboot | 13 + .../lib/preinit/07_set_preinit_iface_bcm53xx | 14 + .../base-files/lib/upgrade/platform.sh | 43 +- target/linux/bcm53xx/image/Makefile | 166 +- ...-ARM-BCM5301X-Add-DT-for-Meraki-MR32.patch | 266 ++ ...CM5301X-Add-DT-for-ARRIS-SBR-AC1900P.patch | 119 - ...CM5301X-Add-DT-for-ARRIS-SBR-AC3200P.patch | 95 - .../331-Meraki-MR32-Status-LEDs.patch | 28 + ...U-port-fixes-for-devices-not-using-p.patch | 9 +- .../bcm63xx/base-files/etc/board.d/01_leds | 1 - .../bcm63xx/base-files/etc/board.d/02_network | 1 - target/linux/bcm63xx/image/bcm63xx.mk | 2 +- .../generic/base-files/etc/board.d/01_leds | 1 - .../bmips/nand/base-files/etc/board.d/01_leds | 1 - target/linux/gemini/Makefile | 3 +- .../gemini/base-files/etc/board.d/02_network | 7 +- target/linux/gemini/image/Makefile | 4 +- ...5.5-MIPS-BPF-Restore-MIPS32-cBPF-JIT.patch | 13 - target/linux/generic/config-5.10 | 1 - target/linux/generic/config-5.4 | 60 +- ...el-name-in-proc-cpuinfo-for-64bit-ta.patch | 38 - ...-linux-kernel-to-support-shortcut-fe.patch | 252 -- .../hack-5.10/992-add-ndo-do-ioctl.patch | 12 - .../993-usb-serial-option-add-u9300.patch | 46 - .../hack-5.10/999-make-phylink-tristate.patch | 11 - ...el-name-in-proc-cpuinfo-for-64bit-ta.patch | 38 - ...-linux-kernel-to-support-shortcut-fe.patch | 253 -- .../hack-5.4/992-add-ndo-do-ioctl.patch | 12 - .../993-usb-serial-option-add-u9300.patch | 46 - .../hack-5.4/999-make-phylink-tristate.patch | 11 - .../681-NET-add-of_get_mac_address_mtd.patch | 94 +- .../601-add-kernel-imq-support.patch | 1677 --------- .../pending-5.4/655-increase_skb_pad.patch | 2 +- .../681-NET-add-of_get_mac_address_mtd.patch | 99 +- target/linux/imx6/Makefile | 1 - .../imx6/base-files/etc/board.d/02_network | 1 - .../base-files/lib/preinit/79_move_config | 2 +- .../imx6/base-files/lib/upgrade/platform.sh | 4 +- target/linux/imx6/image/Makefile | 3 +- target/linux/ipq806x/Makefile | 12 +- .../ipq806x/base-files/etc/board.d/01_leds | 1 - .../ipq806x/base-files/etc/board.d/02_network | 8 - .../etc/hotplug.d/firmware/11-ath10k-caldata | 36 +- .../ipq806x/base-files/etc/init.d/cpufreq | 17 + .../lib/preinit/05_set_iface_mac_ipq806x.sh | 5 - .../base-files/lib/upgrade/platform.sh | 21 +- .../ipq806x/base-files/lib/upgrade/ruijie.sh | 54 - .../ipq806x/base-files/lib/upgrade/zyxel.sh | 2 +- .../boot/dts/qcom-ipq8064-rg-mtfi-m520.dts | 321 -- .../arm/boot/dts/qcom-ipq8064-wxr-2533dhp.dts | 2 +- .../arm/boot/dts/qcom-ipq8065-nbg6817.dts | 2 +- target/linux/ipq806x/generic/target.mk | 1 + target/linux/ipq806x/image/Makefile | 24 +- .../0069-arm-boot-add-dts-files.patch | 3 +- .../0069-arm-boot-add-dts-files.patch | 3 +- target/linux/ipq807x/Makefile | 9 +- .../kirkwood/base-files/etc/board.d/01_leds | 1 - .../base-files/etc/board.d/02_network | 1 - .../base-files/etc/board.d/03_gpio_switches | 1 - .../base-files/etc/board.d/05_compat-version | 20 + .../base-files/lib/upgrade/platform.sh | 4 +- target/linux/kirkwood/image/Makefile | 8 + target/linux/lantiq/Makefile | 1 - .../lantiq/ase/base-files/etc/board.d/01_leds | 1 - .../ase/base-files/etc/board.d/02_network | 1 - target/linux/lantiq/ase/config-5.4 | 1 - .../falcon/base-files/etc/board.d/02_network | 1 - target/linux/lantiq/image/amazonse.mk | 4 +- target/linux/lantiq/image/ar9.mk | 18 +- target/linux/lantiq/image/danube.mk | 27 +- target/linux/lantiq/image/falcon.mk | 2 + target/linux/lantiq/image/tp-link.mk | 8 +- target/linux/lantiq/image/vr9.mk | 37 +- target/linux/lantiq/image/xway_legacy.mk | 15 +- .../xrx200/base-files/etc/board.d/01_leds | 1 - .../xrx200/base-files/etc/board.d/02_network | 2 +- .../etc/hotplug.d/firmware/11-ath10k-caldata | 2 +- .../etc/hotplug.d/firmware/12-ath9k-eeprom | 2 +- target/linux/lantiq/xrx200/config-5.4 | 1 - .../xway/base-files/etc/board.d/01_leds | 1 - .../xway/base-files/etc/board.d/02_network | 1 - .../etc/hotplug.d/firmware/12-ath9k-eeprom | 4 +- target/linux/lantiq/xway/config-5.4 | 1 - .../base-files/etc/board.d/01_leds | 1 - .../base-files/etc/board.d/02_network | 1 - target/linux/lantiq/xway_legacy/config-5.4 | 1 - target/linux/layerscape/Makefile | 1 - .../layerscape/base-files/etc/board.d/01_led | 1 - .../base-files/etc/board.d/02_network | 1 - .../base-files/etc/board.d/03_gpio_switches | 1 - .../base-files/lib/preinit/79_move_config | 2 +- .../base-files/lib/upgrade/platform.sh | 2 +- .../boot/dts/freescale/traverse-ls1043s.dts | 18 +- .../boot/dts/freescale/traverse-ls1043v.dts | 14 +- target/linux/malta/Makefile | 3 +- .../malta/base-files/etc/board.d/00_model | 1 - .../malta/base-files/etc/board.d/02_network | 1 - target/linux/mediatek/image/mt7622.mk | 2 +- .../mt7622/base-files/etc/board.d/01_leds | 2 - .../mt7622/base-files/etc/board.d/02_network | 1 - .../base-files/lib/preinit/79_move_config | 18 - .../mt7622/base-files/lib/upgrade/platform.sh | 2 +- .../mt7623/base-files/etc/board.d/02_network | 1 - .../base-files/lib/preinit/79_move_config | 2 +- .../mt7623/base-files/lib/upgrade/platform.sh | 2 +- .../mt7629/base-files/etc/board.d/02_network | 1 - target/linux/mpc85xx/Makefile | 3 +- .../mpc85xx/base-files/etc/board.d/02_network | 1 - .../base-files/lib/upgrade/platform.sh | 4 +- .../files/arch/powerpc/boot/dts/panda.dts | 10 +- .../arch/powerpc/boot/dts/red-15w-rev1.dts | 10 +- .../arch/powerpc/boot/dts/tl-wdr4900-v1.dts | 8 +- .../arch/powerpc/boot/dts/ws-ap3710i.dts | 8 +- target/linux/mvebu/Makefile | 3 +- .../base-files/lib/preinit/79_move_config | 2 +- .../mvebu/base-files/lib/upgrade/sdcard.sh | 35 +- .../cortexa53/base-files/etc/board.d/01_leds | 1 - .../base-files/etc/board.d/02_network | 1 - .../cortexa53/base-files/lib/preinit/82_uDPU | 6 +- .../cortexa53/base-files/lib/upgrade/uDPU.sh | 4 +- .../base-files/etc/board.d/02_network | 1 - .../cortexa9/base-files/etc/board.d/01_leds | 52 +- .../base-files/etc/board.d/02_network | 1 - .../base-files/etc/board.d/05_compat-version | 25 + .../base-files/etc/uci-defaults/03_wireless | 4 +- .../etc/uci-defaults/05_fix-compat-version | 11 + .../base-files/lib/preinit/81_linksys_syscfg | 8 +- .../base-files/lib/upgrade/linksys.sh | 4 +- .../boot/dts/armada-370-buffalo-ls421de.dts | 14 +- .../arm/boot/dts/armada-385-linksys-venom.dts | 22 +- target/linux/mvebu/image/Makefile | 4 +- target/linux/mvebu/image/cortexa53.mk | 2 +- target/linux/mvebu/image/cortexa9.mk | 28 +- target/linux/mxs/Makefile | 1 - .../mxs/base-files/etc/board.d/02_network | 1 - .../linux/mxs/profiles/02-olinuxino-maxi.mk | 2 +- .../octeon/base-files/etc/board.d/01_network | 1 - .../base-files/lib/preinit/79_move_config | 2 +- .../octeon/base-files/lib/upgrade/platform.sh | 2 +- target/linux/octeontx/Makefile | 2 - .../base-files/etc/board.d/02_network | 1 - target/linux/octeontx/config-5.4 | 1 - target/linux/omap/Makefile | 2 - .../base-files/lib/preinit/79_move_config | 6 +- .../omap/base-files/lib/upgrade/platform.sh | 11 +- target/linux/omap/image/Makefile | 6 +- target/linux/omap/profiles/00-default.mk | 3 +- target/linux/oxnas/Makefile | 2 - .../oxnas/base-files/etc/board.d/02_network | 1 - .../arm/boot/dts/ox820-akitio-mycloud.dts | 2 +- .../arm/boot/dts/ox820-mitrastar-stg-212.dts | 6 +- .../arch/arm/boot/dts/ox820-shuttle-kd20.dts | 14 +- target/linux/oxnas/image/ox820.mk | 2 +- target/linux/pistachio/Makefile | 1 - .../base-files/etc/board.d/02_network | 1 - .../base-files/lib/upgrade/platform.sh | 5 +- .../realtek/base-files/etc/board.d/01_leds | 1 - .../realtek/base-files/etc/board.d/02_network | 3 +- .../firmware/rtl838x_phy/rtl838x_8218b.fw | Bin 1168 -> 1168 bytes target/linux/sunxi/Makefile | 3 +- .../sunxi/base-files/etc/board.d/01_leds | 4 +- .../sunxi/base-files/etc/board.d/02_network | 66 +- .../base-files/lib/preinit/79_move_config | 4 +- .../sunxi/base-files/lib/upgrade/platform.sh | 4 +- target/linux/sunxi/config-5.4 | 2 - target/linux/sunxi/cortexa7/config-5.4 | 1 - .../files-5.4/drivers/thermal/sun8i_thermal.c | 654 ---- target/linux/sunxi/image/cortexa53.mk | 10 - target/linux/sunxi/image/cortexa7.mk | 25 +- target/linux/sunxi/modules.mk | 2 +- ...et-add-RTL8152-binding-documentation.patch | 54 - ...-r8152-add-LED-configuration-from-OF.patch | 74 - ...5.6-thermal_hwmon-Add-devres-wrapper.patch | 88 - ...mal-drivers-sun8i-Add-thermal-driver.patch | 61 - ...Add-thermal-sensor-and-thermal-zones.patch | 63 - ...Add-thermal-trip-points-cooling-maps.patch | 68 - ...er-h5-Add-thermal-sensor-and-thermal.patch | 52 - ...-allwinner-h5-Add-clock-to-CPU-cores.patch | 56 - ...lwinner-h5-Add-trip-and-cooling-maps.patch | 92 - ...4-dts-allwinner-h5-Add-CPU-OPP-table.patch | 131 - ...nxi-h5-add-support-for-nanopi-r1s-h5.patch | 229 -- ...n8i-h3-add-more-cpu-operating-points.patch | 50 - ...adjust-default-coherent_pool-to-2MiB.patch | 20 - target/linux/tegra/Makefile | 1 - .../base-files/lib/preinit/79_move_config | 4 +- .../tegra/base-files/lib/upgrade/platform.sh | 35 +- target/linux/tegra/image/Makefile | 2 +- target/linux/uml/Makefile | 2 +- target/linux/x86/64/config-5.4 | 11 +- target/linux/x86/64/profiles/000-Generic.mk | 15 - target/linux/x86/64/target.mk | 3 +- target/linux/x86/Makefile | 20 +- .../linux/x86/base-files/etc/board.d/01_leds | 1 - .../x86/base-files/etc/board.d/02_network | 1 - target/linux/x86/base-files/etc/diag.sh | 6 + .../x86/base-files/lib/preinit/79_move_config | 9 +- .../lib/preinit/81_upgrade_bootloader | 18 + .../x86/base-files/lib/upgrade/platform.sh | 74 +- target/linux/x86/config-5.4 | 102 +- target/linux/x86/generic/config-5.4 | 8 +- .../linux/x86/generic/profiles/000-Generic.mk | 18 - target/linux/x86/generic/target.mk | 3 +- target/linux/x86/geode/config-default | 144 - .../linux/x86/geode/profiles/000-Generic.mk | 20 - target/linux/x86/geode/profiles/100-Geos.mk | 19 - target/linux/x86/geode/target.mk | 13 +- target/linux/x86/image/64.mk | 7 + target/linux/x86/image/Makefile | 401 +-- target/linux/x86/image/gen_image_efi.sh | 44 - target/linux/x86/image/generic.mk | 8 + target/linux/x86/image/geode.mk | 14 + target/linux/x86/image/grub-efi.cfg | 13 + target/linux/x86/image/grub-iso.cfg | 9 +- target/linux/x86/image/grub-pc.cfg | 13 + target/linux/x86/image/grub.cfg | 13 - target/linux/x86/image/legacy.mk | 8 + .../x86/legacy/{config-default => config-5.4} | 31 +- .../linux/x86/legacy/profiles/000-Generic.mk | 18 - target/linux/x86/legacy/target.mk | 2 +- .../zen/base-files/lib/preinit/45_mount_xenfs | 9 - target/linux/x86/zen/config-5.4 | 450 --- target/linux/x86/zen/profiles/000-Generic.mk | 15 - target/linux/x86/zen/target.mk | 8 - target/linux/zynq/Makefile | 1 - .../zynq/base-files/etc/board.d/02_network | 1 - target/linux/zynq/image/Makefile | 2 - target/sdk/Makefile | 20 +- target/sdk/files/Config.in | 2 +- target/toolchain/Makefile | 5 +- toolchain/gdb/Makefile | 2 +- tools/Makefile | 16 +- tools/bison/Makefile | 4 +- .../bison/patches/100-fix-gets-removal.patch | 8 +- tools/expat/Makefile | 4 +- tools/firmware-utils/src/tplink-safeloader.c | 44 + tools/gmp/Makefile | 4 +- tools/include/asm/types.h | 24 + tools/mpc/Makefile | 4 +- tools/ninja/Makefile | 39 + .../patches/100-make_jobserver_support.patch | 2279 ++++++++++++ tools/patch-image/src/patch-cmdline.c | 2 +- tools/pkg-config/files/pkg-config | 3 - tools/{pkg-config => pkgconf}/Makefile | 20 +- tools/pkgconf/files/pkg-config | 8 + tools/qemu/Makefile | 45 - .../0001-vmdk-fix-endianness-bugs.patch | 75 - .../0002-VMDK-introduce-VmdkExtent.patch | 557 --- ...n-offset-to-cluster-in-get_whole_clu.patch | 46 - ...VMDK-probe-for-monolithicFlat-images.patch | 74 - ...separate-vmdk_open-by-format-version.patch | 241 -- ...-add-field-BDRVVmdkState.desc_offset.patch | 102 - .../0007-VMDK-flush-multiple-extents.patch | 35 - ...e-static-cid_update-flag-to-bs-field.patch | 46 - ...hange-get_cluster_offset-return-type.patch | 198 -- ...-read-write-for-monolithicFlat-image.patch | 257 -- ...011-VMDK-create-different-subformats.patch | 595 ---- ...cting-SCSI-adapter-in-image-creation.patch | 114 - 826 files changed, 8594 insertions(+), 33279 deletions(-) create mode 100644 include/logo.png create mode 100644 include/logo.svg mode change 100755 => 100644 include/shell.sh delete mode 100644 package/base-files/files/etc/bench.log mode change 100755 => 100644 package/base-files/files/etc/board.d/99-default_network mode change 100755 => 100644 package/base-files/files/etc/diag.sh mode change 100755 => 100644 package/base-files/files/etc/hotplug.d/net/00-sysctl mode change 100755 => 100644 package/base-files/files/etc/rc.local mode change 100755 => 100644 package/base-files/files/etc/shinit mode change 100755 => 100644 package/base-files/files/etc/uci-defaults/10_migrate-shadow mode change 100755 => 100644 package/base-files/files/etc/uci-defaults/12_network-generate-ula mode change 100755 => 100644 package/base-files/files/etc/uci-defaults/13_fix-group-user mode change 100755 => 100644 package/base-files/files/lib/functions/leds.sh mode change 100755 => 100644 package/base-files/files/lib/functions/network.sh mode change 100755 => 100644 package/base-files/files/lib/functions/preinit.sh mode change 100755 => 100644 package/base-files/files/lib/functions/service.sh mode change 100755 => 100644 package/base-files/files/lib/functions/system.sh mode change 100755 => 100644 package/base-files/files/lib/preinit/02_default_set_state mode change 100755 => 100644 package/base-files/files/lib/preinit/02_sysinfo mode change 100755 => 100644 package/base-files/files/lib/preinit/10_indicate_failsafe mode change 100755 => 100644 package/base-files/files/lib/preinit/10_indicate_preinit mode change 100755 => 100644 package/base-files/files/lib/preinit/30_failsafe_wait mode change 100755 => 100644 package/base-files/files/lib/preinit/40_run_failsafe_hook mode change 100755 => 100644 package/base-files/files/lib/preinit/50_indicate_regular_preinit mode change 100755 => 100644 package/base-files/files/lib/preinit/70_initramfs_test mode change 100755 => 100644 package/base-files/files/lib/preinit/80_mount_root mode change 100755 => 100644 package/base-files/files/lib/preinit/99_10_failsafe_login mode change 100755 => 100644 package/base-files/files/lib/preinit/99_10_run_init mode change 100755 => 100644 package/base-files/files/lib/upgrade/common.sh create mode 100755 package/base-files/files/lib/upgrade/do_stage2 mode change 100755 => 100644 package/base-files/files/lib/upgrade/fwtool.sh mode change 100755 => 100644 package/base-files/files/lib/upgrade/nand.sh create mode 100755 package/base-files/files/sbin/pkg_check mode change 100755 => 100644 package/boot/at91bootstrap/at91bootstrap.mk create mode 100644 package/boot/grub2/Makefile delete mode 100644 package/boot/grub2/common.mk rename {target/linux/x86/image => package/boot/grub2/files}/grub-early.cfg (100%) delete mode 100644 package/boot/grub2/grub2-efi/Makefile delete mode 100644 package/boot/grub2/grub2/Makefile mode change 100755 => 100644 package/boot/kexec-tools/files/kdump.config mode change 100755 => 100644 package/boot/kexec-tools/files/kdump.defaults create mode 100644 package/boot/uboot-imx6/patches/0001-apalis_imx6_defconfig-enable-some-useful-commands.patch delete mode 100644 package/boot/uboot-imx6/patches/0001-imx6-apalis-Make-the-boot-process-more-generic.patch delete mode 100644 package/boot/uboot-imx6/patches/100-wandboard-enable-fit.patch create mode 100644 package/boot/uboot-imx6/patches/111-mx6cuboxi_defconfig-force-mmc-boot.patch mode change 100755 => 100644 package/boot/uboot-oxnas/src/board/ox820/MAINTAINERS mode change 100755 => 100644 package/boot/uboot-oxnas/src/board/ox820/lowlevel_init.S mode change 100755 => 100644 package/boot/uboot-oxnas/src/board/ox820/spl_start.S mode change 100755 => 100644 package/boot/uboot-oxnas/src/board/ox820/u-boot-spl.lds mode change 100755 => 100644 package/boot/uboot-oxnas/src/configs/ox820_defconfig create mode 100644 package/boot/uboot-ramips/Makefile create mode 100644 package/boot/uboot-ramips/patches/0001-add-support-for-RAVPower-RP-WD009.patch delete mode 100644 package/boot/uboot-sunxi/patches/253-sunxi-h5-add-support-for-nanopi-r1s-h5.patch delete mode 100644 package/firmware/armbian-firmware/Makefile create mode 100644 package/firmware/ipq-wifi/board-devolo_magic-2-wifi-next.qca4019 rename package/firmware/ipq-wifi/{board-century_wr142ac.qca4019 => board-edgecore_oap100.qca4019} (92%) create mode 100644 package/firmware/ipq-wifi/board-glinet_gl-ap1300.qca4019 create mode 100644 package/firmware/ipq-wifi/board-linksys_mr8300-v0.qca4019 create mode 100644 package/firmware/ipq-wifi/board-linksys_mr8300-v0.qca9888 create mode 100644 package/firmware/ipq-wifi/board-luma_wrtq-329acn.qca4019 create mode 100644 package/firmware/ipq-wifi/board-mikrotik_hap-ac2.qca4019 create mode 100644 package/firmware/ipq-wifi/board-mikrotik_sxtsq-5-ac.qca4019 rename package/firmware/ipq-wifi/{board-hugo_ac1200.qca4019 => board-plasmacloud_pa1200.qca4019} (85%) rename package/firmware/ipq-wifi/{board-hiwifi_c526a.qca4019 => board-plasmacloud_pa2200.qca4019} (65%) create mode 100644 package/firmware/ipq-wifi/board-plasmacloud_pa2200.qca9888 delete mode 100644 package/firmware/ixp4xx-microcode/Makefile delete mode 100644 package/firmware/ixp4xx-microcode/src/IxNpeMicrocode.h delete mode 100644 package/firmware/ixp4xx-microcode/src/LICENSE.IPL delete mode 100644 package/firmware/wireless-regdb/patches/600-custom-fix-txpower-and-dfs.patch delete mode 100644 package/kernel/ar7-atm/Config.in delete mode 100644 package/kernel/ar7-atm/Makefile delete mode 100644 package/kernel/ar7-atm/patches-D7.04.03.00/090-no-date-time.patch delete mode 100644 package/kernel/ar7-atm/patches-D7.04.03.00/100-compile_fix.patch delete mode 100644 package/kernel/ar7-atm/patches-D7.04.03.00/110-interrupt_fix.patch delete mode 100644 package/kernel/ar7-atm/patches-D7.04.03.00/120-no_dumb_inline.patch delete mode 100644 package/kernel/ar7-atm/patches-D7.04.03.00/130-powercutback.patch delete mode 100644 package/kernel/ar7-atm/patches-D7.04.03.00/140-debug_mode.patch delete mode 100644 package/kernel/ar7-atm/patches-D7.04.03.00/150-tasklet_mode.patch delete mode 100644 package/kernel/ar7-atm/patches-D7.04.03.00/160-module-params.patch delete mode 100644 package/kernel/ar7-atm/patches-D7.04.03.00/170-bus_id_removal.patch delete mode 100644 package/kernel/ar7-atm/patches-D7.04.03.00/180-git_headers_include.patch delete mode 100644 package/kernel/ar7-atm/patches-D7.04.03.00/190-2.6.32_proc_fixes.patch delete mode 100644 package/kernel/ar7-atm/patches-D7.04.03.00/200-2.6.37_args.patch delete mode 100644 package/kernel/ar7-atm/patches-D7.04.03.00/210-3.3-remove-smp_lock.h.patch delete mode 100644 package/kernel/ar7-atm/patches-D7.04.03.00/220-3.10-update_proc_code.patch delete mode 100644 package/kernel/ar7-atm/patches-D7.04.03.00/230-compile_fixes.patch delete mode 100644 package/kernel/ar7-atm/patches-D7.04.03.00/240-3.18_fixes.patch delete mode 100644 package/kernel/ar7-atm/patches-D7.04.03.00/250-4.1_fixes.patch delete mode 100644 package/kernel/ar7-atm/patches-D7.04.03.00/260-fix_function_signatures.patch delete mode 100644 package/kernel/ar7-atm/patches-D7.05.01.00/090-no-date-time.patch delete mode 100644 package/kernel/ar7-atm/patches-D7.05.01.00/100-compile_fix.patch delete mode 100644 package/kernel/ar7-atm/patches-D7.05.01.00/110-interrupt_fix.patch delete mode 100644 package/kernel/ar7-atm/patches-D7.05.01.00/120-no_dumb_inline.patch delete mode 100644 package/kernel/ar7-atm/patches-D7.05.01.00/130-powercutback.patch delete mode 100644 package/kernel/ar7-atm/patches-D7.05.01.00/140-debug_mode.patch delete mode 100644 package/kernel/ar7-atm/patches-D7.05.01.00/150-tasklet_mode.patch delete mode 100644 package/kernel/ar7-atm/patches-D7.05.01.00/160-module-params.patch delete mode 100644 package/kernel/ar7-atm/patches-D7.05.01.00/170-bus_id_removal.patch delete mode 100644 package/kernel/ar7-atm/patches-D7.05.01.00/180-git_headers_include.patch delete mode 100644 package/kernel/ar7-atm/patches-D7.05.01.00/190-2.6.32_proc_fixes.patch delete mode 100644 package/kernel/ar7-atm/patches-D7.05.01.00/200-2.6.37_args.patch delete mode 100644 package/kernel/ar7-atm/patches-D7.05.01.00/210-3.3-remove-smp_lock.h.patch delete mode 100644 package/kernel/ar7-atm/patches-D7.05.01.00/220-3.10-update_proc_code.patch delete mode 100644 package/kernel/ar7-atm/patches-D7.05.01.00/240-3.18_fixes.patch delete mode 100644 package/kernel/ar7-atm/patches-D7.05.01.00/250-4.1_fixes.patch delete mode 100644 package/kernel/ar7-atm/patches-D7.05.01.00/260-fix_function_signatures.patch delete mode 100644 package/kernel/avila-wdt/Makefile delete mode 100644 package/kernel/avila-wdt/src/Makefile delete mode 100644 package/kernel/avila-wdt/src/avila-wdt.c delete mode 100644 package/kernel/brcmfmac4366c0-firmware-vendor/Makefile delete mode 100644 package/kernel/brcmfmac4366c0-firmware-vendor/files/brcmfmac4366c-pcie.bin mode change 100755 => 100644 package/kernel/broadcom-wl/files/etc/hotplug.d/net/00-broadcom-wifi-detect mode change 100755 => 100644 package/kernel/broadcom-wl/files/etc/hotplug.d/net/20-broadcom_wds mode change 100755 => 100644 package/kernel/broadcom-wl/files/lib/wifi/broadcom.sh create mode 100644 package/kernel/broadcom-wl/patches/916-fix-compilation-for-5_4.patch create mode 100644 package/kernel/cryptodev-linux/patches/010-fix-build-for-kernel-v5.9-rc1.patch delete mode 100644 package/kernel/exfat/Makefile mode change 100755 => 100644 package/kernel/lantiq/ltq-vmmc/files/vmmc.init delete mode 100644 package/kernel/mac80211/patches/ath10k/983-ath10k-allow-vht-on-2g.patch delete mode 100644 package/kernel/mac80211/patches/subsys/600-mac80211-allow-vht-on-2g.patch delete mode 100644 package/kernel/mt76/patches/001-allow-vht-on-2g.patch delete mode 100644 package/kernel/mt7601u-ap/Makefile delete mode 100644 package/kernel/mt7601u-ap/patches/010-fix-control-reaches-end-of-non-void.patch create mode 100644 package/kernel/mt7621-qtn-rgmii/Makefile create mode 100644 package/kernel/mt7621-qtn-rgmii/src/Makefile create mode 100644 package/kernel/mt7621-qtn-rgmii/src/mt7621-qtn-rgmii.c delete mode 100644 package/kernel/mtk-eip93/Makefile delete mode 100644 package/kernel/mwlwifi/patches/002-disable-AMSDU.patch mode change 100755 => 100644 package/kernel/om-watchdog/files/om-watchdog mode change 100755 => 100644 package/kernel/om-watchdog/files/om-watchdog.init delete mode 100644 package/kernel/rtl8188eu/Makefile delete mode 100644 package/kernel/rtl8188eu/patches/001-use-kernel-byteorder.patch delete mode 100644 package/kernel/rtl8188eu/patches/010-disable-default-build-x86.patch delete mode 100644 package/kernel/rtl8188eu/patches/020-remove-repeat-flies.patch delete mode 100644 package/kernel/rtl8188eu/patches/030-wireless-5.8.patch delete mode 100644 package/kernel/rtl8189es/Makefile delete mode 100644 package/kernel/rtl8189es/files/50_rtl-wifi delete mode 100644 package/kernel/rtl8189es/patches/001-use-kernel-byteorder.patch delete mode 100644 package/kernel/rtl8189es/patches/010-remove-repeat-flies.patch delete mode 100644 package/kernel/rtl8189es/patches/020-wireless-5.8.patch delete mode 100644 package/kernel/rtl8192du/Makefile delete mode 100644 package/kernel/rtl8192du/patches/010-missing-header-in-ipv6.patch delete mode 100644 package/kernel/rtl8192du/patches/020-wireless-5.8.patch delete mode 100644 package/kernel/rtl8812au-ac/Makefile delete mode 100644 package/kernel/rtl8812au-ac/patches/010-disable-default-build-x86.patch delete mode 100644 package/kernel/rtl8812au-ac/patches/020-change-value-of-vht-enable-and-usb-mode.patch delete mode 100644 package/kernel/rtl8812au-ac/patches/030-add-missing-code-for-concurrent-mode.patch delete mode 100644 package/kernel/rtl8812au-ac/patches/040-wireless-5.8.patch create mode 100644 package/kernel/rtl8812au-ct/Makefile rename package/kernel/{rtl8812au-ac => rtl8812au-ct}/patches/001-use-kernel-byteorder.patch (95%) create mode 100644 package/kernel/rtl8812au-ct/patches/002-vendor_command_policy.patch create mode 100644 package/kernel/rtl8812au-ct/patches/003-wireless-5.8.patch delete mode 100644 package/kernel/rtl8821cu/Makefile delete mode 100644 package/kernel/rtl8821cu/patches/001-use-kernel-byteorder.patch delete mode 100644 package/kernel/rtl8821cu/patches/010-remove-extra-cflags.patch delete mode 100644 package/kernel/rtl8821cu/patches/020-remove-repeat-flies.patch delete mode 100644 package/kernel/rtl8821cu/patches/030-change-value-of-vht-enable.patch delete mode 100644 package/kernel/rtl8821cu/patches/040-wireless-5.8.patch delete mode 100644 package/kernel/rtl88x2bu/Makefile delete mode 100644 package/kernel/rtl88x2bu/patches/001-use-kernel-byteorder.patch delete mode 100644 package/kernel/rtl88x2bu/patches/010-remove-repeat-flies.patch delete mode 100644 package/kernel/rtl88x2bu/patches/020-wireless-5.8.patch mode change 100755 => 100644 package/kernel/trelay/files/trelay.config mode change 100755 => 100644 package/kernel/trelay/files/trelay.hotplug mode change 100755 => 100644 package/kernel/trelay/files/trelay.init delete mode 100644 package/lean/coremark/Makefile delete mode 100755 package/lean/coremark/coremark delete mode 100755 package/lean/coremark/coremark.sh delete mode 100644 package/lean/kcptun/Makefile delete mode 100644 package/lean/nft-qos/Makefile delete mode 100644 package/lean/nft-qos/files/lib/core.sh delete mode 100644 package/lean/nft-qos/files/lib/dynamic.sh delete mode 100644 package/lean/nft-qos/files/lib/monitor.sh delete mode 100644 package/lean/nft-qos/files/lib/priority.sh delete mode 100644 package/lean/nft-qos/files/lib/static.sh delete mode 100644 package/lean/nft-qos/files/nft-qos-dynamic.hotplug delete mode 100644 package/lean/nft-qos/files/nft-qos-monitor.hotplug delete mode 100644 package/lean/nft-qos/files/nft-qos.config delete mode 100755 package/lean/nft-qos/files/nft-qos.init delete mode 100644 package/lean/parted/Makefile delete mode 100644 package/lean/proxychains-ng/Makefile delete mode 100644 package/lean/samba4/Config.in delete mode 100644 package/lean/samba4/Makefile delete mode 100644 package/lean/samba4/files/samba.config delete mode 100644 package/lean/samba4/files/samba.init delete mode 100644 package/lean/samba4/files/smb.conf.template delete mode 100644 package/lean/samba4/patches/001-samba-4.4.0-pam.patch delete mode 100644 package/lean/samba4/patches/002-dnsserver-4.7.0.patch delete mode 100644 package/lean/samba4/patches/003-getpwent_r.patch delete mode 100644 package/lean/samba4/patches/004-missing-headers.patch delete mode 100644 package/lean/samba4/patches/005-musl_uintptr.patch delete mode 100644 package/lean/samba4/patches/006-netdb-defines.patch delete mode 100644 package/lean/samba4/patches/007-libldb-fix-musl-libc-unkown-type-error.patch delete mode 100644 package/lean/samba4/patches/008-samba-4.11-add_missing___compar_fn_t.patch delete mode 100644 package/lean/samba4/patches/009-samba-4.11-qsort-compar.patch delete mode 100644 package/lean/samba4/patches/010-samba-4-11-fix-host-tools-checks.patch.patch delete mode 100644 package/lean/samba4/patches/020-source3-msgsock-nvram-fix.patch delete mode 100644 package/lean/samba4/patches/021-source4-msgsock-nvram-fix.patch delete mode 100644 package/lean/samba4/patches/101-do-not-check-xsltproc-manpages.patch delete mode 100644 package/lean/samba4/patches/102-samba-4.11-unbundle-libbsd.patch delete mode 100644 package/lean/samba4/patches/103-tmsize-overflow-fix.patch delete mode 100644 package/lean/samba4/waf-cross-answers/aarch64.txt delete mode 100644 package/lean/samba4/waf-cross-answers/arc.txt delete mode 100644 package/lean/samba4/waf-cross-answers/arm.txt delete mode 100644 package/lean/samba4/waf-cross-answers/armeb.txt delete mode 100644 package/lean/samba4/waf-cross-answers/i386.txt delete mode 100644 package/lean/samba4/waf-cross-answers/mips.txt delete mode 100644 package/lean/samba4/waf-cross-answers/mips64.txt delete mode 100644 package/lean/samba4/waf-cross-answers/mips64el.txt delete mode 100644 package/lean/samba4/waf-cross-answers/mipsel.txt delete mode 100644 package/lean/samba4/waf-cross-answers/powerpc.txt delete mode 100644 package/lean/samba4/waf-cross-answers/x86_64.txt delete mode 100644 package/lean/softethervpn5/Makefile delete mode 100644 package/lean/softethervpn5/files/dummy delete mode 100644 package/lean/softethervpn5/files/launcher.sh delete mode 100644 package/lean/softethervpn5/files/vpnbridge.init delete mode 100644 package/lean/softethervpn5/files/vpnclient.init delete mode 100644 package/lean/softethervpn5/files/vpnserver.init delete mode 100644 package/lean/softethervpn5/patches/001-musl-poll-fix.patch delete mode 100644 package/lean/softethervpn5/patches/002-iconv-defines-fix.patch delete mode 100644 package/lean/softethervpn5/patches/003-iconv-cmake-fix.patch delete mode 100644 package/lean/softethervpn5/patches/100-increase-cfg-save-intervall.patch delete mode 100644 package/lean/softethervpn5/patches/101-add-config-write-syslog.patch delete mode 100644 package/lean/wget/Makefile delete mode 100644 package/lean/wget/patches/001-prefer_ipv4.patch create mode 100644 package/libs/argp-standalone/patches/900-fix-segfault-in_canon_doc_option.patch create mode 100644 package/libs/elfutils/patches/0001-ppc_initreg.c-Incliude-asm-ptrace.h-for-pt_regs-defi.patch delete mode 100644 package/libs/elfutils/patches/120-Fix-build-on-powerpc-musl.patch delete mode 100644 package/libs/libnetfilter-cthelper/Makefile delete mode 100644 package/libs/libnetfilter-cttimeout/Makefile delete mode 100644 package/libs/libnetfilter-log/Makefile delete mode 100644 package/libs/libnetfilter-log/patches/0001-build-remove-unnecessary-pkgconfig-config.status-dep.patch delete mode 100644 package/libs/libnetfilter-log/patches/0002-build-remove-unused-lines-in-Makefile.am.patch delete mode 100644 package/libs/libnetfilter-log/patches/0003-build-resolve-automake-1.12-warnings.patch delete mode 100644 package/libs/libnetfilter-log/patches/0004-Add-include-needed-for-integer-type-definition.patch delete mode 100644 package/libs/libnetfilter-log/patches/0005-configure-uclinux-is-also-linux.patch delete mode 100644 package/libs/libnetfilter-log/patches/0006-configure-add-without-ipulog-option-to-disable-libip.patch delete mode 100644 package/libs/libnetfilter-queue/Makefile delete mode 100644 package/libs/libnetfilter-queue/patches/100-checksum_computation.patch delete mode 100644 package/libs/librpc/Makefile delete mode 100644 package/libs/libubox/patches/001-add-fallthrough-macro.patch delete mode 100644 package/libs/libusb-compat/Makefile delete mode 100644 package/libs/libusb-compat/patches/001-fix-musl-stdint.patch delete mode 100644 package/libs/lzo/Makefile delete mode 100644 package/libs/mbedtls/patches/100-Implements-AES-and-GCM-with-ARMv8-Crypto-Extensions.patch delete mode 100644 package/libs/nghttp2/Makefile create mode 100644 package/network/config/netifd/files/etc/udhcpc.user mode change 100755 => 100644 package/network/config/soloscli/files/etc/hotplug.d/atm/15-solos-init mode change 100755 => 100644 package/network/config/soloscli/files/etc/uci-defaults/solos mode change 100755 => 100644 package/network/config/soloscli/files/solos-log-stats mode change 100755 => 100644 package/network/config/swconfig/files/switch.sh create mode 100644 package/network/ipv6/odhcp6c/files/odhcp6c.user mode change 100755 => 100644 package/network/services/hostapd/files/hostapd.sh create mode 100644 package/network/services/hostapd/files/wpad.json create mode 100644 package/network/services/hostapd/files/wpad_acl.json mode change 100755 => 100644 package/network/services/hostapd/files/wps-hotplug.sh create mode 100644 package/network/services/noddos/Makefile create mode 100644 package/network/services/noddos/patches/010-openssl-1.1-fixes.patch create mode 100644 package/network/services/noddos/patches/020-Ipset.cxx-update-libipset-API-to-version-7.patch create mode 100644 package/network/services/noddos/patches/030-getnoddosdeviceprofiles-wget-timestamping-check.patch create mode 100644 package/network/services/noddos/patches/040-openssl-deprecated.patch delete mode 100644 package/network/services/openvpn-easy-rsa/Makefile delete mode 100644 package/network/services/openvpn-easy-rsa/files/openvpn-easy-rsa.upgrade delete mode 100644 package/network/services/openvpn-easy-rsa/patches/101-static_EASYRSA.patch delete mode 100644 package/network/services/openvpn/Config-mbedtls.in delete mode 100644 package/network/services/openvpn/Config-nossl.in delete mode 100644 package/network/services/openvpn/Config-openssl.in delete mode 100644 package/network/services/openvpn/Makefile delete mode 100644 package/network/services/openvpn/files/etc/etc/hotplug.d/openvpn/01-user delete mode 100644 package/network/services/openvpn/files/etc/etc/openvpn.user delete mode 100644 package/network/services/openvpn/files/etc/hotplug.d/openvpn/01-user delete mode 100644 package/network/services/openvpn/files/etc/openvpn.user delete mode 100644 package/network/services/openvpn/files/files/etc/hotplug.d/openvpn/01-user delete mode 100644 package/network/services/openvpn/files/files/etc/openvpn.user delete mode 100644 package/network/services/openvpn/files/files/lib/functions/openvpn.sh delete mode 100644 package/network/services/openvpn/files/files/openvpn.config delete mode 100644 package/network/services/openvpn/files/files/openvpn.init delete mode 100644 package/network/services/openvpn/files/files/openvpn.options delete mode 100644 package/network/services/openvpn/files/files/openvpn.upgrade delete mode 100644 package/network/services/openvpn/files/files/usr/libexec/openvpn-hotplug delete mode 100644 package/network/services/openvpn/files/lib/functions/openvpn.sh delete mode 100644 package/network/services/openvpn/files/openvpn.config delete mode 100644 package/network/services/openvpn/files/openvpn.init delete mode 100644 package/network/services/openvpn/files/openvpn.options delete mode 100644 package/network/services/openvpn/files/openvpn.upgrade delete mode 100644 package/network/services/openvpn/files/usr/libexec/openvpn-hotplug delete mode 100644 package/network/services/openvpn/patches/001-reproducible-remove_DATE.patch delete mode 100644 package/network/services/openvpn/patches/100-mbedtls-disable-runtime-version-check.patch delete mode 100644 package/network/services/openvpn/patches/210-build_always_use_internal_lz4.patch delete mode 100644 package/network/services/openvpn/patches/220-disable_des.patch delete mode 100644 package/network/services/openvpn/patches/221-tunnelblick-openvpn_xorpatch-a.diff delete mode 100644 package/network/services/openvpn/patches/222-tunnelblick-openvpn_xorpatch-b.diff delete mode 100644 package/network/services/openvpn/patches/223-tunnelblick-openvpn_xorpatch-c.diff delete mode 100644 package/network/services/openvpn/patches/224-tunnelblick-openvpn_xorpatch-d.diff delete mode 100644 package/network/services/openvpn/patches/225-tunnelblick-openvpn_xorpatch-e.diff create mode 100644 package/network/utils/comgt/files/ussd.gcom delete mode 100644 package/network/utils/curl/Config.in delete mode 100644 package/network/utils/curl/Makefile delete mode 100644 package/network/utils/curl/patches/200-no_docs_tests.patch delete mode 100644 package/network/utils/iptables/patches/611-add-imq-support.patch mode change 100755 => 100644 package/system/fstools/files/fstab.default mode change 100755 => 100644 package/system/fstools/files/fstab.init mode change 100755 => 100644 package/system/fstools/files/media-change.hotplug mode change 100755 => 100644 package/system/fstools/files/mount.hotplug mode change 100755 => 100644 package/system/fstools/files/snapshot delete mode 100644 package/system/fstools/patches/000-fix-ntfs-uuid.patch delete mode 100644 package/system/fstools/patches/0001-add-exfat-support.patch delete mode 100644 package/system/fstools/patches/0005-disable-lazy-init.patch delete mode 100644 package/system/fstools/patches/0010-fstools-block-make-extroot-mount-preparation-more-robust.patch delete mode 100644 package/system/fwtool/src/crc32.h delete mode 100644 package/system/fwtool/src/fwimage.h delete mode 100644 package/system/fwtool/src/fwtool.c delete mode 100644 package/system/fwtool/src/utils.h mode change 100755 => 100644 package/system/opkg/files/20_migrate-feeds create mode 100755 package/system/rpcd/files/50-migrate-rpcd-ubus-sock.sh delete mode 100644 package/system/uci/patches/001-file-uci_parse_package-fix-heap-use-after-free.patch delete mode 100644 package/system/uci/patches/002-file-Check-buffer-size-after-strtok.patch create mode 100644 package/utils/busybox/files/ntpd_acl.json delete mode 100644 package/utils/busybox/patches/900-add-e-f-option-for-docker.patch delete mode 100644 package/utils/maccalc/Makefile delete mode 100644 package/utils/maccalc/src/Makefile delete mode 100644 package/utils/maccalc/src/main.c delete mode 100644 package/utils/usbutils/Makefile mode change 100755 => 100644 target/linux/apm821xx/base-files/etc/board.d/01_leds mode change 100755 => 100644 target/linux/apm821xx/base-files/etc/board.d/02_network mode change 100755 => 100644 target/linux/arc770/base-files/etc/board.d/02_network mode change 100755 => 100644 target/linux/archs38/base-files/etc/board.d/02_network mode change 100755 => 100644 target/linux/armvirt/base-files/etc/board.d/00_model mode change 100755 => 100644 target/linux/at91/base-files/etc/board.d/02_network mode change 100755 => 100644 target/linux/ath25/base-files/etc/board.d/01_leds mode change 100755 => 100644 target/linux/ath25/base-files/etc/board.d/02_network delete mode 100644 target/linux/ath79/dts/qca9558_arris_sbr-ac1750.dts delete mode 100644 target/linux/ath79/dts/qca9558_domywifi_dw33d-nor.dts delete mode 100644 target/linux/ath79/dts/qca9563_xwrt_csac.dts mode change 100755 => 100644 target/linux/ath79/generic/base-files/etc/board.d/01_leds mode change 100755 => 100644 target/linux/ath79/generic/base-files/etc/board.d/02_network mode change 100755 => 100644 target/linux/ath79/generic/base-files/etc/board.d/03_gpio_switches create mode 100644 target/linux/ath79/generic/base-files/etc/uci-defaults/05_fix-compat-version mode change 100755 => 100644 target/linux/ath79/mikrotik/base-files/etc/board.d/01_leds mode change 100755 => 100644 target/linux/ath79/mikrotik/base-files/etc/board.d/02_network mode change 100755 => 100644 target/linux/ath79/nand/base-files/etc/board.d/01_leds mode change 100755 => 100644 target/linux/ath79/nand/base-files/etc/board.d/02_network mode change 100755 => 100644 target/linux/ath79/tiny/base-files/etc/board.d/01_leds mode change 100755 => 100644 target/linux/ath79/tiny/base-files/etc/board.d/02_network mode change 100755 => 100644 target/linux/bcm27xx/base-files/etc/board.d/02_network mode change 100755 => 100644 target/linux/bcm47xx/base-files/etc/board.d/01_network mode change 100755 => 100644 target/linux/bcm4908/base-files/etc/board.d/02_network create mode 100644 target/linux/bcm4908/patches-5.4/073-v5.12-0013-net-broadcom-BCM4908_ENET-should-not-default-to-y-un.patch create mode 100644 target/linux/bcm4908/patches-5.4/074-v5.13-0001-net-broadcom-bcm4908_enet-read-MAC-from-OF.patch create mode 100644 target/linux/bcm4908/patches-5.4/074-v5.13-0002-dt-bindings-net-bcm4908-enet-add-optional-TX-interru.patch create mode 100644 target/linux/bcm4908/patches-5.4/074-v5.13-0003-net-broadcom-bcm4908_enet-support-TX-interrupt.patch mode change 100755 => 100644 target/linux/bcm53xx/base-files/etc/board.d/01_leds mode change 100755 => 100644 target/linux/bcm53xx/base-files/etc/board.d/02_network create mode 100755 target/linux/bcm53xx/base-files/etc/init.d/clear_partialboot create mode 100644 target/linux/bcm53xx/base-files/lib/preinit/07_set_preinit_iface_bcm53xx create mode 100644 target/linux/bcm53xx/patches-5.4/033-v5.10-0004-ARM-BCM5301X-Add-DT-for-Meraki-MR32.patch delete mode 100644 target/linux/bcm53xx/patches-5.4/322-ARM-dts-BCM5301X-Add-DT-for-ARRIS-SBR-AC1900P.patch delete mode 100644 target/linux/bcm53xx/patches-5.4/323-ARM-dts-BCM5301X-Add-DT-for-ARRIS-SBR-AC3200P.patch create mode 100644 target/linux/bcm53xx/patches-5.4/331-Meraki-MR32-Status-LEDs.patch mode change 100755 => 100644 target/linux/bcm63xx/base-files/etc/board.d/01_leds mode change 100755 => 100644 target/linux/bcm63xx/base-files/etc/board.d/02_network mode change 100755 => 100644 target/linux/bmips/generic/base-files/etc/board.d/01_leds mode change 100755 => 100644 target/linux/bmips/nand/base-files/etc/board.d/01_leds mode change 100755 => 100644 target/linux/gemini/base-files/etc/board.d/02_network delete mode 100644 target/linux/generic/hack-5.10/312-arm64-cpuinfo-Add-model-name-in-proc-cpuinfo-for-64bit-ta.patch delete mode 100644 target/linux/generic/hack-5.10/953-net-patch-linux-kernel-to-support-shortcut-fe.patch delete mode 100644 target/linux/generic/hack-5.10/992-add-ndo-do-ioctl.patch delete mode 100644 target/linux/generic/hack-5.10/993-usb-serial-option-add-u9300.patch delete mode 100644 target/linux/generic/hack-5.10/999-make-phylink-tristate.patch delete mode 100644 target/linux/generic/hack-5.4/312-arm64-cpuinfo-Add-model-name-in-proc-cpuinfo-for-64bit-ta.patch delete mode 100644 target/linux/generic/hack-5.4/953-net-patch-linux-kernel-to-support-shortcut-fe.patch delete mode 100644 target/linux/generic/hack-5.4/992-add-ndo-do-ioctl.patch delete mode 100644 target/linux/generic/hack-5.4/993-usb-serial-option-add-u9300.patch delete mode 100644 target/linux/generic/hack-5.4/999-make-phylink-tristate.patch delete mode 100644 target/linux/generic/pending-5.4/601-add-kernel-imq-support.patch mode change 100755 => 100644 target/linux/imx6/base-files/etc/board.d/02_network mode change 100755 => 100644 target/linux/ipq806x/base-files/etc/board.d/01_leds mode change 100755 => 100644 target/linux/ipq806x/base-files/etc/board.d/02_network create mode 100755 target/linux/ipq806x/base-files/etc/init.d/cpufreq delete mode 100644 target/linux/ipq806x/base-files/lib/upgrade/ruijie.sh delete mode 100644 target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-rg-mtfi-m520.dts create mode 100644 target/linux/ipq806x/generic/target.mk mode change 100755 => 100644 target/linux/kirkwood/base-files/etc/board.d/01_leds mode change 100755 => 100644 target/linux/kirkwood/base-files/etc/board.d/02_network mode change 100755 => 100644 target/linux/kirkwood/base-files/etc/board.d/03_gpio_switches create mode 100644 target/linux/kirkwood/base-files/etc/board.d/05_compat-version mode change 100755 => 100644 target/linux/lantiq/ase/base-files/etc/board.d/01_leds mode change 100755 => 100644 target/linux/lantiq/ase/base-files/etc/board.d/02_network mode change 100755 => 100644 target/linux/lantiq/falcon/base-files/etc/board.d/02_network mode change 100755 => 100644 target/linux/lantiq/xrx200/base-files/etc/board.d/01_leds mode change 100755 => 100644 target/linux/lantiq/xrx200/base-files/etc/board.d/02_network mode change 100755 => 100644 target/linux/lantiq/xway/base-files/etc/board.d/01_leds mode change 100755 => 100644 target/linux/lantiq/xway/base-files/etc/board.d/02_network mode change 100755 => 100644 target/linux/lantiq/xway_legacy/base-files/etc/board.d/01_leds mode change 100755 => 100644 target/linux/lantiq/xway_legacy/base-files/etc/board.d/02_network mode change 100755 => 100644 target/linux/layerscape/base-files/etc/board.d/01_led mode change 100755 => 100644 target/linux/layerscape/base-files/etc/board.d/02_network mode change 100755 => 100644 target/linux/layerscape/base-files/etc/board.d/03_gpio_switches mode change 100755 => 100644 target/linux/malta/base-files/etc/board.d/00_model mode change 100755 => 100644 target/linux/malta/base-files/etc/board.d/02_network mode change 100755 => 100644 target/linux/mediatek/mt7622/base-files/etc/board.d/01_leds mode change 100755 => 100644 target/linux/mediatek/mt7622/base-files/etc/board.d/02_network delete mode 100644 target/linux/mediatek/mt7622/base-files/lib/preinit/79_move_config mode change 100755 => 100644 target/linux/mediatek/mt7623/base-files/etc/board.d/02_network mode change 100755 => 100644 target/linux/mediatek/mt7629/base-files/etc/board.d/02_network mode change 100755 => 100644 target/linux/mpc85xx/base-files/etc/board.d/02_network mode change 100755 => 100644 target/linux/mvebu/cortexa53/base-files/etc/board.d/01_leds mode change 100755 => 100644 target/linux/mvebu/cortexa53/base-files/etc/board.d/02_network mode change 100755 => 100644 target/linux/mvebu/cortexa72/base-files/etc/board.d/02_network mode change 100755 => 100644 target/linux/mvebu/cortexa9/base-files/etc/board.d/01_leds mode change 100755 => 100644 target/linux/mvebu/cortexa9/base-files/etc/board.d/02_network create mode 100644 target/linux/mvebu/cortexa9/base-files/etc/board.d/05_compat-version create mode 100644 target/linux/mvebu/cortexa9/base-files/etc/uci-defaults/05_fix-compat-version mode change 100755 => 100644 target/linux/mxs/base-files/etc/board.d/02_network mode change 100755 => 100644 target/linux/octeon/base-files/etc/board.d/01_network mode change 100755 => 100644 target/linux/octeontx/base-files/etc/board.d/02_network mode change 100755 => 100644 target/linux/oxnas/base-files/etc/board.d/02_network mode change 100755 => 100644 target/linux/pistachio/base-files/etc/board.d/02_network mode change 100755 => 100644 target/linux/realtek/base-files/etc/board.d/01_leds mode change 100755 => 100644 target/linux/realtek/base-files/etc/board.d/02_network mode change 100755 => 100644 target/linux/sunxi/base-files/etc/board.d/01_leds mode change 100755 => 100644 target/linux/sunxi/base-files/etc/board.d/02_network mode change 100755 => 100644 target/linux/sunxi/base-files/lib/preinit/79_move_config mode change 100755 => 100644 target/linux/sunxi/base-files/lib/upgrade/platform.sh delete mode 100644 target/linux/sunxi/files-5.4/drivers/thermal/sun8i_thermal.c delete mode 100644 target/linux/sunxi/patches-5.4/002-dt-bindings-net-add-RTL8152-binding-documentation.patch delete mode 100644 target/linux/sunxi/patches-5.4/003-net-usb-r8152-add-LED-configuration-from-OF.patch delete mode 100644 target/linux/sunxi/patches-5.4/011-v5.6-thermal_hwmon-Add-devres-wrapper.patch delete mode 100644 target/linux/sunxi/patches-5.4/012-thermal-drivers-sun8i-Add-thermal-driver.patch delete mode 100644 target/linux/sunxi/patches-5.4/013-ARM-dts-sun8i-h3-Add-thermal-sensor-and-thermal-zones.patch delete mode 100644 target/linux/sunxi/patches-5.4/014-ARM-dts-sun8i-h3-Add-thermal-trip-points-cooling-maps.patch delete mode 100644 target/linux/sunxi/patches-5.4/015-arm64-dts-allwinner-h5-Add-thermal-sensor-and-thermal.patch delete mode 100644 target/linux/sunxi/patches-5.4/016-arm64-dts-allwinner-h5-Add-clock-to-CPU-cores.patch delete mode 100644 target/linux/sunxi/patches-5.4/017-arm64-dts-allwinner-h5-Add-trip-and-cooling-maps.patch delete mode 100644 target/linux/sunxi/patches-5.4/018-arm64-dts-allwinner-h5-Add-CPU-OPP-table.patch delete mode 100644 target/linux/sunxi/patches-5.4/101-sunxi-h5-add-support-for-nanopi-r1s-h5.patch delete mode 100644 target/linux/sunxi/patches-5.4/302-sun8i-h3-add-more-cpu-operating-points.patch delete mode 100644 target/linux/sunxi/patches-5.4/911-kernel-dma-adjust-default-coherent_pool-to-2MiB.patch delete mode 100644 target/linux/x86/64/profiles/000-Generic.mk mode change 100755 => 100644 target/linux/x86/base-files/etc/board.d/01_leds mode change 100755 => 100644 target/linux/x86/base-files/etc/board.d/02_network create mode 100644 target/linux/x86/base-files/lib/preinit/81_upgrade_bootloader delete mode 100644 target/linux/x86/generic/profiles/000-Generic.mk delete mode 100644 target/linux/x86/geode/config-default delete mode 100644 target/linux/x86/geode/profiles/000-Generic.mk delete mode 100644 target/linux/x86/geode/profiles/100-Geos.mk create mode 100644 target/linux/x86/image/64.mk delete mode 100755 target/linux/x86/image/gen_image_efi.sh create mode 100644 target/linux/x86/image/generic.mk create mode 100644 target/linux/x86/image/geode.mk create mode 100644 target/linux/x86/image/grub-efi.cfg create mode 100644 target/linux/x86/image/grub-pc.cfg delete mode 100644 target/linux/x86/image/grub.cfg create mode 100644 target/linux/x86/image/legacy.mk rename target/linux/x86/legacy/{config-default => config-5.4} (91%) delete mode 100644 target/linux/x86/legacy/profiles/000-Generic.mk delete mode 100644 target/linux/x86/zen/base-files/lib/preinit/45_mount_xenfs delete mode 100644 target/linux/x86/zen/config-5.4 delete mode 100644 target/linux/x86/zen/profiles/000-Generic.mk delete mode 100644 target/linux/x86/zen/target.mk mode change 100755 => 100644 target/linux/zynq/base-files/etc/board.d/02_network create mode 100644 tools/include/asm/types.h create mode 100644 tools/ninja/Makefile create mode 100644 tools/ninja/patches/100-make_jobserver_support.patch delete mode 100755 tools/pkg-config/files/pkg-config rename tools/{pkg-config => pkgconf}/Makefile (55%) create mode 100755 tools/pkgconf/files/pkg-config delete mode 100644 tools/qemu/Makefile delete mode 100644 tools/qemu/patches/0001-vmdk-fix-endianness-bugs.patch delete mode 100644 tools/qemu/patches/0002-VMDK-introduce-VmdkExtent.patch delete mode 100644 tools/qemu/patches/0003-VMDK-bugfix-align-offset-to-cluster-in-get_whole_clu.patch delete mode 100644 tools/qemu/patches/0004-VMDK-probe-for-monolithicFlat-images.patch delete mode 100644 tools/qemu/patches/0005-VMDK-separate-vmdk_open-by-format-version.patch delete mode 100644 tools/qemu/patches/0006-VMDK-add-field-BDRVVmdkState.desc_offset.patch delete mode 100644 tools/qemu/patches/0007-VMDK-flush-multiple-extents.patch delete mode 100644 tools/qemu/patches/0008-VMDK-move-static-cid_update-flag-to-bs-field.patch delete mode 100644 tools/qemu/patches/0009-VMDK-change-get_cluster_offset-return-type.patch delete mode 100644 tools/qemu/patches/0010-VMDK-open-read-write-for-monolithicFlat-image.patch delete mode 100644 tools/qemu/patches/0011-VMDK-create-different-subformats.patch delete mode 100644 tools/qemu/patches/0012-vmdk-Allow-selecting-SCSI-adapter-in-image-creation.patch diff --git a/config/Config-build.in b/config/Config-build.in index dd314279590409..342859b7c0cdba 100644 --- a/config/Config-build.in +++ b/config/Config-build.in @@ -3,6 +3,20 @@ # Copyright (C) 2006-2013 OpenWrt.org # Copyright (C) 2016 LEDE Project +config EXPERIMENTAL + bool "Enable experimental features by default" + default n + help + Set this option to build with latest bleeding edge features + which may or may not work as expected. + If you would like to help the development of OpenWrt, you are + encouraged to set this option and provide feedback (both + positive and negative). But do so only if you know how to + recover your device in case of flashing potentially non-working + firmware. + + If you plan to use this build in production, say NO! + menu "Global build settings" config JSON_OVERVIEW_IMAGE_INFO @@ -49,17 +63,18 @@ menu "Global build settings" config TESTING_KERNEL bool "Use the testing kernel version" depends on HAS_TESTING_KERNEL - default n + default EXPERIMENTAL help If the target supports a newer kernel version than the default, you can use this config option to enable it + config DISPLAY_SUPPORT bool "Show packages that require graphics support (local or remote)" default n config BUILD_PATENTED - default y + default n bool "Compile with support for patented functionality" help When this option is disabled, software which provides patented functionality @@ -86,11 +101,19 @@ menu "Global build settings" This removes all ipkg/opkg status data files from the target directory before building the root filesystem. + config IPK_FILES_CHECKSUMS + bool + prompt "Record files checksums in package metadata" + default n + help + This makes file checksums part of package metadata. It increases size + but provides you with pkg_check command to check for flash coruptions. + config INCLUDE_CONFIG bool "Include build configuration in firmware" if DEVEL default n help - If enabled, config.seed will be stored in /etc/build.config of firmware. + If enabled, buildinfo files will be stored in /etc/build.* of firmware. config REPRODUCIBLE_DEBUG_INFO bool "Make debug information reproducible" diff --git a/config/Config-devel.in b/config/Config-devel.in index 57031d42f634b8..126462bfc3a0a1 100644 --- a/config/Config-devel.in +++ b/config/Config-devel.in @@ -7,7 +7,7 @@ menuconfig DEVEL default n config BROKEN - bool "Show broken platforms / packages" if DEVEL + bool "Show broken platforms / packages / devices" if DEVEL default n config BINARY_FOLDER @@ -63,7 +63,7 @@ menuconfig DEVEL config CCACHE bool "Use ccache" if DEVEL - default y + default n help Compiler cache; see https://ccache.samba.org/ @@ -115,6 +115,13 @@ menuconfig DEVEL help If enabled, log files will be written to the ./log directory. + config BUILD_LOG_DIR + string "Log folder" if DEVEL + default "" + help + Store build logs in this directory. + If not set, uses './logs' + config SRC_TREE_OVERRIDE bool "Enable package source tree override" if DEVEL help diff --git a/config/Config-images.in b/config/Config-images.in index eb0aa2c84c0762..26917267cf95c9 100644 --- a/config/Config-images.in +++ b/config/Config-images.in @@ -14,7 +14,6 @@ menu "Target Images" prompt "Compression" default TARGET_INITRAMFS_COMPRESSION_LZMA if TARGET_apm821xx default TARGET_INITRAMFS_COMPRESSION_LZMA if TARGET_ath79_mikrotik - default TARGET_INITRAMFS_COMPRESSION_LZMA if TARGET_ipq40xx default TARGET_INITRAMFS_COMPRESSION_LZMA if TARGET_lantiq default TARGET_INITRAMFS_COMPRESSION_LZMA if TARGET_mpc85xx default TARGET_INITRAMFS_COMPRESSION_LZMA if TARGET_ramips @@ -94,7 +93,6 @@ menu "Target Images" menuconfig TARGET_ROOTFS_EXT4FS bool "ext4" default y if USES_EXT4 - default n if TARGET_x86 help Build an ext4 root filesystem. @@ -136,13 +134,6 @@ menu "Target Images" help Create an ext4 filesystem with a journal. - config TARGET_ROOTFS_ISO - bool "iso" - default n - depends on TARGET_x86_generic - help - Create a bootable ISO image. - config TARGET_ROOTFS_JFFS2 bool "jffs2" depends on USES_JFFS2 @@ -207,32 +198,32 @@ menu "Target Images" config GRUB_IMAGES bool "Build GRUB images (Linux x86 or x86_64 host only)" depends on TARGET_x86 - depends on TARGET_ROOTFS_EXT4FS || TARGET_ROOTFS_ISO || TARGET_ROOTFS_JFFS2 || TARGET_ROOTFS_SQUASHFS + depends on TARGET_ROOTFS_EXT4FS || TARGET_ROOTFS_JFFS2 || TARGET_ROOTFS_SQUASHFS select PACKAGE_grub2 default y - config EFI_IMAGES - bool "Build EFI GRUB images (Linux x86 or x86_64 host only)" + config GRUB_EFI_IMAGES + bool "Build GRUB EFI images (Linux x86 or x86_64 host only)" depends on TARGET_x86 - depends on TARGET_ROOTFS_EXT4FS || TARGET_ROOTFS_ISO || TARGET_ROOTFS_JFFS2 || TARGET_ROOTFS_SQUASHFS + depends on TARGET_ROOTFS_EXT4FS || TARGET_ROOTFS_JFFS2 || TARGET_ROOTFS_SQUASHFS select PACKAGE_grub2 select PACKAGE_grub2-efi + select PACKAGE_kmod-fs-vfat default y config GRUB_CONSOLE bool "Use Console Terminal (in addition to Serial)" - depends on GRUB_IMAGES || EFI_IMAGES + depends on GRUB_IMAGES || GRUB_EFI_IMAGES default y config GRUB_SERIAL string "Serial port device" - depends on GRUB_IMAGES || EFI_IMAGES - default "hvc0" if TARGET_x86_xen_domu - default "ttyS0" if ! TARGET_x86_xen_domu + depends on GRUB_IMAGES || GRUB_EFI_IMAGES + default "ttyS0" config GRUB_BAUDRATE int "Serial port baud rate" - depends on GRUB_IMAGES || EFI_IMAGES + depends on GRUB_IMAGES || GRUB_EFI_IMAGES default 38400 if TARGET_x86_generic default 115200 @@ -243,67 +234,46 @@ menu "Target Images" config GRUB_BOOTOPTS string "Extra kernel boot options" - depends on GRUB_IMAGES || EFI_IMAGES - default "xencons=hvc" if TARGET_x86_xen_domu + depends on GRUB_IMAGES || GRUB_EFI_IMAGES help If you don't know, just leave it blank. config GRUB_TIMEOUT string "Seconds to wait before booting the default entry" - depends on GRUB_IMAGES || EFI_IMAGES - default "0" + depends on GRUB_IMAGES || GRUB_EFI_IMAGES + default "5" help If you don't know, 5 seconds is a reasonable default. config GRUB_TITLE string "Title for the menu entry in GRUB" - depends on GRUB_IMAGES || EFI_IMAGES + depends on GRUB_IMAGES || GRUB_EFI_IMAGES default "OpenWrt" help This is the title of the GRUB menu entry. If unspecified, it defaults to OpenWrt. + config ISO_IMAGES + bool "Build LiveCD image (ISO)" + depends on TARGET_x86 + depends on GRUB_IMAGES || GRUB_EFI_IMAGES + config VDI_IMAGES bool "Build VirtualBox image files (VDI)" - depends on TARGET_x86 || TARGET_x86_64 - select GRUB_IMAGES - select TARGET_IMAGES_PAD + depends on TARGET_x86 + depends on GRUB_IMAGES || GRUB_EFI_IMAGES select PACKAGE_kmod-e1000 config VMDK_IMAGES bool "Build VMware image files (VMDK)" - depends on TARGET_x86 || TARGET_x86_64 - select GRUB_IMAGES - select TARGET_IMAGES_PAD - select PACKAGE_kmod-e1000 - default y - - config VHD_IMAGES - bool "Build Hyper-V image files (VHD)" - depends on TARGET_x86 || TARGET_x86_64 - depends on GRUB_IMAGES || EFI_IMAGES - select TARGET_IMAGES_PAD - select PACKAGE_kmod-tulip - default n - - config QCOW2_IMAGES - bool "Build PVE/KVM image files (QCOW2)" - depends on TARGET_x86 || TARGET_x86_64 - depends on GRUB_IMAGES || EFI_IMAGES - select TARGET_IMAGES_PAD + depends on TARGET_x86 + depends on GRUB_IMAGES || GRUB_EFI_IMAGES select PACKAGE_kmod-e1000 - default n - - config TARGET_IMAGES_PAD - bool "Pad images to filesystem size (for JFFS2)" - depends on GRUB_IMAGES || EFI_IMAGES - default y config TARGET_IMAGES_GZIP bool "GZip images" - depends on TARGET_IMAGES_PAD || TARGET_ROOTFS_EXT4FS || TARGET_x86 + depends on TARGET_ROOTFS_EXT4FS || TARGET_x86 || TARGET_armvirt || TARGET_malta default y - default n if TARGET_x86 comment "Image Options" @@ -311,21 +281,21 @@ menu "Target Images" config TARGET_KERNEL_PARTSIZE int "Kernel partition size (in MB)" - depends on GRUB_IMAGES || EFI_IMAGES || USES_BOOT_PART + depends on USES_BOOT_PART default 8 if TARGET_apm821xx_sata default 64 if TARGET_bcm27xx default 16 config TARGET_ROOTFS_PARTSIZE int "Root filesystem partition size (in MB)" - depends on GRUB_IMAGES || EFI_IMAGES || USES_ROOTFS_PART || TARGET_ROOTFS_EXT4FS || TARGET_mvebu || TARGET_rb532 || TARGET_sunxi || TARGET_uml - default 160 + depends on USES_ROOTFS_PART || TARGET_ROOTFS_EXT4FS || TARGET_omap || TARGET_sunxi || TARGET_uml + default 104 help Select the root filesystem partition size. config TARGET_ROOTFS_PARTNAME string "Root partition on target device" - depends on GRUB_IMAGES || EFI_IMAGES + depends on GRUB_IMAGES || GRUB_EFI_IMAGES help Override the root partition on the final device. If left empty, it will be mounted by PARTUUID which makes the kernel find the diff --git a/config/Config-kernel.in b/config/Config-kernel.in index df236cce0ed152..f71114b5daa874 100644 --- a/config/Config-kernel.in +++ b/config/Config-kernel.in @@ -48,8 +48,7 @@ config KERNEL_DEBUG_FS config KERNEL_MIPS_FP_SUPPORT bool - default y - depends on (mips || mipsel || mips64 || mips64el) + default y if TARGET_pistachio config KERNEL_ARM_PMU bool @@ -87,6 +86,126 @@ config KERNEL_PROFILING Enable the extended profiling support mechanisms used by profilers such as OProfile. +config KERNEL_UBSAN + bool "Compile the kernel with undefined behaviour sanity checker" + help + This option enables undefined behaviour sanity checker + Compile-time instrumentation is used to detect various undefined + behaviours in runtime. Various types of checks may be enabled + via boot parameter ubsan_handle + (see: Documentation/dev-tools/ubsan.rst). + +config KERNEL_UBSAN_SANITIZE_ALL + bool "Enable instrumentation for the entire kernel" + depends on KERNEL_UBSAN + default y + help + This option activates instrumentation for the entire kernel. + If you don't enable this option, you have to explicitly specify + UBSAN_SANITIZE := y for the files/directories you want to check for UB. + Enabling this option will get kernel image size increased + significantly. + +config KERNEL_UBSAN_ALIGNMENT + bool "Enable checking of pointers alignment" + depends on KERNEL_UBSAN + help + This option enables detection of unaligned memory accesses. + Enabling this option on architectures that support unaligned + accesses may produce a lot of false positives. + +config KERNEL_UBSAN_NULL + bool "Enable checking of null pointers" + depends on KERNEL_UBSAN + help + This option enables detection of memory accesses via a + null pointer. + +config KERNEL_KASAN + bool "Compile the kernel with KASan: runtime memory debugger" + select KERNEL_SLUB_DEBUG + depends on (x86_64 || aarch64) + help + Enables kernel address sanitizer - runtime memory debugger, + designed to find out-of-bounds accesses and use-after-free bugs. + This is strictly a debugging feature and it requires a gcc version + of 4.9.2 or later. Detection of out of bounds accesses to stack or + global variables requires gcc 5.0 or later. + This feature consumes about 1/8 of available memory and brings about + ~x3 performance slowdown. + For better error detection enable CONFIG_STACKTRACE. + Currently CONFIG_KASAN doesn't work with CONFIG_DEBUG_SLAB + (the resulting kernel does not boot). + +config KERNEL_KASAN_EXTRA + bool "KAsan: extra checks" + depends on KERNEL_KASAN && KERNEL_DEBUG_KERNEL + help + This enables further checks in the kernel address sanitizer, for now + it only includes the address-use-after-scope check that can lead + to excessive kernel stack usage, frame size warnings and longer + compile time. + https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81715 has more + + +choice + prompt "Instrumentation type" + depends on KERNEL_KASAN + default KERNEL_KASAN_OUTLINE + +config KERNEL_KASAN_OUTLINE + bool "Outline instrumentation" + help + Before every memory access compiler insert function call + __asan_load*/__asan_store*. These functions performs check + of shadow memory. This is slower than inline instrumentation, + however it doesn't bloat size of kernel's .text section so + much as inline does. + +config KERNEL_KASAN_INLINE + bool "Inline instrumentation" + help + Compiler directly inserts code checking shadow memory before + memory accesses. This is faster than outline (in some workloads + it gives about x2 boost over outline instrumentation), but + make kernel's .text size much bigger. + This requires a gcc version of 5.0 or later. + +endchoice + +config KERNEL_KCOV + bool "Compile the kernel with code coverage for fuzzing" + select KERNEL_DEBUG_FS + help + KCOV exposes kernel code coverage information in a form suitable + for coverage-guided fuzzing (randomized testing). + + If RANDOMIZE_BASE is enabled, PC values will not be stable across + different machines and across reboots. If you need stable PC values, + disable RANDOMIZE_BASE. + + For more details, see Documentation/kcov.txt. + +config KERNEL_KCOV_ENABLE_COMPARISONS + bool "Enable comparison operands collection by KCOV" + depends on KERNEL_KCOV + help + KCOV also exposes operands of every comparison in the instrumented + code along with operand sizes and PCs of the comparison instructions. + These operands can be used by fuzzing engines to improve the quality + of fuzzing coverage. + +config KERNEL_KCOV_INSTRUMENT_ALL + bool "Instrument all code by default" + depends on KERNEL_KCOV + default y if KERNEL_KCOV + help + If you are doing generic system call fuzzing (like e.g. syzkaller), + then you will want to instrument the whole kernel and you should + say y here. If you are doing more targeted fuzzing (like e.g. + filesystem fuzzing with AFL) then you will want to enable coverage + for more specific subsets of files, and should say n here. + config KERNEL_TASKSTATS bool "Compile the kernel with task resource/io statistics and accounting" default n @@ -270,7 +389,6 @@ config KERNEL_BLK_DEV_BSG config KERNEL_TRANSPARENT_HUGEPAGE bool - default n choice prompt "Transparent Hugepage Support sysfs defaults" @@ -318,6 +436,74 @@ config KERNEL_PROVE_LOCKING select KERNEL_DEBUG_KERNEL default n +config KERNEL_LOCKUP_DETECTOR + bool "Compile the kernel with detect Hard and Soft Lockups" + depends on KERNEL_DEBUG_KERNEL + help + Say Y here to enable the kernel to act as a watchdog to detect + hard and soft lockups. + + Softlockups are bugs that cause the kernel to loop in kernel + mode for more than 20 seconds, without giving other tasks a + chance to run. The current stack trace is displayed upon + detection and the system will stay locked up. + + Hardlockups are bugs that cause the CPU to loop in kernel mode + for more than 10 seconds, without letting other interrupts have a + chance to run. The current stack trace is displayed upon detection + and the system will stay locked up. + + The overhead should be minimal. A periodic hrtimer runs to + generate interrupts and kick the watchdog task every 4 seconds. + An NMI is generated every 10 seconds or so to check for hardlockups. + + The frequency of hrtimer and NMI events and the soft and hard lockup + thresholds can be controlled through the sysctl watchdog_thresh. + +config KERNEL_DETECT_HUNG_TASK + bool "Compile the kernel with detect Hung Tasks" + depends on KERNEL_DEBUG_KERNEL + default KERNEL_LOCKUP_DETECTOR + help + Say Y here to enable the kernel to detect "hung tasks", + which are bugs that cause the task to be stuck in + uninterruptible "D" state indefinitely. + + When a hung task is detected, the kernel will print the + current stack trace (which you should report), but the + task will stay in uninterruptible state. If lockdep is + enabled then all held locks will also be reported. This + feature has negligible overhead. + +config KERNEL_WQ_WATCHDOG + bool "Compile the kernel with detect Workqueue Stalls" + depends on KERNEL_DEBUG_KERNEL + help + Say Y here to enable stall detection on workqueues. If a + worker pool doesn't make forward progress on a pending work + item for over a given amount of time, 30s by default, a + warning message is printed along with dump of workqueue + state. This can be configured through kernel parameter + "workqueue.watchdog_thresh" and its sysfs counterpart. + +config KERNEL_DEBUG_ATOMIC_SLEEP + bool "Compile the kernel with sleep inside atomic section checking" + depends on KERNEL_DEBUG_KERNEL + help + If you say Y here, various routines which may sleep will become very + noisy if they are called inside atomic sections: when a spinlock is + held, inside an rcu read side critical section, inside preempt disabled + sections, inside an interrupt, etc... + +config KERNEL_DEBUG_VM + bool "Compile the kernel with debug VM" + depends on KERNEL_DEBUG_KERNEL + help + Enable this to turn on extended checks in the virtual-memory system + that may impact performance. + + If unsure, say N. + config KERNEL_PRINTK_TIME bool "Enable printk timestamps" default y @@ -460,7 +646,7 @@ if KERNEL_CGROUPS config KERNEL_CPUSETS bool "Cpuset support" - default y if !SMALL_FLASH + default y help This option will let you create and manage CPUSETs which allow dynamically partitioning a system into sets of CPUs and @@ -474,14 +660,14 @@ if KERNEL_CGROUPS config KERNEL_CGROUP_CPUACCT bool "Simple CPU accounting cgroup subsystem" - default y if !SMALL_FLASH + default y help Provides a simple Resource Controller for monitoring the total CPU consumed by the tasks in a cgroup. config KERNEL_RESOURCE_COUNTERS bool "Resource counters" - default y if !SMALL_FLASH + default y help This option enables controller independent resource accounting infrastructure that works with cgroups. @@ -492,7 +678,7 @@ if KERNEL_CGROUPS config KERNEL_MEMCG bool "Memory Resource Controller for Control Groups" - default y if !SMALL_FLASH + default y select KERNEL_FREEZER depends on KERNEL_RESOURCE_COUNTERS || !LINUX_3_18 help @@ -516,7 +702,7 @@ if KERNEL_CGROUPS config KERNEL_MEMCG_SWAP bool "Memory Resource Controller Swap Extension" - default y if !SMALL_FLASH + default y depends on KERNEL_MEMCG help Add swap management feature to memory resource controller. When you @@ -551,7 +737,7 @@ if KERNEL_CGROUPS config KERNEL_MEMCG_KMEM bool "Memory Resource Controller Kernel Memory accounting (EXPERIMENTAL)" - default y if !SMALL_FLASH + default y depends on KERNEL_MEMCG help The Kernel Memory extension for Memory Resource Controller can limit @@ -572,7 +758,7 @@ if KERNEL_CGROUPS menuconfig KERNEL_CGROUP_SCHED bool "Group CPU scheduler" - default y if !SMALL_FLASH + default y help This feature lets CPU scheduler recognize task groups and control CPU bandwidth allocation to such task groups. It uses cgroups to group @@ -582,11 +768,11 @@ if KERNEL_CGROUPS config KERNEL_FAIR_GROUP_SCHED bool "Group scheduling for SCHED_OTHER" - default y if !SMALL_FLASH + default y config KERNEL_CFS_BANDWIDTH bool "CPU bandwidth provisioning for FAIR_GROUP_SCHED" - default n + default y depends on KERNEL_FAIR_GROUP_SCHED help This option allows users to define CPU bandwidth rates (limits) for @@ -597,7 +783,7 @@ if KERNEL_CGROUPS config KERNEL_RT_GROUP_SCHED bool "Group scheduling for SCHED_RR/FIFO" - default y if !SMALL_FLASH + default y help This feature lets you explicitly allocate real CPU bandwidth to task groups. If enabled, it will also make it impossible to @@ -632,7 +818,7 @@ if KERNEL_CGROUPS config KERNEL_BLK_DEV_THROTTLING bool "Enable throttling policy" - default y if TARGET_bcm27xx + default y config KERNEL_BLK_DEV_THROTTLING_LOW bool "Block throttling .low limit interface support (EXPERIMENTAL)" @@ -667,7 +853,7 @@ endif config KERNEL_NAMESPACES bool "Enable kernel namespaces" - default n + default y if !SMALL_FLASH if KERNEL_NAMESPACES @@ -736,13 +922,13 @@ config KERNEL_POSIX_MQUEUE config KERNEL_SECCOMP_FILTER bool - default n + default y if !SMALL_FLASH config KERNEL_SECCOMP bool "Enable seccomp support" depends on !(TARGET_uml) select KERNEL_SECCOMP_FILTER - default n + default y if !SMALL_FLASH help Build kernel with support for seccomp. @@ -877,7 +1063,7 @@ menu "Filesystem ACL and attr support options" select KERNEL_FS_POSIX_ACL default y if USE_FS_ACL_ATTR - config KERNEL_HFSPLUG_FS_POSIX_ACL + config KERNEL_HFSPLUS_FS_POSIX_ACL bool "Enable POSIX ACL for HFS+ Filesystems" select KERNEL_FS_POSIX_ACL default y if USE_FS_ACL_ATTR diff --git a/feeds.conf.default b/feeds.conf.default index 276b2be4a96339..416da4b0c900a3 100644 --- a/feeds.conf.default +++ b/feeds.conf.default @@ -6,4 +6,3 @@ src-git telephony https://git.openwrt.org/feed/telephony.git #src-git targets https://github.com/openwrt/targets.git #src-git oldpackages http://git.openwrt.org/packages.git #src-link custom /usr/src/openwrt/custom-feed -#src-git helloworld https://github.com/fw876/helloworld diff --git a/include/cmake.mk b/include/cmake.mk index 96c4d7df3479f2..b38d44003912a5 100644 --- a/include/cmake.mk +++ b/include/cmake.mk @@ -1,5 +1,13 @@ cmake_bool = $(patsubst %,-D%:BOOL=$(if $($(1)),ON,OFF),$(2)) +PKG_USE_NINJA ?= 1 +HOST_USE_NINJA ?= 1 +ifeq ($(PKG_USE_NINJA),1) + PKG_BUILD_PARALLEL ?= 1 +endif +ifeq ($(HOST_USE_NINJA),1) + HOST_BUILD_PARALLEL ?= 1 +endif PKG_INSTALL:=1 ifneq ($(findstring c,$(OPENWRT_VERBOSE)),) @@ -44,6 +52,34 @@ CMAKE_FIND_ROOT_PATH:=$(STAGING_DIR)/usr;$(TOOLCHAIN_DIR)$(if $(CONFIG_EXTERNAL_ CMAKE_HOST_FIND_ROOT_PATH:=$(STAGING_DIR)/host;$(STAGING_DIR_HOSTPKG);$(STAGING_DIR_HOST) CMAKE_SHARED_LDFLAGS:=-Wl,-Bsymbolic-functions +ifeq ($(HOST_USE_NINJA),1) + CMAKE_HOST_OPTIONS += -DCMAKE_GENERATOR="Ninja" + + define Host/Compile/Default + +$(NINJA) -C $(HOST_BUILD_DIR) $(1) + endef + + define Host/Install/Default + +$(NINJA) -C $(HOST_BUILD_DIR) install + endef + + define Host/Uninstall/Default + +$(NINJA) -C $(HOST_BUILD_DIR) uninstall + endef +endif + +ifeq ($(PKG_USE_NINJA),1) + CMAKE_OPTIONS += -DCMAKE_GENERATOR="Ninja" + + define Build/Compile/Default + +$(NINJA) -C $(CMAKE_BINARY_DIR) $(1) + endef + + define Build/Install/Default + +DESTDIR="$(PKG_INSTALL_DIR)" $(NINJA) -C $(CMAKE_BINARY_DIR) install + endef +endif + define Build/Configure/Default mkdir -p $(CMAKE_BINARY_DIR) (cd $(CMAKE_BINARY_DIR); \ diff --git a/include/feeds.mk b/include/feeds.mk index 98e315bceb5eab..e499ac2684a78d 100644 --- a/include/feeds.mk +++ b/include/feeds.mk @@ -43,5 +43,11 @@ endef # 1: package name define GetABISuffix -$(if $(filter-out kmod-%,$(1)),$(if $(ABIV_$(1)),$(ABIV_$(1)),$(foreach v,$(wildcard $(STAGING_DIR)/pkginfo/$(1).version),$(shell cat $(v))))) +$(call FormatABISuffix,$(1),$(if $(ABIV_$(1)),$(ABIV_$(1)),$(foreach v,$(wildcard $(STAGING_DIR)/pkginfo/$(1).version),$(shell cat $(v))))) +endef + +# 1: package name +# 2: abi version +define FormatABISuffix +$(if $(filter-out kmod-%,$(1)),$(if $(2),$(if $(filter %0 %1 %2 %3 %4 %5 %6 %7 %8 %9,$(1)),-)$(2))) endef diff --git a/include/image-commands.mk b/include/image-commands.mk index f21f9e3f03a39b..fa368850388d09 100644 --- a/include/image-commands.mk +++ b/include/image-commands.mk @@ -11,105 +11,77 @@ define rootfs_align $(patsubst %-256k,0x40000,$(patsubst %-128k,0x20000,$(patsubst %-64k,0x10000,$(patsubst squashfs%,0x4,$(patsubst root.%,%,$(1)))))) endef -define Build/buffalo-enc - $(eval product=$(word 1,$(1))) - $(eval version=$(word 2,$(1))) - $(eval args=$(wordlist 3,$(words $(1)),$(1))) - $(STAGING_DIR_HOST)/bin/buffalo-enc \ - -p $(product) -v $(version) $(args) \ - -i $@ -o $@.new - mv $@.new $@ -endef -define Build/buffalo-enc-tag - $(call Build/buffalo-enc,'' '' -S 152 $(1)) +define Build/append-dtb + cat $(KDIR)/image-$(firstword $(DEVICE_DTS)).dtb >> $@ endef -define Build/buffalo-tag-dhp - $(eval product=$(word 1,$(1))) - $(eval region=$(word 2,$(1))) - $(eval language=$(word 3,$(1))) - $(STAGING_DIR_HOST)/bin/buffalo-tag \ - -d 0x01000000 -w 1 \ - -a $(BUFFALO_TAG_PLATFORM) \ - -v $(BUFFALO_TAG_VERSION) -m $(BUFFALO_TAG_MINOR) \ - -b $(product) -p $(product) \ - -r $(region) -r $(region) -l $(language) \ - -I $@ -o $@.new - mv $@.new $@ +define Build/append-dtb-elf + $(TARGET_CROSS)objcopy \ + --set-section-flags=.appended_dtb=alloc,contents \ + --update-section \ + .appended_dtb=$(KDIR)/image-$(firstword $(DEVICE_DTS)).dtb $@ endef -define Build/buffalo-dhp-image - $(STAGING_DIR_HOST)/bin/mkdhpimg $@ $@.new - mv $@.new $@ +define Build/append-kernel + dd if=$(IMAGE_KERNEL) >> $@ endef -define Build/elx-header - $(eval hw_id=$(word 1,$(1))) - $(eval xor_pattern=$(word 2,$(1))) - ( \ - echo -ne "\x00\x00\x00\x00\x00\x00\x00\x03" | \ - dd bs=42 count=1 conv=sync; \ - hw_id="$(hw_id)"; \ - echo -ne "\x$${hw_id:0:2}\x$${hw_id:2:2}\x$${hw_id:4:2}\x$${hw_id:6:2}" | \ - dd bs=20 count=1 conv=sync; \ - echo -ne "$$(printf '%08x' $$(stat -c%s $@) | fold -s2 | xargs -I {} echo \\x{} | tr -d '\n')" | \ - dd bs=8 count=1 conv=sync; \ - echo -ne "$$($(MKHASH) md5 $@ | fold -s2 | xargs -I {} echo \\x{} | tr -d '\n')" | \ - dd bs=58 count=1 conv=sync; \ - ) > $(KDIR)/tmp/$(DEVICE_NAME).header - $(call Build/xor-image,-p $(xor_pattern) -x) - cat $(KDIR)/tmp/$(DEVICE_NAME).header $@ > $@.new - mv $@.new $@ - rm -rf $(KDIR)/tmp/$(DEVICE_NAME).header +define Build/append-image + dd if=$(BIN_DIR)/$(DEVICE_IMG_PREFIX)-$(1) >> $@ endef -define Build/eva-image - $(STAGING_DIR_HOST)/bin/lzma2eva $(KERNEL_LOADADDR) $(KERNEL_LOADADDR) $@ $@.new - mv $@.new $@ +ifdef IB +define Build/append-image-stage + dd if=$(STAGING_DIR_IMAGE)/$(BOARD)$(if $(SUBTARGET),-$(SUBTARGET))-$(DEVICE_NAME)-$(1) >> $@ endef - -define Build/seama - $(STAGING_DIR_HOST)/bin/seama -i $@ \ - -m "dev=/dev/mtdblock/$(SEAMA_MTDBLOCK)" -m "type=firmware" - mv $@.seama $@ +else +define Build/append-image-stage + dd if=$(BIN_DIR)/$(DEVICE_IMG_PREFIX)-$(1) of=$(STAGING_DIR_IMAGE)/$(BOARD)$(if $(SUBTARGET),-$(SUBTARGET))-$(DEVICE_NAME)-$(1) + dd if=$(BIN_DIR)/$(DEVICE_IMG_PREFIX)-$(1) >> $@ endef +endif -define Build/seama-seal - $(STAGING_DIR_HOST)/bin/seama -i $@ -s $@.seama \ - -m "signature=$(SEAMA_SIGNATURE)" - mv $@.seama $@ -endef -define Build/zyxel-ras-image - let \ - newsize="$(subst k,* 1024,$(RAS_ROOTFS_SIZE))"; \ - $(STAGING_DIR_HOST)/bin/mkrasimage \ - -b $(RAS_BOARD) \ - -v $(RAS_VERSION) \ - -r $@ \ - -s $$newsize \ - -o $@.new \ - $(if $(findstring separate-kernel,$(word 1,$(1))),-k $(IMAGE_KERNEL)) \ - && mv $@.new $@ -endef +compat_version=$(if $(DEVICE_COMPAT_VERSION),$(DEVICE_COMPAT_VERSION),1.0) +json_quote=$(subst ','\'',$(subst ",\",$(1))) +#")') -define Build/netgear-chk - $(STAGING_DIR_HOST)/bin/mkchkimg \ - -o $@.new \ - -k $@ \ - -b $(NETGEAR_BOARD_ID) \ - $(if $(NETGEAR_REGION),-r $(NETGEAR_REGION),) - mv $@.new $@ +legacy_supported_message=$(SUPPORTED_DEVICES) - Image version mismatch: image $(compat_version), \ + device 1.0. Please wipe config during upgrade (force required) or reinstall. \ + $(if $(DEVICE_COMPAT_MESSAGE),Reason: $(DEVICE_COMPAT_MESSAGE),Please check documentation ...) + +metadata_devices=$(if $(1),$(subst "$(space)","$(comma)",$(strip $(foreach v,$(1),"$(call json_quote,$(v))")))) +metadata_json = \ + '{ $(if $(IMAGE_METADATA),$(IMAGE_METADATA)$(comma)) \ + "metadata_version": "1.1", \ + "compat_version": "$(call json_quote,$(compat_version))", \ + $(if $(DEVICE_COMPAT_MESSAGE),"compat_message": "$(call json_quote,$(DEVICE_COMPAT_MESSAGE))"$(comma)) \ + $(if $(filter-out 1.0,$(compat_version)),"new_supported_devices": \ + [$(call metadata_devices,$(SUPPORTED_DEVICES))]$(comma) \ + "supported_devices": ["$(call json_quote,$(legacy_supported_message))"]$(comma)) \ + $(if $(filter 1.0,$(compat_version)),"supported_devices":[$(call metadata_devices,$(SUPPORTED_DEVICES))]$(comma)) \ + "version": { \ + "dist": "$(call json_quote,$(VERSION_DIST))", \ + "version": "$(call json_quote,$(VERSION_NUMBER))", \ + "revision": "$(call json_quote,$(REVISION))", \ + "target": "$(call json_quote,$(TARGETID))", \ + "board": "$(call json_quote,$(if $(BOARD_NAME),$(BOARD_NAME),$(DEVICE_NAME)))" \ + } \ + }' + +define Build/append-metadata + $(if $(SUPPORTED_DEVICES),-echo $(call metadata_json) | fwtool -I - $@) + [ ! -s "$(BUILD_KEY)" -o ! -s "$(BUILD_KEY).ucert" -o ! -s "$@" ] || { \ + cp "$(BUILD_KEY).ucert" "$@.ucert" ;\ + usign -S -m "$@" -s "$(BUILD_KEY)" -x "$@.sig" ;\ + ucert -A -c "$@.ucert" -x "$@.sig" ;\ + fwtool -S "$@.ucert" "$@" ;\ + } endef -define Build/netgear-dni - $(STAGING_DIR_HOST)/bin/mkdniimg \ - -B $(NETGEAR_BOARD_ID) -v $(VERSION_DIST).$(firstword $(subst -, ,$(REVISION))) \ - $(if $(NETGEAR_HW_ID),-H $(NETGEAR_HW_ID)) \ - -r "$(1)" \ - -i $@ -o $@.new - mv $@.new $@ +define Build/append-rootfs + dd if=$(IMAGE_ROOTFS) >> $@ endef define Build/append-squashfs-fakeroot-be @@ -126,6 +98,25 @@ define Build/append-string echo -n $(1) >> $@ endef +define Build/append-ubi + sh $(TOPDIR)/scripts/ubinize-image.sh \ + $(if $(UBOOTENV_IN_UBI),--uboot-env) \ + $(if $(KERNEL_IN_UBI),--kernel $(IMAGE_KERNEL)) \ + $(foreach part,$(UBINIZE_PARTS),--part $(part)) \ + $(IMAGE_ROOTFS) \ + $@.tmp \ + -p $(BLOCKSIZE:%k=%KiB) -m $(PAGESIZE) \ + $(if $(SUBPAGESIZE),-s $(SUBPAGESIZE)) \ + $(if $(VID_HDR_OFFSET),-O $(VID_HDR_OFFSET)) \ + $(UBINIZE_OPTS) + cat $@.tmp >> $@ + rm $@.tmp +endef + +define Build/append-uboot + dd if=$(UBOOT_PATH) >> $@ +endef + # append a fake/empty uImage header, to fool bootloaders rootfs integrity check # for example define Build/append-uImage-fakehdr @@ -142,38 +133,83 @@ define Build/append-uImage-fakehdr cat $@.fakehdr >> $@ endef -define Build/tplink-safeloader - -$(STAGING_DIR_HOST)/bin/tplink-safeloader \ - -B $(TPLINK_BOARD_ID) \ - -V $(REVISION) \ - -k $(IMAGE_KERNEL) \ - -r $@ \ - -o $@.new \ - -j \ - $(wordlist 2,$(words $(1)),$(1)) \ - $(if $(findstring sysupgrade,$(word 1,$(1))),-S) && mv $@.new $@ || rm -f $@ +define Build/buffalo-dhp-image + $(STAGING_DIR_HOST)/bin/mkdhpimg $@ $@.new + mv $@.new $@ endef -define Build/append-dtb - cat $(KDIR)/image-$(firstword $(DEVICE_DTS)).dtb >> $@ +define Build/buffalo-enc + $(eval product=$(word 1,$(1))) + $(eval version=$(word 2,$(1))) + $(eval args=$(wordlist 3,$(words $(1)),$(1))) + $(STAGING_DIR_HOST)/bin/buffalo-enc \ + -p $(product) -v $(version) $(args) \ + -i $@ -o $@.new + mv $@.new $@ endef -define Build/append-dtb-elf - $(TARGET_CROSS)objcopy \ - --set-section-flags=.appended_dtb=alloc,contents \ - --update-section \ - .appended_dtb=$(KDIR)/image-$(firstword $(DEVICE_DTS)).dtb $@ +define Build/buffalo-enc-tag + $(call Build/buffalo-enc,'' '' -S 152 $(1)) endef -define Build/install-dtb - $(call locked, \ - $(foreach dts,$(DEVICE_DTS), \ - $(CP) \ - $(DTS_DIR)/$(dts).dtb \ - $(BIN_DIR)/$(IMG_PREFIX)-$(dts).dtb; \ - ), \ - install-dtb-$(IMG_PREFIX) \ - ) +define Build/buffalo-tag-dhp + $(eval product=$(word 1,$(1))) + $(eval region=$(word 2,$(1))) + $(eval language=$(word 3,$(1))) + $(STAGING_DIR_HOST)/bin/buffalo-tag \ + -d 0x01000000 -w 1 \ + -a $(BUFFALO_TAG_PLATFORM) \ + -v $(BUFFALO_TAG_VERSION) -m $(BUFFALO_TAG_MINOR) \ + -b $(product) -p $(product) \ + -r $(region) -r $(region) -l $(language) \ + -I $@ -o $@.new + mv $@.new $@ +endef + +define Build/check-size + @imagesize="$$(stat -c%s $@)"; \ + limitsize="$$(($(subst k,* 1024,$(subst m, * 1024k,$(if $(1),$(1),$(IMAGE_SIZE))))))"; \ + [ $$limitsize -ge $$imagesize ] || { \ + echo "WARNING: Image file $@ is too big: $$imagesize > $$limitsize" >&2; \ + rm -f $@; \ + } +endef + +define Build/elecom-product-header + $(eval product=$(word 1,$(1))) + $(eval fw=$(if $(word 2,$(1)),$(word 2,$(1)),$@)) + + ( \ + echo -n -e "ELECOM\x00\x00$(product)" | dd bs=40 count=1 conv=sync; \ + echo -n "0.00" | dd bs=16 count=1 conv=sync; \ + dd if=$(fw); \ + ) > $(fw).new + mv $(fw).new $(fw) +endef + +define Build/elx-header + $(eval hw_id=$(word 1,$(1))) + $(eval xor_pattern=$(word 2,$(1))) + ( \ + echo -ne "\x00\x00\x00\x00\x00\x00\x00\x03" | \ + dd bs=42 count=1 conv=sync; \ + hw_id="$(hw_id)"; \ + echo -ne "\x$${hw_id:0:2}\x$${hw_id:2:2}\x$${hw_id:4:2}\x$${hw_id:6:2}" | \ + dd bs=20 count=1 conv=sync; \ + echo -ne "$$(printf '%08x' $$(stat -c%s $@) | fold -s2 | xargs -I {} echo \\x{} | tr -d '\n')" | \ + dd bs=8 count=1 conv=sync; \ + echo -ne "$$($(MKHASH) md5 $@ | fold -s2 | xargs -I {} echo \\x{} | tr -d '\n')" | \ + dd bs=58 count=1 conv=sync; \ + ) > $(KDIR)/tmp/$(DEVICE_NAME).header + $(call Build/xor-image,-p $(xor_pattern) -x) + cat $(KDIR)/tmp/$(DEVICE_NAME).header $@ > $@.new + mv $@.new $@ + rm -rf $(KDIR)/tmp/$(DEVICE_NAME).header +endef + +define Build/eva-image + $(STAGING_DIR_HOST)/bin/lzma2eva $(KERNEL_LOADADDR) $(KERNEL_LOADADDR) $@ $@.new + mv $@.new $@ endef define Build/initrd_compression @@ -204,28 +240,20 @@ define Build/fit @mv $@.new $@ endef -define Build/lzma - $(call Build/lzma-no-dict,-lc1 -lp2 -pb2 $(1)) -endef - -define Build/lzma-no-dict - $(STAGING_DIR_HOST)/bin/lzma e $@ $(1) $@.new - @mv $@.new $@ -endef - define Build/gzip gzip -f -9n -c $@ $(1) > $@.new @mv $@.new $@ endef -define Build/zip - mkdir $@.tmp - mv $@ $@.tmp/$(1) - - zip -j -X \ - $(if $(SOURCE_DATE_EPOCH),--mtime="$(SOURCE_DATE_EPOCH)") \ - $@ $@.tmp/$(if $(1),$(1),$@) - rm -rf $@.tmp +define Build/install-dtb + $(call locked, \ + $(foreach dts,$(DEVICE_DTS), \ + $(CP) \ + $(DTS_DIR)/$(dts).dtb \ + $(BIN_DIR)/$(IMG_PREFIX)-$(dts).dtb; \ + ), \ + install-dtb-$(IMG_PREFIX) \ + ) endef define Build/jffs2 @@ -256,50 +284,57 @@ define Build/kernel-bin cp $< $@ endef -define Build/patch-cmdline - $(STAGING_DIR_HOST)/bin/patch-cmdline $@ '$(CMDLINE)' +define Build/linksys-image + $(TOPDIR)/scripts/linksys-image.sh \ + "$(call param_get_default,type,$(1),$(DEVICE_NAME))" \ + $@ $@.new + mv $@.new $@ endef -define Build/append-kernel - dd if=$(IMAGE_KERNEL) >> $@ +define Build/lzma + $(call Build/lzma-no-dict,-lc1 -lp2 -pb2 $(1)) endef -define Build/append-rootfs - dd if=$(IMAGE_ROOTFS) >> $@ +define Build/lzma-no-dict + $(STAGING_DIR_HOST)/bin/lzma e $@ $(1) $@.new + @mv $@.new $@ endef -define Build/append-ubi - sh $(TOPDIR)/scripts/ubinize-image.sh \ - $(if $(UBOOTENV_IN_UBI),--uboot-env) \ - $(if $(KERNEL_IN_UBI),--kernel $(IMAGE_KERNEL)) \ - $(foreach part,$(UBINIZE_PARTS),--part $(part)) \ - $(IMAGE_ROOTFS) \ - $@.tmp \ - -p $(BLOCKSIZE:%k=%KiB) -m $(PAGESIZE) \ - $(if $(SUBPAGESIZE),-s $(SUBPAGESIZE)) \ - $(if $(VID_HDR_OFFSET),-O $(VID_HDR_OFFSET)) \ - $(UBINIZE_OPTS) - cat $@.tmp >> $@ - rm $@.tmp +define Build/netgear-chk + $(STAGING_DIR_HOST)/bin/mkchkimg \ + -o $@.new \ + -k $@ \ + -b $(NETGEAR_BOARD_ID) \ + $(if $(NETGEAR_REGION),-r $(NETGEAR_REGION),) + mv $@.new $@ endef -define Build/append-uboot - dd if=$(UBOOT_PATH) >> $@ +define Build/netgear-dni + $(STAGING_DIR_HOST)/bin/mkdniimg \ + -B $(NETGEAR_BOARD_ID) -v $(VERSION_DIST).$(firstword $(subst -, ,$(REVISION))) \ + $(if $(NETGEAR_HW_ID),-H $(NETGEAR_HW_ID)) \ + -r "$(1)" \ + -i $@ -o $@.new + mv $@.new $@ endef -define Build/pad-to - $(call Image/pad-to,$@,$(1)) +define Build/openmesh-image + $(TOPDIR)/scripts/om-fwupgradecfg-gen.sh \ + "$(call param_get_default,ce_type,$(1),$(DEVICE_NAME))" \ + "$@-fwupgrade.cfg" \ + "$(call param_get_default,kernel,$(1),$(IMAGE_KERNEL))" \ + "$(call param_get_default,rootfs,$(1),$@)" + $(TOPDIR)/scripts/combined-ext-image.sh \ + "$(call param_get_default,ce_type,$(1),$(DEVICE_NAME))" "$@" \ + "$@-fwupgrade.cfg" "fwupgrade.cfg" \ + "$(call param_get_default,kernel,$(1),$(IMAGE_KERNEL))" "kernel" \ + "$(call param_get_default,rootfs,$(1),$@)" "rootfs" endef define Build/pad-extra dd if=/dev/zero bs=$(1) count=1 >> $@ endef -define Build/pad-rootfs - $(STAGING_DIR_HOST)/bin/padjffs2 $@ $(1) \ - $(if $(BLOCKSIZE),$(BLOCKSIZE:%k=%),4 8 16 64 128 256) -endef - define Build/pad-offset let \ size="$$(stat -c%s $@)" \ @@ -311,45 +346,28 @@ define Build/pad-offset mv $@.new $@ endef -define Build/xor-image - $(STAGING_DIR_HOST)/bin/xorimage -i $@ -o $@.xor $(1) - mv $@.xor $@ -endef - -define Build/check-size - @imagesize="$$(stat -c%s $@)"; \ - limitsize="$$(($(subst k,* 1024,$(subst m, * 1024k,$(if $(1),$(1),$(IMAGE_SIZE))))))"; \ - [ $$limitsize -ge $$imagesize ] || { \ - echo "WARNING: Image file $@ is too big: $$imagesize > $$limitsize" >&2; \ - rm -f $@; \ - } +define Build/pad-rootfs + $(STAGING_DIR_HOST)/bin/padjffs2 $@ $(1) \ + $(if $(BLOCKSIZE),$(BLOCKSIZE:%k=%),4 8 16 64 128 256) endef -define Build/linksys-image - $(TOPDIR)/scripts/linksys-image.sh \ - "$(call param_get_default,type,$(1),$(DEVICE_NAME))" \ - $@ $@.new - mv $@.new $@ +define Build/pad-to + $(call Image/pad-to,$@,$(1)) endef -define Build/openmesh-image - $(TOPDIR)/scripts/om-fwupgradecfg-gen.sh \ - "$(call param_get_default,ce_type,$(1),$(DEVICE_NAME))" \ - "$@-fwupgrade.cfg" \ - "$(call param_get_default,kernel,$(1),$(IMAGE_KERNEL))" \ - "$(call param_get_default,rootfs,$(1),$@)" - $(TOPDIR)/scripts/combined-ext-image.sh \ - "$(call param_get_default,ce_type,$(1),$(DEVICE_NAME))" "$@" \ - "$@-fwupgrade.cfg" "fwupgrade.cfg" \ - "$(call param_get_default,kernel,$(1),$(IMAGE_KERNEL))" "kernel" \ - "$(call param_get_default,rootfs,$(1),$@)" "rootfs" +define Build/patch-cmdline + $(STAGING_DIR_HOST)/bin/patch-cmdline $@ '$(CMDLINE)' endef -define Build/qsdk-ipq-factory-mmc - $(TOPDIR)/scripts/mkits-qsdk-ipq-image.sh \ - $@.its kernel $(IMAGE_KERNEL) rootfs $(IMAGE_ROOTFS) - PATH=$(LINUX_DIR)/scripts/dtc:$(PATH) mkimage -f $@.its $@.new - @mv $@.new $@ +# Convert a raw image into a $1 type image. +# E.g. | qemu-image vdi +define Build/qemu-image + if command -v qemu-img; then \ + qemu-img convert -f raw -O $1 $@ $@.new; \ + mv $@.new $@; \ + else \ + echo "WARNING: Install qemu-img to create VDI/VMDK images" >&2; exit 1; \ + fi endef define Build/qsdk-ipq-factory-nand @@ -366,6 +384,18 @@ define Build/qsdk-ipq-factory-nor @mv $@.new $@ endef +define Build/seama + $(STAGING_DIR_HOST)/bin/seama -i $@ \ + -m "dev=/dev/mtdblock/$(SEAMA_MTDBLOCK)" -m "type=firmware" + mv $@.seama $@ +endef + +define Build/seama-seal + $(STAGING_DIR_HOST)/bin/seama -i $@ -s $@.seama \ + -m "signature=$(SEAMA_SIGNATURE)" + mv $@.seama $@ +endef + define Build/senao-header $(STAGING_DIR_HOST)/bin/mksenaofw $(1) -e $@ -o $@.new mv $@.new $@ @@ -379,6 +409,18 @@ define Build/sysupgrade-tar $@ endef +define Build/tplink-safeloader + -$(STAGING_DIR_HOST)/bin/tplink-safeloader \ + -B $(TPLINK_BOARD_ID) \ + -V $(REVISION) \ + -k $(IMAGE_KERNEL) \ + -r $@ \ + -o $@.new \ + -j \ + $(wordlist 2,$(words $(1)),$(1)) \ + $(if $(findstring sysupgrade,$(word 1,$(1))),-S) && mv $@.new $@ || rm -f $@ +endef + define Build/tplink-v1-header $(STAGING_DIR_HOST)/bin/mktplinkfw \ -c -H $(TPLINK_HWID) -W $(TPLINK_HWREV) -L $(KERNEL_LOADADDR) \ @@ -426,22 +468,6 @@ define Build/tplink-v2-image rm -rf $@.new endef -json_quote=$(subst ','\'',$(subst ",\",$(1))) -#")') -metadata_devices=$(if $(1),$(subst "$(space)","$(comma)",$(strip $(foreach v,$(1),"$(call json_quote,$(v))")))) -metadata_json = \ - '{ $(if $(IMAGE_METADATA),$(IMAGE_METADATA)$(comma)) \ - "metadata_version": "1.0", \ - "supported_devices":[$(call metadata_devices,$(1))], \ - "version": { \ - "dist": "$(call json_quote,$(VERSION_DIST))", \ - "version": "$(call json_quote,$(VERSION_NUMBER))", \ - "revision": "$(call json_quote,$(REVISION))", \ - "target": "$(call json_quote,$(TARGETID))", \ - "board": "$(call json_quote,$(if $(BOARD_NAME),$(BOARD_NAME),$(DEVICE_NAME)))" \ - } \ - }' - define Build/uImage mkimage \ -A $(LINUX_KARCH) \ @@ -457,12 +483,30 @@ define Build/uImage mv $@.new $@ endef -define Build/append-metadata - $(if $(SUPPORTED_DEVICES),-echo $(call metadata_json,$(SUPPORTED_DEVICES)) | fwtool -I - $@) - [ ! -s "$(BUILD_KEY)" -o ! -s "$(BUILD_KEY).ucert" -o ! -s "$@" ] || { \ - cp "$(BUILD_KEY).ucert" "$@.ucert" ;\ - usign -S -m "$@" -s "$(BUILD_KEY)" -x "$@.sig" ;\ - ucert -A -c "$@.ucert" -x "$@.sig" ;\ - fwtool -S "$@.ucert" "$@" ;\ - } +define Build/xor-image + $(STAGING_DIR_HOST)/bin/xorimage -i $@ -o $@.xor $(1) + mv $@.xor $@ +endef + +define Build/zip + mkdir $@.tmp + mv $@ $@.tmp/$(1) + + zip -j -X \ + $(if $(SOURCE_DATE_EPOCH),--mtime="$(SOURCE_DATE_EPOCH)") \ + $@ $@.tmp/$(if $(1),$(1),$@) + rm -rf $@.tmp +endef + +define Build/zyxel-ras-image + let \ + newsize="$(subst k,* 1024,$(RAS_ROOTFS_SIZE))"; \ + $(STAGING_DIR_HOST)/bin/mkrasimage \ + -b $(RAS_BOARD) \ + -v $(RAS_VERSION) \ + -r $@ \ + -s $$newsize \ + -o $@.new \ + $(if $(findstring separate-kernel,$(word 1,$(1))),-k $(IMAGE_KERNEL)) \ + && mv $@.new $@ endef diff --git a/include/image.mk b/include/image.mk index ef0d4605140143..a7473abe68f4fd 100644 --- a/include/image.mk +++ b/include/image.mk @@ -41,6 +41,7 @@ IMG_PREFIX:=$(VERSION_DIST_SANITIZED)-$(IMG_PREFIX_VERNUM)$(IMG_PREFIX_VERCODE)$ IMG_ROOTFS:=$(IMG_PREFIX)-rootfs IMG_COMBINED:=$(IMG_PREFIX)-combined IMG_PART_SIGNATURE:=$(shell echo $(SOURCE_DATE_EPOCH)$(LINUX_VERMAGIC) | $(MKHASH) md5 | cut -b1-8) +IMG_PART_DISKGUID:=$(shell echo $(SOURCE_DATE_EPOCH)$(LINUX_VERMAGIC) | $(MKHASH) md5 | sed -E 's/(.{8})(.{4})(.{4})(.{4})(.{10})../\1-\2-\3-\4-\500/') MKFS_DEVTABLE_OPT := -D $(INCLUDE_DIR)/device_table.txt @@ -89,7 +90,6 @@ fs-types-$(CONFIG_TARGET_ROOTFS_SQUASHFS) += squashfs fs-types-$(CONFIG_TARGET_ROOTFS_JFFS2) += $(addprefix jffs2-,$(JFFS2_BLOCKSIZE)) fs-types-$(CONFIG_TARGET_ROOTFS_JFFS2_NAND) += $(addprefix jffs2-nand-,$(NAND_BLOCKSIZE)) fs-types-$(CONFIG_TARGET_ROOTFS_EXT4FS) += ext4 -fs-types-$(CONFIG_TARGET_ROOTFS_ISO) += iso fs-types-$(CONFIG_TARGET_ROOTFS_UBIFS) += ubifs fs-subtypes-$(CONFIG_TARGET_ROOTFS_JFFS2) += $(addsuffix -raw,$(addprefix jffs2-,$(JFFS2_BLOCKSIZE))) @@ -229,7 +229,7 @@ define Image/mkfs/squashfs-common $(STAGING_DIR_HOST)/bin/mksquashfs4 $(call mkfs_target_dir,$(1)) $@ \ -nopad -noappend -root-owned \ -comp $(SQUASHFSCOMP) $(SQUASHFSOPT) \ - -processors $(shell nproc) + -processors 1 endef ifeq ($(CONFIG_TARGET_ROOTFS_SECURITY_LABELS),y) @@ -302,7 +302,7 @@ endif ifdef CONFIG_TARGET_ROOTFS_CPIOGZ define Image/Build/cpiogz - ( cd $(TARGET_DIR); find . | cpio -o -H newc -R root:root | gzip -9n >$(BIN_DIR)/$(IMG_ROOTFS).cpio.gz ) + ( cd $(TARGET_DIR); find . | $(STAGING_DIR_HOST)/bin/cpio -o -H newc -R 0:0 | gzip -9n >$(BIN_DIR)/$(IMG_ROOTFS).cpio.gz ) endef endif @@ -364,14 +364,14 @@ define Device/Init IMAGES := ARTIFACTS := - IMAGE_PREFIX := $(IMG_PREFIX)-$(1) - IMAGE_NAME = $$(IMAGE_PREFIX)-$$(1)-$$(2) + DEVICE_IMG_PREFIX := $(IMG_PREFIX)-$(1) + DEVICE_IMG_NAME = $$(DEVICE_IMG_PREFIX)-$$(1)-$$(2) IMAGE_SIZE := - KERNEL_PREFIX = $$(IMAGE_PREFIX) + KERNEL_PREFIX = $$(DEVICE_IMG_PREFIX) KERNEL_SUFFIX := -kernel.bin KERNEL_INITRAMFS_SUFFIX = $$(KERNEL_SUFFIX) KERNEL_IMAGE = $$(KERNEL_PREFIX)$$(KERNEL_SUFFIX) - KERNEL_INITRAMFS_PREFIX = $$(IMAGE_PREFIX)-initramfs + KERNEL_INITRAMFS_PREFIX = $$(DEVICE_IMG_PREFIX)-initramfs KERNEL_INITRAMFS_IMAGE = $$(KERNEL_INITRAMFS_PREFIX)$$(KERNEL_INITRAMFS_SUFFIX) KERNEL_INITRAMFS_NAME = $$(KERNEL_NAME)-initramfs KERNEL_INSTALL := @@ -401,6 +401,8 @@ define Device/Init BOARD_NAME := UIMAGE_MAGIC := UIMAGE_NAME := + DEVICE_COMPAT_VERSION := 1.0 + DEVICE_COMPAT_MESSAGE := SUPPORTED_DEVICES := $(subst _,$(comma),$(1)) IMAGE_METADATA := @@ -408,6 +410,7 @@ define Device/Init UBOOT_PATH := $(STAGING_DIR_IMAGE)/uboot-$(1) + BROKEN := DEFAULT := endef @@ -416,9 +419,11 @@ DEFAULT_DEVICE_VARS := \ CMDLINE UBOOTENV_IN_UBI KERNEL_IN_UBI BLOCKSIZE PAGESIZE SUBPAGESIZE \ VID_HDR_OFFSET UBINIZE_OPTS UBINIZE_PARTS MKUBIFS_OPTS DEVICE_DTS \ DEVICE_DTS_CONFIG DEVICE_DTS_DIR DEVICE_DTS_OVERLAY DEVICE_FDT_NUM \ - SOC BOARD_NAME UIMAGE_MAGIC UIMAGE_NAME \ - SUPPORTED_DEVICES IMAGE_METADATA KERNEL_ENTRY KERNEL_LOADADDR UBOOT_PATH \ - IMAGE_SIZE DEVICE_PACKAGES DEVICE_VENDOR DEVICE_MODEL DEVICE_VARIANT \ + DEVICE_IMG_PREFIX SOC BOARD_NAME UIMAGE_MAGIC UIMAGE_NAME \ + SUPPORTED_DEVICES IMAGE_METADATA KERNEL_ENTRY KERNEL_LOADADDR \ + UBOOT_PATH IMAGE_SIZE \ + DEVICE_PACKAGES DEVICE_COMPAT_VERSION DEVICE_COMPAT_MESSAGE \ + DEVICE_VENDOR DEVICE_MODEL DEVICE_VARIANT \ DEVICE_ALT0_VENDOR DEVICE_ALT0_MODEL DEVICE_ALT0_VARIANT \ DEVICE_ALT1_VENDOR DEVICE_ALT1_MODEL DEVICE_ALT1_VARIANT \ DEVICE_ALT2_VENDOR DEVICE_ALT2_MODEL DEVICE_ALT2_VARIANT @@ -473,6 +478,7 @@ define Device/Build/initramfs $$(if $$(CONFIG_JSON_OVERVIEW_IMAGE_INFO), $(BUILD_DIR)/json_info_files/$$(KERNEL_INITRAMFS_IMAGE).json,)) $(KDIR)/$$(KERNEL_INITRAMFS_NAME):: image_prepare + $(1)-images: $$(if $$(KERNEL_INITRAMFS),$(BIN_DIR)/$$(KERNEL_INITRAMFS_IMAGE)) $(BIN_DIR)/$$(KERNEL_INITRAMFS_IMAGE): $(KDIR)/tmp/$$(KERNEL_INITRAMFS_IMAGE) cp $$^ $$@ @@ -487,10 +493,10 @@ define Device/Build/initramfs DEVICE_ID="$(1)" \ BIN_DIR="$(BIN_DIR)" \ SOURCE_DATE_EPOCH=$(SOURCE_DATE_EPOCH) \ - IMAGE_NAME="$$(notdir $$^)" \ + DEVICE_IMG_NAME="$$(notdir $$^)" \ IMAGE_TYPE="kernel" \ IMAGE_FILESYSTEM="initramfs" \ - IMAGE_PREFIX="$$(IMAGE_PREFIX)" \ + DEVICE_IMG_PREFIX="$$(DEVICE_IMG_PREFIX)" \ DEVICE_VENDOR="$$(DEVICE_VENDOR)" \ DEVICE_MODEL="$$(DEVICE_MODEL)" \ DEVICE_VARIANT="$$(DEVICE_VARIANT)" \ @@ -562,9 +568,10 @@ endef define Device/Build/image GZ_SUFFIX := $(if $(filter %dtb %gz,$(2)),,$(if $(and $(findstring ext4,$(1)),$(CONFIG_TARGET_IMAGES_GZIP)),.gz)) $$(_TARGET): $(if $(CONFIG_JSON_OVERVIEW_IMAGE_INFO), \ - $(BUILD_DIR)/json_info_files/$(call IMAGE_NAME,$(1),$(2)).json, \ - $(BIN_DIR)/$(call IMAGE_NAME,$(1),$(2))$$(GZ_SUFFIX)) - $(eval $(call Device/Export,$(KDIR)/tmp/$(call IMAGE_NAME,$(1),$(2)),$(1))) + $(BUILD_DIR)/json_info_files/$(call DEVICE_IMG_NAME,$(1),$(2)).json, \ + $(BIN_DIR)/$(call DEVICE_IMG_NAME,$(1),$(2))$$(GZ_SUFFIX)) + $(eval $(call Device/Export,$(KDIR)/tmp/$(call DEVICE_IMG_NAME,$(1),$(2)),$(1))) + $(3)-images: $(BIN_DIR)/$(call DEVICE_IMG_NAME,$(1),$(2))$$(GZ_SUFFIX) ROOTFS/$(1)/$(3) := \ $(KDIR)/root.$(1)$$(strip \ @@ -575,28 +582,28 @@ define Device/Build/image ifndef IB $$(ROOTFS/$(1)/$(3)): $(if $(TARGET_PER_DEVICE_ROOTFS),target-dir-$$(ROOTFS_ID/$(3))) endif - $(KDIR)/tmp/$(call IMAGE_NAME,$(1),$(2)): $$(KDIR_KERNEL_IMAGE) $$(ROOTFS/$(1)/$(3)) + $(KDIR)/tmp/$(call DEVICE_IMG_NAME,$(1),$(2)): $$(KDIR_KERNEL_IMAGE) $$(ROOTFS/$(1)/$(3)) @rm -f $$@ [ -f $$(word 1,$$^) -a -f $$(word 2,$$^) ] $$(call concat_cmd,$(if $(IMAGE/$(2)/$(1)),$(IMAGE/$(2)/$(1)),$(IMAGE/$(2)))) - .IGNORE: $(BIN_DIR)/$(call IMAGE_NAME,$(1),$(2)) + .IGNORE: $(BIN_DIR)/$(call DEVICE_IMG_NAME,$(1),$(2)) - $(BIN_DIR)/$(call IMAGE_NAME,$(1),$(2)).gz: $(KDIR)/tmp/$(call IMAGE_NAME,$(1),$(2)) + $(BIN_DIR)/$(call DEVICE_IMG_NAME,$(1),$(2)).gz: $(KDIR)/tmp/$(call DEVICE_IMG_NAME,$(1),$(2)) gzip -c -9n $$^ > $$@ - $(BIN_DIR)/$(call IMAGE_NAME,$(1),$(2)): $(KDIR)/tmp/$(call IMAGE_NAME,$(1),$(2)) + $(BIN_DIR)/$(call DEVICE_IMG_NAME,$(1),$(2)): $(KDIR)/tmp/$(call DEVICE_IMG_NAME,$(1),$(2)) cp $$^ $$@ - $(BUILD_DIR)/json_info_files/$(call IMAGE_NAME,$(1),$(2)).json: $(BIN_DIR)/$(call IMAGE_NAME,$(1),$(2))$$(GZ_SUFFIX) + $(BUILD_DIR)/json_info_files/$(call DEVICE_IMG_NAME,$(1),$(2)).json: $(BIN_DIR)/$(call DEVICE_IMG_NAME,$(1),$(2))$$(GZ_SUFFIX) @mkdir -p $$(shell dirname $$@) DEVICE_ID="$(DEVICE_NAME)" \ BIN_DIR="$(BIN_DIR)" \ SOURCE_DATE_EPOCH=$(SOURCE_DATE_EPOCH) \ - IMAGE_NAME="$(IMAGE_NAME)" \ + DEVICE_IMG_NAME="$(DEVICE_IMG_NAME)" \ IMAGE_TYPE=$(word 1,$(subst ., ,$(2))) \ IMAGE_FILESYSTEM="$(1)" \ - IMAGE_PREFIX="$(IMAGE_PREFIX)" \ + DEVICE_IMG_PREFIX="$(DEVICE_IMG_PREFIX)" \ DEVICE_VENDOR="$(DEVICE_VENDOR)" \ DEVICE_MODEL="$(DEVICE_MODEL)" \ DEVICE_VARIANT="$(DEVICE_VARIANT)" \ @@ -621,15 +628,15 @@ define Device/Build/image endef define Device/Build/artifact - $$(_TARGET): $(BIN_DIR)/$(IMAGE_PREFIX)-$(1) - $(eval $(call Device/Export,$(KDIR)/tmp/$(IMAGE_PREFIX)-$(1))) - $(KDIR)/tmp/$(IMAGE_PREFIX)-$(1): $$(KDIR_KERNEL_IMAGE) + $$(_TARGET): $(BIN_DIR)/$(DEVICE_IMG_PREFIX)-$(1) + $(eval $(call Device/Export,$(KDIR)/tmp/$(DEVICE_IMG_PREFIX)-$(1))) + $(KDIR)/tmp/$(DEVICE_IMG_PREFIX)-$(1): $$(KDIR_KERNEL_IMAGE) $(2)-images @rm -f $$@ $$(call concat_cmd,$(ARTIFACT/$(1))) - .IGNORE: $(BIN_DIR)/$(IMAGE_PREFIX)-$(1) + .IGNORE: $(BIN_DIR)/$(DEVICE_IMG_PREFIX)-$(1) - $(BIN_DIR)/$(IMAGE_PREFIX)-$(1): $(KDIR)/tmp/$(IMAGE_PREFIX)-$(1) + $(BIN_DIR)/$(DEVICE_IMG_PREFIX)-$(1): $(KDIR)/tmp/$(DEVICE_IMG_PREFIX)-$(1) cp $$^ $$@ endef @@ -646,7 +653,7 @@ define Device/Build $$(call Device/Build/image,$$(fs),$$(image),$(1))))) $$(eval $$(foreach artifact,$$(ARTIFACTS), \ - $$(call Device/Build/artifact,$$(artifact)))) + $$(call Device/Build/artifact,$$(artifact),$(1)))) endef @@ -656,6 +663,7 @@ Target-Profile-Name: $(DEVICE_DISPLAY) Target-Profile-Packages: $(DEVICE_PACKAGES) Target-Profile-hasImageMetadata: $(if $(foreach image,$(IMAGES),$(findstring append-metadata,$(IMAGE/$(image)))),1,0) Target-Profile-SupportedDevices: $(SUPPORTED_DEVICES) +$(if $(BROKEN),Target-Profile-Broken: $(BROKEN)) $(if $(DEFAULT),Target-Profile-Default: $(DEFAULT)) Target-Profile-Description: $(DEVICE_DESCRIPTION) diff --git a/include/kernel-build.mk b/include/kernel-build.mk index 32eb545b57862f..66a9f64c802959 100644 --- a/include/kernel-build.mk +++ b/include/kernel-build.mk @@ -160,7 +160,11 @@ define BuildKernel rm -f $(STAMP_CONFIGURED) $(LINUX_RECONF_CMD) > $(LINUX_DIR)/.config $(_SINGLE)$(KERNEL_MAKE) \ - $(if $(findstring Darwin,$(HOST_OS)),HOST_LOADLIBES="-L$(STAGING_DIR_HOST)/lib -lncurses") \ + $(if $(findstring Darwin,$(HOST_OS)), \ + HOST_LOADLIBES="-L$(STAGING_DIR_HOST)/lib -lncurses" \ + HOSTLDLIBS_mconf="-L$(STAGING_DIR_HOST)/lib -lncurses" \ + filechk_conf_cfg=" :" \ + ) \ YACC=$(STAGING_DIR_HOST)/bin/bison \ $$@ $(call LINUX_RECONF_DIFF,$(LINUX_DIR)/.config) > $(LINUX_RECONFIG_TARGET) diff --git a/include/kernel-defaults.mk b/include/kernel-defaults.mk index bfa6a5ed94d2dc..f2864d6a10ff10 100644 --- a/include/kernel-defaults.mk +++ b/include/kernel-defaults.mk @@ -170,7 +170,7 @@ ifeq ($(CONFIG_TARGET_ROOTFS_INITRAMFS_SEPARATE),y) ifeq ($(CONFIG_EXTERNAL_CPIO),y) $(CP) $(CONFIG_EXTERNAL_CPIO) $(KERNEL_BUILD_DIR)/initrd.cpio else - ( cd $(TARGET_DIR); find . | cpio -o -H newc -R root:root > $(KERNEL_BUILD_DIR)/initrd.cpio ) + ( cd $(TARGET_DIR); find . | $(STAGING_DIR_HOST)/bin/cpio -o -H newc -R 0:0 > $(KERNEL_BUILD_DIR)/initrd.cpio ) endif $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_BZIP2),bzip2 -9 -c < $(KERNEL_BUILD_DIR)/initrd.cpio > $(KERNEL_BUILD_DIR)/initrd.cpio.bzip2) $(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_GZIP),gzip -f -S .gzip -9n $(KERNEL_BUILD_DIR)/initrd.cpio) diff --git a/include/logo.png b/include/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..bb208dd90590a273fa9b2b138f2d2b64cb3d7de1 GIT binary patch literal 81750 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 z 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 T9Wu5N;J=4DM)zy9?4$n!WR%<> literal 0 HcmV?d00001 diff --git a/include/logo.svg b/include/logo.svg new file mode 100644 index 00000000000000..ff4b8adfc704b8 --- /dev/null +++ b/include/logo.svg @@ -0,0 +1,398 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/include/netfilter.mk b/include/netfilter.mk index 36de07d58ff560..803749d931c925 100644 --- a/include/netfilter.mk +++ b/include/netfilter.mk @@ -105,10 +105,6 @@ $(eval $(call nf_add,IPT_PHYSDEV,CONFIG_NETFILTER_XT_MATCH_PHYSDEV, $(P_XT)xt_ph $(eval $(call nf_add,IPT_FILTER,CONFIG_NETFILTER_XT_MATCH_STRING, $(P_XT)xt_string)) $(eval $(call nf_add,IPT_FILTER,CONFIG_NETFILTER_XT_MATCH_BPF, $(P_XT)xt_bpf)) -# imq - -$(eval $(call nf_add,IPT_IMQ,CONFIG_IP_NF_TARGET_IMQ, $(P_V4)ipt_IMQ)) -$(eval $(call nf_add,IPT_IMQ,CONFIG_NETFILTER_XT_TARGET_IMQ, $(P_XT)xt_IMQ)) # ipopt diff --git a/include/package-ipkg.mk b/include/package-ipkg.mk index b066e116f7acf1..19f09c2311d941 100644 --- a/include/package-ipkg.mk +++ b/include/package-ipkg.mk @@ -99,7 +99,7 @@ _endef=endef ifeq ($(DUMP),) define BuildTarget/ipkg - ABIV_$(1):=$(if $(filter-out kmod-%,$(1)),$(ABI_VERSION)) + ABIV_$(1):=$(call FormatABISuffix,$(1),$(ABI_VERSION)) PDIR_$(1):=$(call FeedPackageDir,$(1)) IPKG_$(1):=$$(PDIR_$(1))/$(1)$$(ABIV_$(1))_$(VERSION)_$(PKGARCH).ipk IDIR_$(1):=$(PKG_BUILD_DIR)/ipkg-$(PKGARCH)/$(1) diff --git a/include/package.mk b/include/package.mk index fc1bb7d67ef0d1..db0a869dab62b9 100644 --- a/include/package.mk +++ b/include/package.mk @@ -223,7 +223,7 @@ define Build/CoreTargets $(STAMP_INSTALLED) : export PATH=$$(TARGET_PATH_PKG) $(STAMP_INSTALLED): $(STAMP_BUILT) rm -rf $(TMP_DIR)/stage-$(PKG_DIR_NAME) - mkdir -p $(TMP_DIR)/stage-$(PKG_DIR_NAME)/host $(STAGING_DIR)/packages $(STAGING_DIR_HOST)/packages + mkdir -p $(TMP_DIR)/stage-$(PKG_DIR_NAME)/host $(STAGING_DIR)/packages $(foreach hook,$(Hooks/InstallDev/Pre),\ $(call $(hook),$(TMP_DIR)/stage-$(PKG_DIR_NAME),$(TMP_DIR)/stage-$(PKG_DIR_NAME)/host)$(sep)\ ) @@ -342,9 +342,9 @@ clean-build: $(if $(wildcard $(PKG_BUILD_DIR)/.autoremove),force-clean-build) clean: force-clean-build $(CleanStaging) - $(call Build/UninstallDev,$(STAGING_DIR),$(STAGING_DIR_HOST)) + $(call Build/UninstallDev,$(STAGING_DIR),$(STAGING_DIR)/host) $(Build/Clean) - rm -f $(STAGING_DIR)/packages/$(STAGING_FILES_LIST) $(STAGING_DIR_HOST)/packages/$(STAGING_FILES_LIST) + rm -f $(STAGING_DIR)/packages/$(STAGING_FILES_LIST) dist: $(Build/Dist) diff --git a/include/prereq-build.mk b/include/prereq-build.mk index 639d1ad0face54..8fbf6f22c4e535 100644 --- a/include/prereq-build.mk +++ b/include/prereq-build.mk @@ -102,9 +102,9 @@ $(eval $(call SetupHostCommand,patch,Please install GNU 'patch', \ gpatch --version 2>&1 | grep 'Free Software Foundation', \ patch --version 2>&1 | grep 'Free Software Foundation')) -$(eval $(call SetupHostCommand,diff,Please install diffutils, \ - gdiff --version 2>&1 | grep diff, \ - diff --version 2>&1 | grep diff)) +$(eval $(call SetupHostCommand,diff,Please install GNU diffutils, \ + gdiff --version 2>&1 | grep GNU, \ + diff --version 2>&1 | grep GNU)) $(eval $(call SetupHostCommand,cp,Please install GNU fileutils, \ gcp --help 2>&1 | grep 'Copy SOURCE', \ diff --git a/include/shell.sh b/include/shell.sh old mode 100755 new mode 100644 diff --git a/include/target.mk b/include/target.mk index 8b20cda2edb754..c2651e5a59d124 100644 --- a/include/target.mk +++ b/include/target.mk @@ -10,13 +10,22 @@ __target_inc=1 DEVICE_TYPE?=router # Default packages - the really basic set -DEFAULT_PACKAGES:=base-files libc libgcc dropbear mtd uci opkg netifd fstools uclient-fetch logd urandom-seed urngd \ -block-mount coremark kmod-nf-nathelper kmod-nf-nathelper-extra kmod-ipt-raw wget-ssl libustream-openssl ca-certificates \ -default-settings luci luci-app-ddns luci-app-upnp luci-app-adbyby-plus luci-app-autoreboot luci-newapi \ -luci-app-filetransfer luci-app-vsftpd luci-app-ssr-plus luci-app-unblockmusic \ -luci-app-arpbind luci-app-vlmcsd luci-app-wol luci-app-ramfree \ -luci-app-sfe luci-app-nlbwmon luci-app-accesscontrol luci-app-cpufreq \ -ddns-scripts_aliyun ddns-scripts_dnspod +DEFAULT_PACKAGES:=\ + base-files \ + ca-bundle \ + dropbear \ + fstools \ + libc \ + libgcc \ + libustream-openssl \ + logd \ + mtd \ + netifd \ + opkg \ + uci \ + uclient-fetch \ + urandom-seed \ + urngd ifneq ($(CONFIG_SELINUX),) DEFAULT_PACKAGES+=busybox-selinux procd-selinux @@ -24,11 +33,28 @@ else DEFAULT_PACKAGES+=busybox procd endif +# For the basic set +DEFAULT_PACKAGES.basic:= # For nas targets -DEFAULT_PACKAGES.nas:=block-mount fdisk lsblk mdadm +DEFAULT_PACKAGES.nas:=\ + block-mount \ + fdisk \ + lsblk \ + mdadm # For router targets -DEFAULT_PACKAGES.router:=dnsmasq-full iptables ppp ppp-mod-pppoe firewall -DEFAULT_PACKAGES.bootloader:= +DEFAULT_PACKAGES.router:=\ + dnsmasq-full \ + firewall \ + iptables \ + kmod-ipt-offload \ + ppp \ + ppp-mod-pppoe \ + luci-newapi block-mount coremark kmod-nf-nathelper kmod-nf-nathelper-extra kmod-ipt-raw wget-ssl \ + default-settings luci luci-app-ddns luci-app-upnp luci-app-adbyby-plus luci-app-autoreboot luci-newapi \ + luci-app-filetransfer luci-app-vsftpd luci-app-ssr-plus luci-app-unblockmusic \ + luci-app-arpbind luci-app-vlmcsd luci-app-wol luci-app-ramfree \ + luci-app-flowoffload luci-app-nlbwmon luci-app-accesscontrol luci-app-cpufreq \ + ddns-scripts_aliyun ddns-scripts_dnspod ifneq ($(DUMP),) all: dumpinfo diff --git a/include/u-boot.mk b/include/u-boot.mk index ec9fb15b6ce27d..c0a1e87bf3d61a 100644 --- a/include/u-boot.mk +++ b/include/u-boot.mk @@ -44,7 +44,8 @@ TARGET_DEP = TARGET_$(BUILD_TARGET)$(if $(BUILD_SUBTARGET),_$(BUILD_SUBTARGET)) UBOOT_MAKE_FLAGS = \ HOSTCC="$(HOSTCC)" \ HOSTCFLAGS="$(HOST_CFLAGS) $(HOST_CPPFLAGS) -std=gnu11" \ - HOSTLDFLAGS="$(HOST_LDFLAGS)" + HOSTLDFLAGS="$(HOST_LDFLAGS)" \ + $(if $(findstring c,$(OPENWRT_VERBOSE)),V=1,V='') define Build/U-Boot/Target $(eval $(call U-Boot/Init,$(1))) diff --git a/include/unpack.mk b/include/unpack.mk index 6a56b8e742fd15..ebece69978203d 100644 --- a/include/unpack.mk +++ b/include/unpack.mk @@ -40,7 +40,7 @@ ifeq ($(strip $(UNPACK_CMD)),) UNPACK_CMD=$(DECOMPRESS_CMD) $(TAR_CMD) endif ifeq ($(EXT),cpio) - UNPACK_CMD=$(DECOMPRESS_CMD) (cd $(1)/..; cpio -i -d) + UNPACK_CMD=$(DECOMPRESS_CMD) (cd $(1)/..; $(STAGING_DIR_HOST)/bin/cpio -i -d) endif ifeq ($(EXT),zip) UNPACK_CMD=$(UNZIP_CMD) diff --git a/include/version.mk b/include/version.mk index bbc69081871917..f39e35cd099a7d 100644 --- a/include/version.mk +++ b/include/version.mk @@ -23,13 +23,13 @@ PKG_CONFIG_DEPENDS += \ sanitize = $(call tolower,$(subst _,-,$(subst $(space),-,$(1)))) VERSION_NUMBER:=$(call qstrip,$(CONFIG_VERSION_NUMBER)) -VERSION_NUMBER:=$(if $(VERSION_NUMBER),$(VERSION_NUMBER),21.02-SNAPSHOT) +VERSION_NUMBER:=$(if $(VERSION_NUMBER),$(VERSION_NUMBER),SNAPSHOT) VERSION_CODE:=$(call qstrip,$(CONFIG_VERSION_CODE)) VERSION_CODE:=$(if $(VERSION_CODE),$(VERSION_CODE),$(REVISION)) VERSION_REPO:=$(call qstrip,$(CONFIG_VERSION_REPO)) -VERSION_REPO:=$(if $(VERSION_REPO),$(VERSION_REPO),https://downloads.openwrt.org/releases/21.02-SNAPSHOT) +VERSION_REPO:=$(if $(VERSION_REPO),$(VERSION_REPO),https://downloads.openwrt.org/snapshots) VERSION_DIST:=$(call qstrip,$(CONFIG_VERSION_DIST)) VERSION_DIST:=$(if $(VERSION_DIST),$(VERSION_DIST),OpenWrt) @@ -105,3 +105,4 @@ VERSION_SED_SCRIPT:=$(SED) 's,%U,$(call sed_escape,$(VERSION_REPO)),g' \ -e 's,%s,$(call sed_escape,$(VERSION_SUPPORT_URL)),g' \ -e 's,%P,$(call sed_escape,$(VERSION_PRODUCT)),g' \ -e 's,%h,$(call sed_escape,$(VERSION_HWREV)),g' + diff --git a/package/base-files/Makefile b/package/base-files/Makefile index 89a8551ccd1000..d8d093a3068d0c 100644 --- a/package/base-files/Makefile +++ b/package/base-files/Makefile @@ -47,6 +47,7 @@ define Package/base-files/conffiles /etc/config/ /etc/config/network /etc/config/system +/etc/crontabs/ /etc/dropbear/ /etc/ethers /etc/group @@ -108,12 +109,14 @@ ifdef CONFIG_SIGNED_PACKAGES endef +ifndef CONFIG_BUILDBOT define Package/base-files/install-key mkdir -p $(1)/etc/opkg/keys $(CP) $(BUILD_KEY).pub $(1)/etc/opkg/keys/`$(STAGING_DIR_HOST)/bin/usign -F -p $(BUILD_KEY).pub` endef endif +endif ifeq ($(CONFIG_NAND_SUPPORT),) define Package/base-files/nand-support @@ -189,12 +192,19 @@ define Package/base-files/install $(if $(CONFIG_INCLUDE_CONFIG), \ echo -e "# Build configuration for board $(BOARD)/$(SUBTARGET)/$(PROFILE)\n" >$(1)/etc/build.config; \ - cat $(BIN_DIR)/config.seed >>$(1)/etc/build.config) + cat $(BIN_DIR)/config.buildinfo >>$(1)/etc/build.config; \ + cat $(BIN_DIR)/feeds.buildinfo >>$(1)/etc/build.feeds; \ + cat $(BIN_DIR)/version.buildinfo >>$(1)/etc/build.version) $(if $(CONFIG_CLEAN_IPKG),, \ mkdir -p $(1)/etc/opkg; \ $(call FeedSourcesAppend,$(1)/etc/opkg/distfeeds.conf); \ $(VERSION_SED_SCRIPT) $(1)/etc/opkg/distfeeds.conf) + $(if $(CONFIG_IPK_FILES_CHECKSUMS),, \ + rm -f $(1)/sbin/pkg_check) + + $(if $(CONFIG_TARGET_PREINIT_DISABLE_FAILSAFE), \ + rm -f $(1)/etc/banner.failsafe,) endef ifneq ($(DUMP),1) diff --git a/package/base-files/files/bin/board_detect b/package/base-files/files/bin/board_detect index 840bd0178d1410..94f45bec53a70a 100755 --- a/package/base-files/files/bin/board_detect +++ b/package/base-files/files/bin/board_detect @@ -6,7 +6,7 @@ CFG=$1 [ -d "/etc/board.d/" -a ! -s "$CFG" ] && { for a in $(ls /etc/board.d/*); do - [ -x $a ] || continue; + [ -s $a ] || continue; $(. $a) done } diff --git a/package/base-files/files/bin/config_generate b/package/base-files/files/bin/config_generate index 3cd0b3f60abc35..56f6c4423b342b 100755 --- a/package/base-files/files/bin/config_generate +++ b/package/base-files/files/bin/config_generate @@ -109,26 +109,17 @@ generate_network() { ports="$ifname" } - [ -n "$ports" -a -z "$bridge" ] && { - uci -q batch <<-EOF - add network device - set network.@device[-1].name='br-$1' - set network.@device[-1].type='bridge' - set network.@device[-1].macaddr='$macaddr' - EOF - for port in $ports; do uci add_list network.@device[-1].ports="$port"; done - ifname=br-$1 - type= - macaddr="" + [ -n "$ports" ] && { + type="bridge" + ifname="$ports" } [ -n "$bridge" ] && { - [ -z "$ports" ] && ports="$ifname" if [ -z "$vlan" ]; then bridge_vlan_id=$((bridge_vlan_id + 1)) vlan=$bridge_vlan_id fi - generate_bridge_vlan $1 $bridge "$ports" $vlan + generate_bridge_vlan $1 $bridge "$ifname" $vlan ifname=$bridge.$vlan type="" } @@ -306,10 +297,10 @@ generate_static_system() { set system.ntp='timeserver' set system.ntp.enabled='1' set system.ntp.enable_server='0' - add_list system.ntp.server='ntp1.aliyun.com' - add_list system.ntp.server='time1.cloud.tencent.com' - add_list system.ntp.server='time.ustc.edu.cn' - add_list system.ntp.server='pool.ntp.org' + add_list system.ntp.server='0.openwrt.pool.ntp.org' + add_list system.ntp.server='1.openwrt.pool.ntp.org' + add_list system.ntp.server='2.openwrt.pool.ntp.org' + add_list system.ntp.server='3.openwrt.pool.ntp.org' EOF if json_is_a system object; then @@ -319,6 +310,13 @@ generate_static_system() { uci -q set "system.@system[-1].hostname=$hostname" fi + local compat_version + if json_get_var compat_version compat_version; then + uci -q set "system.@system[-1].compat_version=$compat_version" + else + uci -q set "system.@system[-1].compat_version=1.0" + fi + if json_is_a ntpserver array; then local keys key json_get_keys keys ntpserver @@ -481,6 +479,8 @@ generate_gpioswitch() { json_init json_load "$(cat ${CFG})" +umask 077 + if [ ! -s /etc/config/network ]; then bridge_name="" touch /etc/config/network diff --git a/package/base-files/files/etc/bench.log b/package/base-files/files/etc/bench.log deleted file mode 100644 index e69de29bb2d1d6..00000000000000 diff --git a/package/base-files/files/etc/board.d/99-default_network b/package/base-files/files/etc/board.d/99-default_network old mode 100755 new mode 100644 index d70aa352b9214a..49d2a3b3544b07 --- a/package/base-files/files/etc/board.d/99-default_network +++ b/package/base-files/files/etc/board.d/99-default_network @@ -1,4 +1,3 @@ -#!/bin/sh # # Copyright (C) 2013-2015 OpenWrt.org # diff --git a/package/base-files/files/etc/diag.sh b/package/base-files/files/etc/diag.sh old mode 100755 new mode 100644 diff --git a/package/base-files/files/etc/hotplug.d/net/00-sysctl b/package/base-files/files/etc/hotplug.d/net/00-sysctl old mode 100755 new mode 100644 diff --git a/package/base-files/files/etc/init.d/boot b/package/base-files/files/etc/init.d/boot index 974b68860f68a2..a1e8e828dd2b17 100755 --- a/package/base-files/files/etc/init.d/boot +++ b/package/base-files/files/etc/init.d/boot @@ -33,7 +33,6 @@ boot() { mkdir -p /tmp/resolv.conf.d touch /tmp/resolv.conf.d/resolv.conf.auto ln -sf /tmp/resolv.conf.d/resolv.conf.auto /tmp/resolv.conf - ln -sf /tmp/resolv.conf.d/resolv.conf.auto /tmp/resolv.conf.auto grep -q debugfs /proc/filesystems && /bin/mount -o noatime -t debugfs debugfs /sys/kernel/debug grep -q bpf /proc/filesystems && /bin/mount -o nosuid,nodev,noexec,noatime,mode=0700 -t bpf bpffs /sys/fs/bpf grep -q pstore /proc/filesystems && /bin/mount -o noatime -t pstore pstore /sys/fs/pstore diff --git a/package/base-files/files/etc/profile b/package/base-files/files/etc/profile index 9a3ac069a20ecb..0beff1608f607c 100644 --- a/package/base-files/files/etc/profile +++ b/package/base-files/files/etc/profile @@ -1,4 +1,3 @@ -#!/bin/sh [ -e /tmp/.failsafe ] && export FAILSAFE=1 [ -f /etc/banner ] && cat /etc/banner @@ -13,6 +12,7 @@ export PATH="%PATH%" export HOME=$(grep -e "^${USER:-root}:" /etc/passwd | cut -d ":" -f 6) export HOME=${HOME:-/root} export PS1='\u@\h:\w\$ ' +export ENV=/etc/shinit case "$TERM" in xterm*|rxvt*) @@ -20,16 +20,6 @@ case "$TERM" in ;; esac -[ -x /bin/more ] || alias more=less -[ -x /usr/bin/vim ] && alias vi=vim || alias vim=vi - -alias ll='ls -alF --color=auto' - -[ -z "$KSH_VERSION" -o \! -s /etc/mkshrc ] || . /etc/mkshrc - -[ -x /usr/bin/arp -o -x /sbin/arp ] || arp() { cat /proc/net/arp; } -[ -x /usr/bin/ldd ] || ldd() { LD_TRACE_LOADED_OBJECTS=1 $*; } - [ -n "$FAILSAFE" ] || { for FILE in /etc/profile.d/*.sh; do [ -e "$FILE" ] && . "$FILE" @@ -48,12 +38,3 @@ in order to prevent unauthorized SSH logins. -------------------------------------------------- EOF fi - -service() { - [ -f "/etc/init.d/$1" ] || { - echo "service "'"'"$1"'"'" not found, the following services are available:" - ls "/etc/init.d" - return 1 - } - /etc/init.d/$@ -} diff --git a/package/base-files/files/etc/rc.local b/package/base-files/files/etc/rc.local old mode 100755 new mode 100644 diff --git a/package/base-files/files/etc/shinit b/package/base-files/files/etc/shinit old mode 100755 new mode 100644 diff --git a/package/base-files/files/etc/sysctl.d/10-default.conf b/package/base-files/files/etc/sysctl.d/10-default.conf index 46d079b36bf48f..bc8c57969514e6 100644 --- a/package/base-files/files/etc/sysctl.d/10-default.conf +++ b/package/base-files/files/etc/sysctl.d/10-default.conf @@ -8,6 +8,8 @@ fs.suid_dumpable=2 fs.protected_hardlinks=1 fs.protected_symlinks=1 +net.core.bpf_jit_enable=1 + net.ipv4.conf.default.arp_ignore=1 net.ipv4.conf.all.arp_ignore=1 net.ipv4.ip_forward=1 diff --git a/package/base-files/files/etc/uci-defaults/10_migrate-shadow b/package/base-files/files/etc/uci-defaults/10_migrate-shadow old mode 100755 new mode 100644 diff --git a/package/base-files/files/etc/uci-defaults/12_network-generate-ula b/package/base-files/files/etc/uci-defaults/12_network-generate-ula old mode 100755 new mode 100644 diff --git a/package/base-files/files/etc/uci-defaults/13_fix-group-user b/package/base-files/files/etc/uci-defaults/13_fix-group-user old mode 100755 new mode 100644 diff --git a/package/base-files/files/lib/functions.sh b/package/base-files/files/lib/functions.sh index f528b10ac8cd10..d8604415cc873b 100644 --- a/package/base-files/files/lib/functions.sh +++ b/package/base-files/files/lib/functions.sh @@ -69,7 +69,7 @@ config () { local cfgtype="$1" local name="$2" - export ${NO_EXPORT:+-n} CONFIG_NUM_SECTIONS=$(($CONFIG_NUM_SECTIONS + 1)) + export ${NO_EXPORT:+-n} CONFIG_NUM_SECTIONS=$((CONFIG_NUM_SECTIONS + 1)) name="${name:-cfg$CONFIG_NUM_SECTIONS}" append CONFIG_SECTIONS "$name" export ${NO_EXPORT:+-n} CONFIG_SECTION="$name" @@ -92,7 +92,7 @@ list() { config_get len "$CONFIG_SECTION" "${varname}_LENGTH" 0 [ $len = 0 ] && append CONFIG_LIST_STATE "${CONFIG_SECTION}_${varname}" - len=$(($len + 1)) + len=$((len + 1)) config_set "$CONFIG_SECTION" "${varname}_ITEM$len" "$value" config_set "$CONFIG_SECTION" "${varname}_LENGTH" "$len" append "CONFIG_${CONFIG_SECTION}_${varname}" "$value" "$LIST_SEP" @@ -106,9 +106,14 @@ config_unset() { # config_get