diff --git a/.gitignore b/.gitignore
index f41f4beb64..080bce7ad1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -20,3 +20,8 @@ ncscope.*
__pycache__
.vscode
+
+buildroot-2021.05/buildroot-2021.05/
+buildroot-2021.05/dl/
+
+build.log
diff --git a/README.md b/README.md
index 813028478e..38f1872599 100644
--- a/README.md
+++ b/README.md
@@ -127,6 +127,7 @@ milkv-duos-emmc cv1813h_milkv_duos_emmc
milkv-duo-spinand cv1800b_milkv_duo_spinand
milkv-duo-spinor milkv-duo-spinor
milkv-duos-sd cv1813h_milkv_duos_sd
+milkv-duos-ota-sd milkv-duos-ota-sd_musl_riscv64_defconfig
```
```bash
diff --git a/build/Makefile b/build/Makefile
index 7b93fc39b5..55aa47d0ad 100644
--- a/build/Makefile
+++ b/build/Makefile
@@ -639,6 +639,33 @@ else
$(COMMON_TOOLS_PATH)/sd_tools/sd_gen_burn_image.sh $(OUTPUT_DIR)
endif
+sd_image_gz:
+ $(call print_target)
+ -${Q}rm $(OUTPUT_DIR)/fs
+ifeq ($(CONFIG_BUILDROOT_FS),y)
+ ${Q}rm $(OUTPUT_DIR)/br-rootfs -rf
+ ${Q}ln -s $(OUTPUT_DIR)/br-rootfs $(OUTPUT_DIR)/fs
+ ${Q}mkdir $(OUTPUT_DIR)/br-rootfs
+ ${Q}tar xvf $(BR_DIR)/output/$(BR_BOARD)/images/rootfs.tar.xz -C $(OUTPUT_DIR)/br-rootfs
+else
+ ${Q}ln -s $(OUTPUT_DIR)/rootfs $(OUTPUT_DIR)/fs
+endif
+ifeq ($(MV_VENDOR), milkv)
+ $(TOP_DIR)/device/gen_burn_image_sd.sh $(OUTPUT_DIR)
+else
+ $(COMMON_TOOLS_PATH)/sd_tools/sd_gen_burn_image.sh $(OUTPUT_DIR)
+endif
+ ${Q}if [ -f "$(OUTPUT_DIR)/$(MV_BOARD).img" ]; then \
+ gzip -f $(OUTPUT_DIR)/$(MV_BOARD).img; \
+ fi
+
+
+gen_swu_ota:
+ $(call print_target)
+ @echo "Generating SWU package..."
+ @$(TOP_DIR)/device/gen_swu.sh $(OUTPUT_DIR)/rootfs.ext4 $(SWU_VERSION)
+
+
jffs2:
$(call print_target)
ifeq ($(STORAGE_TYPE),spinor)
diff --git a/build/boards/cv181x/cv1813h_milkv_duos_ota_sd/config.json b/build/boards/cv181x/cv1813h_milkv_duos_ota_sd/config.json
new file mode 100644
index 0000000000..35b6ec4748
--- /dev/null
+++ b/build/boards/cv181x/cv1813h_milkv_duos_ota_sd/config.json
@@ -0,0 +1,9 @@
+{
+ "ddr_cfg_list": [
+ "",
+ "ddr3_1866_x16",
+ "ddr3_2133_x16",
+ "ddr_auto_x16"
+ ],
+ "board_information": "C906B + EMMC 8GB + BGA SIP 256MB"
+}
diff --git a/build/boards/cv181x/cv1813h_milkv_duos_ota_sd/cv1813h_milkv_duos_ota_sd_defconfig b/build/boards/cv181x/cv1813h_milkv_duos_ota_sd/cv1813h_milkv_duos_ota_sd_defconfig
new file mode 100644
index 0000000000..5e586eb012
--- /dev/null
+++ b/build/boards/cv181x/cv1813h_milkv_duos_ota_sd/cv1813h_milkv_duos_ota_sd_defconfig
@@ -0,0 +1,28 @@
+CONFIG_CHIP_cv1813h=y
+CONFIG_BOARD_milkv_duos_ota_sd=y
+CONFIG_DDR_CFG_ddr3_1866_x16=y
+CONFIG_ARCH="riscv"
+CONFIG_CROSS_COMPILE="riscv64-unknown-linux-musl-"
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_KERNEL_ENTRY_HACK=y
+CONFIG_KERNEL_ENTRY_HACK_ADDR="0x80200000"
+CONFIG_TOOLCHAIN_MUSL_RISCV64=y
+CONFIG_FLASH_SIZE_SHRINK=y
+CONFIG_BOOT_IMAGE_SINGLE_DTB=y
+CONFIG_OD_CLK_SEL=y
+CONFIG_STORAGE_TYPE_sd=y
+CONFIG_SENSOR_GCORE_GC2053=y
+CONFIG_SENSOR_GCORE_GC2083=y
+CONFIG_SENSOR_GCORE_GC4653=y
+CONFIG_SENSOR_OV_OV5647=y
+CONFIG_SENSOR_SMS_SC035HGS=y
+CONFIG_SENSOR_SMS_SC200AI=y
+CONFIG_MIPI_PANEL_MILKV_8HD=y
+CONFIG_UBOOT_2021_10=y
+CONFIG_KERNEL_SRC_5.10=y
+CONFIG_KERNEL_LZMA=y
+CONFIG_SKIP_RAMDISK=y
+CONFIG_BUILDROOT_FS=y
+CONFIG_ENABLE_FREERTOS=y
+CONFIG_ENABLE_RTOS_DUMP_PRINT=y
+CONFIG_DUMP_PRINT_SZ_IDX=17
diff --git a/build/boards/cv181x/cv1813h_milkv_duos_ota_sd/dts_riscv/cv1813h_milkv_duos_ota_sd.dts b/build/boards/cv181x/cv1813h_milkv_duos_ota_sd/dts_riscv/cv1813h_milkv_duos_ota_sd.dts
new file mode 100644
index 0000000000..1ea1d46320
--- /dev/null
+++ b/build/boards/cv181x/cv1813h_milkv_duos_ota_sd/dts_riscv/cv1813h_milkv_duos_ota_sd.dts
@@ -0,0 +1,109 @@
+/dts-v1/;
+#include "cv181x_base_riscv.dtsi"
+#include "cv181x_asic_bga.dtsi"
+#include "cv181x_asic_sd.dtsi"
+#include "cv181x_default_memmap.dtsi"
+
+&mipi_rx{
+ snsr-reset = <&porta 2 GPIO_ACTIVE_LOW>, <&porta 2 GPIO_ACTIVE_LOW>, <&porta 2 GPIO_ACTIVE_LOW>;
+};
+
+&dac{
+ /delete-property/ mute-gpio-l;
+ /delete-property/ mute-gpio-r;
+};
+
+&i2c0 {
+ status = "disabled";
+};
+
+&i2c1 {
+ status = "okay";
+};
+
+&i2c2 {
+ status = "okay";
+};
+
+&i2c3 {
+ status = "okay";
+};
+
+&i2c4 {
+ status = "okay";
+
+ gt9xx: gt9xx@14 {
+ compatible = "goodix,gt9xx";
+ reg = <0x14>;
+ goodix,irq-gpio = <&porta 18 0>;
+ goodix,rst-gpio = <&porta 19 GPIO_ACTIVE_HIGH>;
+ status = "okay";
+ };
+};
+
+&spi3 {
+ status = "okay";
+
+ spidev@0 {
+ status = "okay";
+ };
+};
+
+&usb {
+ vbus-gpio = <&portb 6 0>;
+};
+
+&wifisd {
+ status = "okay";
+ cap-sd-highspeed;
+ sd-uhs-sdr25;
+ sd-uhs-ddr50;
+ sd-uhs-sdr104;
+ min-frequency = <400000>;
+ max-frequency = <187500000>;
+};
+
+&wifi_pin {
+ compatible = "cvitek,wifi-pin";
+ poweron-gpio = <&porta 15 GPIO_ACTIVE_HIGH>;
+ wakeup-gpio = <&porte 7 GPIO_ACTIVE_HIGH>;
+};
+
+&uart1 {
+ status = "okay";
+};
+
+&uart2 {
+ status = "okay";
+};
+
+&uart3 {
+ status = "okay";
+};
+
+&uart4 {
+ status = "okay";
+};
+
+/* mipi dsi for u-boot */
+&vo {
+ compatible = "cvitek,vo";
+ reset-gpio = <&porte 2 GPIO_ACTIVE_LOW>;
+ pwm-gpio = <&porte 0 GPIO_ACTIVE_HIGH>;
+ power-gpio = <&porte 1 GPIO_ACTIVE_HIGH>;
+ status = "okay";
+};
+
+/* mipi dsi for kernel */
+&mipi_tx {
+ compatible = "cvitek,mipi_tx";
+ reset-gpio = <&porte 2 GPIO_ACTIVE_LOW>;
+ pwm-gpio = <&porte 0 GPIO_ACTIVE_HIGH>;
+ power-ct-gpio = <&porte 1 GPIO_ACTIVE_HIGH>;
+ status = "okay";
+};
+
+/ {
+ model = "Milk-V DuoS";
+};
+
diff --git a/build/boards/cv181x/cv1813h_milkv_duos_ota_sd/linux/cvitek_cv1813h_milkv_duos_ota_sd_defconfig b/build/boards/cv181x/cv1813h_milkv_duos_ota_sd/linux/cvitek_cv1813h_milkv_duos_ota_sd_defconfig
new file mode 100644
index 0000000000..9e6875d1f8
--- /dev/null
+++ b/build/boards/cv181x/cv1813h_milkv_duos_ota_sd/linux/cvitek_cv1813h_milkv_duos_ota_sd_defconfig
@@ -0,0 +1,3611 @@
+#
+# Automatically generated file; DO NOT EDIT.
+# Linux/riscv 5.10.4 Kernel Configuration
+#
+CONFIG_CC_VERSION_TEXT="riscv64-unknown-linux-musl-gcc (Xuantie-900 linux-5.10.4 musl gcc Toolchain V2.6.1 B-20220906) 10.2.0"
+CONFIG_CC_IS_GCC=y
+CONFIG_GCC_VERSION=100200
+CONFIG_LD_VERSION=235000000
+CONFIG_CLANG_VERSION=0
+CONFIG_LLD_VERSION=0
+CONFIG_CC_CAN_LINK=y
+CONFIG_CC_CAN_LINK_STATIC=y
+CONFIG_CC_HAS_ASM_GOTO=y
+CONFIG_CC_HAS_ASM_INLINE=y
+CONFIG_IRQ_WORK=y
+CONFIG_THREAD_INFO_IN_TASK=y
+
+#
+# General setup
+#
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+# CONFIG_COMPILE_TEST is not set
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_BUILD_SALT=""
+CONFIG_DEFAULT_INIT=""
+CONFIG_DEFAULT_HOSTNAME="(none)"
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_POSIX_MQUEUE=y
+CONFIG_POSIX_MQUEUE_SYSCTL=y
+# CONFIG_WATCH_QUEUE is not set
+CONFIG_CROSS_MEMORY_ATTACH=y
+# CONFIG_USELIB is not set
+# CONFIG_AUDIT is not set
+CONFIG_HAVE_ARCH_AUDITSYSCALL=y
+
+#
+# IRQ subsystem
+#
+CONFIG_GENERIC_IRQ_SHOW=y
+CONFIG_IRQ_DOMAIN=y
+CONFIG_IRQ_DOMAIN_HIERARCHY=y
+CONFIG_HANDLE_DOMAIN_IRQ=y
+CONFIG_SPARSE_IRQ=y
+# CONFIG_GENERIC_IRQ_DEBUGFS is not set
+# end of IRQ subsystem
+
+CONFIG_GENERIC_IRQ_MULTI_HANDLER=y
+CONFIG_ARCH_CLOCKSOURCE_INIT=y
+CONFIG_GENERIC_TIME_VSYSCALL=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+
+#
+# Timers subsystem
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ_COMMON=y
+# CONFIG_HZ_PERIODIC is not set
+CONFIG_NO_HZ_IDLE=y
+# CONFIG_NO_HZ is not set
+CONFIG_HIGH_RES_TIMERS=y
+# end of Timers subsystem
+
+# CONFIG_PREEMPT_NONE is not set
+# CONFIG_PREEMPT_VOLUNTARY is not set
+CONFIG_PREEMPT=y
+CONFIG_PREEMPT_COUNT=y
+CONFIG_PREEMPTION=y
+
+#
+# CPU/Task time and stats accounting
+#
+CONFIG_TICK_CPU_ACCOUNTING=y
+# CONFIG_VIRT_CPU_ACCOUNTING_GEN is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_PSI is not set
+# end of CPU/Task time and stats accounting
+
+#
+# RCU Subsystem
+#
+CONFIG_TREE_RCU=y
+CONFIG_PREEMPT_RCU=y
+# CONFIG_RCU_EXPERT is not set
+CONFIG_SRCU=y
+CONFIG_TREE_SRCU=y
+CONFIG_TASKS_RCU_GENERIC=y
+CONFIG_TASKS_RCU=y
+CONFIG_RCU_STALL_COMMON=y
+CONFIG_RCU_NEED_SEGCBLIST=y
+# end of RCU Subsystem
+
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+# CONFIG_IKHEADERS is not set
+CONFIG_LOG_BUF_SHIFT=15
+CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT=13
+CONFIG_GENERIC_SCHED_CLOCK=y
+
+#
+# Scheduler features
+#
+# end of Scheduler features
+
+CONFIG_CC_HAS_INT128=y
+CONFIG_ARCH_SUPPORTS_INT128=y
+# CONFIG_CGROUPS is not set
+# CONFIG_NAMESPACES is not set
+# CONFIG_CHECKPOINT_RESTORE is not set
+# CONFIG_SCHED_AUTOGROUP is not set
+CONFIG_SCHED_CVITEK=y
+# CONFIG_SYSFS_DEPRECATED is not set
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_RD_GZIP=y
+CONFIG_RD_BZIP2=y
+CONFIG_RD_LZMA=y
+CONFIG_RD_XZ=y
+CONFIG_RD_LZO=y
+CONFIG_RD_LZ4=y
+CONFIG_RD_ZSTD=y
+# CONFIG_BOOT_CONFIG is not set
+# CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_SYSCTL_EXCEPTION_TRACE=y
+CONFIG_BPF=y
+CONFIG_EXPERT=y
+CONFIG_MULTIUSER=y
+# CONFIG_SGETMASK_SYSCALL is not set
+# CONFIG_SYSFS_SYSCALL is not set
+# CONFIG_FHANDLE is not set
+CONFIG_POSIX_TIMERS=y
+CONFIG_PRINTK=y
+# CONFIG_BUG is not set
+CONFIG_ELF_CORE=y
+# CONFIG_BASE_FULL is not set
+CONFIG_FUTEX=y
+CONFIG_FUTEX_PI=y
+CONFIG_HAVE_FUTEX_CMPXCHG=y
+CONFIG_EPOLL=y
+# CONFIG_SIGNALFD is not set
+# CONFIG_TIMERFD is not set
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+# CONFIG_AIO is not set
+# CONFIG_IO_URING is not set
+# CONFIG_ADVISE_SYSCALLS is not set
+CONFIG_MEMBARRIER=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+CONFIG_KALLSYMS_BASE_RELATIVE=y
+# CONFIG_BPF_SYSCALL is not set
+# CONFIG_USERFAULTFD is not set
+CONFIG_EMBEDDED=y
+CONFIG_HAVE_PERF_EVENTS=y
+# CONFIG_PC104 is not set
+
+#
+# Kernel Performance Events And Counters
+#
+# CONFIG_PERF_EVENTS is not set
+# end of Kernel Performance Events And Counters
+
+CONFIG_VM_EVENT_COUNTERS=y
+# CONFIG_SLUB_DEBUG is not set
+CONFIG_COMPAT_BRK=y
+# CONFIG_SLAB is not set
+CONFIG_SLUB=y
+# CONFIG_SLOB is not set
+CONFIG_SLAB_MERGE_DEFAULT=y
+# CONFIG_SLAB_FREELIST_RANDOM is not set
+# CONFIG_SLAB_FREELIST_HARDENED is not set
+# CONFIG_SHUFFLE_PAGE_ALLOCATOR is not set
+CONFIG_SYSTEM_DATA_VERIFICATION=y
+# CONFIG_PROFILING is not set
+# end of General setup
+
+CONFIG_64BIT=y
+CONFIG_RISCV=y
+CONFIG_ARCH_MMAP_RND_BITS_MIN=18
+CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=8
+CONFIG_ARCH_MMAP_RND_BITS_MAX=24
+CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=17
+CONFIG_RISCV_SBI=y
+CONFIG_MMU=y
+CONFIG_ZONE_DMA32=y
+CONFIG_VA_BITS=39
+CONFIG_PA_BITS=56
+CONFIG_PAGE_OFFSET=0xffffffe000000000
+CONFIG_FORCE_MAX_ZONEORDER=10
+CONFIG_ARCH_FLATMEM_ENABLE=y
+CONFIG_ARCH_SPARSEMEM_ENABLE=y
+CONFIG_ARCH_SELECT_MEMORY_MODEL=y
+CONFIG_ARCH_WANT_GENERAL_HUGETLB=y
+CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
+CONFIG_ARCH_SUPPORTS_UPROBES=y
+CONFIG_SYS_SUPPORTS_HUGETLBFS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_GENERIC_CSUM=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_FIX_EARLYCON_MEM=y
+CONFIG_PGTABLE_LEVELS=3
+CONFIG_LOCKDEP_SUPPORT=y
+
+#
+# SoC selection
+#
+# CONFIG_SOC_SIFIVE is not set
+# CONFIG_SOC_VIRT is not set
+CONFIG_ARCH_CVITEK=y
+CONFIG_SOC_THEAD=y
+# end of SoC selection
+
+#
+# Platform type
+#
+# CONFIG_ARCH_RV32I is not set
+CONFIG_ARCH_RV64I=y
+# CONFIG_CMODEL_MEDLOW is not set
+CONFIG_CMODEL_MEDANY=y
+CONFIG_MODULE_SECTIONS=y
+# CONFIG_MAXPHYSMEM_2GB is not set
+CONFIG_MAXPHYSMEM_128GB=y
+# CONFIG_SMP is not set
+CONFIG_TUNE_GENERIC=y
+CONFIG_RISCV_ISA_C=y
+CONFIG_NO_SFENCE_VMA=y
+# CONFIG_RISCV_SWIOTLB is not set
+CONFIG_FPU=y
+CONFIG_VECTOR=y
+# CONFIG_VECTOR_1_0 is not set
+CONFIG_VECTOR_0_7=y
+# CONFIG_VECTOR_EMU is not set
+# end of Platform type
+
+#
+# Kernel features
+#
+# CONFIG_HZ_12 is not set
+# CONFIG_HZ_100 is not set
+CONFIG_HZ_250=y
+# CONFIG_HZ_300 is not set
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=250
+CONFIG_SCHED_HRTICK=y
+CONFIG_RISCV_SBI_V01=y
+# CONFIG_COMPAT is not set
+# end of Kernel features
+
+#
+# Boot options
+#
+CONFIG_CMDLINE=""
+CONFIG_EFI_STUB=y
+CONFIG_EFI=y
+# end of Boot options
+
+#
+# Power management options
+#
+# CONFIG_PM is not set
+# end of Power management options
+
+#
+# Firmware Drivers
+#
+# CONFIG_FIRMWARE_MEMMAP is not set
+# CONFIG_GOOGLE_FIRMWARE is not set
+
+#
+# EFI (Extensible Firmware Interface) Support
+#
+CONFIG_EFI_ESRT=y
+CONFIG_EFI_PARAMS_FROM_FDT=y
+CONFIG_EFI_RUNTIME_WRAPPERS=y
+CONFIG_EFI_GENERIC_STUB=y
+# CONFIG_EFI_BOOTLOADER_CONTROL is not set
+# CONFIG_EFI_CAPSULE_LOADER is not set
+# CONFIG_EFI_TEST is not set
+# CONFIG_RESET_ATTACK_MITIGATION is not set
+# CONFIG_EFI_DISABLE_PCI_DMA is not set
+# end of EFI (Extensible Firmware Interface) Support
+
+CONFIG_EFI_EARLYCON=y
+
+#
+# Tegra firmware driver
+#
+# end of Tegra firmware driver
+# end of Firmware Drivers
+
+CONFIG_ARCH_CV181X=y
+# CONFIG_ARCH_CV180X is not set
+CONFIG_ARCH_CVITEK_CHIP="cv181x"
+# CONFIG_ARCH_CV181X_PALLADIUM is not set
+# CONFIG_ARCH_CV181X_FPGA is not set
+CONFIG_ARCH_CV181X_ASIC=y
+
+#
+# General architecture-dependent options
+#
+CONFIG_SET_FS=y
+# CONFIG_KPROBES is not set
+# CONFIG_JUMP_LABEL is not set
+CONFIG_HAVE_64BIT_ALIGNED_ACCESS=y
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_HAVE_KPROBES_ON_FTRACE=y
+CONFIG_HAVE_FUNCTION_ERROR_INJECTION=y
+CONFIG_HAVE_ARCH_TRACEHOOK=y
+CONFIG_HAVE_DMA_CONTIGUOUS=y
+CONFIG_GENERIC_SMP_IDLE_THREAD=y
+CONFIG_ARCH_HAS_SET_MEMORY=y
+CONFIG_ARCH_HAS_SET_DIRECT_MAP=y
+CONFIG_HAVE_ASM_MODVERSIONS=y
+CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
+CONFIG_HAVE_PERF_REGS=y
+CONFIG_HAVE_PERF_USER_STACK_DUMP=y
+CONFIG_HAVE_ARCH_JUMP_LABEL=y
+CONFIG_HAVE_ARCH_JUMP_LABEL_RELATIVE=y
+CONFIG_HAVE_ARCH_SECCOMP=y
+CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
+CONFIG_SECCOMP=y
+CONFIG_SECCOMP_FILTER=y
+CONFIG_HAVE_STACKPROTECTOR=y
+CONFIG_STACKPROTECTOR=y
+CONFIG_STACKPROTECTOR_STRONG=y
+CONFIG_HAVE_CONTEXT_TRACKING=y
+CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y
+CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y
+CONFIG_HAVE_MOD_ARCH_SPECIFIC=y
+CONFIG_MODULES_USE_ELF_RELA=y
+CONFIG_ARCH_HAS_ELF_RANDOMIZE=y
+CONFIG_HAVE_ARCH_MMAP_RND_BITS=y
+CONFIG_ARCH_MMAP_RND_BITS=18
+CONFIG_ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT=y
+CONFIG_CLONE_BACKWARDS=y
+CONFIG_COMPAT_32BIT_TIME=y
+CONFIG_ARCH_OPTIONAL_KERNEL_RWX=y
+CONFIG_ARCH_OPTIONAL_KERNEL_RWX_DEFAULT=y
+CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
+# CONFIG_STRICT_KERNEL_RWX is not set
+CONFIG_ARCH_USE_MEMREMAP_PROT=y
+# CONFIG_LOCK_EVENT_COUNTS is not set
+
+#
+# GCOV-based kernel profiling
+#
+# CONFIG_GCOV_KERNEL is not set
+CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y
+# end of GCOV-based kernel profiling
+
+CONFIG_HAVE_GCC_PLUGINS=y
+# end of General architecture-dependent options
+
+CONFIG_RT_MUTEXES=y
+CONFIG_BASE_SMALL=1
+CONFIG_MODULES=y
+CONFIG_MODULE_FORCE_LOAD=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+# CONFIG_MODULE_SIG is not set
+# CONFIG_MODULE_COMPRESS is not set
+# CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_TRIM_UNUSED_KSYMS is not set
+CONFIG_BLOCK=y
+CONFIG_BLK_SCSI_REQUEST=y
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_BSGLIB is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
+# CONFIG_BLK_DEV_ZONED is not set
+CONFIG_BLK_CMDLINE_PARSER=y
+# CONFIG_BLK_WBT is not set
+CONFIG_BLK_DEBUG_FS=y
+# CONFIG_BLK_SED_OPAL is not set
+# CONFIG_BLK_INLINE_ENCRYPTION is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_AIX_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+CONFIG_EFI_PARTITION=y
+
+# CONFIG_SYSV68_PARTITION is not set
+CONFIG_CMDLINE_PARTITION=y
+# end of Partition Types
+
+#
+# IO Schedulers
+#
+# CONFIG_MQ_IOSCHED_DEADLINE is not set
+# CONFIG_MQ_IOSCHED_KYBER is not set
+# CONFIG_IOSCHED_BFQ is not set
+# end of IO Schedulers
+
+CONFIG_ASN1=y
+CONFIG_UNINLINE_SPIN_UNLOCK=y
+CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y
+CONFIG_ARCH_HAS_MMIOWB=y
+
+#
+# Executable file formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_ELFCORE=y
+CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y
+CONFIG_BINFMT_SCRIPT=y
+CONFIG_ARCH_HAS_BINFMT_FLAT=y
+# CONFIG_BINFMT_FLAT is not set
+# CONFIG_BINFMT_MISC is not set
+CONFIG_COREDUMP=y
+# end of Executable file formats
+
+#
+# Memory Management options
+#
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
+CONFIG_MEMORY_ISOLATION=y
+CONFIG_SPLIT_PTLOCK_CPUS=4
+CONFIG_COMPACTION=y
+# CONFIG_PAGE_REPORTING is not set
+CONFIG_MIGRATION=y
+CONFIG_CONTIG_ALLOC=y
+CONFIG_PHYS_ADDR_T_64BIT=y
+# CONFIG_KSM is not set
+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
+CONFIG_NEED_PER_CPU_KM=y
+# CONFIG_CLEANCACHE is not set
+# CONFIG_FRONTSWAP is not set
+CONFIG_CMA=y
+# CONFIG_CMA_DEBUG is not set
+# CONFIG_CMA_DEBUGFS is not set
+CONFIG_CMA_AREAS=7
+# CONFIG_ZPOOL is not set
+# CONFIG_ZBUD is not set
+CONFIG_ZSMALLOC=y
+CONFIG_ZSMALLOC_STAT=y
+CONFIG_GENERIC_EARLY_IOREMAP=y
+# CONFIG_IDLE_PAGE_TRACKING is not set
+# CONFIG_PERCPU_STATS is not set
+# CONFIG_GUP_BENCHMARK is not set
+CONFIG_ARCH_HAS_PTE_SPECIAL=y
+# end of Memory Management options
+
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+# CONFIG_PACKET_DIAG is not set
+CONFIG_UNIX=y
+CONFIG_UNIX_SCM=y
+# CONFIG_UNIX_DIAG is not set
+# CONFIG_TLS is not set
+# CONFIG_XFRM_USER is not set
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE_DEMUX is not set
+CONFIG_NET_IP_TUNNEL=y
+CONFIG_IP_MROUTE_COMMON=y
+# CONFIG_IP_MROUTE is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_NET_IPVTI is not set
+# CONFIG_NET_FOU is not set
+# CONFIG_NET_FOU_IP_TUNNELS is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+CONFIG_INET_TUNNEL=y
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+CONFIG_IPV6=y
+CONFIG_IPV6_ROUTER_PREF=y
+CONFIG_IPV6_ROUTE_INFO=y
+CONFIG_IPV6_OPTIMISTIC_DAD=y
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
+# CONFIG_IPV6_MIP6 is not set
+# CONFIG_IPV6_VTI is not set
+CONFIG_IPV6_SIT=y
+# CONFIG_IPV6_SIT_6RD is not set
+CONFIG_IPV6_NDISC_NODETYPE=y
+# CONFIG_IPV6_TUNNEL is not set
+# CONFIG_IPV6_MULTIPLE_TABLES is not set
+CONFIG_IPV6_MROUTE=y
+# CONFIG_IPV6_MROUTE_MULTIPLE_TABLES is not set
+# CONFIG_IPV6_PIMSM_V2 is not set
+# CONFIG_IPV6_SEG6_LWTUNNEL is not set
+# CONFIG_IPV6_SEG6_HMAC is not set
+# CONFIG_IPV6_RPL_LWTUNNEL is not set
+# CONFIG_MPTCP is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETWORK_PHY_TIMESTAMPING is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_BPFILTER is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_RDS is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_L2TP is not set
+# CONFIG_BRIDGE is not set
+CONFIG_HAVE_NET_DSA=y
+# CONFIG_NET_DSA is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_PHONET is not set
+# CONFIG_6LOWPAN is not set
+# CONFIG_IEEE802154 is not set
+# CONFIG_NET_SCHED is not set
+# CONFIG_DCB is not set
+# CONFIG_DNS_RESOLVER is not set
+# CONFIG_BATMAN_ADV is not set
+# CONFIG_OPENVSWITCH is not set
+# CONFIG_VSOCKETS is not set
+# CONFIG_NETLINK_DIAG is not set
+# CONFIG_MPLS is not set
+# CONFIG_NET_NSH is not set
+# CONFIG_HSR is not set
+# CONFIG_NET_SWITCHDEV is not set
+# CONFIG_NET_L3_MASTER_DEV is not set
+# CONFIG_QRTR is not set
+# CONFIG_NET_NCSI is not set
+CONFIG_NET_RX_BUSY_POLL=y
+CONFIG_BQL=y
+# CONFIG_BPF_JIT is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# end of Network testing
+# end of Networking options
+
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+CONFIG_BT=y
+CONFIG_BT_BREDR=y
+CONFIG_BT_RFCOMM=y
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=y
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=y
+CONFIG_BT_HS=y
+CONFIG_BT_LE=y
+# CONFIG_BT_MSFTEXT is not set
+CONFIG_BT_DEBUGFS=y
+# CONFIG_BT_SELFTEST is not set
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIBTUSB is not set
+# CONFIG_BT_HCIBTSDIO is not set
+CONFIG_BT_HCIUART=y
+CONFIG_BT_HCIUART_H4=y
+# CONFIG_BT_HCIUART_BCSP is not set
+# CONFIG_BT_HCIUART_ATH3K is not set
+# CONFIG_BT_HCIUART_INTEL is not set
+# CONFIG_BT_HCIUART_AG6XX is not set
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_BT_MRVL is not set
+# CONFIG_BT_MTKSDIO is not set
+# end of Bluetooth device drivers
+
+# CONFIG_AF_RXRPC is not set
+# CONFIG_AF_KCM is not set
+CONFIG_WIRELESS=y
+CONFIG_CFG80211=y
+# CONFIG_NL80211_TESTMODE is not set
+# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set
+# CONFIG_CFG80211_CERTIFICATION_ONUS is not set
+CONFIG_CFG80211_REQUIRE_SIGNED_REGDB=y
+CONFIG_CFG80211_USE_KERNEL_REGDB_KEYS=y
+CONFIG_CFG80211_DEFAULT_PS=y
+# CONFIG_CFG80211_DEBUGFS is not set
+CONFIG_CFG80211_CRDA_SUPPORT=y
+# CONFIG_CFG80211_WEXT is not set
+# CONFIG_MAC80211 is not set
+CONFIG_MAC80211_STA_HASH_MAX_SIZE=0
+# CONFIG_WIMAX is not set
+CONFIG_RFKILL=y
+# CONFIG_RFKILL_INPUT is not set
+# CONFIG_RFKILL_GPIO is not set
+# CONFIG_NET_9P is not set
+# CONFIG_CAIF is not set
+# CONFIG_CEPH_LIB is not set
+# CONFIG_NFC is not set
+# CONFIG_PSAMPLE is not set
+# CONFIG_NET_IFE is not set
+# CONFIG_LWTUNNEL is not set
+CONFIG_DST_CACHE=y
+CONFIG_GRO_CELLS=y
+CONFIG_PAGE_POOL=y
+# CONFIG_FAILOVER is not set
+CONFIG_ETHTOOL_NETLINK=y
+CONFIG_HAVE_EBPF_JIT=y
+
+#
+# Device Drivers
+#
+CONFIG_HAVE_PCI=y
+# CONFIG_PCI is not set
+# CONFIG_PCCARD is not set
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER=y
+CONFIG_UEVENT_HELPER_PATH=""
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+
+#
+# Firmware loader
+#
+CONFIG_FW_LOADER=y
+CONFIG_EXTRA_FIRMWARE=""
+# CONFIG_FW_LOADER_USER_HELPER is not set
+# CONFIG_FW_LOADER_COMPRESS is not set
+# end of Firmware loader
+
+# CONFIG_ALLOW_DEV_COREDUMP is not set
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_DEBUG_TEST_DRIVER_REMOVE is not set
+# CONFIG_TEST_ASYNC_DRIVER_PROBE is not set
+CONFIG_REGMAP=y
+CONFIG_REGMAP_I2C=y
+CONFIG_REGMAP_SPI=y
+CONFIG_REGMAP_MMIO=y
+CONFIG_DMA_SHARED_BUFFER=y
+# CONFIG_DMA_FENCE_TRACE is not set
+# end of Generic Driver Options
+
+#
+# Bus devices
+#
+# CONFIG_MOXTET is not set
+# CONFIG_MHI_BUS is not set
+# end of Bus devices
+
+# CONFIG_CONNECTOR is not set
+# CONFIG_GNSS is not set
+CONFIG_MTD=y
+# CONFIG_MTD_TESTS is not set
+
+#
+# Partition parsers
+#
+# CONFIG_MTD_AR7_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_OF_PARTS is not set
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# end of Partition parsers
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_SM_FTL is not set
+# CONFIG_MTD_OOPS is not set
+# CONFIG_MTD_SWAP is not set
+# CONFIG_MTD_PARTITIONED_MASTER is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# end of RAM/ROM/Flash chip drivers
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PLATRAM is not set
+# end of Mapping drivers for chip access
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_MCHP23K256 is not set
+# CONFIG_MTD_SST25L is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOCG3 is not set
+# end of Self-contained MTD device drivers
+
+#
+# NAND
+#
+CONFIG_MTD_NAND_CORE=y
+# CONFIG_MTD_ONENAND is not set
+CONFIG_MTD_NAND_ECC_SW_HAMMING=y
+# CONFIG_MTD_NAND_ECC_SW_HAMMING_SMC is not set
+CONFIG_MTD_RAW_NAND=y
+# CONFIG_MTD_NAND_ECC_SW_BCH is not set
+
+#
+# Raw/parallel NAND flash controllers
+#
+# CONFIG_MTD_NAND_DENALI_DT is not set
+# CONFIG_MTD_NAND_MXIC is not set
+# CONFIG_MTD_NAND_GPIO is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_NAND_CADENCE is not set
+# CONFIG_MTD_NAND_ARASAN is not set
+
+#
+# Misc
+#
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_CVSNFC is not set
+# CONFIG_MTD_SPI_NAND is not set
+
+#
+# ECC engine support
+#
+CONFIG_MTD_NAND_ECC=y
+# end of ECC engine support
+# end of NAND
+
+#
+# LPDDR & LPDDR2 PCM memory drivers
+#
+# CONFIG_MTD_LPDDR is not set
+# end of LPDDR & LPDDR2 PCM memory drivers
+
+# CONFIG_MTD_SPI_NOR is not set
+# CONFIG_MTD_UBI is not set
+# CONFIG_MTD_HYPERBUS is not set
+CONFIG_DTC=y
+CONFIG_OF=y
+# CONFIG_OF_UNITTEST is not set
+CONFIG_OF_FLATTREE=y
+CONFIG_OF_EARLY_FLATTREE=y
+CONFIG_OF_KOBJ=y
+CONFIG_OF_ADDRESS=y
+CONFIG_OF_IRQ=y
+CONFIG_OF_NET=y
+CONFIG_OF_RESERVED_MEM=y
+# CONFIG_OF_OVERLAY is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_NULL_BLK is not set
+CONFIG_ZRAM=m
+CONFIG_ZRAM_WRITEBACK=y
+CONFIG_ZRAM_MEMORY_TRACKING=y
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_DRBD is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+# CONFIG_BLK_DEV_RBD is not set
+
+#
+# NVME Support
+#
+# CONFIG_NVME_FC is not set
+# CONFIG_NVME_TARGET is not set
+# end of NVME Support
+
+#
+# Misc devices
+#
+# CONFIG_AD525X_DPOT is not set
+# CONFIG_DUMMY_IRQ is not set
+# CONFIG_ICS932S401 is not set
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_APDS9802ALS is not set
+# CONFIG_ISL29003 is not set
+# CONFIG_ISL29020 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_SENSORS_BH1770 is not set
+# CONFIG_SENSORS_APDS990X is not set
+# CONFIG_HMC6352 is not set
+# CONFIG_DS1682 is not set
+# CONFIG_LATTICE_ECP3_CONFIG is not set
+# CONFIG_SRAM is not set
+# CONFIG_XILINX_SDFEC is not set
+# CONFIG_PVPANIC is not set
+# CONFIG_HISI_HIKEY_USB is not set
+# CONFIG_C2PORT is not set
+
+#
+# EEPROM support
+#
+# CONFIG_EEPROM_AT24 is not set
+# CONFIG_EEPROM_AT25 is not set
+# CONFIG_EEPROM_LEGACY is not set
+# CONFIG_EEPROM_MAX6875 is not set
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_EEPROM_93XX46 is not set
+# CONFIG_EEPROM_IDT_89HPESX is not set
+# CONFIG_EEPROM_EE1004 is not set
+# end of EEPROM support
+
+#
+# Texas Instruments shared transport line discipline
+#
+# CONFIG_TI_ST is not set
+# end of Texas Instruments shared transport line discipline
+
+# CONFIG_SENSORS_LIS3_SPI is not set
+# CONFIG_SENSORS_LIS3_I2C is not set
+# CONFIG_ALTERA_STAPL is not set
+# CONFIG_ECHO is not set
+# CONFIG_MISC_RTSX_USB is not set
+# end of Misc devices
+
+#
+# SCSI device support
+#
+CONFIG_SCSI_MOD=y
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_BLK_DEV_SR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+# end of SCSI Transports
+
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_ISCSI_BOOT_SYSFS is not set
+# CONFIG_SCSI_UFSHCD is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_DH is not set
+# end of SCSI device support
+
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+# CONFIG_TARGET_CORE is not set
+CONFIG_NETDEVICES=y
+CONFIG_MII=y
+# CONFIG_NET_CORE is not set
+
+#
+# Distributed Switch Architecture drivers
+#
+# end of Distributed Switch Architecture drivers
+
+CONFIG_ETHERNET=y
+# CONFIG_NET_VENDOR_ALACRITECH is not set
+# CONFIG_ALTERA_TSE is not set
+# CONFIG_NET_VENDOR_AMAZON is not set
+# CONFIG_NET_VENDOR_AQUANTIA is not set
+# CONFIG_NET_VENDOR_ARC is not set
+# CONFIG_NET_VENDOR_AURORA is not set
+# CONFIG_NET_VENDOR_BROADCOM is not set
+# CONFIG_NET_VENDOR_CADENCE is not set
+# CONFIG_NET_VENDOR_CAVIUM is not set
+# CONFIG_NET_VENDOR_CORTINA is not set
+# CONFIG_DNET is not set
+# CONFIG_NET_VENDOR_EZCHIP is not set
+CONFIG_NET_VENDOR_GOOGLE=y
+# CONFIG_NET_VENDOR_HUAWEI is not set
+# CONFIG_NET_VENDOR_INTEL is not set
+# CONFIG_NET_VENDOR_MARVELL is not set
+CONFIG_NET_VENDOR_MELLANOX=y
+# CONFIG_MLXSW_CORE is not set
+# CONFIG_MLXFW is not set
+# CONFIG_NET_VENDOR_MICREL is not set
+# CONFIG_NET_VENDOR_MICROCHIP is not set
+# CONFIG_NET_VENDOR_MICROSEMI is not set
+# CONFIG_NET_VENDOR_NATSEMI is not set
+# CONFIG_NET_VENDOR_NETRONOME is not set
+# CONFIG_NET_VENDOR_NI is not set
+# CONFIG_ETHOC is not set
+CONFIG_NET_VENDOR_PENSANDO=y
+# CONFIG_NET_VENDOR_QUALCOMM is not set
+# CONFIG_NET_VENDOR_RENESAS is not set
+# CONFIG_NET_VENDOR_ROCKER is not set
+# CONFIG_NET_VENDOR_SAMSUNG is not set
+# CONFIG_NET_VENDOR_SEEQ is not set
+# CONFIG_NET_VENDOR_SOLARFLARE is not set
+# CONFIG_NET_VENDOR_SOCIONEXT is not set
+CONFIG_NET_VENDOR_STMICRO=y
+CONFIG_STMMAC_ETH=y
+# CONFIG_STMMAC_SELFTESTS is not set
+CONFIG_STMMAC_PLATFORM=y
+# CONFIG_DWMAC_DWC_QOS_ETH is not set
+# CONFIG_DWMAC_GENERIC is not set
+CONFIG_DWMAC_CVITEK=y
+# CONFIG_DWMAC_INTEL_PLAT is not set
+# CONFIG_NET_VENDOR_SYNOPSYS is not set
+# CONFIG_NET_VENDOR_VIA is not set
+# CONFIG_NET_VENDOR_WIZNET is not set
+CONFIG_NET_VENDOR_XILINX=y
+# CONFIG_XILINX_AXI_EMAC is not set
+# CONFIG_XILINX_LL_TEMAC is not set
+CONFIG_PHYLINK=y
+CONFIG_PHYLIB=y
+CONFIG_SWPHY=y
+CONFIG_FIXED_PHY=y
+# CONFIG_SFP is not set
+
+#
+# MII PHY device drivers
+#
+# CONFIG_AMD_PHY is not set
+# CONFIG_ADIN_PHY is not set
+# CONFIG_AQUANTIA_PHY is not set
+# CONFIG_AX88796B_PHY is not set
+# CONFIG_BROADCOM_PHY is not set
+# CONFIG_BCM54140_PHY is not set
+# CONFIG_BCM7XXX_PHY is not set
+# CONFIG_BCM84881_PHY is not set
+# CONFIG_BCM87XX_PHY is not set
+# CONFIG_CICADA_PHY is not set
+CONFIG_CVITEK_PHY=y
+# CONFIG_CORTINA_PHY is not set
+# CONFIG_DAVICOM_PHY is not set
+# CONFIG_ICPLUS_PHY is not set
+# CONFIG_LXT_PHY is not set
+# CONFIG_INTEL_XWAY_PHY is not set
+# CONFIG_LSI_ET1011C_PHY is not set
+# CONFIG_MARVELL_PHY is not set
+# CONFIG_MARVELL_10G_PHY is not set
+# CONFIG_MICREL_PHY is not set
+# CONFIG_MICROCHIP_PHY is not set
+# CONFIG_MICROCHIP_T1_PHY is not set
+# CONFIG_MICROSEMI_PHY is not set
+# CONFIG_NATIONAL_PHY is not set
+# CONFIG_NXP_TJA11XX_PHY is not set
+# CONFIG_QSEMI_PHY is not set
+# CONFIG_REALTEK_PHY is not set
+# CONFIG_RENESAS_PHY is not set
+# CONFIG_ROCKCHIP_PHY is not set
+CONFIG_SMSC_PHY=y
+# CONFIG_STE10XP is not set
+# CONFIG_TERANETICS_PHY is not set
+# CONFIG_DP83822_PHY is not set
+# CONFIG_DP83TC811_PHY is not set
+# CONFIG_DP83848_PHY is not set
+# CONFIG_DP83867_PHY is not set
+# CONFIG_DP83869_PHY is not set
+# CONFIG_VITESSE_PHY is not set
+# CONFIG_XILINX_GMII2RGMII is not set
+# CONFIG_MICREL_KS8995MA is not set
+CONFIG_MDIO_DEVICE=y
+CONFIG_MDIO_BUS=y
+CONFIG_OF_MDIO=y
+CONFIG_MDIO_DEVRES=y
+# CONFIG_MDIO_BITBANG is not set
+# CONFIG_MDIO_BCM_UNIMAC is not set
+# CONFIG_MDIO_HISI_FEMAC is not set
+# CONFIG_MDIO_MVUSB is not set
+# CONFIG_MDIO_MSCC_MIIM is not set
+# CONFIG_MDIO_OCTEON is not set
+# CONFIG_MDIO_IPQ4019 is not set
+# CONFIG_MDIO_IPQ8064 is not set
+
+#
+# MDIO Multiplexers
+#
+# CONFIG_MDIO_BUS_MUX_GPIO is not set
+# CONFIG_MDIO_BUS_MUX_MULTIPLEXER is not set
+# CONFIG_MDIO_BUS_MUX_MMIOREG is not set
+
+#
+# PCS device drivers
+#
+CONFIG_PCS_XPCS=y
+# end of PCS device drivers
+
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+CONFIG_USB_NET_DRIVERS=y
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_RTL8152 is not set
+# CONFIG_USB_LAN78XX is not set
+CONFIG_USB_USBNET=y
+CONFIG_USB_NET_AX8817X=y
+CONFIG_USB_NET_AX88179_178A=y
+CONFIG_USB_NET_CDCETHER=y
+# CONFIG_USB_NET_CDC_EEM is not set
+CONFIG_USB_NET_CDC_NCM=y
+# CONFIG_USB_NET_HUAWEI_CDC_NCM is not set
+# CONFIG_USB_NET_CDC_MBIM is not set
+# CONFIG_USB_NET_DM9601 is not set
+# CONFIG_USB_NET_SR9700 is not set
+# CONFIG_USB_NET_SR9800 is not set
+# CONFIG_USB_NET_SMSC75XX is not set
+CONFIG_USB_NET_SMSC95XX=y
+# CONFIG_USB_NET_GL620A is not set
+CONFIG_USB_NET_NET1080=y
+# CONFIG_USB_NET_PLUSB is not set
+# CONFIG_USB_NET_MCS7830 is not set
+# CONFIG_USB_NET_RNDIS_HOST is not set
+CONFIG_USB_NET_CDC_SUBSET_ENABLE=y
+CONFIG_USB_NET_CDC_SUBSET=y
+# CONFIG_USB_ALI_M5632 is not set
+# CONFIG_USB_AN2720 is not set
+CONFIG_USB_BELKIN=y
+CONFIG_USB_ARMLINUX=y
+# CONFIG_USB_EPSON2888 is not set
+# CONFIG_USB_KC2190 is not set
+CONFIG_USB_NET_ZAURUS=y
+# CONFIG_USB_NET_CX82310_ETH is not set
+# CONFIG_USB_NET_KALMIA is not set
+# CONFIG_USB_NET_QMI_WWAN is not set
+# CONFIG_USB_HSO is not set
+# CONFIG_USB_NET_INT51X1 is not set
+# CONFIG_USB_IPHETH is not set
+# CONFIG_USB_SIERRA_NET is not set
+# CONFIG_USB_VL600 is not set
+# CONFIG_USB_NET_CH9200 is not set
+# CONFIG_USB_NET_AQC111 is not set
+CONFIG_WLAN=y
+# CONFIG_WIRELESS_WDS is not set
+# CONFIG_WLAN_VENDOR_ADMTEK is not set
+# CONFIG_WLAN_VENDOR_ATH is not set
+# CONFIG_WLAN_VENDOR_ATMEL is not set
+# CONFIG_WLAN_VENDOR_BROADCOM is not set
+# CONFIG_WLAN_VENDOR_CISCO is not set
+# CONFIG_WLAN_VENDOR_INTEL is not set
+# CONFIG_WLAN_VENDOR_INTERSIL is not set
+# CONFIG_WLAN_VENDOR_MARVELL is not set
+# CONFIG_WLAN_VENDOR_MEDIATEK is not set
+CONFIG_WLAN_VENDOR_MICROCHIP=y
+# CONFIG_WILC1000_SDIO is not set
+# CONFIG_WILC1000_SPI is not set
+# CONFIG_WLAN_VENDOR_RALINK is not set
+CONFIG_WLAN_VENDOR_REALTEK=y
+# CONFIG_RTL8188FU is not set
+# CONFIG_RTL8189FS is not set
+# CONFIG_RTL8723DS is not set
+# CONFIG_RTL8821CS is not set
+# CONFIG_WLAN_VENDOR_RSI is not set
+# CONFIG_WLAN_VENDOR_ST is not set
+# CONFIG_WLAN_VENDOR_TI is not set
+# CONFIG_WLAN_VENDOR_ZYDAS is not set
+CONFIG_WLAN_VENDOR_QUANTENNA=y
+CONFIG_WLAN_VENDOR_ICOMMSEMI=y
+# CONFIG_SV6115 is not set
+CONFIG_WLAN_VENDOR_AICSEMI=y
+CONFIG_AIC8800=y
+CONFIG_AIC_FW_PATH="/mnt/system/firmware/aic8800"
+CONFIG_AIC8800_WLAN_SUPPORT=m
+CONFIG_AIC8800_BTLPM_SUPPORT=m
+# CONFIG_USB_NET_RNDIS_WLAN is not set
+# CONFIG_VIRT_WIFI is not set
+
+#
+# Enable WiMAX (Networking options) to see the WiMAX drivers
+#
+# CONFIG_WAN is not set
+# CONFIG_NETDEVSIM is not set
+# CONFIG_NET_FAILOVER is not set
+# CONFIG_ISDN is not set
+# CONFIG_NVM is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+# CONFIG_INPUT_SPARSEKMAP is not set
+# CONFIG_INPUT_MATRIXKMAP is not set
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ADP5588 is not set
+# CONFIG_KEYBOARD_ADP5589 is not set
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_KEYBOARD_QT1050 is not set
+# CONFIG_KEYBOARD_QT1070 is not set
+# CONFIG_KEYBOARD_QT2160 is not set
+# CONFIG_KEYBOARD_DLINK_DIR685 is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_GPIO is not set
+# CONFIG_KEYBOARD_GPIO_POLLED is not set
+# CONFIG_KEYBOARD_TCA6416 is not set
+# CONFIG_KEYBOARD_TCA8418 is not set
+# CONFIG_KEYBOARD_MATRIX is not set
+# CONFIG_KEYBOARD_LM8333 is not set
+# CONFIG_KEYBOARD_MAX7359 is not set
+# CONFIG_KEYBOARD_MCS is not set
+# CONFIG_KEYBOARD_MPR121 is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_OPENCORES is not set
+# CONFIG_KEYBOARD_SAMSUNG is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_OMAP4 is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_CAP11XX is not set
+# CONFIG_KEYBOARD_BCM is not set
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=y
+CONFIG_MOUSE_PS2_ALPS=y
+CONFIG_MOUSE_PS2_BYD=y
+CONFIG_MOUSE_PS2_LOGIPS2PP=y
+CONFIG_MOUSE_PS2_SYNAPTICS=y
+CONFIG_MOUSE_PS2_SYNAPTICS_SMBUS=y
+CONFIG_MOUSE_PS2_CYPRESS=y
+CONFIG_MOUSE_PS2_TRACKPOINT=y
+# CONFIG_MOUSE_PS2_ELANTECH is not set
+# CONFIG_MOUSE_PS2_SENTELIC is not set
+# CONFIG_MOUSE_PS2_TOUCHKIT is not set
+CONFIG_MOUSE_PS2_FOCALTECH=y
+CONFIG_MOUSE_PS2_SMBUS=y
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_APPLETOUCH is not set
+# CONFIG_MOUSE_BCM5974 is not set
+# CONFIG_MOUSE_CYAPA is not set
+# CONFIG_MOUSE_ELAN_I2C is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_MOUSE_GPIO is not set
+# CONFIG_MOUSE_SYNAPTICS_I2C is not set
+# CONFIG_MOUSE_SYNAPTICS_USB is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+# CONFIG_RMI4_CORE is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_SERPORT=y
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_SERIO_ALTERA_PS2 is not set
+# CONFIG_SERIO_PS2MULT is not set
+# CONFIG_SERIO_ARC_PS2 is not set
+# CONFIG_SERIO_APBPS2 is not set
+# CONFIG_SERIO_GPIO_PS2 is not set
+# CONFIG_USERIO is not set
+# CONFIG_GAMEPORT is not set
+# end of Hardware I/O ports
+# end of Input device support
+
+#
+# Character devices
+#
+CONFIG_TTY=y
+# CONFIG_VT is not set
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+CONFIG_LDISC_AUTOLOAD=y
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_EARLYCON=y
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y
+CONFIG_SERIAL_8250_16550A_VARIANTS=y
+# CONFIG_SERIAL_8250_FINTEK is not set
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_DMA=y
+CONFIG_SERIAL_8250_NR_UARTS=5
+CONFIG_SERIAL_8250_RUNTIME_UARTS=5
+# CONFIG_SERIAL_8250_EXTENDED is not set
+# CONFIG_SERIAL_8250_ASPEED_VUART is not set
+CONFIG_SERIAL_8250_DWLIB=y
+CONFIG_SERIAL_8250_DW=y
+# CONFIG_SERIAL_8250_RT288X is not set
+# CONFIG_SERIAL_OF_PLATFORM is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_EARLYCON_RISCV_SBI=y
+# CONFIG_SERIAL_MAX3100 is not set
+# CONFIG_SERIAL_MAX310X is not set
+# CONFIG_SERIAL_UARTLITE is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_SIFIVE is not set
+# CONFIG_SERIAL_SCCNXP is not set
+# CONFIG_SERIAL_SC16IS7XX is not set
+# CONFIG_SERIAL_ALTERA_JTAGUART is not set
+# CONFIG_SERIAL_ALTERA_UART is not set
+# CONFIG_SERIAL_IFX6X60 is not set
+# CONFIG_SERIAL_XILINX_PS_UART is not set
+# CONFIG_SERIAL_ARC is not set
+# CONFIG_SERIAL_FSL_LPUART is not set
+# CONFIG_SERIAL_FSL_LINFLEXUART is not set
+# CONFIG_SERIAL_CONEXANT_DIGICOLOR is not set
+# CONFIG_SERIAL_SPRD is not set
+# end of Serial drivers
+
+CONFIG_SERIAL_MCTRL_GPIO=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+# CONFIG_N_GSM is not set
+# CONFIG_NULL_TTY is not set
+# CONFIG_TRACE_SINK is not set
+# CONFIG_HVC_RISCV_SBI is not set
+# CONFIG_SERIAL_DEV_BUS is not set
+# CONFIG_TTY_PRINTK is not set
+# CONFIG_VIRTIO_CONSOLE is not set
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_HW_RANDOM_TIMERIOMEM is not set
+# CONFIG_HW_RANDOM_BA431 is not set
+# CONFIG_HW_RANDOM_CCTRNG is not set
+# CONFIG_HW_RANDOM_XIPHERA is not set
+CONFIG_DEVMEM=y
+# CONFIG_DEVKMEM is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+# CONFIG_XILLYBUS is not set
+# end of Character devices
+
+# CONFIG_RANDOM_TRUST_BOOTLOADER is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_COMPAT=y
+CONFIG_I2C_CHARDEV=y
+CONFIG_I2C_MUX=y
+
+#
+# Multiplexer I2C Chip support
+#
+# CONFIG_I2C_ARB_GPIO_CHALLENGE is not set
+# CONFIG_I2C_MUX_GPIO is not set
+# CONFIG_I2C_MUX_GPMUX is not set
+# CONFIG_I2C_MUX_LTC4306 is not set
+# CONFIG_I2C_MUX_PCA9541 is not set
+# CONFIG_I2C_MUX_PCA954x is not set
+# CONFIG_I2C_MUX_PINCTRL is not set
+# CONFIG_I2C_MUX_REG is not set
+# CONFIG_I2C_DEMUX_PINCTRL is not set
+# CONFIG_I2C_MUX_MLXCPLD is not set
+# end of Multiplexer I2C Chip support
+
+CONFIG_I2C_HELPER_AUTO=y
+
+#
+# I2C Hardware Bus support
+#
+
+#
+# I2C system bus drivers (mostly embedded / system-on-chip)
+#
+# CONFIG_I2C_CBUS_GPIO is not set
+CONFIG_I2C_DESIGNWARE_CORE=y
+# CONFIG_I2C_DESIGNWARE_SLAVE is not set
+CONFIG_I2C_DESIGNWARE_PLATFORM=y
+# CONFIG_I2C_DESIGNWARE_ICE is not set
+# CONFIG_I2C_EMEV2 is not set
+# CONFIG_I2C_GPIO is not set
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PCA_PLATFORM is not set
+# CONFIG_I2C_RK3X is not set
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_XILINX is not set
+
+#
+# External I2C/SMBus adapter drivers
+#
+# CONFIG_I2C_DIOLAN_U2C is not set
+# CONFIG_I2C_ROBOTFUZZ_OSIF is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Other I2C/SMBus bus drivers
+#
+# end of I2C Hardware Bus support
+
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_SLAVE is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# end of I2C support
+
+# CONFIG_I3C is not set
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+CONFIG_SPI_MEM=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_ALTERA is not set
+# CONFIG_SPI_AXI_SPI_ENGINE is not set
+# CONFIG_SPI_BITBANG is not set
+# CONFIG_SPI_CADENCE is not set
+CONFIG_SPI_DESIGNWARE=y
+# CONFIG_SPI_DW_DMA is not set
+CONFIG_SPI_DW_MMIO=y
+# CONFIG_SPI_NXP_FLEXSPI is not set
+# CONFIG_SPI_GPIO is not set
+# CONFIG_SPI_FSL_SPI is not set
+# CONFIG_SPI_OC_TINY is not set
+# CONFIG_SPI_ROCKCHIP is not set
+# CONFIG_SPI_SC18IS602 is not set
+# CONFIG_SPI_SIFIVE is not set
+# CONFIG_SPI_MXIC is not set
+# CONFIG_SPI_XCOMM is not set
+# CONFIG_SPI_XILINX is not set
+# CONFIG_SPI_ZYNQMP_GQSPI is not set
+# CONFIG_SPI_AMD is not set
+
+#
+# SPI Multiplexer support
+#
+# CONFIG_SPI_MUX is not set
+
+#
+# SPI Protocol Masters
+#
+CONFIG_SPI_SPIDEV=y
+# CONFIG_SPI_LOOPBACK_TEST is not set
+# CONFIG_SPI_TLE62X0 is not set
+# CONFIG_SPI_SLAVE is not set
+# CONFIG_SPMI is not set
+# CONFIG_HSI is not set
+# CONFIG_PPS is not set
+
+#
+# PTP clock support
+#
+# CONFIG_PTP_1588_CLOCK is not set
+
+#
+# Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks.
+#
+# end of PTP clock support
+
+CONFIG_PINCTRL=y
+CONFIG_PINMUX=y
+CONFIG_PINCONF=y
+CONFIG_GENERIC_PINCONF=y
+# CONFIG_DEBUG_PINCTRL is not set
+# CONFIG_PINCTRL_MCP23S08 is not set
+# CONFIG_PINCTRL_SINGLE is not set
+# CONFIG_PINCTRL_SX150X is not set
+# CONFIG_PINCTRL_STMFX is not set
+# CONFIG_PINCTRL_OCELOT is not set
+
+#
+# Renesas pinctrl drivers
+#
+# end of Renesas pinctrl drivers
+
+CONFIG_CVITEK_PINCTRL_CV1835=y
+CONFIG_GPIOLIB=y
+CONFIG_GPIOLIB_FASTPATH_LIMIT=512
+CONFIG_OF_GPIO=y
+CONFIG_GPIOLIB_IRQCHIP=y
+# CONFIG_DEBUG_GPIO is not set
+CONFIG_GPIO_SYSFS=y
+CONFIG_GPIO_CDEV=y
+CONFIG_GPIO_CDEV_V1=y
+CONFIG_GPIO_GENERIC=y
+
+#
+# Memory mapped GPIO drivers
+#
+# CONFIG_GPIO_74XX_MMIO is not set
+# CONFIG_GPIO_ALTERA is not set
+# CONFIG_GPIO_CADENCE is not set
+CONFIG_GPIO_DWAPB=y
+# CONFIG_GPIO_FTGPIO010 is not set
+# CONFIG_GPIO_GENERIC_PLATFORM is not set
+# CONFIG_GPIO_GRGPIO is not set
+# CONFIG_GPIO_HLWD is not set
+# CONFIG_GPIO_LOGICVC is not set
+# CONFIG_GPIO_MB86S7X is not set
+# CONFIG_GPIO_SAMA5D2_PIOBU is not set
+# CONFIG_GPIO_SIFIVE is not set
+# CONFIG_GPIO_SYSCON is not set
+# CONFIG_GPIO_XILINX is not set
+# CONFIG_GPIO_AMD_FCH is not set
+# end of Memory mapped GPIO drivers
+
+#
+# I2C GPIO expanders
+#
+# CONFIG_GPIO_ADP5588 is not set
+# CONFIG_GPIO_ADNP is not set
+# CONFIG_GPIO_GW_PLD is not set
+# CONFIG_GPIO_MAX7300 is not set
+# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_PCA953X is not set
+# CONFIG_GPIO_PCA9570 is not set
+# CONFIG_GPIO_PCF857X is not set
+# CONFIG_GPIO_TPIC2810 is not set
+# end of I2C GPIO expanders
+
+#
+# MFD GPIO expanders
+#
+# end of MFD GPIO expanders
+
+#
+# SPI GPIO expanders
+#
+# CONFIG_GPIO_74X164 is not set
+# CONFIG_GPIO_MAX3191X is not set
+# CONFIG_GPIO_MAX7301 is not set
+# CONFIG_GPIO_MC33880 is not set
+# CONFIG_GPIO_PISOSR is not set
+# CONFIG_GPIO_XRA1403 is not set
+# end of SPI GPIO expanders
+
+#
+# USB GPIO expanders
+#
+# end of USB GPIO expanders
+
+# CONFIG_GPIO_AGGREGATOR is not set
+# CONFIG_GPIO_MOCKUP is not set
+# CONFIG_W1 is not set
+CONFIG_POWER_RESET=y
+# CONFIG_POWER_RESET_GPIO is not set
+# CONFIG_POWER_RESET_GPIO_RESTART is not set
+# CONFIG_POWER_RESET_LTC2952 is not set
+# CONFIG_POWER_RESET_RESTART is not set
+# CONFIG_POWER_RESET_SYSCON is not set
+# CONFIG_POWER_RESET_SYSCON_POWEROFF is not set
+# CONFIG_SYSCON_REBOOT_MODE is not set
+# CONFIG_NVMEM_REBOOT_MODE is not set
+# CONFIG_POWER_SUPPLY is not set
+CONFIG_HWMON=y
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Native drivers
+#
+# CONFIG_SENSORS_AD7314 is not set
+# CONFIG_SENSORS_AD7414 is not set
+# CONFIG_SENSORS_AD7418 is not set
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ADM1025 is not set
+# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1029 is not set
+# CONFIG_SENSORS_ADM1031 is not set
+# CONFIG_SENSORS_ADM1177 is not set
+# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ADT7310 is not set
+# CONFIG_SENSORS_ADT7410 is not set
+# CONFIG_SENSORS_ADT7411 is not set
+# CONFIG_SENSORS_ADT7462 is not set
+# CONFIG_SENSORS_ADT7470 is not set
+# CONFIG_SENSORS_ADT7475 is not set
+# CONFIG_SENSORS_AS370 is not set
+# CONFIG_SENSORS_ASC7621 is not set
+# CONFIG_SENSORS_AXI_FAN_CONTROL is not set
+# CONFIG_SENSORS_ASPEED is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_CORSAIR_CPRO is not set
+# CONFIG_SENSORS_DS620 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_F71882FG is not set
+# CONFIG_SENSORS_F75375S is not set
+# CONFIG_SENSORS_FTSTEUTATES is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_G760A is not set
+# CONFIG_SENSORS_G762 is not set
+# CONFIG_SENSORS_GPIO_FAN is not set
+# CONFIG_SENSORS_HIH6130 is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_JC42 is not set
+# CONFIG_SENSORS_POWR1220 is not set
+# CONFIG_SENSORS_LINEAGE is not set
+# CONFIG_SENSORS_LTC2945 is not set
+# CONFIG_SENSORS_LTC2947_I2C is not set
+# CONFIG_SENSORS_LTC2947_SPI is not set
+# CONFIG_SENSORS_LTC2990 is not set
+# CONFIG_SENSORS_LTC4151 is not set
+# CONFIG_SENSORS_LTC4215 is not set
+# CONFIG_SENSORS_LTC4222 is not set
+# CONFIG_SENSORS_LTC4245 is not set
+# CONFIG_SENSORS_LTC4260 is not set
+# CONFIG_SENSORS_LTC4261 is not set
+# CONFIG_SENSORS_MAX1111 is not set
+# CONFIG_SENSORS_MAX16065 is not set
+# CONFIG_SENSORS_MAX1619 is not set
+# CONFIG_SENSORS_MAX1668 is not set
+# CONFIG_SENSORS_MAX197 is not set
+# CONFIG_SENSORS_MAX31722 is not set
+# CONFIG_SENSORS_MAX31730 is not set
+# CONFIG_SENSORS_MAX6621 is not set
+# CONFIG_SENSORS_MAX6639 is not set
+# CONFIG_SENSORS_MAX6642 is not set
+# CONFIG_SENSORS_MAX6650 is not set
+# CONFIG_SENSORS_MAX6697 is not set
+# CONFIG_SENSORS_MAX31790 is not set
+# CONFIG_SENSORS_MCP3021 is not set
+# CONFIG_SENSORS_TC654 is not set
+# CONFIG_SENSORS_MR75203 is not set
+# CONFIG_SENSORS_ADCXX is not set
+# CONFIG_SENSORS_LM63 is not set
+# CONFIG_SENSORS_LM70 is not set
+# CONFIG_SENSORS_LM73 is not set
+# CONFIG_SENSORS_LM75 is not set
+# CONFIG_SENSORS_LM77 is not set
+# CONFIG_SENSORS_LM78 is not set
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
+# CONFIG_SENSORS_LM85 is not set
+# CONFIG_SENSORS_LM87 is not set
+# CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
+# CONFIG_SENSORS_LM93 is not set
+# CONFIG_SENSORS_LM95234 is not set
+# CONFIG_SENSORS_LM95241 is not set
+# CONFIG_SENSORS_LM95245 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_NTC_THERMISTOR is not set
+# CONFIG_SENSORS_NCT6683 is not set
+# CONFIG_SENSORS_NCT6775 is not set
+# CONFIG_SENSORS_NCT7802 is not set
+# CONFIG_SENSORS_NCT7904 is not set
+# CONFIG_SENSORS_NPCM7XX is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_PMBUS is not set
+# CONFIG_SENSORS_PWM_FAN is not set
+# CONFIG_SENSORS_SHT15 is not set
+# CONFIG_SENSORS_SHT21 is not set
+# CONFIG_SENSORS_SHT3x is not set
+# CONFIG_SENSORS_SHTC1 is not set
+# CONFIG_SENSORS_DME1737 is not set
+# CONFIG_SENSORS_EMC1403 is not set
+# CONFIG_SENSORS_EMC2103 is not set
+# CONFIG_SENSORS_EMC6W201 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_SCH5627 is not set
+# CONFIG_SENSORS_SCH5636 is not set
+# CONFIG_SENSORS_STTS751 is not set
+# CONFIG_SENSORS_SMM665 is not set
+# CONFIG_SENSORS_ADC128D818 is not set
+# CONFIG_SENSORS_ADS7828 is not set
+# CONFIG_SENSORS_ADS7871 is not set
+# CONFIG_SENSORS_AMC6821 is not set
+# CONFIG_SENSORS_INA209 is not set
+# CONFIG_SENSORS_INA2XX is not set
+# CONFIG_SENSORS_INA3221 is not set
+# CONFIG_SENSORS_TC74 is not set
+# CONFIG_SENSORS_THMC50 is not set
+# CONFIG_SENSORS_TMP102 is not set
+# CONFIG_SENSORS_TMP103 is not set
+# CONFIG_SENSORS_TMP108 is not set
+# CONFIG_SENSORS_TMP401 is not set
+# CONFIG_SENSORS_TMP421 is not set
+# CONFIG_SENSORS_TMP513 is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_W83773G is not set
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83791D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83793 is not set
+# CONFIG_SENSORS_W83795 is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83L786NG is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+CONFIG_THERMAL=y
+CONFIG_THERMAL_NETLINK=y
+# CONFIG_THERMAL_STATISTICS is not set
+CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0
+CONFIG_THERMAL_HWMON=y
+CONFIG_THERMAL_OF=y
+CONFIG_THERMAL_WRITABLE_TRIPS=y
+CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
+# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
+# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set
+# CONFIG_THERMAL_GOV_FAIR_SHARE is not set
+CONFIG_THERMAL_GOV_STEP_WISE=y
+# CONFIG_THERMAL_GOV_BANG_BANG is not set
+# CONFIG_THERMAL_GOV_USER_SPACE is not set
+# CONFIG_CPU_THERMAL is not set
+CONFIG_THERMAL_EMULATION=y
+# CONFIG_THERMAL_MMIO is not set
+CONFIG_CV181X_THERMAL=y
+CONFIG_WATCHDOG=y
+CONFIG_WATCHDOG_CORE=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED=y
+CONFIG_WATCHDOG_OPEN_TIMEOUT=0
+# CONFIG_WATCHDOG_SYSFS is not set
+
+#
+# Watchdog Pretimeout Governors
+#
+# CONFIG_WATCHDOG_PRETIMEOUT_GOV is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+# CONFIG_GPIO_WATCHDOG is not set
+# CONFIG_XILINX_WATCHDOG is not set
+# CONFIG_ZIIRAVE_WATCHDOG is not set
+# CONFIG_CADENCE_WATCHDOG is not set
+# CONFIG_DW_WATCHDOG is not set
+# CONFIG_MAX63XX_WATCHDOG is not set
+CONFIG_ICE_WDT=y
+# CONFIG_MEN_A21_WDT is not set
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
+# CONFIG_SSB is not set
+CONFIG_BCMA_POSSIBLE=y
+# CONFIG_BCMA is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_ACT8945A is not set
+# CONFIG_MFD_AS3711 is not set
+# CONFIG_MFD_AS3722 is not set
+# CONFIG_PMIC_ADP5520 is not set
+# CONFIG_MFD_AAT2870_CORE is not set
+# CONFIG_MFD_ATMEL_FLEXCOM is not set
+# CONFIG_MFD_ATMEL_HLCDC is not set
+# CONFIG_MFD_BCM590XX is not set
+# CONFIG_MFD_BD9571MWV is not set
+# CONFIG_MFD_AXP20X_I2C is not set
+# CONFIG_MFD_MADERA is not set
+# CONFIG_PMIC_DA903X is not set
+# CONFIG_MFD_DA9052_SPI is not set
+# CONFIG_MFD_DA9052_I2C is not set
+# CONFIG_MFD_DA9055 is not set
+# CONFIG_MFD_DA9062 is not set
+# CONFIG_MFD_DA9063 is not set
+# CONFIG_MFD_DA9150 is not set
+# CONFIG_MFD_DLN2 is not set
+# CONFIG_MFD_GATEWORKS_GSC is not set
+# CONFIG_MFD_MC13XXX_SPI is not set
+# CONFIG_MFD_MC13XXX_I2C is not set
+# CONFIG_MFD_MP2629 is not set
+# CONFIG_MFD_HI6421_PMIC is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_HTC_I2CPLD is not set
+# CONFIG_MFD_IQS62X is not set
+# CONFIG_MFD_KEMPLD is not set
+# CONFIG_MFD_88PM800 is not set
+# CONFIG_MFD_88PM805 is not set
+# CONFIG_MFD_88PM860X is not set
+# CONFIG_MFD_MAX14577 is not set
+# CONFIG_MFD_MAX77620 is not set
+# CONFIG_MFD_MAX77650 is not set
+# CONFIG_MFD_MAX77686 is not set
+# CONFIG_MFD_MAX77693 is not set
+# CONFIG_MFD_MAX77843 is not set
+# CONFIG_MFD_MAX8907 is not set
+# CONFIG_MFD_MAX8925 is not set
+# CONFIG_MFD_MAX8997 is not set
+# CONFIG_MFD_MAX8998 is not set
+# CONFIG_MFD_MT6360 is not set
+# CONFIG_MFD_MT6397 is not set
+# CONFIG_MFD_MENF21BMC is not set
+# CONFIG_EZX_PCAP is not set
+# CONFIG_MFD_CPCAP is not set
+# CONFIG_MFD_VIPERBOARD is not set
+# CONFIG_MFD_RETU is not set
+# CONFIG_MFD_PCF50633 is not set
+# CONFIG_MFD_RT5033 is not set
+# CONFIG_MFD_RC5T583 is not set
+# CONFIG_MFD_RK808 is not set
+# CONFIG_MFD_RN5T618 is not set
+# CONFIG_MFD_SEC_CORE is not set
+# CONFIG_MFD_SI476X_CORE is not set
+# CONFIG_MFD_SM501 is not set
+# CONFIG_MFD_SKY81452 is not set
+# CONFIG_ABX500_CORE is not set
+# CONFIG_MFD_STMPE is not set
+CONFIG_MFD_SYSCON=y
+# CONFIG_MFD_TI_AM335X_TSCADC is not set
+# CONFIG_MFD_LP3943 is not set
+# CONFIG_MFD_LP8788 is not set
+# CONFIG_MFD_TI_LMU is not set
+# CONFIG_MFD_PALMAS is not set
+# CONFIG_TPS6105X is not set
+# CONFIG_TPS65010 is not set
+# CONFIG_TPS6507X is not set
+# CONFIG_MFD_TPS65086 is not set
+# CONFIG_MFD_TPS65090 is not set
+# CONFIG_MFD_TPS65217 is not set
+# CONFIG_MFD_TI_LP873X is not set
+# CONFIG_MFD_TI_LP87565 is not set
+# CONFIG_MFD_TPS65218 is not set
+# CONFIG_MFD_TPS6586X is not set
+# CONFIG_MFD_TPS65910 is not set
+# CONFIG_MFD_TPS65912_I2C is not set
+# CONFIG_MFD_TPS65912_SPI is not set
+# CONFIG_MFD_TPS80031 is not set
+# CONFIG_TWL4030_CORE is not set
+# CONFIG_TWL6040_CORE is not set
+# CONFIG_MFD_WL1273_CORE is not set
+# CONFIG_MFD_LM3533 is not set
+# CONFIG_MFD_TC3589X is not set
+# CONFIG_MFD_TQMX86 is not set
+# CONFIG_MFD_LOCHNAGAR is not set
+# CONFIG_MFD_ARIZONA_I2C is not set
+# CONFIG_MFD_ARIZONA_SPI is not set
+# CONFIG_MFD_WM8400 is not set
+# CONFIG_MFD_WM831X_I2C is not set
+# CONFIG_MFD_WM831X_SPI is not set
+# CONFIG_MFD_WM8350_I2C is not set
+# CONFIG_MFD_WM8994 is not set
+# CONFIG_MFD_ROHM_BD718XX is not set
+# CONFIG_MFD_ROHM_BD70528 is not set
+# CONFIG_MFD_ROHM_BD71828 is not set
+# CONFIG_MFD_STPMIC1 is not set
+# CONFIG_MFD_STMFX is not set
+# CONFIG_MFD_INTEL_M10_BMC is not set
+# end of Multifunction device drivers
+
+# CONFIG_REGULATOR is not set
+# CONFIG_RC_CORE is not set
+# CONFIG_MEDIA_CEC_SUPPORT is not set
+# CONFIG_MEDIA_SUPPORT is not set
+
+#
+# Graphics support
+#
+# CONFIG_DRM is not set
+
+#
+# ARM devices
+#
+# end of ARM devices
+
+#
+# Frame buffer Devices
+#
+CONFIG_FB_CMDLINE=y
+CONFIG_FB_NOTIFY=y
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_FOREIGN_ENDIAN is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_EFI is not set
+# CONFIG_FB_OPENCORES is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_SMSCUFX is not set
+# CONFIG_FB_UDL is not set
+# CONFIG_FB_IBM_GXT4500 is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_METRONOME is not set
+CONFIG_FB_SIMPLE=y
+# CONFIG_FB_SSD1307 is not set
+CONFIG_FB_CVITEK=m
+# end of Frame buffer Devices
+
+#
+# Backlight & LCD device support
+#
+# CONFIG_LCD_CLASS_DEVICE is not set
+# CONFIG_BACKLIGHT_CLASS_DEVICE is not set
+# end of Backlight & LCD device support
+
+# CONFIG_LOGO is not set
+# end of Graphics support
+
+CONFIG_SOUND=y
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+CONFIG_SND_DMAENGINE_PCM=y
+CONFIG_SND_HWDEP=y
+CONFIG_SND_RAWMIDI=y
+CONFIG_SND_JACK=y
+CONFIG_SND_JACK_INPUT_DEV=y
+# CONFIG_SND_OSSEMUL is not set
+CONFIG_SND_PCM_TIMER=y
+# CONFIG_SND_HRTIMER is not set
+# CONFIG_SND_DYNAMIC_MINORS is not set
+# CONFIG_SND_SUPPORT_OLD_API is not set
+# CONFIG_SND_PROC_FS is not set
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+# CONFIG_SND_SEQUENCER is not set
+# CONFIG_SND_DRIVERS is not set
+
+#
+# HD-Audio
+#
+# end of HD-Audio
+
+CONFIG_SND_HDA_PREALLOC_SIZE=1
+# CONFIG_SND_SPI is not set
+CONFIG_SND_USB=y
+CONFIG_SND_USB_AUDIO=y
+# CONFIG_SND_USB_UA101 is not set
+# CONFIG_SND_USB_CAIAQ is not set
+# CONFIG_SND_USB_6FIRE is not set
+# CONFIG_SND_USB_HIFACE is not set
+# CONFIG_SND_BCD2000 is not set
+# CONFIG_SND_USB_POD is not set
+# CONFIG_SND_USB_PODHD is not set
+# CONFIG_SND_USB_TONEPORT is not set
+# CONFIG_SND_USB_VARIAX is not set
+CONFIG_SND_SOC=y
+CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y
+# CONFIG_SND_SOC_AMD_ACP is not set
+# CONFIG_SND_ATMEL_SOC is not set
+# CONFIG_SND_BCM63XX_I2S_WHISTLER is not set
+# CONFIG_SND_SOC_CV1835_ADAU1372 is not set
+# CONFIG_SND_SOC_CV1835_CV1835PDM is not set
+# CONFIG_SND_SOC_CV182X_CV182XPDM is not set
+# CONFIG_SND_SOC_CV1835_CV1835ADC is not set
+# CONFIG_SND_SOC_CV1835_CV1835DAC is not set
+# CONFIG_SND_SOC_CV182X_CV182XADC is not set
+# CONFIG_SND_SOC_CV182X_CV182XDAC is not set
+CONFIG_SND_SOC_CV182XA_CV182XAADC=y
+CONFIG_SND_SOC_CV182XA_CV182XADAC=y
+CONFIG_SND_CV1835_I2S=y
+# CONFIG_SND_SOC_CV1835PDM is not set
+# CONFIG_SND_SOC_CV1835ADC is not set
+# CONFIG_SND_SOC_CV182XADC is not set
+CONFIG_SND_SOC_CV182XAADC=y
+# CONFIG_SND_SOC_CV1835DAC is not set
+# CONFIG_SND_SOC_CV182XDAC is not set
+CONFIG_SND_SOC_CV182XADAC=y
+# CONFIG_SND_SOC_CV1835_CONCURRENT_I2S is not set
+# CONFIG_SND_SOC_CV183x_DUMMY_CARD is not set
+CONFIG_SND_SOC_CV1835_USE_AUDIO_PLL=y
+CONFIG_CV1835_I2S_SUBSYS=y
+# CONFIG_SND_SOC_CV1835_LT9611 is not set
+# CONFIG_SND_DESIGNWARE_I2S is not set
+
+#
+# SoC Audio for Freescale CPUs
+#
+
+#
+# Common SoC Audio options for Freescale CPUs:
+#
+# CONFIG_SND_SOC_FSL_ASRC is not set
+# CONFIG_SND_SOC_FSL_SAI is not set
+# CONFIG_SND_SOC_FSL_AUDMIX is not set
+# CONFIG_SND_SOC_FSL_SSI is not set
+# CONFIG_SND_SOC_FSL_SPDIF is not set
+# CONFIG_SND_SOC_FSL_ESAI is not set
+# CONFIG_SND_SOC_FSL_MICFIL is not set
+# CONFIG_SND_SOC_IMX_AUDMUX is not set
+# end of SoC Audio for Freescale CPUs
+
+# CONFIG_SND_I2S_HI6210_I2S is not set
+# CONFIG_SND_SOC_IMG is not set
+# CONFIG_SND_SOC_MTK_BTCVSD is not set
+# CONFIG_SND_SOC_SOF_TOPLEVEL is not set
+
+#
+# STMicroelectronics STM32 SOC audio support
+#
+# end of STMicroelectronics STM32 SOC audio support
+
+# CONFIG_SND_SOC_XILINX_I2S is not set
+# CONFIG_SND_SOC_XILINX_AUDIO_FORMATTER is not set
+# CONFIG_SND_SOC_XILINX_SPDIF is not set
+# CONFIG_SND_SOC_XTFPGA_I2S is not set
+# CONFIG_ZX_TDM is not set
+CONFIG_SND_SOC_I2C_AND_SPI=y
+
+#
+# CODEC drivers
+#
+# CONFIG_SND_SOC_AC97_CODEC is not set
+# CONFIG_SND_SOC_ADAU1701 is not set
+# CONFIG_SND_SOC_ADAU1761_I2C is not set
+# CONFIG_SND_SOC_ADAU1761_SPI is not set
+# CONFIG_SND_SOC_ADAU7002 is not set
+# CONFIG_SND_SOC_ADAU7118_HW is not set
+# CONFIG_SND_SOC_ADAU7118_I2C is not set
+# CONFIG_SND_SOC_AK4104 is not set
+# CONFIG_SND_SOC_AK4118 is not set
+# CONFIG_SND_SOC_AK4458 is not set
+# CONFIG_SND_SOC_AK4554 is not set
+# CONFIG_SND_SOC_AK4613 is not set
+# CONFIG_SND_SOC_AK4642 is not set
+# CONFIG_SND_SOC_AK5386 is not set
+# CONFIG_SND_SOC_AK5558 is not set
+# CONFIG_SND_SOC_ALC5623 is not set
+# CONFIG_SND_SOC_BD28623 is not set
+# CONFIG_SND_SOC_BT_SCO is not set
+# CONFIG_SND_SOC_CS35L32 is not set
+# CONFIG_SND_SOC_CS35L33 is not set
+# CONFIG_SND_SOC_CS35L34 is not set
+# CONFIG_SND_SOC_CS35L35 is not set
+# CONFIG_SND_SOC_CS35L36 is not set
+# CONFIG_SND_SOC_CS42L42 is not set
+# CONFIG_SND_SOC_CS42L51_I2C is not set
+# CONFIG_SND_SOC_CS42L52 is not set
+# CONFIG_SND_SOC_CS42L56 is not set
+# CONFIG_SND_SOC_CS42L73 is not set
+# CONFIG_SND_SOC_CS4234 is not set
+# CONFIG_SND_SOC_CS4265 is not set
+# CONFIG_SND_SOC_CS4270 is not set
+# CONFIG_SND_SOC_CS4271_I2C is not set
+# CONFIG_SND_SOC_CS4271_SPI is not set
+# CONFIG_SND_SOC_CS42XX8_I2C is not set
+# CONFIG_SND_SOC_CS43130 is not set
+# CONFIG_SND_SOC_CS4341 is not set
+# CONFIG_SND_SOC_CS4349 is not set
+# CONFIG_SND_SOC_CS53L30 is not set
+# CONFIG_SND_SOC_CX2072X is not set
+# CONFIG_SND_SOC_DA7213 is not set
+# CONFIG_SND_SOC_DMIC is not set
+# CONFIG_SND_SOC_ES7134 is not set
+# CONFIG_SND_SOC_ES7241 is not set
+# CONFIG_SND_SOC_ES8316 is not set
+# CONFIG_SND_SOC_ES8328_I2C is not set
+# CONFIG_SND_SOC_ES8328_SPI is not set
+# CONFIG_SND_SOC_GTM601 is not set
+# CONFIG_SND_SOC_INNO_RK3036 is not set
+# CONFIG_SND_SOC_MAX98088 is not set
+# CONFIG_SND_SOC_MAX98357A is not set
+# CONFIG_SND_SOC_MAX98504 is not set
+# CONFIG_SND_SOC_MAX9867 is not set
+# CONFIG_SND_SOC_MAX98927 is not set
+# CONFIG_SND_SOC_MAX98373_I2C is not set
+# CONFIG_SND_SOC_MAX98390 is not set
+# CONFIG_SND_SOC_MAX9860 is not set
+# CONFIG_SND_SOC_MSM8916_WCD_DIGITAL is not set
+# CONFIG_SND_SOC_PCM1681 is not set
+# CONFIG_SND_SOC_PCM1789_I2C is not set
+# CONFIG_SND_SOC_PCM179X_I2C is not set
+# CONFIG_SND_SOC_PCM179X_SPI is not set
+# CONFIG_SND_SOC_PCM186X_I2C is not set
+# CONFIG_SND_SOC_PCM186X_SPI is not set
+# CONFIG_SND_SOC_PCM3060_I2C is not set
+# CONFIG_SND_SOC_PCM3060_SPI is not set
+# CONFIG_SND_SOC_PCM3168A_I2C is not set
+# CONFIG_SND_SOC_PCM3168A_SPI is not set
+# CONFIG_SND_SOC_PCM512x_I2C is not set
+# CONFIG_SND_SOC_PCM512x_SPI is not set
+# CONFIG_SND_SOC_RK3328 is not set
+# CONFIG_SND_SOC_RT5616 is not set
+# CONFIG_SND_SOC_RT5631 is not set
+# CONFIG_SND_SOC_SGTL5000 is not set
+# CONFIG_SND_SOC_SIMPLE_AMPLIFIER is not set
+# CONFIG_SND_SOC_SIRF_AUDIO_CODEC is not set
+# CONFIG_SND_SOC_SPDIF is not set
+# CONFIG_SND_SOC_SSM2305 is not set
+# CONFIG_SND_SOC_SSM2602_SPI is not set
+# CONFIG_SND_SOC_SSM2602_I2C is not set
+# CONFIG_SND_SOC_SSM4567 is not set
+# CONFIG_SND_SOC_STA32X is not set
+# CONFIG_SND_SOC_STA350 is not set
+# CONFIG_SND_SOC_STI_SAS is not set
+# CONFIG_SND_SOC_TAS2552 is not set
+# CONFIG_SND_SOC_TAS2562 is not set
+# CONFIG_SND_SOC_TAS2764 is not set
+# CONFIG_SND_SOC_TAS2770 is not set
+# CONFIG_SND_SOC_TAS5086 is not set
+# CONFIG_SND_SOC_TAS571X is not set
+# CONFIG_SND_SOC_TAS5720 is not set
+# CONFIG_SND_SOC_TAS6424 is not set
+# CONFIG_SND_SOC_TDA7419 is not set
+# CONFIG_SND_SOC_TFA9879 is not set
+# CONFIG_SND_SOC_TLV320AIC23_I2C is not set
+# CONFIG_SND_SOC_TLV320AIC23_SPI is not set
+# CONFIG_SND_SOC_TLV320AIC31XX is not set
+# CONFIG_SND_SOC_TLV320AIC32X4_I2C is not set
+# CONFIG_SND_SOC_TLV320AIC32X4_SPI is not set
+# CONFIG_SND_SOC_TLV320AIC3X is not set
+# CONFIG_SND_SOC_TLV320ADCX140 is not set
+# CONFIG_SND_SOC_TS3A227E is not set
+# CONFIG_SND_SOC_TSCS42XX is not set
+# CONFIG_SND_SOC_TSCS454 is not set
+# CONFIG_SND_SOC_UDA1334 is not set
+# CONFIG_SND_SOC_WM8510 is not set
+# CONFIG_SND_SOC_WM8523 is not set
+# CONFIG_SND_SOC_WM8524 is not set
+# CONFIG_SND_SOC_WM8580 is not set
+# CONFIG_SND_SOC_WM8711 is not set
+# CONFIG_SND_SOC_WM8728 is not set
+# CONFIG_SND_SOC_WM8731 is not set
+# CONFIG_SND_SOC_WM8737 is not set
+# CONFIG_SND_SOC_WM8741 is not set
+# CONFIG_SND_SOC_WM8750 is not set
+# CONFIG_SND_SOC_WM8753 is not set
+# CONFIG_SND_SOC_WM8770 is not set
+# CONFIG_SND_SOC_WM8776 is not set
+# CONFIG_SND_SOC_WM8782 is not set
+# CONFIG_SND_SOC_WM8804_I2C is not set
+# CONFIG_SND_SOC_WM8804_SPI is not set
+# CONFIG_SND_SOC_WM8903 is not set
+# CONFIG_SND_SOC_WM8904 is not set
+# CONFIG_SND_SOC_WM8960 is not set
+# CONFIG_SND_SOC_WM8962 is not set
+# CONFIG_SND_SOC_WM8974 is not set
+# CONFIG_SND_SOC_WM8978 is not set
+# CONFIG_SND_SOC_WM8985 is not set
+# CONFIG_SND_SOC_ZL38060 is not set
+# CONFIG_SND_SOC_ZX_AUD96P22 is not set
+# CONFIG_SND_SOC_MAX9759 is not set
+# CONFIG_SND_SOC_MT6351 is not set
+# CONFIG_SND_SOC_MT6358 is not set
+# CONFIG_SND_SOC_MT6660 is not set
+# CONFIG_SND_SOC_NAU8540 is not set
+# CONFIG_SND_SOC_NAU8810 is not set
+# CONFIG_SND_SOC_NAU8822 is not set
+# CONFIG_SND_SOC_NAU8824 is not set
+# CONFIG_SND_SOC_TPA6130A2 is not set
+# end of CODEC drivers
+
+# CONFIG_SND_SIMPLE_CARD is not set
+# CONFIG_SND_AUDIO_GRAPH_CARD is not set
+
+#
+# HID support
+#
+CONFIG_HID=y
+# CONFIG_HID_BATTERY_STRENGTH is not set
+# CONFIG_HIDRAW is not set
+# CONFIG_UHID is not set
+CONFIG_HID_GENERIC=y
+
+#
+# Special HID drivers
+#
+# CONFIG_HID_A4TECH is not set
+# CONFIG_HID_ACCUTOUCH is not set
+# CONFIG_HID_ACRUX is not set
+# CONFIG_HID_APPLE is not set
+# CONFIG_HID_APPLEIR is not set
+# CONFIG_HID_AUREAL is not set
+# CONFIG_HID_BELKIN is not set
+# CONFIG_HID_BETOP_FF is not set
+# CONFIG_HID_CHERRY is not set
+# CONFIG_HID_CHICONY is not set
+# CONFIG_HID_COUGAR is not set
+# CONFIG_HID_MACALLY is not set
+# CONFIG_HID_PRODIKEYS is not set
+# CONFIG_HID_CMEDIA is not set
+# CONFIG_HID_CREATIVE_SB0540 is not set
+# CONFIG_HID_CYPRESS is not set
+# CONFIG_HID_DRAGONRISE is not set
+# CONFIG_HID_EMS_FF is not set
+# CONFIG_HID_ELECOM is not set
+# CONFIG_HID_ELO is not set
+# CONFIG_HID_EZKEY is not set
+# CONFIG_HID_GEMBIRD is not set
+# CONFIG_HID_GFRM is not set
+# CONFIG_HID_GLORIOUS is not set
+# CONFIG_HID_HOLTEK is not set
+# CONFIG_HID_VIVALDI is not set
+# CONFIG_HID_KEYTOUCH is not set
+# CONFIG_HID_KYE is not set
+# CONFIG_HID_UCLOGIC is not set
+# CONFIG_HID_WALTOP is not set
+# CONFIG_HID_VIEWSONIC is not set
+# CONFIG_HID_GYRATION is not set
+# CONFIG_HID_ICADE is not set
+# CONFIG_HID_ITE is not set
+# CONFIG_HID_JABRA is not set
+# CONFIG_HID_TWINHAN is not set
+# CONFIG_HID_KENSINGTON is not set
+# CONFIG_HID_LCPOWER is not set
+# CONFIG_HID_LENOVO is not set
+# CONFIG_HID_MAGICMOUSE is not set
+# CONFIG_HID_MALTRON is not set
+# CONFIG_HID_MAYFLASH is not set
+# CONFIG_HID_REDRAGON is not set
+# CONFIG_HID_MICROSOFT is not set
+# CONFIG_HID_MONTEREY is not set
+# CONFIG_HID_MULTITOUCH is not set
+# CONFIG_HID_NTI is not set
+# CONFIG_HID_NTRIG is not set
+# CONFIG_HID_ORTEK is not set
+# CONFIG_HID_PANTHERLORD is not set
+# CONFIG_HID_PENMOUNT is not set
+# CONFIG_HID_PETALYNX is not set
+# CONFIG_HID_PICOLCD is not set
+# CONFIG_HID_PLANTRONICS is not set
+# CONFIG_HID_PRIMAX is not set
+# CONFIG_HID_RETRODE is not set
+# CONFIG_HID_ROCCAT is not set
+# CONFIG_HID_SAITEK is not set
+# CONFIG_HID_SAMSUNG is not set
+# CONFIG_HID_SPEEDLINK is not set
+# CONFIG_HID_STEAM is not set
+# CONFIG_HID_STEELSERIES is not set
+# CONFIG_HID_SUNPLUS is not set
+# CONFIG_HID_RMI is not set
+# CONFIG_HID_GREENASIA is not set
+# CONFIG_HID_SMARTJOYPLUS is not set
+# CONFIG_HID_TIVO is not set
+# CONFIG_HID_TOPSEED is not set
+# CONFIG_HID_THRUSTMASTER is not set
+# CONFIG_HID_UDRAW_PS3 is not set
+# CONFIG_HID_WACOM is not set
+# CONFIG_HID_XINMO is not set
+# CONFIG_HID_ZEROPLUS is not set
+# CONFIG_HID_ZYDACRON is not set
+# CONFIG_HID_SENSOR_HUB is not set
+# CONFIG_HID_ALPS is not set
+# CONFIG_HID_MCP2221 is not set
+# end of Special HID drivers
+
+#
+# USB HID support
+#
+CONFIG_USB_HID=y
+# CONFIG_HID_PID is not set
+# CONFIG_USB_HIDDEV is not set
+# end of USB HID support
+
+#
+# I2C HID support
+#
+# CONFIG_I2C_HID is not set
+# end of I2C HID support
+# end of HID support
+
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_COMMON=y
+# CONFIG_USB_ULPI_BUS is not set
+# CONFIG_USB_CONN_GPIO is not set
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB=y
+# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEFAULT_PERSIST=y
+# CONFIG_USB_FEW_INIT_RETRIES is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG_PRODUCTLIST is not set
+# CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB is not set
+CONFIG_USB_AUTOSUSPEND_DELAY=2
+# CONFIG_USB_MON is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_C67X00_HCD is not set
+# CONFIG_USB_XHCI_HCD is not set
+# CONFIG_USB_EHCI_HCD is not set
+# CONFIG_USB_OXU210HP_HCD is not set
+# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_FOTG210_HCD is not set
+# CONFIG_USB_MAX3421_HCD is not set
+# CONFIG_USB_OHCI_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+# CONFIG_USB_HCD_TEST_MODE is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+# CONFIG_USB_WDM is not set
+# CONFIG_USB_TMC is not set
+
+#
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
+#
+
+#
+# also be needed; see USB_STORAGE Help for more info
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_REALTEK is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_ONETOUCH is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
+# CONFIG_USB_STORAGE_ENE_UB6250 is not set
+# CONFIG_USB_UAS is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+# CONFIG_USBIP_CORE is not set
+# CONFIG_USB_CDNS3 is not set
+# CONFIG_USB_MUSB_HDRC is not set
+# CONFIG_USB_DWC3 is not set
+CONFIG_USB_DWC2=y
+# CONFIG_USB_DWC2_HOST is not set
+
+#
+# Gadget/Dual-role mode requires USB Gadget support to be enabled
+#
+# CONFIG_USB_DWC2_PERIPHERAL is not set
+CONFIG_USB_DWC2_DUAL_ROLE=y
+# CONFIG_USB_DWC2_DEBUG is not set
+# CONFIG_USB_DWC2_TRACK_MISSED_SOFS is not set
+# CONFIG_USB_CHIPIDEA is not set
+# CONFIG_USB_ISP1760 is not set
+# CONFIG_USB_CVITEK_DRD is not set
+# CONFIG_USB_CVITEK_GADGET is not set
+
+#
+# Platform Glue Driver Support
+#
+
+#
+# USB port drivers
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_SEVSEG is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_APPLE_MFI_FASTCHARGE is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+# CONFIG_USB_EHSET_TEST_FIXTURE is not set
+# CONFIG_USB_ISIGHTFW is not set
+# CONFIG_USB_YUREX is not set
+# CONFIG_USB_EZUSB_FX2 is not set
+# CONFIG_USB_HUB_USB251XB is not set
+# CONFIG_USB_HSIC_USB3503 is not set
+# CONFIG_USB_HSIC_USB4604 is not set
+# CONFIG_USB_LINK_LAYER_TEST is not set
+# CONFIG_USB_CHAOSKEY is not set
+
+#
+# USB Physical Layer drivers
+#
+# CONFIG_NOP_USB_XCEIV is not set
+# CONFIG_USB_GPIO_VBUS is not set
+# CONFIG_USB_ISP1301 is not set
+# end of USB Physical Layer drivers
+
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+# CONFIG_USB_GADGET_DEBUG_FS is not set
+CONFIG_USB_GADGET_VBUS_DRAW=2
+CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2
+# CONFIG_U_SERIAL_CONSOLE is not set
+
+#
+# USB Peripheral Controller
+#
+# CONFIG_USB_FOTG210_UDC is not set
+# CONFIG_USB_GR_UDC is not set
+# CONFIG_USB_R8A66597 is not set
+# CONFIG_USB_PXA27X is not set
+# CONFIG_USB_MV_UDC is not set
+# CONFIG_USB_MV_U3D is not set
+# CONFIG_USB_SNP_UDC_PLAT is not set
+# CONFIG_USB_M66592 is not set
+# CONFIG_USB_BDC_UDC is not set
+# CONFIG_USB_NET2272 is not set
+# CONFIG_USB_GADGET_XILINX is not set
+# CONFIG_USB_MAX3420_UDC is not set
+# CONFIG_USB_DUMMY_HCD is not set
+# end of USB Peripheral Controller
+
+CONFIG_USB_LIBCOMPOSITE=y
+CONFIG_USB_F_ACM=y
+CONFIG_USB_U_SERIAL=y
+CONFIG_USB_U_ETHER=y
+CONFIG_USB_U_AUDIO=y
+CONFIG_USB_F_SERIAL=y
+CONFIG_USB_F_NCM=y
+CONFIG_USB_F_RNDIS=y
+CONFIG_USB_F_MASS_STORAGE=y
+CONFIG_USB_F_UAC1=y
+CONFIG_USB_CONFIGFS=y
+CONFIG_USB_CONFIGFS_SERIAL=y
+CONFIG_USB_CONFIGFS_ACM=y
+# CONFIG_USB_CONFIGFS_OBEX is not set
+CONFIG_USB_CONFIGFS_NCM=y
+# CONFIG_USB_CONFIGFS_ECM is not set
+# CONFIG_USB_CONFIGFS_ECM_SUBSET is not set
+CONFIG_USB_CONFIGFS_RNDIS=y
+# CONFIG_USB_CONFIGFS_EEM is not set
+CONFIG_USB_CONFIGFS_MASS_STORAGE=y
+# CONFIG_USB_CONFIGFS_F_LB_SS is not set
+# CONFIG_USB_CONFIGFS_F_FS is not set
+CONFIG_USB_CONFIGFS_F_UAC1=y
+# CONFIG_USB_CONFIGFS_F_UAC1_LEGACY is not set
+# CONFIG_USB_CONFIGFS_F_UAC2 is not set
+# CONFIG_USB_CONFIGFS_F_MIDI is not set
+# CONFIG_USB_CONFIGFS_F_HID is not set
+# CONFIG_USB_CONFIGFS_F_PRINTER is not set
+
+#
+# USB Gadget precomposed configurations
+#
+# CONFIG_USB_ZERO is not set
+# CONFIG_USB_AUDIO is not set
+# CONFIG_USB_ETH is not set
+# CONFIG_USB_G_NCM is not set
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FUNCTIONFS is not set
+# CONFIG_USB_MASS_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_PRINTER is not set
+# CONFIG_USB_CDC_COMPOSITE is not set
+# CONFIG_USB_G_ACM_MS is not set
+# CONFIG_USB_G_MULTI is not set
+# CONFIG_USB_G_HID is not set
+# CONFIG_USB_G_DBGP is not set
+# CONFIG_USB_RAW_GADGET is not set
+# end of USB Gadget precomposed configurations
+
+# CONFIG_TYPEC is not set
+CONFIG_USB_ROLE_SWITCH=y
+CONFIG_MMC=y
+CONFIG_PWRSEQ_EMMC=y
+CONFIG_PWRSEQ_SIMPLE=y
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_MINORS=8
+# CONFIG_SDIO_UART is not set
+# CONFIG_MMC_TEST is not set
+
+#
+# MMC/SD/SDIO Host Controller Drivers
+#
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_SDHCI=y
+CONFIG_MMC_SDHCI_PLTFM=y
+# CONFIG_MMC_SDHCI_OF_ARASAN is not set
+# CONFIG_MMC_SDHCI_OF_ASPEED is not set
+# CONFIG_MMC_SDHCI_OF_AT91 is not set
+# CONFIG_MMC_SDHCI_OF_DWCMSHC is not set
+# CONFIG_MMC_SDHCI_OF_LIGHT_MPW is not set
+# CONFIG_MMC_SDHCI_CADENCE is not set
+# CONFIG_MMC_SDHCI_F_SDH30 is not set
+# CONFIG_MMC_SDHCI_MILBEAUT is not set
+CONFIG_MMC_SDHCI_CVI=y
+# CONFIG_MMC_SPI is not set
+# CONFIG_MMC_DW is not set
+# CONFIG_MMC_VUB300 is not set
+# CONFIG_MMC_USHC is not set
+# CONFIG_MMC_USDHI6ROL0 is not set
+# CONFIG_MMC_CQHCI is not set
+# CONFIG_MMC_HSQ is not set
+# CONFIG_MMC_MTK is not set
+# CONFIG_MMC_SDHCI_XENON is not set
+# CONFIG_MMC_SDHCI_OMAP is not set
+# CONFIG_MMC_SDHCI_AM654 is not set
+# CONFIG_MEMSTICK is not set
+# CONFIG_NEW_LEDS is not set
+# CONFIG_ACCESSIBILITY is not set
+# CONFIG_INFINIBAND is not set
+CONFIG_EDAC_SUPPORT=y
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+CONFIG_RTC_SYSTOHC=y
+CONFIG_RTC_SYSTOHC_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+CONFIG_RTC_NVMEM=y
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+# CONFIG_RTC_DRV_ABB5ZES3 is not set
+# CONFIG_RTC_DRV_ABEOZ9 is not set
+# CONFIG_RTC_DRV_ABX80X is not set
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1374 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_HYM8563 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_ISL12022 is not set
+# CONFIG_RTC_DRV_ISL12026 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8523 is not set
+# CONFIG_RTC_DRV_PCF85063 is not set
+# CONFIG_RTC_DRV_PCF85363 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+# CONFIG_RTC_DRV_BQ32K is not set
+# CONFIG_RTC_DRV_S35390A is not set
+# CONFIG_RTC_DRV_FM3130 is not set
+# CONFIG_RTC_DRV_RX8010 is not set
+# CONFIG_RTC_DRV_RX8581 is not set
+# CONFIG_RTC_DRV_RX8025 is not set
+# CONFIG_RTC_DRV_EM3027 is not set
+# CONFIG_RTC_DRV_RV3028 is not set
+# CONFIG_RTC_DRV_RV3032 is not set
+# CONFIG_RTC_DRV_RV8803 is not set
+# CONFIG_RTC_DRV_SD3078 is not set
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_M41T93 is not set
+# CONFIG_RTC_DRV_M41T94 is not set
+# CONFIG_RTC_DRV_DS1302 is not set
+# CONFIG_RTC_DRV_DS1305 is not set
+# CONFIG_RTC_DRV_DS1343 is not set
+# CONFIG_RTC_DRV_DS1347 is not set
+# CONFIG_RTC_DRV_DS1390 is not set
+# CONFIG_RTC_DRV_MAX6916 is not set
+# CONFIG_RTC_DRV_R9701 is not set
+# CONFIG_RTC_DRV_RX4581 is not set
+# CONFIG_RTC_DRV_RX6110 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_PCF2123 is not set
+# CONFIG_RTC_DRV_MCP795 is not set
+CONFIG_RTC_I2C_AND_SPI=y
+
+#
+# SPI and I2C RTC drivers
+#
+# CONFIG_RTC_DRV_DS3232 is not set
+# CONFIG_RTC_DRV_PCF2127 is not set
+# CONFIG_RTC_DRV_RV3029C2 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_DS1286 is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1685_FAMILY is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_DS2404 is not set
+# CONFIG_RTC_DRV_EFI is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T35 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_MSM6242 is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
+# CONFIG_RTC_DRV_RP5C01 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+# CONFIG_RTC_DRV_ZYNQMP is not set
+
+#
+# on-CPU RTC drivers
+#
+# CONFIG_RTC_DRV_CADENCE is not set
+# CONFIG_RTC_DRV_FTRTC010 is not set
+# CONFIG_RTC_DRV_R7301 is not set
+
+#
+# HID Sensor RTC drivers
+#
+CONFIG_DMADEVICES=y
+# CONFIG_DMADEVICES_DEBUG is not set
+
+#
+# DMA Devices
+#
+CONFIG_DMA_ENGINE=y
+CONFIG_DMA_OF=y
+# CONFIG_ALTERA_MSGDMA is not set
+# CONFIG_DW_AXI_DMAC is not set
+# CONFIG_FSL_EDMA is not set
+# CONFIG_INTEL_IDMA64 is not set
+# CONFIG_XILINX_ZYNQMP_DPDMA is not set
+# CONFIG_QCOM_HIDMA_MGMT is not set
+# CONFIG_QCOM_HIDMA is not set
+# CONFIG_DW_DMAC is not set
+# CONFIG_SF_PDMA is not set
+CONFIG_DW_DMAC_CVITEK=y
+
+#
+# DMA Clients
+#
+# CONFIG_ASYNC_TX_DMA is not set
+# CONFIG_DMATEST is not set
+
+#
+# DMABUF options
+#
+# CONFIG_SYNC_FILE is not set
+CONFIG_UDMABUF=y
+# CONFIG_DMABUF_MOVE_NOTIFY is not set
+# CONFIG_DMABUF_SELFTESTS is not set
+CONFIG_DMABUF_HEAPS=y
+CONFIG_DMABUF_HEAPS_SYSTEM=y
+# CONFIG_DMABUF_HEAPS_CMA is not set
+# end of DMABUF options
+
+# CONFIG_AUXDISPLAY is not set
+# CONFIG_UIO is not set
+# CONFIG_VIRT_DRIVERS is not set
+# CONFIG_VIRTIO_MENU is not set
+# CONFIG_VDPA is not set
+CONFIG_VHOST_MENU=y
+# CONFIG_VHOST_NET is not set
+# CONFIG_VHOST_CROSS_ENDIAN_LEGACY is not set
+
+#
+# Microsoft Hyper-V guest support
+#
+# end of Microsoft Hyper-V guest support
+
+# CONFIG_GREYBUS is not set
+CONFIG_STAGING=y
+# CONFIG_PRISM2_USB is not set
+# CONFIG_COMEDI is not set
+# CONFIG_RTLLIB is not set
+# CONFIG_RTL8723BS is not set
+# CONFIG_R8712U is not set
+# CONFIG_R8188EU is not set
+# CONFIG_STAGING_MEDIA is not set
+
+#
+# Android
+#
+# CONFIG_ASHMEM is not set
+CONFIG_ION=y
+CONFIG_ION_SYSTEM_HEAP=y
+CONFIG_ION_CARVEOUT_HEAP=y
+# CONFIG_ION_CHUNK_HEAP is not set
+CONFIG_ION_CMA_HEAP=y
+CONFIG_ION_CVITEK=y
+# end of Android
+
+# CONFIG_STAGING_BOARD is not set
+# CONFIG_LTE_GDM724X is not set
+# CONFIG_GS_FPGABOOT is not set
+# CONFIG_UNISYSSPAR is not set
+# CONFIG_FB_TFT is not set
+# CONFIG_KS7010 is not set
+# CONFIG_PI433 is not set
+
+#
+# Gasket devices
+#
+# end of Gasket devices
+
+# CONFIG_XIL_AXIS_FIFO is not set
+# CONFIG_FIELDBUS_DEV is not set
+# CONFIG_GOLDFISH is not set
+CONFIG_HAVE_CLK=y
+CONFIG_CLKDEV_LOOKUP=y
+CONFIG_HAVE_CLK_PREPARE=y
+CONFIG_COMMON_CLK=y
+# CONFIG_COMMON_CLK_MAX9485 is not set
+# CONFIG_COMMON_CLK_SI5341 is not set
+# CONFIG_COMMON_CLK_SI5351 is not set
+# CONFIG_COMMON_CLK_SI514 is not set
+# CONFIG_COMMON_CLK_SI544 is not set
+# CONFIG_COMMON_CLK_SI570 is not set
+# CONFIG_COMMON_CLK_CDCE706 is not set
+# CONFIG_COMMON_CLK_CDCE925 is not set
+# CONFIG_COMMON_CLK_CS2000_CP is not set
+# CONFIG_COMMON_CLK_PWM is not set
+# CONFIG_COMMON_CLK_VC5 is not set
+# CONFIG_COMMON_CLK_FIXED_MMIO is not set
+# CONFIG_CLK_SIFIVE is not set
+CONFIG_COMMON_CLK_CVITEK=y
+# CONFIG_COMMON_CLK_CV1832_TPU_500M is not set
+# CONFIG_HWSPINLOCK is not set
+
+#
+# Clock Source drivers
+#
+CONFIG_TIMER_OF=y
+CONFIG_TIMER_PROBE=y
+CONFIG_RISCV_TIMER=y
+# CONFIG_MICROCHIP_PIT64B is not set
+# end of Clock Source drivers
+
+# CONFIG_MAILBOX is not set
+# CONFIG_IOMMU_SUPPORT is not set
+
+#
+# Remoteproc drivers
+#
+# CONFIG_REMOTEPROC is not set
+# end of Remoteproc drivers
+
+#
+# Rpmsg drivers
+#
+# CONFIG_RPMSG_VIRTIO is not set
+# end of Rpmsg drivers
+
+# CONFIG_SOUNDWIRE is not set
+
+#
+# SOC (System On Chip) specific Drivers
+#
+
+#
+# Amlogic SoC drivers
+#
+# end of Amlogic SoC drivers
+
+#
+# Aspeed SoC drivers
+#
+# end of Aspeed SoC drivers
+
+#
+# Broadcom SoC drivers
+#
+# end of Broadcom SoC drivers
+
+#
+# NXP/Freescale QorIQ SoC drivers
+#
+# end of NXP/Freescale QorIQ SoC drivers
+
+#
+# i.MX SoC drivers
+#
+# end of i.MX SoC drivers
+
+#
+# Qualcomm SoC drivers
+#
+# end of Qualcomm SoC drivers
+
+# CONFIG_SOC_TI is not set
+
+#
+# Xilinx SoC drivers
+#
+# CONFIG_XILINX_VCU is not set
+# end of Xilinx SoC drivers
+
+#
+# CVITEK SoC drivers
+#
+CONFIG_CV1835_SYSDMA_REMAP=y
+CONFIG_CVI_WIFI_PIN=y
+# CONFIG_CVI_BT_PIN is not set
+CONFIG_CVI_MAILBOX=y
+# end of CVITEK SoC drivers
+# end of SOC (System On Chip) specific Drivers
+
+# CONFIG_PM_DEVFREQ is not set
+# CONFIG_EXTCON is not set
+# CONFIG_MEMORY is not set
+# CONFIG_IIO is not set
+CONFIG_PWM=y
+CONFIG_PWM_SYSFS=y
+# CONFIG_PWM_DEBUG is not set
+# CONFIG_PWM_FSL_FTM is not set
+# CONFIG_PWM_PCA9685 is not set
+# CONFIG_PWM_SIFIVE is not set
+
+#
+# IRQ chip support
+#
+CONFIG_IRQCHIP=y
+# CONFIG_AL_FIC is not set
+CONFIG_RISCV_INTC=y
+CONFIG_SIFIVE_PLIC=y
+# end of IRQ chip support
+
+# CONFIG_IPACK_BUS is not set
+CONFIG_RESET_CONTROLLER=y
+# CONFIG_RESET_BRCMSTB_RESCAL is not set
+# CONFIG_RESET_INTEL_GW is not set
+# CONFIG_RESET_TI_SYSCON is not set
+
+#
+# PHY Subsystem
+#
+# CONFIG_GENERIC_PHY is not set
+# CONFIG_USB_LGM_PHY is not set
+# CONFIG_BCM_KONA_USB2_PHY is not set
+# CONFIG_PHY_CADENCE_TORRENT is not set
+# CONFIG_PHY_CADENCE_DPHY is not set
+# CONFIG_PHY_CADENCE_SIERRA is not set
+# CONFIG_PHY_CADENCE_SALVO is not set
+# CONFIG_PHY_FSL_IMX8MQ_USB is not set
+# CONFIG_PHY_MIXEL_MIPI_DPHY is not set
+# CONFIG_PHY_PXA_28NM_HSIC is not set
+# CONFIG_PHY_PXA_28NM_USB2 is not set
+# CONFIG_PHY_MAPPHONE_MDM6600 is not set
+# CONFIG_PHY_OCELOT_SERDES is not set
+# CONFIG_PHY_SAMSUNG_USB2 is not set
+# end of PHY Subsystem
+
+# CONFIG_POWERCAP is not set
+# CONFIG_MCB is not set
+# CONFIG_RAS is not set
+
+#
+# Android
+#
+CONFIG_ANDROID=y
+# CONFIG_ANDROID_BINDER_IPC is not set
+# end of Android
+
+# CONFIG_LIBNVDIMM is not set
+# CONFIG_DAX is not set
+CONFIG_NVMEM=y
+CONFIG_NVMEM_SYSFS=y
+
+#
+# HW tracing support
+#
+# CONFIG_STM is not set
+# CONFIG_INTEL_TH is not set
+# end of HW tracing support
+
+# CONFIG_FPGA is not set
+# CONFIG_FSI is not set
+# CONFIG_SIOX is not set
+# CONFIG_SLIMBUS is not set
+# CONFIG_INTERCONNECT is not set
+# CONFIG_COUNTER is not set
+# CONFIG_MOST is not set
+CONFIG_EFUSE=y
+CONFIG_CV181X_EFUSE=y
+# end of Device Drivers
+
+#
+# File systems
+#
+# CONFIG_VALIDATE_FS_PARSER is not set
+CONFIG_FS_IOMAP=y
+# CONFIG_EXT2_FS is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+CONFIG_EXT4_FS=y
+CONFIG_EXT4_USE_FOR_EXT2=y
+# CONFIG_EXT4_FS_POSIX_ACL is not set
+# CONFIG_EXT4_FS_SECURITY is not set
+CONFIG_EXT4_DEBUG=y
+CONFIG_JBD2=y
+# CONFIG_JBD2_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_BTRFS_FS is not set
+# CONFIG_NILFS2_FS is not set
+# CONFIG_F2FS_FS is not set
+# CONFIG_FS_DAX is not set
+# CONFIG_EXPORTFS_BLOCK_OPS is not set
+CONFIG_FILE_LOCKING=y
+# CONFIG_MANDATORY_FILE_LOCKING is not set
+# CONFIG_FS_ENCRYPTION is not set
+# CONFIG_FS_VERITY is not set
+CONFIG_FSNOTIFY=y
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_FANOTIFY is not set
+# CONFIG_QUOTA is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_FUSE_FS is not set
+# CONFIG_OVERLAY_FS is not set
+
+#
+# Caches
+#
+# CONFIG_FSCACHE is not set
+# end of Caches
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+# end of CD-ROM/DVD Filesystems
+
+#
+# DOS/FAT/EXFAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_FAT_DEFAULT_UTF8 is not set
+# CONFIG_EXFAT_FS is not set
+# CONFIG_NTFS_FS is not set
+# end of DOS/FAT/EXFAT/NT Filesystems
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+# CONFIG_PROC_KCORE is not set
+CONFIG_PROC_SYSCTL=y
+# CONFIG_PROC_PAGE_MONITOR is not set
+# CONFIG_PROC_CHILDREN is not set
+CONFIG_KERNFS=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_TMPFS_XATTR is not set
+# CONFIG_TMPFS_INODE64 is not set
+# CONFIG_HUGETLBFS is not set
+CONFIG_MEMFD_CREATE=y
+CONFIG_ARCH_HAS_GIGANTIC_PAGE=y
+CONFIG_CONFIGFS_FS=y
+CONFIG_EFIVAR_FS=m
+# end of Pseudo filesystems
+
+CONFIG_MISC_FILESYSTEMS=y
+# CONFIG_ORANGEFS_FS is not set
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_ECRYPT_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
+CONFIG_SQUASHFS=y
+CONFIG_SQUASHFS_FILE_CACHE=y
+# CONFIG_SQUASHFS_FILE_DIRECT is not set
+CONFIG_SQUASHFS_DECOMP_SINGLE=y
+# CONFIG_SQUASHFS_DECOMP_MULTI is not set
+# CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU is not set
+# CONFIG_SQUASHFS_XATTR is not set
+# CONFIG_SQUASHFS_ZLIB is not set
+CONFIG_SQUASHFS_LZ4=y
+# CONFIG_SQUASHFS_LZO is not set
+CONFIG_SQUASHFS_XZ=y
+# CONFIG_SQUASHFS_ZSTD is not set
+# CONFIG_SQUASHFS_4K_DEVBLK_SIZE is not set
+# CONFIG_SQUASHFS_EMBEDDED is not set
+CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+# CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_QNX6FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_PSTORE is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+# CONFIG_EROFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V2=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_SWAP is not set
+CONFIG_NFS_DISABLE_UDP_SUPPORT=y
+# CONFIG_NFSD is not set
+CONFIG_GRACE_PERIOD=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_SUNRPC_DEBUG is not set
+# CONFIG_CEPH_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=y
+CONFIG_NLS_ISO8859_3=y
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+# CONFIG_NLS_MAC_ROMAN is not set
+# CONFIG_NLS_MAC_CELTIC is not set
+# CONFIG_NLS_MAC_CENTEURO is not set
+# CONFIG_NLS_MAC_CROATIAN is not set
+# CONFIG_NLS_MAC_CYRILLIC is not set
+# CONFIG_NLS_MAC_GAELIC is not set
+# CONFIG_NLS_MAC_GREEK is not set
+# CONFIG_NLS_MAC_ICELAND is not set
+# CONFIG_NLS_MAC_INUIT is not set
+# CONFIG_NLS_MAC_ROMANIAN is not set
+# CONFIG_NLS_MAC_TURKISH is not set
+# CONFIG_NLS_UTF8 is not set
+# CONFIG_DLM is not set
+# CONFIG_UNICODE is not set
+# end of File systems
+
+#
+# Security options
+#
+CONFIG_KEYS=y
+# CONFIG_KEYS_REQUEST_CACHE is not set
+# CONFIG_PERSISTENT_KEYRINGS is not set
+# CONFIG_ENCRYPTED_KEYS is not set
+# CONFIG_KEY_DH_OPERATIONS is not set
+# CONFIG_SECURITY_DMESG_RESTRICT is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITYFS is not set
+CONFIG_HAVE_HARDENED_USERCOPY_ALLOCATOR=y
+# CONFIG_HARDENED_USERCOPY is not set
+# CONFIG_STATIC_USERMODEHELPER is not set
+CONFIG_DEFAULT_SECURITY_DAC=y
+CONFIG_LSM="lockdown,yama,loadpin,safesetid,integrity,bpf"
+
+#
+# Kernel hardening options
+#
+
+#
+# Memory initialization
+#
+CONFIG_INIT_STACK_NONE=y
+# CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set
+# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set
+# end of Memory initialization
+# end of Kernel hardening options
+# end of Security options
+
+CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_ALGAPI2=y
+CONFIG_CRYPTO_AEAD2=y
+CONFIG_CRYPTO_SKCIPHER=y
+CONFIG_CRYPTO_SKCIPHER2=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_HASH2=y
+CONFIG_CRYPTO_RNG=y
+CONFIG_CRYPTO_RNG2=y
+CONFIG_CRYPTO_RNG_DEFAULT=y
+CONFIG_CRYPTO_AKCIPHER2=y
+CONFIG_CRYPTO_AKCIPHER=y
+CONFIG_CRYPTO_KPP2=y
+CONFIG_CRYPTO_KPP=y
+CONFIG_CRYPTO_ACOMP2=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_MANAGER2=y
+# CONFIG_CRYPTO_USER is not set
+CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y
+# CONFIG_CRYPTO_NULL is not set
+CONFIG_CRYPTO_NULL2=y
+# CONFIG_CRYPTO_CRYPTD is not set
+# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Public-key cryptography
+#
+CONFIG_CRYPTO_RSA=y
+# CONFIG_CRYPTO_DH is not set
+CONFIG_CRYPTO_ECC=y
+CONFIG_CRYPTO_ECDH=y
+# CONFIG_CRYPTO_ECRDSA is not set
+# CONFIG_CRYPTO_SM2 is not set
+# CONFIG_CRYPTO_CURVE25519 is not set
+
+#
+# Authenticated Encryption with Associated Data
+#
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_CHACHA20POLY1305 is not set
+# CONFIG_CRYPTO_AEGIS128 is not set
+# CONFIG_CRYPTO_SEQIV is not set
+# CONFIG_CRYPTO_ECHAINIV is not set
+
+#
+# Block modes
+#
+# CONFIG_CRYPTO_CBC is not set
+# CONFIG_CRYPTO_CFB is not set
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_CTS is not set
+CONFIG_CRYPTO_ECB=y
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_OFB is not set
+# CONFIG_CRYPTO_PCBC is not set
+# CONFIG_CRYPTO_XTS is not set
+# CONFIG_CRYPTO_KEYWRAP is not set
+# CONFIG_CRYPTO_ADIANTUM is not set
+# CONFIG_CRYPTO_ESSIV is not set
+
+#
+# Hash modes
+#
+CONFIG_CRYPTO_CMAC=y
+CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_VMAC is not set
+
+#
+# Digest
+#
+CONFIG_CRYPTO_CRC32C=y
+# CONFIG_CRYPTO_CRC32 is not set
+# CONFIG_CRYPTO_XXHASH is not set
+# CONFIG_CRYPTO_BLAKE2B is not set
+# CONFIG_CRYPTO_BLAKE2S is not set
+# CONFIG_CRYPTO_CRCT10DIF is not set
+# CONFIG_CRYPTO_GHASH is not set
+# CONFIG_CRYPTO_POLY1305 is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
+# CONFIG_CRYPTO_RMD256 is not set
+# CONFIG_CRYPTO_RMD320 is not set
+# CONFIG_CRYPTO_SHA1 is not set
+CONFIG_CRYPTO_SHA256=y
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_SHA3 is not set
+# CONFIG_CRYPTO_SM3 is not set
+# CONFIG_CRYPTO_STREEBOG is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_WP512 is not set
+
+#
+# Ciphers
+#
+CONFIG_CRYPTO_AES=y
+# CONFIG_CRYPTO_AES_TI is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_SALSA20 is not set
+# CONFIG_CRYPTO_CHACHA20 is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_SM4 is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+
+#
+# Compression
+#
+# CONFIG_CRYPTO_DEFLATE is not set
+CONFIG_CRYPTO_LZO=m
+# CONFIG_CRYPTO_842 is not set
+# CONFIG_CRYPTO_LZ4 is not set
+# CONFIG_CRYPTO_LZ4HC is not set
+# CONFIG_CRYPTO_ZSTD is not set
+
+#
+# Random Number Generation
+#
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
+CONFIG_CRYPTO_DRBG_MENU=y
+CONFIG_CRYPTO_DRBG_HMAC=y
+# CONFIG_CRYPTO_DRBG_HASH is not set
+# CONFIG_CRYPTO_DRBG_CTR is not set
+CONFIG_CRYPTO_DRBG=y
+CONFIG_CRYPTO_JITTERENTROPY=y
+# CONFIG_CRYPTO_USER_API_HASH is not set
+# CONFIG_CRYPTO_USER_API_SKCIPHER is not set
+# CONFIG_CRYPTO_USER_API_RNG is not set
+# CONFIG_CRYPTO_USER_API_AEAD is not set
+CONFIG_CRYPTO_HASH_INFO=y
+
+#
+# Crypto library routines
+#
+CONFIG_CRYPTO_LIB_AES=y
+# CONFIG_CRYPTO_LIB_BLAKE2S is not set
+# CONFIG_CRYPTO_LIB_CHACHA is not set
+# CONFIG_CRYPTO_LIB_CURVE25519 is not set
+CONFIG_CRYPTO_LIB_POLY1305_RSIZE=1
+# CONFIG_CRYPTO_LIB_POLY1305 is not set
+# CONFIG_CRYPTO_LIB_CHACHA20POLY1305 is not set
+CONFIG_CRYPTO_LIB_SHA256=y
+# CONFIG_CRYPTO_HW is not set
+CONFIG_ASYMMETRIC_KEY_TYPE=y
+CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y
+CONFIG_X509_CERTIFICATE_PARSER=y
+# CONFIG_PKCS8_PRIVATE_KEY_PARSER is not set
+CONFIG_PKCS7_MESSAGE_PARSER=y
+# CONFIG_PKCS7_TEST_KEY is not set
+# CONFIG_SIGNED_PE_FILE_VERIFICATION is not set
+
+#
+# Certificates for signature checking
+#
+CONFIG_SYSTEM_TRUSTED_KEYRING=y
+CONFIG_SYSTEM_TRUSTED_KEYS=""
+# CONFIG_SYSTEM_EXTRA_CERTIFICATE is not set
+# CONFIG_SECONDARY_TRUSTED_KEYRING is not set
+# CONFIG_SYSTEM_BLACKLIST_KEYRING is not set
+# end of Certificates for signature checking
+
+#
+# Library routines
+#
+# CONFIG_PACKING is not set
+CONFIG_BITREVERSE=y
+CONFIG_GENERIC_STRNCPY_FROM_USER=y
+CONFIG_GENERIC_STRNLEN_USER=y
+CONFIG_GENERIC_NET_UTILS=y
+# CONFIG_CORDIC is not set
+# CONFIG_PRIME_NUMBERS is not set
+CONFIG_RATIONAL=y
+CONFIG_GENERIC_PCI_IOMAP=y
+# CONFIG_CRC_CCITT is not set
+CONFIG_CRC16=y
+# CONFIG_CRC_T10DIF is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC32_SELFTEST is not set
+CONFIG_CRC32_SLICEBY8=y
+# CONFIG_CRC32_SLICEBY4 is not set
+# CONFIG_CRC32_SARWATE is not set
+# CONFIG_CRC32_BIT is not set
+# CONFIG_CRC64 is not set
+# CONFIG_CRC4 is not set
+# CONFIG_CRC7 is not set
+# CONFIG_LIBCRC32C is not set
+# CONFIG_CRC8 is not set
+CONFIG_XXHASH=y
+# CONFIG_RANDOM32_SELFTEST is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_LZO_COMPRESS=m
+CONFIG_LZO_DECOMPRESS=y
+CONFIG_LZ4_DECOMPRESS=y
+CONFIG_ZSTD_DECOMPRESS=y
+CONFIG_XZ_DEC=y
+# CONFIG_XZ_DEC_X86 is not set
+# CONFIG_XZ_DEC_POWERPC is not set
+# CONFIG_XZ_DEC_IA64 is not set
+CONFIG_XZ_DEC_ARM=y
+# CONFIG_XZ_DEC_ARMTHUMB is not set
+# CONFIG_XZ_DEC_SPARC is not set
+CONFIG_XZ_DEC_BCJ=y
+# CONFIG_XZ_DEC_TEST is not set
+CONFIG_DECOMPRESS_GZIP=y
+CONFIG_DECOMPRESS_BZIP2=y
+CONFIG_DECOMPRESS_LZMA=y
+CONFIG_DECOMPRESS_XZ=y
+CONFIG_DECOMPRESS_LZO=y
+CONFIG_DECOMPRESS_LZ4=y
+CONFIG_DECOMPRESS_ZSTD=y
+CONFIG_GENERIC_ALLOCATOR=y
+CONFIG_ASSOCIATIVE_ARRAY=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT_MAP=y
+CONFIG_HAS_DMA=y
+CONFIG_NEED_DMA_MAP_STATE=y
+CONFIG_ARCH_DMA_ADDR_T_64BIT=y
+CONFIG_ARCH_HAS_DMA_WRITE_COMBINE=y
+CONFIG_DMA_DECLARE_COHERENT=y
+CONFIG_ARCH_HAS_SYNC_DMA_FOR_DEVICE=y
+CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU=y
+CONFIG_ARCH_HAS_DMA_PREP_COHERENT=y
+CONFIG_DMA_NONCOHERENT_MMAP=y
+CONFIG_DMA_COHERENT_POOL=y
+CONFIG_DMA_REMAP=y
+CONFIG_DMA_DIRECT_REMAP=y
+CONFIG_DMA_CMA=y
+# CONFIG_DMA_PERNUMA_CMA is not set
+
+#
+# Default contiguous memory area size:
+#
+CONFIG_CMA_SIZE_MBYTES=0
+CONFIG_CMA_SIZE_SEL_MBYTES=y
+# CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set
+# CONFIG_CMA_SIZE_SEL_MIN is not set
+# CONFIG_CMA_SIZE_SEL_MAX is not set
+CONFIG_CMA_ALIGNMENT=8
+# CONFIG_DMA_API_DEBUG is not set
+CONFIG_SGL_ALLOC=y
+CONFIG_DQL=y
+CONFIG_NLATTR=y
+CONFIG_CLZ_TAB=y
+# CONFIG_IRQ_POLL is not set
+CONFIG_MPILIB=y
+CONFIG_LIBFDT=y
+CONFIG_OID_REGISTRY=y
+CONFIG_UCS2_STRING=y
+CONFIG_HAVE_GENERIC_VDSO=y
+CONFIG_GENERIC_GETTIMEOFDAY=y
+CONFIG_FONT_SUPPORT=y
+CONFIG_FONT_8x16=y
+CONFIG_FONT_AUTOSELECT=y
+CONFIG_SG_POOL=y
+CONFIG_ARCH_STACKWALK=y
+CONFIG_SBITMAP=y
+# CONFIG_STRING_SELFTEST is not set
+# end of Library routines
+
+CONFIG_GENERIC_IOREMAP=y
+
+#
+# Kernel hacking
+#
+
+#
+# printk and dmesg options
+#
+CONFIG_PRINTK_TIME=y
+# CONFIG_PRINTK_CALLER is not set
+CONFIG_CONSOLE_LOGLEVEL_DEFAULT=7
+CONFIG_CONSOLE_LOGLEVEL_QUIET=4
+CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
+# CONFIG_BOOT_PRINTK_DELAY is not set
+CONFIG_DYNAMIC_DEBUG=y
+CONFIG_DYNAMIC_DEBUG_CORE=y
+CONFIG_SYMBOLIC_ERRNAME=y
+# end of printk and dmesg options
+
+#
+# Compile-time checks and compiler options
+#
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_ENABLE_MUST_CHECK is not set
+CONFIG_FRAME_WARN=2048
+# CONFIG_STRIP_ASM_SYMS is not set
+# CONFIG_READABLE_ASM is not set
+# CONFIG_HEADERS_INSTALL is not set
+# CONFIG_DEBUG_SECTION_MISMATCH is not set
+CONFIG_SECTION_MISMATCH_WARN_ONLY=y
+# CONFIG_DEBUG_FORCE_FUNCTION_ALIGN_32B is not set
+CONFIG_ARCH_WANT_FRAME_POINTERS=y
+# CONFIG_FRAME_POINTER is not set
+# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
+# end of Compile-time checks and compiler options
+
+#
+# Generic Kernel Debugging Instruments
+#
+# CONFIG_MAGIC_SYSRQ is not set
+CONFIG_DEBUG_FS=y
+CONFIG_DEBUG_FS_ALLOW_ALL=y
+# CONFIG_DEBUG_FS_DISALLOW_MOUNT is not set
+# CONFIG_DEBUG_FS_ALLOW_NONE is not set
+CONFIG_HAVE_ARCH_KGDB=y
+CONFIG_HAVE_ARCH_KGDB_QXFER_PKT=y
+# CONFIG_KGDB is not set
+# CONFIG_UBSAN is not set
+# end of Generic Kernel Debugging Instruments
+
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_MISC is not set
+
+#
+# Memory Debugging
+#
+# CONFIG_PAGE_EXTENSION is not set
+# CONFIG_DEBUG_PAGEALLOC is not set
+# CONFIG_PAGE_OWNER is not set
+# CONFIG_PAGE_POISONING is not set
+CONFIG_ARCH_HAS_DEBUG_WX=y
+# CONFIG_DEBUG_WX is not set
+CONFIG_GENERIC_PTDUMP=y
+# CONFIG_PTDUMP_DEBUGFS is not set
+# CONFIG_DEBUG_OBJECTS is not set
+# CONFIG_SLUB_STATS is not set
+CONFIG_HAVE_DEBUG_KMEMLEAK=y
+# CONFIG_DEBUG_KMEMLEAK is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+# CONFIG_SCHED_STACK_END_CHECK is not set
+CONFIG_ARCH_HAS_DEBUG_VM_PGTABLE=y
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_VM_PGTABLE is not set
+CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y
+# CONFIG_DEBUG_VIRTUAL is not set
+# CONFIG_DEBUG_MEMORY_INIT is not set
+CONFIG_HAVE_ARCH_KASAN=y
+CONFIG_CC_HAS_KASAN_GENERIC=y
+CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y
+# CONFIG_KASAN is not set
+# end of Memory Debugging
+
+# CONFIG_DEBUG_SHIRQ is not set
+
+#
+# Debug Oops, Lockups and Hangs
+#
+# CONFIG_PANIC_ON_OOPS is not set
+CONFIG_PANIC_ON_OOPS_VALUE=0
+CONFIG_PANIC_TIMEOUT=0
+# CONFIG_SOFTLOCKUP_DETECTOR is not set
+# CONFIG_DETECT_HUNG_TASK is not set
+# CONFIG_WQ_WATCHDOG is not set
+# CONFIG_TEST_LOCKUP is not set
+# end of Debug Oops, Lockups and Hangs
+
+#
+# Scheduler Debugging
+#
+CONFIG_SCHED_DEBUG=y
+# CONFIG_SCHEDSTATS is not set
+# end of Scheduler Debugging
+
+# CONFIG_DEBUG_TIMEKEEPING is not set
+CONFIG_DEBUG_PREEMPT=y
+
+#
+# Lock Debugging (spinlocks, mutexes, etc...)
+#
+CONFIG_LOCK_DEBUGGING_SUPPORT=y
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set
+# CONFIG_DEBUG_RWSEMS is not set
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_DEBUG_ATOMIC_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_LOCK_TORTURE_TEST is not set
+# CONFIG_WW_MUTEX_SELFTEST is not set
+# CONFIG_SCF_TORTURE_TEST is not set
+# CONFIG_CSD_LOCK_WAIT_DEBUG is not set
+# end of Lock Debugging (spinlocks, mutexes, etc...)
+
+# CONFIG_STACKTRACE is not set
+# CONFIG_WARN_ALL_UNSEEDED_RANDOM is not set
+# CONFIG_DEBUG_KOBJECT is not set
+
+#
+# Debug kernel data structures
+#
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_PLIST is not set
+# CONFIG_DEBUG_SG is not set
+# CONFIG_DEBUG_NOTIFIERS is not set
+# CONFIG_BUG_ON_DATA_CORRUPTION is not set
+# end of Debug kernel data structures
+
+# CONFIG_DEBUG_CREDENTIALS is not set
+
+#
+# RCU Debugging
+#
+# CONFIG_RCU_SCALE_TEST is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_RCU_REF_SCALE_TEST is not set
+CONFIG_RCU_CPU_STALL_TIMEOUT=21
+CONFIG_RCU_TRACE=y
+# CONFIG_RCU_EQS_DEBUG is not set
+# end of RCU Debugging
+
+# CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set
+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
+# CONFIG_LATENCYTOP is not set
+CONFIG_HAVE_FUNCTION_TRACER=y
+CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
+CONFIG_HAVE_DYNAMIC_FTRACE=y
+CONFIG_HAVE_DYNAMIC_FTRACE_WITH_REGS=y
+CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
+CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
+CONFIG_TRACE_CLOCK=y
+CONFIG_TRACING_SUPPORT=y
+CONFIG_FTRACE=y
+# CONFIG_FUNCTION_TRACER is not set
+# CONFIG_STACK_TRACER is not set
+# CONFIG_IRQSOFF_TRACER is not set
+# CONFIG_PREEMPT_TRACER is not set
+# CONFIG_SCHED_TRACER is not set
+# CONFIG_HWLAT_TRACER is not set
+# CONFIG_ENABLE_DEFAULT_TRACERS is not set
+# CONFIG_FTRACE_SYSCALLS is not set
+# CONFIG_TRACER_SNAPSHOT is not set
+CONFIG_BRANCH_PROFILE_NONE=y
+# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
+# CONFIG_PROFILE_ALL_BRANCHES is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_SYNTH_EVENTS is not set
+# CONFIG_TRACEPOINT_BENCHMARK is not set
+# CONFIG_PREEMPTIRQ_DELAY_TEST is not set
+# CONFIG_SAMPLES is not set
+
+#
+# riscv Debugging
+#
+
+#
+# Kernel Testing and Coverage
+#
+# CONFIG_KUNIT is not set
+# CONFIG_NOTIFIER_ERROR_INJECTION is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_ARCH_HAS_KCOV=y
+CONFIG_CC_HAS_SANCOV_TRACE_PC=y
+# CONFIG_KCOV is not set
+CONFIG_RUNTIME_TESTING_MENU=y
+# CONFIG_LKDTM is not set
+# CONFIG_TEST_LIST_SORT is not set
+# CONFIG_TEST_MIN_HEAP is not set
+# CONFIG_TEST_SORT is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_RBTREE_TEST is not set
+# CONFIG_REED_SOLOMON_TEST is not set
+# CONFIG_INTERVAL_TREE_TEST is not set
+# CONFIG_PERCPU_TEST is not set
+# CONFIG_ATOMIC64_SELFTEST is not set
+# CONFIG_TEST_HEXDUMP is not set
+# CONFIG_TEST_STRING_HELPERS is not set
+# CONFIG_TEST_STRSCPY is not set
+# CONFIG_TEST_KSTRTOX is not set
+# CONFIG_TEST_PRINTF is not set
+# CONFIG_TEST_BITMAP is not set
+# CONFIG_TEST_UUID is not set
+# CONFIG_TEST_XARRAY is not set
+# CONFIG_TEST_OVERFLOW is not set
+# CONFIG_TEST_RHASHTABLE is not set
+# CONFIG_TEST_HASH is not set
+# CONFIG_TEST_IDA is not set
+# CONFIG_TEST_LKM is not set
+# CONFIG_TEST_BITOPS is not set
+# CONFIG_TEST_VMALLOC is not set
+# CONFIG_TEST_USER_COPY is not set
+# CONFIG_TEST_BPF is not set
+# CONFIG_TEST_BLACKHOLE_DEV is not set
+# CONFIG_FIND_BIT_BENCHMARK is not set
+# CONFIG_TEST_FIRMWARE is not set
+# CONFIG_TEST_SYSCTL is not set
+# CONFIG_TEST_UDELAY is not set
+# CONFIG_TEST_STATIC_KEYS is not set
+# CONFIG_TEST_MEMCAT_P is not set
+# CONFIG_TEST_STACKINIT is not set
+# CONFIG_TEST_MEMINIT is not set
+# CONFIG_TEST_FREE_PAGES is not set
+# CONFIG_MEMTEST is not set
+# end of Kernel Testing and Coverage
+# end of Kernel hacking
diff --git a/build/boards/cv181x/cv1813h_milkv_duos_ota_sd/memmap.py b/build/boards/cv181x/cv1813h_milkv_duos_ota_sd/memmap.py
new file mode 100644
index 0000000000..3ab8e7e174
--- /dev/null
+++ b/build/boards/cv181x/cv1813h_milkv_duos_ota_sd/memmap.py
@@ -0,0 +1,91 @@
+SIZE_1M = 0x100000
+SIZE_1K = 1024
+
+
+# Only attributes in class MemoryMap are generated to .h
+class MemoryMap:
+ # No prefix "CVIMMAP_" for the items in _no_prefix[]
+ _no_prefix = [
+ "CONFIG_SYS_TEXT_BASE" # u-boot's CONFIG_SYS_TEXT_BASE is used without CPP.
+ ]
+
+ DRAM_BASE = 0x80000000
+ DRAM_SIZE = 512 * SIZE_1M
+
+ # ==============
+ # C906L FreeRTOS
+ # ==============
+ FREERTOS_SIZE = 2 * SIZE_1M
+ # FreeRTOS is at the end of DRAM
+ FREERTOS_ADDR = DRAM_BASE + DRAM_SIZE - FREERTOS_SIZE
+ FSBL_C906L_START_ADDR = FREERTOS_ADDR
+
+ # ================================
+ # Shared memory FreeRTOS <=> Linux
+ # ================================
+ SHMEM_SIZE = 1 * SIZE_1M
+ SHMEM_ADDR = FREERTOS_ADDR - SHMEM_SIZE
+
+ # ==============================
+ # OpenSBI | arm-trusted-firmware
+ # ==============================
+ # Monitor is at the begining of DRAM
+ MONITOR_ADDR = DRAM_BASE
+
+ ATF_SIZE = 512 * SIZE_1K
+ OPENSBI_SIZE = 512 * SIZE_1K
+ OPENSBI_FDT_ADDR = MONITOR_ADDR + OPENSBI_SIZE
+
+ # =========================
+ # memory@DRAM_BASE in .dts.
+ # =========================
+ # Ignore the area of FreeRTOS in u-boot and kernel
+ KERNEL_MEMORY_ADDR = DRAM_BASE
+ KERNEL_MEMORY_SIZE = DRAM_SIZE - FREERTOS_SIZE - SHMEM_SIZE
+
+ # =================
+ # Multimedia buffer. Used by u-boot/kernel/FreeRTOS
+ # =================
+ ION_SIZE = 170 * SIZE_1M
+ H26X_BITSTREAM_SIZE = 2 * SIZE_1M
+ H26X_ENC_BUFF_SIZE = 0
+ ISP_MEM_BASE_SIZE = 20 * SIZE_1M
+ FREERTOS_RESERVED_ION_SIZE = H26X_BITSTREAM_SIZE + H26X_ENC_BUFF_SIZE + ISP_MEM_BASE_SIZE
+
+ # ION after FreeRTOS/Shared memory
+ ION_ADDR = SHMEM_ADDR - ION_SIZE
+
+ # Buffers of the fast image are inside the ION buffer
+ H26X_BITSTREAM_ADDR = ION_ADDR
+ H26X_ENC_BUFF_ADDR = H26X_BITSTREAM_ADDR + H26X_BITSTREAM_SIZE
+ ISP_MEM_BASE_ADDR = H26X_ENC_BUFF_ADDR + H26X_ENC_BUFF_SIZE
+
+ assert ISP_MEM_BASE_ADDR + ISP_MEM_BASE_SIZE <= ION_ADDR + ION_SIZE
+
+ # Boot logo is after the ION buffer
+ # Framebuffer uses boot logo's reserved memory
+ BOOTLOGO_SIZE = 8000 * SIZE_1K
+ BOOTLOGO_ADDR = ION_ADDR - BOOTLOGO_SIZE
+ FRAMEBUFFER_SIZE = BOOTLOGO_SIZE
+ FRAMEBUFFER_ADDR = BOOTLOGO_ADDR
+
+ # ===================
+ # FSBL and u-boot-2021
+ # ===================
+ CVI_UPDATE_HEADER_SIZE = SIZE_1K
+ UIMAG_SIZE = 16 * SIZE_1M
+
+ # kernel image loading buffer
+ UIMAG_ADDR = DRAM_BASE + 24 * SIZE_1M
+ CVI_UPDATE_HEADER_ADDR = UIMAG_ADDR - CVI_UPDATE_HEADER_SIZE
+
+ # FSBL decompress buffer
+ FSBL_UNZIP_ADDR = UIMAG_ADDR
+ FSBL_UNZIP_SIZE = UIMAG_SIZE
+
+ assert UIMAG_ADDR + UIMAG_SIZE <= BOOTLOGO_ADDR
+
+ # u-boot's run address and entry point
+ CONFIG_SYS_TEXT_BASE = DRAM_BASE + 2 * SIZE_1M
+ # u-boot's init stack point is only used before board_init_f()
+ CONFIG_SYS_INIT_SP_ADDR = UIMAG_ADDR + UIMAG_SIZE
diff --git a/build/boards/cv181x/cv1813h_milkv_duos_ota_sd/partition/partition_sd.xml b/build/boards/cv181x/cv1813h_milkv_duos_ota_sd/partition/partition_sd.xml
new file mode 100644
index 0000000000..f3da8627c7
--- /dev/null
+++ b/build/boards/cv181x/cv1813h_milkv_duos_ota_sd/partition/partition_sd.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/build/boards/cv181x/cv1813h_milkv_duos_ota_sd/rootfs_script/clean_rootfs.sh b/build/boards/cv181x/cv1813h_milkv_duos_ota_sd/rootfs_script/clean_rootfs.sh
new file mode 100755
index 0000000000..26692d889e
--- /dev/null
+++ b/build/boards/cv181x/cv1813h_milkv_duos_ota_sd/rootfs_script/clean_rootfs.sh
@@ -0,0 +1,70 @@
+#!/bin/bash
+
+SYSTEM_DIR=$1
+rm -f $SYSTEM_DIR/mnt/system/usr/lib/libz*
+rm -f $SYSTEM_DIR/mnt/system/lib/libz*
+
+rm -f $SYSTEM_DIR/mnt/system/usr/lib/3rd/libcvi*
+rm -f $SYSTEM_DIR/mnt/system/usr/lib/3rd/libmad*
+rm -f $SYSTEM_DIR/mnt/system/usr/lib/3rd/libmp3*
+rm -f $SYSTEM_DIR/mnt/system/usr/lib/3rd/libopencv*
+rm -f $SYSTEM_DIR/mnt/system/usr/lib/libopencv*
+rm -f $SYSTEM_DIR/mnt/system/usr/lib/libcvi_rtsp.so
+rm -f $SYSTEM_DIR/mnt/system/data/install/lib/libcvi_rtsp.so
+rm -f $SYSTEM_DIR/mnt/system/usr/lib/libcvikernel.so
+rm -f $SYSTEM_DIR/mnt/system/usr/lib/*.a
+rm -f $SYSTEM_DIR/mnt/system/usr/lib/libgst*
+rm -f $SYSTEM_DIR/mnt/system/usr/lib/libg*
+rm -f $SYSTEM_DIR/mnt/system/usr/lib/gstreamer-1.0/libgst*
+rm -f $SYSTEM_DIR/mnt/system/data/install/lib/libcrypto.so*
+rm -f $SYSTEM_DIR/mnt/system/data/install/lib/libssl.so*
+rm -f $SYSTEM_DIR/mnt/system/data/install/lib/libcvi_protobuf.so*
+rm -f $SYSTEM_DIR/mnt/system/data/install/lib/libprotobuf-lite.so*
+rm -f $SYSTEM_DIR/mnt/system/usr/lib/libcviai*
+rm -f $SYSTEM_DIR/mnt/system/usr/lib/libcvi_ispd.so*
+rm -f $SYSTEM_DIR/mnt/system/usr/lib/libraw_replay.so*
+rm -f $SYSTEM_DIR/mnt/system/usr/lib/libcvi_ive_tpu.so*
+rm -rf $SYSTEM_DIR/mnt/system/usr/lib/gio
+rm -rf $SYSTEM_DIR/mnt/system/usr/lib/glib*
+rm -rf $SYSTEM_DIR/mnt/system/usr/lib/gstreamer-1.0*
+rm -rf $SYSTEM_DIR/mnt/system/usr/libexec*
+rm -rf $SYSTEM_DIR/mnt/system/usr/bin
+rm -f $SYSTEM_DIR/mnt/system/usr/lib/libcvimath.so
+rm -f $SYSTEM_DIR/mnt/system/usr/lib/libcviruntime.so
+rm -f $SYSTEM_DIR/mnt/system/usr/lib/libcnpy.so
+rm -f $SYSTEM_DIR/mnt/system/usr/lib/libcipher.so
+
+rm -f $SYSTEM_DIR/mnt/system/lib/libcipher.so*
+rm -f $SYSTEM_DIR/mnt/system/lib/libcvi_ispd.so*
+rm -f $SYSTEM_DIR/mnt/system/lib/libraw_replay.so*
+rm -f $SYSTEM_DIR/mnt/system/lib/libmad.so*
+rm -f $SYSTEM_DIR/mnt/system/lib/libmp3*
+rm -f $SYSTEM_DIR/mnt/system/lib/libnanomsg*
+
+#del 3rdparty lib
+#del thttpd/libwebsockets lib
+rm -f $SYSTEM_DIR/mnt/system/lib/libthttpd*
+rm -f $SYSTEM_DIR/mnt/system/lib/libwebsocket*
+if [ $SDK_VER = "uclibc" ]
+then
+ #del opencv lib
+ rm -f $SYSTEM_DIR/mnt/system/lib/libopencv*
+ #del ffmpeg lib
+ rm -f $SYSTEM_DIR/mnt/system/lib/libav*
+ #save /mnt/system/lib/ openssl lib; need by ntpdate/wpa_supplicant
+else
+ #glibc ramdisk(rootfs/common_arm/usr/lib/) has libcrypto.so and libssl.so
+ #del openssl
+ rm -f $SYSTEM_DIR/mnt/system/lib/libssl*
+ rm -f $SYSTEM_DIR/mnt/system/lib/libcrypto*
+fi
+
+rm -rf $SYSTEM_DIR/etc/init.d/S23ntp
+rm -rf $SYSTEM_DIR/bin/ntpd
+
+du -sh $SYSTEM_DIR/* |sort -rh
+du -sh $SYSTEM_DIR/mnt/* |sort -rh
+du -sh $SYSTEM_DIR/mnt/system/* |sort -rh
+du -sh $SYSTEM_DIR/mnt/system/lib/* |sort -rh
+du -sh $SYSTEM_DIR/mnt/system/data/install/* |sort -rh
+du -sh $SYSTEM_DIR/usr/* |sort -rh
diff --git a/build/boards/cv181x/cv1813h_milkv_duos_ota_sd/u-boot/cvi_board_init.c b/build/boards/cv181x/cv1813h_milkv_duos_ota_sd/u-boot/cvi_board_init.c
new file mode 100644
index 0000000000..8a7978bbd6
--- /dev/null
+++ b/build/boards/cv181x/cv1813h_milkv_duos_ota_sd/u-boot/cvi_board_init.c
@@ -0,0 +1,80 @@
+static void set_rtc_register_for_power(void)
+{
+ printf("set_rtc_register_for_power\n");
+ mmio_write_32(0x050260D0, 0x7);
+}
+
+int cvi_board_init(void)
+{
+ // Camera
+ PINMUX_CONFIG(CAM_MCLK0, CAM_MCLK0);
+ PINMUX_CONFIG(IIC3_SCL, IIC3_SCL);
+ PINMUX_CONFIG(IIC3_SDA, IIC3_SDA);
+ PINMUX_CONFIG(PAD_MIPIRX4P, XGPIOC_3);
+ PINMUX_CONFIG(PAD_MIPIRX4N, XGPIOC_2);
+
+ // I2C2 for Camera2
+ PINMUX_CONFIG(IIC2_SDA, IIC2_SDA);
+ PINMUX_CONFIG(IIC2_SCL, IIC2_SCL);
+
+ // LED
+ PINMUX_CONFIG(IIC0_SDA, XGPIOA_29);
+
+ // I2C4 for TP
+ PINMUX_CONFIG(VIVO_D1, IIC4_SCL);
+ PINMUX_CONFIG(VIVO_D0, IIC4_SDA);
+
+ // // SPI3
+ // PINMUX_CONFIG(VIVO_D8, SPI3_SDO);
+ // PINMUX_CONFIG(VIVO_D7, SPI3_SDI);
+ // PINMUX_CONFIG(VIVO_D6, SPI3_SCK);
+ // PINMUX_CONFIG(VIVO_D5, SPI3_CS_X);
+
+ // USB
+ PINMUX_CONFIG(USB_VBUS_EN, XGPIOB_5);
+
+ // WIFI/BT
+ PINMUX_CONFIG(CLK32K, PWR_GPIO_10);
+ PINMUX_CONFIG(UART2_RX, UART4_RX);
+ PINMUX_CONFIG(UART2_TX, UART4_TX);
+ PINMUX_CONFIG(UART2_CTS, UART4_CTS);
+ PINMUX_CONFIG(UART2_RTS, UART4_RTS);
+
+ // GPIOs
+ PINMUX_CONFIG(JTAG_CPU_TCK, XGPIOA_18);
+ PINMUX_CONFIG(JTAG_CPU_TMS, XGPIOA_19);
+ PINMUX_CONFIG(JTAG_CPU_TRST, XGPIOA_20);
+ PINMUX_CONFIG(IIC0_SCL, XGPIOA_28);
+
+ // EPHY LEDs
+ PINMUX_CONFIG(PWR_WAKEUP0, EPHY_LNK_LED);
+ PINMUX_CONFIG(PWR_BUTTON1, EPHY_SPD_LED);
+
+ // UART2
+ PINMUX_CONFIG(VIVO_CLK, UART2_RX);
+ PINMUX_CONFIG(VIVO_D6, UART2_TX);
+
+ set_rtc_register_for_power();
+ return 0;
+}
+
+
+// to use set CONFIG_BOARD_LATE_INIT=y
+// this didn't happen late enough, moving closer to kernel handoff
+// otherwise serial connection setup gets wrecked
+int board_late_init(void)
+{
+ // UART dividers & uart0 fix
+ // per 8.9.27 of sg2000_trm_en.pdf v1.01; setting UART* clock source to
+ // disppll (1.188GHz) and dividing by 15 (to 79.2MHz)
+
+ volatile uint32_t *reg_div_clk_cam0_200 = (volatile uint32_t *)0x030020a8;
+ *reg_div_clk_cam0_200 = 0xF0109; // Set custom UART clock divider
+
+ volatile uint32_t *uart0_dll = (volatile uint32_t *)0x04140020;
+ *uart0_dll = 43;
+
+ printf("Custom UART clock settings applied in board_late_init.\n");
+
+ return 0; // Return 0 to indicate success
+}
\ No newline at end of file
diff --git a/build/boards/cv181x/cv1813h_milkv_duos_ota_sd/u-boot/cvitek.h b/build/boards/cv181x/cv1813h_milkv_duos_ota_sd/u-boot/cvitek.h
new file mode 100644
index 0000000000..d515dc2540
--- /dev/null
+++ b/build/boards/cv181x/cv1813h_milkv_duos_ota_sd/u-boot/cvitek.h
@@ -0,0 +1,13 @@
+/*
+ *VO control GPIOs
+ */
+#define VO_GPIO_RESET_PORT portb
+#define VO_GPIO_RESET_INDEX 5
+#define VO_GPIO_RESET_ACTIVE GPIO_ACTIVE_LOW
+#define VO_GPIO_PWM_PORT portb
+#define VO_GPIO_PWM_INDEX 4
+#define VO_GPIO_PWM_ACTIVE GPIO_ACTIVE_HIGH
+#define VO_GPIO_POWER_CT_PORT portb
+#define VO_GPIO_POWER_CT_INDEX 3
+#define VO_GPIO_POWER_CT_ACTIVE GPIO_ACTIVE_HIGH
+
diff --git a/build/boards/cv181x/cv1813h_milkv_duos_ota_sd/u-boot/cvitek_cv1813h_milkv_duos_ota_sd_defconfig b/build/boards/cv181x/cv1813h_milkv_duos_ota_sd/u-boot/cvitek_cv1813h_milkv_duos_ota_sd_defconfig
new file mode 100644
index 0000000000..91116c49d8
--- /dev/null
+++ b/build/boards/cv181x/cv1813h_milkv_duos_ota_sd/u-boot/cvitek_cv1813h_milkv_duos_ota_sd_defconfig
@@ -0,0 +1,75 @@
+CONFIG_RISCV=y
+CONFIG_SYS_MALLOC_F_LEN=0x2000
+CONFIG_NR_DRAM_BANKS=1
+CONFIG_DM_GPIO=y
+CONFIG_DEFAULT_DEVICE_TREE="cv181x_asic"
+CONFIG_IDENT_STRING=" cvitek_cv181x"
+CONFIG_ARCH_RV64I=y
+CONFIG_RISCV_SMODE=y
+CONFIG_TARGET_CVITEK_CV181X=y
+CONFIG_DISTRO_DEFAULTS=y
+CONFIG_FIT=y
+CONFIG_BOOTDELAY=1
+CONFIG_SYS_PROMPT="cv181x_c906# "
+CONFIG_SYS_CONFIG_NAME="cv181x-asic-ota"
+
+#CONFIG_ENV_SUPPORT=y
+#CONFIG_SAVEENV=y
+CONFIG_BOARD_LATE_INIT=n
+
+CONFIG_ENV_IS_IN_EXT4=y
+CONFIG_ENV_EXT4_DEVICE_AND_PART="0:2"
+CONFIG_ENV_EXT4_FILE="/uboot.env"
+CONFIG_ENV_EXT4_INTERFACE="mmc"
+CONFIG_EXT4_WRITE=y
+CONFIG_ENV_SIZE=0x4000
+
+CONFIG_PARTITION_TYPE_GUID=y
+
+#CONFIG_USE_BOOTCOMMAND=y
+#CONFIG_BOOTCOMMAND="saveenv;"
+
+#CONFIG_ENV_IS_IN_MMC=y
+#CONFIG_SYS_MMC_ENV_DEV=0
+#CONFIG_SYS_MMC_ENV_PART=2
+#CONFIG_ENV_OFFSET=0
+#CONFIG_ENV_SIZE=0x40000
+#CONFIG_ENV_SECT_SIZE=0x20000
+
+#CONFIG_ENV_IS_IN_FAT=y
+#CONFIG_ENV_FAT_INTERFACE="mmc"
+#CONFIG_ENV_FAT_DEVICE_AND_PART="0:1"
+#CONFIG_ENV_SIZE=0x2000
+#CONFIG_SYS_REDUNDAND_ENVIRONMENT=n
+
+#CONFIG_FS_FAT=y
+CONFIG_FAT_WRITE=y
+#CONFIG_SYS_CONSOLE_ENV_OVERWRITE=y
+#CONFIG_SYS_CONSOLE_IS_IN_ENV=n
+#CONFIG_SPECIFY_CONSOLE_INDEX=n
+
+
+CONFIG_CMD_GPIO=y
+CONFIG_CMD_MMC=y
+CONFIG_CMD_CACHE=y
+CONFIG_CMD_CVI_VO=y
+
+CONFIG_NET_RANDOM_ETHADDR=y
+CONFIG_DWAPB_GPIO=y
+CONFIG_MMC=y
+CONFIG_MMC_SDHCI=y
+CONFIG_MMC_SDHCI_SDMA=y
+CONFIG_MMC_SDHCI_CVITEK=y
+CONFIG_MTD=y
+CONFIG_PHY_CVITEK=y
+CONFIG_DM_ETH=y
+CONFIG_ETH_DESIGNWARE=y
+CONFIG_SYS_NS16550=y
+CONFIG_SPI=y
+CONFIG_DM_VIDEO=y
+CONFIG_BMP_16BPP=y
+CONFIG_BMP_24BPP=y
+CONFIG_BMP_32BPP=y
+CONFIG_LZ4=y
+CONFIG_LZMA=y
+# CONFIG_TOOLS_LIBCRYPTO is not set
diff --git a/build/boards/cv181x/cv1813h_milkv_duos_sd/partition/partition_sd.xml b/build/boards/cv181x/cv1813h_milkv_duos_sd/partition/partition_sd.xml
index 2cfc1e3822..456b950e2e 100644
--- a/build/boards/cv181x/cv1813h_milkv_duos_sd/partition/partition_sd.xml
+++ b/build/boards/cv181x/cv1813h_milkv_duos_sd/partition/partition_sd.xml
@@ -1,5 +1,5 @@
-
+
diff --git a/build/common_functions.sh b/build/common_functions.sh
index a10bc4877a..6f9ed53ce8 100644
--- a/build/common_functions.sh
+++ b/build/common_functions.sh
@@ -9,6 +9,9 @@
# pack_system -> system.emmc / system.spinand (3rd/sdk shared libraries, spinand-ubifs/ emmc-ext4)
# pack_gpt -> gpt.img (emmc only)
# pack_cfg -> cfg.emmc / cfg.spinand (cofigs partition for saving configs and isp pq bin)
+# pack_sd_image -> create sd card image
+# pack_sd_image_gz -> create and compress sd card image
+# gen_swu_ota -> creates ota update SWU file
#
function print_error()
{
@@ -252,6 +255,27 @@ function pack_sd_image
popd
)}
+function pack_sd_image_gz
+{(
+ pushd "$BUILD_PATH"
+ make sd_image_gz || return "$?"
+ popd
+)}
+
+function gen_swu_ota {
+ local version="$1" # Capture the first argument as version
+ if [ -z "$version" ]; then
+ echo "Usage: gen_swu_ota "
+ return 1
+ fi
+
+ (
+ pushd "$BUILD_PATH" || return 1
+ make gen_swu_ota SWU_VERSION=$version || return "$?"
+ popd
+ )
+}
+
function pack_prog_img
{(
local tmp_dir
diff --git a/build/milkvsetup-ota.sh b/build/milkvsetup-ota.sh
new file mode 100644
index 0000000000..69f2d8ef47
--- /dev/null
+++ b/build/milkvsetup-ota.sh
@@ -0,0 +1,650 @@
+#!/bin/bash
+function _build_default_env()
+{
+ # Please keep these default value!!!
+ BRAND=${BRAND:-cvitek}
+ DEBUG=${DEBUG:-0}
+ RELEASE_VERSION=${RELEASE_VERSION:-0}
+ BUILD_VERBOSE=${BUILD_VERBOSE:-1}
+ ATF_BL32=${ATF_BL32:-1}
+ UBOOT_VBOOT=${UBOOT_VBOOT:-0}
+ COMPRESSOR=${COMPRESSOR:-xz}
+ COMPRESSOR_UBOOT=${COMPRESSOR_UBOOT:-lzma} # or none to disable
+ MULTI_PROCESS_SUPPORT=${MULTI_PROCESS_SUPPORT:-0}
+ ENABLE_BOOTLOGO=${ENABLE_BOOTLOGO:-0}
+ TPU_REL=${TPU_REL:-0} # TPU release build
+ SENSOR=${SENSOR:-sony_imx327}
+}
+
+function gettop()
+{
+ local TOPFILE=build/milkvsetup-ota.sh
+ if [ -n "$TOP" -a -f "$TOP/$TOPFILE" ] ; then
+ # The following circumlocution ensures we remove symlinks from TOP.
+ (cd "$TOP"; PWD= /bin/pwd)
+ else
+ if [ -f $TOPFILE ] ; then
+ # The following circumlocution (repeated below as well) ensures
+ # that we record the true directory name and not one that is
+ # faked up with symlink names.
+ PWD= /bin/pwd
+ else
+ local HERE=$PWD
+ T=
+ while [ \( ! \( -f $TOPFILE \) \) -a \( $PWD != "/" \) ]; do
+ \cd ..
+ T=$(PWD= /bin/pwd -P)
+ done
+ \cd "$HERE"
+ if [ -f "$T/$TOPFILE" ]; then
+ echo "$T"
+ fi
+ fi
+ fi
+}
+
+function _build_fsbl_env()
+{
+ export FSBL_PATH
+}
+
+function build_fsbl()
+{(
+ print_notice "Run ${FUNCNAME[0]}() function"
+ _build_uboot_env
+ _build_opensbi_env
+ cd "$BUILD_PATH" || return
+ make fsbl-build
+)}
+
+function clean_fsbl()
+{(
+ print_notice "Run ${FUNCNAME[0]}() function"
+ _build_uboot_env
+ cd "$BUILD_PATH" || return
+ make fsbl-clean
+)}
+
+function _build_atf_env()
+{
+ export ATF_BL32 FAKE_BL31_32
+}
+
+function build_atf()
+{(
+ print_notice "Run ${FUNCNAME[0]}() function"
+ _build_atf_env
+ cd "$BUILD_PATH" || return
+ make arm-trusted-firmware
+)}
+
+function clean_atf()
+{(
+ print_notice "Run ${FUNCNAME[0]}() function"
+ _build_atf_env
+ cd "$BUILD_PATH" || return
+ make arm-trusted-firmware-clean
+)}
+
+function _build_uboot_env()
+{
+ _build_atf_env
+ _build_fsbl_env
+
+ export UBOOT_OUTPUT_FOLDER IMGTOOL_PATH FLASH_PARTITION_XML FIP_BIN_PATH
+ export UBOOT_VBOOT RELEASE_VERSION ENABLE_BOOTLOGO STORAGE_TYPE COMPRESSOR_UBOOT
+ export PANEL_TUNING_PARAM PANEL_LANE_NUM_TUNING_PARAM PANEL_LANE_SWAP_TUNING_PARAM
+}
+
+function build_fip_pre()
+{(
+ print_notice "Run ${FUNCNAME[0]}() function"
+ _build_uboot_env
+ cd "$BUILD_PATH" || return
+ make fip-pre-merge
+)}
+
+function build_rtos()
+{(
+ print_notice "Run ${FUNCNAME[0]}() function"
+ cd "$BUILD_PATH" || return
+ make rtos
+)}
+
+function clean_rtos()
+{(
+ print_notice "Run ${FUNCNAME[0]}() function"
+ cd "$BUILD_PATH" || return
+ make rtos-clean
+)}
+
+function menuconfig_uboot()
+{(
+ print_notice "Run ${FUNCNAME[0]}() function"
+ _build_uboot_env
+ cd "$BUILD_PATH" || return
+ make u-boot-menuconfig || return "$?"
+)}
+
+function _link_uboot_logo()
+{(
+ print_notice "Run ${FUNCNAME[0]}() function"
+ cd "$BUILD_PATH" || return
+ if [[ x"${PANEL_TUNING_PARAM}" =~ x"I80" ]]; then
+ ln -sf "$COMMON_TOOLS_PATH"/bootlogo/logo_320x240.BMP "$COMMON_TOOLS_PATH"/bootlogo/logo.jpg
+ fi
+)}
+
+
+function build_uboot()
+{(
+ print_notice "Run ${FUNCNAME[0]}() function"
+ _build_uboot_env
+ _build_opensbi_env
+ _link_uboot_logo
+
+ cd "$BUILD_PATH" || return
+ [[ "$CHIP_ARCH" == CV182X ]] || [[ "$CHIP_ARCH" == CV183X ]] && \
+ cp -f "$OUTPUT_DIR"/fip_pre/fip_pre_${ATF_KEY_SEL}.bin \
+ "$OUTPUT_DIR"/fip_pre/fip_pre.bin
+
+ make u-boot
+)}
+
+function build_uboot_env_tools()
+{(
+ print_notice "Run ${FUNCNAME[0]}() function"
+ _build_uboot_env
+ cd "$BUILD_PATH" || return
+ make u-boot-env-tools
+)}
+
+function clean_uboot()
+{(
+ print_notice "Run ${FUNCNAME[0]}() function"
+ _build_uboot_env
+ cd "$BUILD_PATH" || return
+ make u-boot-clean
+)}
+
+function _build_kernel_env()
+{
+ export KERNEL_OUTPUT_FOLDER RAMDISK_OUTPUT_FOLDER SYSTEM_OUT_DIR
+}
+
+function menuconfig_kernel()
+{(
+ print_notice "Run ${FUNCNAME[0]}() function"
+ _build_kernel_env
+ cd "$BUILD_PATH" || return
+ make kernel-menuconfig || return "$?"
+)}
+
+function setconfig_kernel()
+{(
+ print_notice "Run ${FUNCNAME[0]}() function"
+ _build_kernel_env
+ cd "$BUILD_PATH" || return
+ make kernel-setconfig "SCRIPT_ARG=$1" || return "$?"
+)}
+
+# shellcheck disable=SC2120
+function build_kernel()
+{(
+ print_notice "Run ${FUNCNAME[0]}() function"
+ _build_kernel_env
+ cd "$BUILD_PATH" || return
+ make kernel || return "$?"
+
+ # generate boot.itb image.
+ if [[ ${1} != noitb ]]; then
+ pack_boot || return "$?"
+ fi
+)}
+
+function clean_kernel()
+{(
+ print_notice "Run ${FUNCNAME[0]}() function"
+ _build_kernel_env
+ cd "$BUILD_PATH" || return
+ make kernel-clean
+)}
+
+function build_bld()
+{(
+ print_notice "Run ${FUNCNAME[0]}() function"
+ cd "$BUILD_PATH" || return
+ make bld
+)}
+
+function clean_bld()
+{(
+ print_notice "Run ${FUNCNAME[0]}() function"
+ cd "$BUILD_PATH" || return
+ make bld-clean
+)}
+
+function _build_middleware_env()
+{
+ export MULTI_PROCESS_SUPPORT
+}
+
+function build_middleware()
+{(
+ print_notice "Run ${FUNCNAME[0]}() function"
+ _build_middleware_env
+ cd "$BUILD_PATH" || return
+
+ make "$ROOTFS_DIR"
+
+ mkdir -p "$SYSTEM_OUT_DIR"/usr/bin
+ mkdir -p "$SYSTEM_OUT_DIR"/lib
+
+ pushd $MW_PATH
+ rm -rf lib
+ if [ -d $(echo ${CHIP_ARCH} | tr A-Z a-z)/lib_"$SDK_VER" ];
+ then
+ ln -s $(echo ${CHIP_ARCH} | tr A-Z a-z)/lib_"$SDK_VER" lib
+ else
+ ln -s lib_"$SDK_VER" lib
+ fi
+
+ if [ -d $(echo ${CHIP_ARCH} | tr A-Z a-z)/ko ];
+ then
+ rm -rf ko
+ rm -rf ko_shrink
+ ln -s $(echo ${CHIP_ARCH} | tr A-Z a-z)/ko ko
+ ln -s $(echo ${CHIP_ARCH} | tr A-Z a-z)/ko_shrink ko_shrink
+ fi
+ popd
+
+ pushd "$MW_PATH"/component/isp
+ make all || return "$?"
+ popd
+
+ pushd "$MW_PATH"/sample
+ make all || return "$?"
+ find ./ -type f \( -iname "sample_*" ! -iname "*.*" \) -exec cp '{}' $SYSTEM_OUT_DIR/usr/bin \;
+ find ./ -type f \( -iname "sensor_test" \) -exec cp '{}' $SYSTEM_OUT_DIR/usr/bin \;
+ popd
+
+ # copy mw lib
+ cp -af "$MW_PATH"/lib/*.so* "$SYSTEM_OUT_DIR"/lib
+ cp -af "$MW_PATH"/lib/3rd/*.so* "$SYSTEM_OUT_DIR"/lib
+ # copy ko
+ mkdir -p "$SYSTEM_OUT_DIR"/ko
+ if [[ "$BUILD_FOR_DEBUG" != "y" ]]; then
+ cp -af "$MW_PATH"/ko_shrink/* "$SYSTEM_OUT_DIR"/ko/
+ else
+ cp -af "$MW_PATH"/ko/* "$SYSTEM_OUT_DIR"/ko/
+ fi
+
+ # add sdk version
+ echo "SDK_VERSION=${SDK_VER}" > "$SYSTEM_OUT_DIR"/sdk-release
+ if [ ! -z "${MV_BOARD// }" ]; then
+ echo "board=${MV_BOARD}" >> "$SYSTEM_OUT_DIR"/sdk-release
+ echo "branch=$(git rev-parse --abbrev-ref HEAD)" >> "$SYSTEM_OUT_DIR"/sdk-release
+ echo "commit=$(git rev-parse --short HEAD)" >> "$SYSTEM_OUT_DIR"/sdk-release
+ echo "time=$(date +"%Y-%m-%d-%H:%M:%S")" >> "$SYSTEM_OUT_DIR"/sdk-release
+ fi
+)}
+
+
+function clean_middleware()
+{
+ print_notice "Run ${FUNCNAME[0]}() function "
+ pushd "$MW_PATH"/sample
+ make clean
+ popd
+ pushd "$MW_PATH"/component/isp
+ make clean
+ popd
+}
+
+function build_osdrv()
+{(
+ print_notice "Run ${FUNCNAME[0]}() ${1} function"
+
+ cd "$BUILD_PATH" || return
+ make "$ROOTFS_DIR"
+
+ local osdrv_target="$1"
+ if [ -z "$osdrv_target" ]; then
+ osdrv_target=all
+ fi
+
+ pushd "$OSDRV_PATH"
+ make KERNEL_DIR="$KERNEL_PATH"/"$KERNEL_OUTPUT_FOLDER" INSTALL_DIR="$SYSTEM_OUT_DIR"/ko "$osdrv_target" || return "$?"
+ popd
+)}
+
+function clean_osdrv()
+{
+ print_notice "Run ${FUNCNAME[0]}() function"
+
+ pushd "$OSDRV_PATH"
+ make KERNEL_DIR="$KERNEL_PATH"/"$KERNEL_OUTPUT_FOLDER" INSTALL_DIR="$SYSTEM_OUT_DIR"/ko clean || return "$?"
+ popd
+}
+
+function clean_ramdisk()
+{
+ rm -rf "${RAMDISK_PATH:?}"/"$RAMDISK_OUTPUT_BASE"
+ rm -rf "$SYSTEM_OUT_DIR"
+ rm -rf "$ROOTFS_DIR"
+}
+
+function generate_uboot_cvipart()
+{
+ cd "$BUILD_PATH" || return
+ make generate_uboot_cvipart
+ cd ".." || return
+}
+
+function build_all()
+{
+ # build bsp
+ # generate_uboot_cvipart || return $?
+ build_uboot || return $?
+ build_kernel || return $?
+ build_osdrv || return $?
+ build_middleware || return $?
+ pack_access_guard_turnkey_app || return $?
+ pack_ipc_turnkey_app || return $?
+ pack_boot || return $?
+ pack_cfg || return $?
+ pack_rootfs || return $?
+ pack_data
+ pack_system || return $?
+ copy_tools
+ pack_upgrade
+}
+
+function clean_all()
+{
+ clean_uboot
+ clean_kernel
+ clean_ramdisk
+ clean_osdrv
+ clean_middleware
+}
+
+# shellcheck disable=SC2120
+function envs_sdk_ver()
+{
+ if [ -n "$1" ]; then
+ SDK_VER="$1"
+ fi
+
+ if [ "$SDK_VER" = 64bit ]; then
+ CROSS_COMPILE="$CROSS_COMPILE_64"
+ CROSS_COMPILE_PATH="$CROSS_COMPILE_PATH_64"
+ SYSROOT_PATH="$SYSROOT_PATH_64"
+ elif [ "$SDK_VER" = 32bit ]; then
+ CROSS_COMPILE="$CROSS_COMPILE_32"
+ CROSS_COMPILE_PATH="$CROSS_COMPILE_PATH_32"
+ SYSROOT_PATH="$SYSROOT_PATH_32"
+ elif [ "$SDK_VER" = uclibc ]; then
+ CROSS_COMPILE="$CROSS_COMPILE_UCLIBC"
+ CROSS_COMPILE_PATH="$CROSS_COMPILE_PATH_UCLIBC"
+ SYSROOT_PATH="$SYSROOT_PATH_UCLIBC"
+ elif [ "$SDK_VER" = glibc_riscv64 ]; then
+ CROSS_COMPILE="$CROSS_COMPILE_GLIBC_RISCV64"
+ CROSS_COMPILE_PATH="$CROSS_COMPILE_PATH_GLIBC_RISCV64"
+ SYSROOT_PATH="$SYSROOT_PATH_GLIBC_RISCV64"
+ elif [ "$SDK_VER" = musl_riscv64 ]; then
+ CROSS_COMPILE="$CROSS_COMPILE_MUSL_RISCV64"
+ CROSS_COMPILE_PATH="$CROSS_COMPILE_PATH_MUSL_RISCV64"
+ SYSROOT_PATH="$SYSROOT_PATH_MUSL_RISCV64"
+ else
+ echo -e "Invalid SDK_VER=${SDK_VER}"
+ exit 1
+ fi
+
+ TPU_OUTPUT_PATH="$OUTPUT_DIR"/tpu_"$SDK_VER"
+ # ramdisk packages PATH
+ pushd $BUILD_PATH || return $?
+ CVI_TARGET_PACKAGES_LIBDIR=$(make print-target-packages-libdir)
+ CVI_TARGET_PACKAGES_INCLUDE=$(make print-target-packages-include)
+ popd
+ export CVI_TARGET_PACKAGES_LIBDIR
+ export CVI_TARGET_PACKAGES_INCLUDE
+
+ OSS_TARBALL_PATH="$TPU_OUTPUT_PATH"/third_party
+ TPU_SDK_INSTALL_PATH="$TPU_OUTPUT_PATH"/cvitek_tpu_sdk
+ IVE_SDK_INSTALL_PATH="$TPU_OUTPUT_PATH"/cvitek_ive_sdk
+ IVS_SDK_INSTALL_PATH="$TPU_OUTPUT_PATH"/cvitek_ivs_sdk
+ AI_SDK_INSTALL_PATH="$TPU_OUTPUT_PATH"/cvitek_ai_sdk
+ CNV_SDK_INSTALL_PATH="$TPU_OUTPUT_PATH"/cvitek_cnv_sdk
+ TPU_MODEL_PATH="$TPU_OUTPUT_PATH"/models
+ IVE_CMODEL_INSTALL_PATH="$TPU_OUTPUT_PATH"/tools/ive_cmodel
+}
+
+function cvi_setup_env()
+{
+ local _tmp ret
+
+ _build_default_env
+
+ _tmp=$(python3 "${TOP_DIR}/build/scripts/boards_scan.py" --gen-board-env="${CHIP}_${BOARD}")
+ ret=$?
+ [[ "$ret" == 0 ]] || return "$ret"
+
+ # shellcheck disable=SC1090
+ source <(echo "${_tmp}")
+
+ if [[ "$CHIP_ARCH" == "CV183X" ]];then
+ export CVIARCH="CV183X"
+ fi
+ if [[ "$CHIP_ARCH" == "CV182X" ]];then
+ export CVIARCH="CV182X"
+ fi
+ if [[ "$CHIP_ARCH" == "CV181X" ]];then
+ export CVIARCH="CV181X"
+ fi
+ if [[ "$CHIP_ARCH" == "CV180X" ]];then
+ export CVIARCH="CV180X"
+ fi
+
+ export BRAND BUILD_VERBOSE DEBUG PROJECT_FULLNAME
+ export OUTPUT_DIR ATF_PATH BM_BLD_PATH OPENSBI_PATH UBOOT_PATH FREERTOS_PATH
+ export KERNEL_PATH RAMDISK_PATH OSDRV_PATH TOOLS_PATH COMMON_TOOLS_PATH
+
+ PROJECT_FULLNAME="$CHIP"_"$BOARD"
+
+ # output folder path
+ INSTALL_PATH="$TOP_DIR"/install
+ OUTPUT_DIR="$INSTALL_PATH"/soc_"$PROJECT_FULLNAME"
+ ROOTFS_DIR="$OUTPUT_DIR"/rootfs
+ SYSTEM_OUT_DIR="$OUTPUT_DIR"/rootfs/mnt/system
+
+ # source file folders
+ FSBL_PATH="$TOP_DIR"/fsbl
+ ATF_PATH="$TOP_DIR"/arm-trusted-firmware
+ UBOOT_PATH="$TOP_DIR/$UBOOT_SRC"
+ FREERTOS_PATH="$TOP_DIR"/freertos
+ ALIOS_PATH="$TOP_DIR"/alios
+ KERNEL_PATH="$TOP_DIR"/"$KERNEL_SRC"
+ OSDRV_PATH="$TOP_DIR"/osdrv
+ RAMDISK_PATH="$TOP_DIR"/ramdisk
+ BM_BLD_PATH="$TOP_DIR"/bm_bld
+ TOOLCHAIN_PATH="$TOP_DIR"/host-tools
+ OSS_PATH="$TOP_DIR"/oss
+ OPENCV_PATH="$TOP_DIR"/opencv
+ APPS_PATH="$TOP_DIR"/apps
+ MW_PATH="$TOP_DIR"/middleware/"$MW_VER"
+ ISP_TUNING_PATH="$TOP_DIR"/isp_tuning
+ TPU_SDK_PATH="$TOP_DIR"/cviruntime
+ IVE_SDK_PATH="$TOP_DIR"/ive
+ IVS_SDK_PATH="$TOP_DIR"/ivs
+ CNV_SDK_PATH="$TOP_DIR"/cnv
+ ACCESSGUARD_PATH="$TOP_DIR"/access-guard-turnkey
+ IPC_APP_PATH="$TOP_DIR"/framework/applications/ipc
+ AI_SDK_PATH="$TOP_DIR"/cviai
+ CVI_PIPELINE_PATH="$TOP_DIR"/cvi_pipeline
+ OPENSBI_PATH="$TOP_DIR"/opensbi
+ TOOLS_PATH="$BUILD_PATH"/tools
+ COMMON_TOOLS_PATH="$TOOLS_PATH"/common
+ VENC_PATH="$MW_PATH"/modules/venc
+ IMGTOOL_PATH="$COMMON_TOOLS_PATH"/image_tool
+ EMMCTOOL_PATH="$COMMON_TOOLS_PATH"/emmc_tool
+ SCRIPTTOOL_PATH="$COMMON_TOOLS_PATH"/scripts
+ ROOTFSTOOL_PATH="$COMMON_TOOLS_PATH"/rootfs_tool
+ SPINANDTOOL_PATH="$COMMON_TOOLS_PATH"/spinand_tool
+ BOOTLOGO_PATH="$COMMON_TOOLS_PATH"/bootlogo/logo.jpg
+
+ # subfolder path for buidling, chosen accroding to .gitignore rules
+ UBOOT_OUTPUT_FOLDER=build/"$PROJECT_FULLNAME"
+ RAMDISK_OUTPUT_BASE=build/"$PROJECT_FULLNAME"
+ KERNEL_OUTPUT_FOLDER=build/"$PROJECT_FULLNAME"
+ RAMDISK_OUTPUT_FOLDER="$RAMDISK_OUTPUT_BASE"/workspace
+
+ # toolchain
+ export CROSS_COMPILE_64=aarch64-linux-gnu-
+ export CROSS_COMPILE_32=arm-linux-gnueabihf-
+ export CROSS_COMPILE_UCLIBC=arm-cvitek-linux-uclibcgnueabihf-
+ export CROSS_COMPILE_64_NONOS=aarch64-elf-
+ export CROSS_COMPILE_64_NONOS_RISCV64=riscv64-unknown-elf-
+ export CROSS_COMPILE_GLIBC_RISCV64=riscv64-unknown-linux-gnu-
+ export CROSS_COMPILE_MUSL_RISCV64=riscv64-unknown-linux-musl-
+ export CROSS_COMPILE="$CROSS_COMPILE_64"
+
+ # toolchain path
+ CROSS_COMPILE_PATH_64="$TOOLCHAIN_PATH"/gcc/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu
+ CROSS_COMPILE_PATH_32="$TOOLCHAIN_PATH"/gcc/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf
+ CROSS_COMPILE_PATH_UCLIBC="$TOOLCHAIN_PATH"/gcc/arm-cvitek-linux-uclibcgnueabihf
+ CROSS_COMPILE_PATH_64_NONOS="$TOOLCHAIN_PATH"/gcc/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-elf
+ CROSS_COMPILE_PATH_64_NONOS_RISCV64="$TOOLCHAIN_PATH"/gcc/riscv64-elf-x86_64
+ CROSS_COMPILE_PATH_GLIBC_RISCV64="$TOOLCHAIN_PATH"/gcc/riscv64-linux-x86_64
+ CROSS_COMPILE_PATH_MUSL_RISCV64="$TOOLCHAIN_PATH"/gcc/riscv64-linux-musl-x86_64
+ CROSS_COMPILE_PATH="$CROSS_COMPILE_PATH_64"
+
+ # add toolchain path
+ pathprepend "$CROSS_COMPILE_PATH_64"/bin
+ pathprepend "$CROSS_COMPILE_PATH_32"/bin
+ pathprepend "$CROSS_COMPILE_PATH_64_NONOS"/bin
+ pathprepend "$CROSS_COMPILE_PATH_64_NONOS_RISCV64"/bin
+ pathprepend "$CROSS_COMPILE_PATH_GLIBC_RISCV64"/bin
+ pathprepend "$CROSS_COMPILE_PATH_MUSL_RISCV64"/bin
+ pathappend "$CROSS_COMPILE_PATH_UCLIBC"/bin
+
+ # sysroot
+ SYSROOT_PATH_64="$RAMDISK_PATH"/sysroot/sysroot-glibc-linaro-2.23-2017.05-aarch64-linux-gnu
+ SYSROOT_PATH_32="$RAMDISK_PATH"/sysroot/sysroot-glibc-linaro-2.23-2017.05-arm-linux-gnueabihf
+ SYSROOT_PATH_UCLIBC="$RAMDISK_PATH"/sysroot/sysroot-uclibc
+ SYSROOT_PATH_GLIBC_RISCV64="$RAMDISK_PATH"/sysroot/sysroot-glibc-riscv64
+ SYSROOT_PATH_MUSL_RISCV64="$RAMDISK_PATH"/sysroot/sysroot-musl-riscv64
+ SYSROOT_PATH="$SYSROOT_PATH_64"
+
+ # envs setup for specific ${SDK_VER}
+ envs_sdk_ver
+
+# if [ "${STORAGE_TYPE}" == "spinand" ]; then
+# PAGE_SUFFIX=2k
+# if [ ${NANDFLASH_PAGESIZE} == 4096 ]; then
+# PAGE_SUFFIX=4k
+# fi
+
+# if [[ "$ENABLE_ALIOS" != "y" ]]; then
+# pushd "$BUILD_PATH"/boards/"${CHIP_ARCH,,}"/"$PROJECT_FULLNAME"/partition/
+# ln -fs ../../../default/partition/partition_spinand_page_"$PAGE_SUFFIX".xml \
+# partition_"$STORAGE_TYPE".xml
+# popd
+# fi
+# fi
+
+ # configure flash partition table
+ if [ -z "${STORAGE_TYPE}" ]; then
+ FLASH_PARTITION_XML="$BUILD_PATH"/boards/default/partition/partition_none.xml
+ else
+ FLASH_PARTITION_XML="$BUILD_PATH"/boards/"${CHIP_ARCH,,}"/"$PROJECT_FULLNAME"/partition/partition_"$STORAGE_TYPE".xml
+ if ! [ -e "$FLASH_PARTITION_XML" ]; then
+ print_error "${FLASH_PARTITION_XML} does not exist!!"
+ return 1
+ fi
+ fi
+
+ export SYSTEM_OUT_DIR
+ export CROSS_COMPILE_PATH
+ # buildroot config
+ if [ -z "${MV_BOARD// }" ]; then
+ print_error "No MV_BOARD specified!"
+ return 1
+ fi
+ export BR_DIR="$TOP_DIR"/buildroot-2021.05
+ export BR_BOARD=${MV_BOARD}_${SDK_VER}
+ export BR_OVERLAY_DIR=${BR_DIR}/board/${MV_VENDOR}/${MV_BOARD}/overlay
+ export BR_DEFCONFIG=${BR_BOARD}_defconfig
+ export BR_ROOTFS_DIR="$OUTPUT_DIR"/tmp-rootfs
+ export BR_MV_VENDOR_DIR=${BR_DIR}/board/${MV_VENDOR}
+
+ # Check if bootlogo is enabled in the u-boot defconfig
+ UBOOT_DEFCONFIG="${BUILD_PATH}/boards/${CHIP_ARCH,,}/${PROJECT_FULLNAME}/u-boot/${BRAND}_${PROJECT_FULLNAME}_defconfig"
+ if grep -q "CONFIG_BOOTLOGO=y" ${UBOOT_DEFCONFIG}; then
+ ENABLE_BOOTLOGO=1
+ else
+ ENABLE_BOOTLOGO=0
+ fi
+}
+
+cvi_print_env()
+{
+ echo -e ""
+ echo -e "\e[1;32m====== Environment Variables ======= \e[0m\n"
+ echo -e " PROJECT: \e[34m$PROJECT_FULLNAME\e[0m, DDR_CFG=\e[34m$DDR_CFG\e[0m"
+ echo -e " CHIP_ARCH: \e[34m$CHIP_ARCH\e[0m, DEBUG=\e[34m$DEBUG\e[0m"
+ echo -e " SDK VERSION: \e[34m$SDK_VER\e[0m, RPC=\e[34m$MULTI_PROCESS_SUPPORT\e[0m"
+ echo -e " ATF options: ATF_KEY_SEL=\e[34m$ATF_KEY_SEL\e[0m, BL32=\e[34m$ATF_BL32\e[0m"
+ echo -e " Linux source folder:\e[34m$KERNEL_SRC\e[0m, Uboot source folder: \e[34m$UBOOT_SRC\e[0m"
+ echo -e " CROSS_COMPILE_PREFIX: \e[34m$CROSS_COMPILE\e[0m"
+ echo -e " ENABLE_BOOTLOGO: $ENABLE_BOOTLOGO"
+ echo -e " Flash layout xml: $FLASH_PARTITION_XML"
+ echo -e " Sensor tuning bin: $SENSOR_TUNING_PARAM"
+ echo -e " Output path: \e[33m$OUTPUT_DIR\e[0m"
+ echo -e ""
+}
+
+function pack_access_guard_turnkey_app()
+{
+ if [[ -d "$ACCESSGUARD_PATH" ]] && [[ "$BUILD_TURNKEY_ACCESSGUARD" = "y" ]]; then
+ mkdir -p "$SYSTEM_OUT_DIR"/data
+ cp -a ${ACCESSGUARD_PATH}/install "$SYSTEM_OUT_DIR"/data/
+ fi
+}
+
+function pack_ipc_turnkey_app()
+{
+ if [[ -d "$IPC_APP_PATH" ]] && [[ "$BUILD_TURNKEY_IPC" = "y" ]]; then
+ mkdir -p "$SYSTEM_OUT_DIR"/data
+ cp -a ${IPC_APP_PATH}/install "$SYSTEM_OUT_DIR"/data/
+ fi
+}
+
+function print_usage()
+{
+ printf " -------------------------------------------------------------------------------------------------------\n"
+ printf " Usage:\n"
+ printf " (1)\33[94m menuconfig \33[0m- Use menu to configure your board.\n"
+ printf " ex: $ menuconfig\n\n"
+ printf " (2)\33[96m defconfig \$CHIP_ARCH \33[0m- List EVB boards(\$BOARD) by CHIP_ARCH.\n"
+ "${BUILD_PATH}/scripts/boards_scan.py" --list-chip-arch
+ printf " ex: $ defconfig cv183x\n\n"
+ printf " (3)\33[92m defconfig \$BOARD\33[0m - Choose EVB board settings.\n"
+ printf " ex: $ defconfig cv1835_wevb_0002a\n"
+ printf " ex: $ defconfig cv1826_wevb_0005a_spinand\n"
+ printf " ex: $ defconfig cv181x_fpga_c906\n"
+ printf " -------------------------------------------------------------------------------------------------------\n"
+}
+
+TOP_DIR=$(gettop)
+BUILD_PATH="$TOP_DIR/build"
+export TOP_DIR BUILD_PATH
+"${BUILD_PATH}/scripts/boards_scan.py" --gen-build-kconfig
+"${BUILD_PATH}/scripts/gen_sensor_config.py"
+"${BUILD_PATH}/scripts/gen_panel_config.py"
+
+# import common functions
+# shellcheck source=./common_functions.sh
+source "$TOP_DIR/build/common_functions.sh"
+
+print_usage
diff --git a/build/tools/common/image_tool/mkcvipart.py b/build/tools/common/image_tool/mkcvipart.py
index 189d6549d3..4e4b9480cd 100644
--- a/build/tools/common/image_tool/mkcvipart.py
+++ b/build/tools/common/image_tool/mkcvipart.py
@@ -136,7 +136,13 @@ def gen_cvipart_h(output, parser):
for i, p in enumerate(parts):
if p["label"] == "ROOTFS":
of.write('#define ROOTFS_DEV "/dev/mmcblk0p%d"\n' % (i+1))
- break
+ print("Found ROOTFS Partition Label")
+ elif p["label"] == "OTAFS":
+ of.write('#define OTAFS_DEV "/dev/mmcblk0p%d"\n' % (i + 1))
+ print("Found OTAFS Partition Label")
+ elif p["label"] == "OTAFS_BAK":
+ of.write('#define OTAFS_BAK_DEV "/dev/mmcblk0p%d"\n' % (i + 1))
+ print("Found OTAFS_BAK Partition Label")
elif parser.getStorage() == "none":
of.write('#define PART_LAYOUT ""\n')
@@ -154,9 +160,12 @@ def gen_cvipart_h(output, parser):
% (parser.parts["ENV_BAK"]["offset"] * LBA_SIZE)
)
of.write("#define CONFIG_SYS_REDUNDAND_ENVIRONMENT\n")
- of.write(
- "#define CONFIG_ENV_SIZE 0x%X\n" % parser.parts[label]["part_size"]
- )
+ if parser.getStorage() == "sd":
+ # Force 192KB ENV Size, requires a ENV Parition of at least 256KB (We can't scale the ENV size with partition, or else it won't fit)
+ of.write("#define CONFIG_ENV_SIZE 0x30000\n")
+ else:
+ of.write(
+ "#define CONFIG_ENV_SIZE 0x%X\n" % parser.parts[label]["part_size"])
# Generintg PART_ENV
if parser.getStorage() == "emmc" or parser.getStorage() == "sd":
diff --git a/buildroot-2021.05/configs/cvitek_cv182x_recovery_defconfig b/buildroot-2021.05/configs/cvitek_cv182x_recovery_defconfig
deleted file mode 100644
index 86f52798fc..0000000000
--- a/buildroot-2021.05/configs/cvitek_cv182x_recovery_defconfig
+++ /dev/null
@@ -1,26 +0,0 @@
-BR2_arm=y
-BR2_cortex_a53=y
-BR2_ARM_FPU_NEON_VFPV4=y
-BR2_TOOLCHAIN_EXTERNAL=y
-BR2_TOOLCHAIN_EXTERNAL_LINARO_ARM=y
-BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y
-BR2_TOOLCHAIN_EXTERNAL_GLIBC=y
-BR2_PACKAGE_HAS_TOOLCHAIN_EXTERNAL=y
-BR2_PACKAGE_PROVIDES_TOOLCHAIN_EXTERNAL="toolchain-external-linaro-arm"
-BR2_TOOLCHAIN_EXTERNAL_PREFIX="arm-linux-gnueabihf"
-
-BR2_TOOLCHAIN_EXTERNAL_GCC_6=y
-BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_6=y
-BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y
-# BR2_TOOLCHAIN_EXTERNAL_HAS_SSP_STRONG is not set
-BR2_TOOLCHAIN_EXTERNAL_CXX=y
-BR2_TARGET_GENERIC_HOSTNAME="cvitek"
-BR2_TARGET_GENERIC_ISSUE="Welcome to CViTek"
-BR2_ROOTFS_OVERLAY="board/cvitek/cv1826/recovery"
-BR2_INIT_BUSYBOX=y
-BR2_PACKAGE_BUSYBOX=y
-BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y
-BR2_PACKAGE_INITSCRIPTS=y
-
-BR2_TARGET_ROOTFS_CPIO=y
-BR2_TARGET_ROOTFS_CPIO_GZIP=y
diff --git a/buildroot-2021.05/configs/milkv-duos-ota-sd_musl_riscv64_defconfig b/buildroot-2021.05/configs/milkv-duos-ota-sd_musl_riscv64_defconfig
new file mode 100644
index 0000000000..ec5c6dee6f
--- /dev/null
+++ b/buildroot-2021.05/configs/milkv-duos-ota-sd_musl_riscv64_defconfig
@@ -0,0 +1,137 @@
+BR2_riscv=y
+BR2_PER_PACKAGE_DIRECTORIES=y
+BR2_TOOLCHAIN_EXTERNAL=y
+BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="riscv64-unknown-linux-musl"
+BR2_TOOLCHAIN_EXTERNAL_HEADERS_5_10=y
+BR2_TOOLCHAIN_EXTERNAL_CUSTOM_MUSL=y
+BR2_TOOLCHAIN_EXTERNAL_CXX=y
+BR2_TARGET_LDFLAGS="-mcpu=c906fdv -march=rv64imafdcv0p7xthead -mcmodel=medany -mabi=lp64d"
+BR2_TARGET_GENERIC_HOSTNAME="milkv-duos-ota"
+BR2_TARGET_GENERIC_ISSUE="Milk-V OTA"
+BR2_TARGET_GENERIC_ROOT_PASSWD="milkv"
+BR2_ROOTFS_OVERLAY="board/milkv/milkv-duos-ota-sd/overlay"
+BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y
+BR2_PACKAGE_CVI_PINMUX=y
+BR2_PACKAGE_CVI_PINMUX_SG200X=y
+BR2_PACKAGE_DUO_PINMUX=y
+BR2_PACKAGE_DUO_PINMUX_DUOS=y
+BR2_PACKAGE_DUO_WIRINGX=y
+
+BR2_TARGET_ROOTFS_EXT2=y
+BR2_TARGET_ROOTFS_EXT2_4=y
+BR2_TARGET_ROOTFS_EXT2_SIZE="786432K"
+BR2_TARGET_ROOTFS_TAR_XZ=y
+BR2_PACKAGE_HOST_GENIMAGE=y
+
+# SWUpdate + optional config/website
+BR2_PACKAGE_LIBCONFIG=y
+BR2_PACKAGE_SWUPDATE=y
+#BR2_PACKAGE_SWUPDATE_FILESYSTEM=y
+BR2_PACKAGE_SWUPDATE_CONFIG="package/swupdate/swupdate.config" # need a better home
+#BR2_PACKAGE_SWUPDATE_INSTALL_WEBSITE=y
+BR2_PACKAGE_OPENSSL=y
+
+
+BR2_PACKAGE_LIBUBOOTENV=y
+BR2_PACKAGE_UBOOT_TOOLS=y
+
+BR2_PACKAGE_E2FSPROGS=y
+BR2_PACKAGE_E2FSPROGS_RESIZE2FS=y
+#BR2_PACKAGE_PARTED=y
+
+BR2_PACKAGE_COREUTILS=y
+
+BR2_PACKAGE_CA_CERTIFICATES=y
+BR2_PACKAGE_LIBOPENSSL_BIN=y
+BR2_PACKAGE_LIBOPENSSL_ENGINES=y
+BR2_PACKAGE_FREETYPE=y
+BR2_PACKAGE_C_PERIPHERY=y
+BR2_PACKAGE_LIBUSB=y
+BR2_PACKAGE_LIBUSB_EXAMPLES=y
+BR2_PACKAGE_JSON_C=n
+BR2_PACKAGE_LIBCURL=y
+BR2_PACKAGE_LIBCURL_CURL=y
+BR2_PACKAGE_LIBCURL_VERBOSE=y
+
+BR2_PACKAGE_DHCPCD=y
+BR2_PACKAGE_DNSMASQ=y
+BR2_PACKAGE_DROPBEAR=y
+BR2_PACKAGE_ETHTOOL=y
+BR2_PACKAGE_IPERF3=y
+BR2_PACKAGE_IW=y
+BR2_PACKAGE_WGET=y
+BR2_PACKAGE_WPA_SUPPLICANT=y
+BR2_PACKAGE_WPA_SUPPLICANT_CLI=y
+BR2_PACKAGE_WPA_SUPPLICANT_WPA_CLIENT_SO=y
+BR2_PACKAGE_BASH_LOADABLE_EXAMPLES=y
+BR2_PACKAGE_BASH_COMPLETION=y
+BR2_PACKAGE_FILE=y
+BR2_PACKAGE_NEOFETCH=y
+
+BR2_PACKAGE_KMOD=y
+BR2_PACKAGE_UTIL_LINUX_BINARIES=y
+BR2_PACKAGE_UTIL_LINUX_RFKILL=y
+BR2_PACKAGE_UTIL_LINUX_UUIDD=y
+BR2_PACKAGE_NANO=y
+
+#BR2_PACKAGE_ALSA_UTILS=y
+#BR2_PACKAGE_ALSA_UTILS_ALSACONF=y
+#BR2_PACKAGE_ALSA_UTILS_AMIXER=y
+#BR2_PACKAGE_ALSA_UTILS_APLAY=y
+#BR2_PACKAGE_ALSA_UTILS_SPEAKER_TEST=y
+
+#BR2_PACKAGE_SOX=y
+#BR2_PACKAGE_GZIP=y
+#BR2_PACKAGE_P7ZIP=y
+#BR2_PACKAGE_UNRAR=y
+#BR2_PACKAGE_UNZIP=y
+#BR2_PACKAGE_ZIP=y
+#BR2_PACKAGE_ZSTD=y
+#BR2_PACKAGE_FIO=y
+#BR2_PACKAGE_GDB=y
+#BR2_PACKAGE_LSOF=y
+#BR2_PACKAGE_PV=y
+#BR2_PACKAGE_SPIDEV_TEST=y
+#BR2_PACKAGE_STRACE=y
+#BR2_PACKAGE_STRESS_NG=y
+#BR2_PACKAGE_TREE=y
+
+#BR2_PACKAGE_EVTEST=y
+#BR2_PACKAGE_I2C_TOOLS=y
+
+#BR2_PACKAGE_SPI_TOOLS=y
+#BR2_PACKAGE_PYTHON3=y
+#BR2_PACKAGE_PYTHON3_PY_PYC=y
+#BR2_PACKAGE_PYTHON_EVDEV=y
+#BR2_PACKAGE_PYTHON_FREETYPE=y
+#BR2_PACKAGE_PYTHON_GRPCIO=y
+#BR2_PACKAGE_PYTHON_GOOGLEAPIS_COMMON_PROTOS=y
+#BR2_PACKAGE_PYTHON_LXML=y
+#BR2_PACKAGE_PYTHON_MODBUS_TK=y
+#BR2_PACKAGE_PYTHON_NUMPY=y
+#BR2_PACKAGE_PYTHON_PILLOW=y
+#BR2_PACKAGE_PYTHON_PIP=y
+#BR2_PACKAGE_PYTHON_PSUTIL=y
+#BR2_PACKAGE_PYTHON_REQUESTS=y
+#BR2_PACKAGE_PYTHON_SMBUS_CFFI=y
+#BR2_PACKAGE_PYTHON_SPIDEV=y
+#BR2_PACKAGE_TINYALSA=y
+
+
+
+#BR2_PACKAGE_MOSQUITTO=y
+#BR2_PACKAGE_NTP=y
+#BR2_PACKAGE_NTP_NTPDATE=y
+#BR2_PACKAGE_NTP_NTPTIME=y
+
+
+
+#BR2_PACKAGE_HTOP=y
+
+#BR2_PACKAGE_TAR=y
+
+# BR2_PACKAGE_NANO_TINY is not set
+#BR2_PACKAGE_VIM=y
+
+
+
diff --git a/buildroot-2021.05/package/genimage/0001-image-vfat-drop-b-from-mcopy.patch b/buildroot-2021.05/package/genimage/0001-image-vfat-drop-b-from-mcopy.patch
deleted file mode 100644
index d1faf967ed..0000000000
--- a/buildroot-2021.05/package/genimage/0001-image-vfat-drop-b-from-mcopy.patch
+++ /dev/null
@@ -1,59 +0,0 @@
-From fe74ea1583cb6e2ae7d45acf35bb1bec39d400de Mon Sep 17 00:00:00 2001
-From: Michael Olbrich
-Date: Sat, 10 Apr 2021 11:51:48 +0200
-Subject: [PATCH] image-vfat: drop '-b' from mcopy
-
-It enables the 'Batch mode'. It is optimized for huge recursive copies. This is not
-really needed here and fsck.vfat complains about the resulting filesystem.
-
-So drop the option and expand the existing test. Fail if fsck.vfat modifies the
-filesystem.
-
-Fixes #142
-
-Signed-off-by: Michael Olbrich
----
- image-vfat.c | 4 ++--
- test/basic-images.test | 4 +++-
- 2 files changed, 5 insertions(+), 3 deletions(-)
-
-diff --git a/image-vfat.c b/image-vfat.c
-index 9f04c57..ed87b7f 100644
---- a/image-vfat.c
-+++ b/image-vfat.c
-@@ -62,7 +62,7 @@ static int vfat_generate(struct image *image)
-
- image_info(image, "adding file '%s' as '%s' ...\n",
- child->file, *target ? target : child->file);
-- ret = systemp(image, "MTOOLS_SKIP_CHECK=1 %s -bsp -i '%s' '%s' '::%s'",
-+ ret = systemp(image, "MTOOLS_SKIP_CHECK=1 %s -sp -i '%s' '%s' '::%s'",
- get_opt("mcopy"), imageoutfile(image),
- file, target);
- if (ret)
-@@ -72,7 +72,7 @@ static int vfat_generate(struct image *image)
- return 0;
-
- if (!image->empty)
-- ret = systemp(image, "MTOOLS_SKIP_CHECK=1 %s -bsp -i '%s' '%s'/* ::",
-+ ret = systemp(image, "MTOOLS_SKIP_CHECK=1 %s -sp -i '%s' '%s'/* ::",
- get_opt("mcopy"), imageoutfile(image), mountpath(image));
- return ret;
- }
-diff --git a/test/basic-images.test b/test/basic-images.test
-index 1c96e1a..9888f49 100755
---- a/test/basic-images.test
-+++ b/test/basic-images.test
-@@ -343,7 +343,9 @@ exec_test_set_prereq mkdosfs
- exec_test_set_prereq mcopy
- test_expect_success dd,mkdosfs,mcopy "vfat" "
- run_genimage vfat.config test.vfat &&
-- check_size images/test.vfat 4193280
-+ fsck.fat -p images/test.vfat | tee fsck.log &&
-+ test_must_fail grep -q 'Filesystem was changed' fsck.log &&
-+ check_size images/test.vfat 4193280 &&
- MTOOLS_SKIP_CHECK=1 mdir -/ -f -b -i images/test.vfat / | sed -e 's;^::/;;' -e 's;/$;;' | sort > '${filelist_test}' &&
- check_filelist
- "
---
-2.25.1
-
diff --git a/buildroot-2021.05/package/genimage/genimage.hash b/buildroot-2021.05/package/genimage/genimage.hash
index 9f60261b53..64e88517cf 100644
--- a/buildroot-2021.05/package/genimage/genimage.hash
+++ b/buildroot-2021.05/package/genimage/genimage.hash
@@ -1,3 +1,3 @@
# Locally calculated
-sha256 9d1d53b33309fe24ea367ea057eb689bdb8ea33cb99d796de31127ca44ccf44c genimage-14.tar.xz
-sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 COPYING
+sha256 ebc3f886c4d80064dd6c6d5e3c2e98e5a670078264108ce2f89ada8a2e13fedd genimage-18.tar.xz
+
diff --git a/buildroot-2021.05/package/genimage/genimage.mk b/buildroot-2021.05/package/genimage/genimage.mk
index 1934223b23..b8ce7ff3c9 100644
--- a/buildroot-2021.05/package/genimage/genimage.mk
+++ b/buildroot-2021.05/package/genimage/genimage.mk
@@ -4,7 +4,7 @@
#
################################################################################
-GENIMAGE_VERSION = 14
+GENIMAGE_VERSION = 18
GENIMAGE_SOURCE = genimage-$(GENIMAGE_VERSION).tar.xz
GENIMAGE_SITE = https://github.com/pengutronix/genimage/releases/download/v$(GENIMAGE_VERSION)
HOST_GENIMAGE_DEPENDENCIES = host-pkgconf host-libconfuse
diff --git a/buildroot-2021.05/package/swupdate/0001-diskpart-force-kernel-to-reread-partition-table.patch b/buildroot-2021.05/package/swupdate/0001-diskpart-force-kernel-to-reread-partition-table.patch
deleted file mode 100644
index 5964d1b96f..0000000000
--- a/buildroot-2021.05/package/swupdate/0001-diskpart-force-kernel-to-reread-partition-table.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 305a7a5a74a612801d9df2b2efc86dd952b8c4e7 Mon Sep 17 00:00:00 2001
-From: Stefano Babic
-Date: Tue, 9 Jun 2020 13:58:06 +0000
-Subject: [PATCH] diskpart: force kernel to reread partition table
-
-After writing a partition table to disk, the kernel should be informed
-(like the partconf tool does), else it is not possible to install images
-in the new created partitions.
-
-Signed-off-by: Stefano Babic
-Signed-off-by: Joris Offouga
----
- handlers/diskpart_handler.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/handlers/diskpart_handler.c b/handlers/diskpart_handler.c
-index 16adc17..372412b 100644
---- a/handlers/diskpart_handler.c
-+++ b/handlers/diskpart_handler.c
-@@ -273,7 +273,8 @@ static int diskpart(struct img_type *img,
- /*
- * Everything done, write into disk
- */
-- ret = fdisk_write_disklabel(cxt);
-+ ret = fdisk_write_disklabel(cxt) |
-+ fdisk_reread_partition_table(cxt);
-
- handler_exit:
- if (fdisk_deassign_device(cxt, 0))
---
-2.25.1
-
diff --git a/buildroot-2021.05/package/swupdate/0002-Shellscript-stops-before-completing.patch b/buildroot-2021.05/package/swupdate/0002-Shellscript-stops-before-completing.patch
deleted file mode 100644
index d91438893b..0000000000
--- a/buildroot-2021.05/package/swupdate/0002-Shellscript-stops-before-completing.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From bd08e45d7b25f06da2fc6dc824146b471db5f1f4 Mon Sep 17 00:00:00 2001
-From: Stefano Babic
-Date: Tue, 16 Jun 2020 10:29:55 +0200
-Subject: [PATCH] Shellscript stops before completing
-
-Commit 8fb94d7 reworks the way shell script are called, redirecting
-stdout and stderr to SWUpdate. A shell script runs then in a child
-process. Under some circumstances, SWUpdate closes the forked process
-before the child process completes.
-
-Be sure that the child process has terminated before to go on.
-
-Signed-off-by: Stefano Babic
-Reported-by: Piotr Piwko
-Tested-by: Piotr Piwko
-Signed-off-by: Joris Offouga
----
- core/pctl.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/core/pctl.c b/core/pctl.c
-index 8b1c667..01ad540 100644
---- a/core/pctl.c
-+++ b/core/pctl.c
-@@ -263,6 +263,7 @@ int run_system_cmd(const char *cmd)
- }
- } else {
- int fds[2];
-+ pid_t w;
-
- close(stdoutpipe[PIPE_WRITE]);
- close(stderrpipe[PIPE_WRITE]);
-@@ -276,7 +277,6 @@ int run_system_cmd(const char *cmd)
- * and from stderr (of the child process) as ERROR
- */
- do {
-- pid_t w;
- int n1 = 0;
- struct timeval tv;
- fd_set readfds;
-@@ -373,7 +373,7 @@ int run_system_cmd(const char *cmd)
- }
- }
- } while (ret > 0 && n1 > 0);
-- } while (!WIFEXITED(wstatus));
-+ } while (w != process_id);
-
- close(stdoutpipe[PIPE_READ]);
- close(stderrpipe[PIPE_READ]);
---
-2.25.1
-
diff --git a/buildroot-2021.05/package/swupdate/swupdate.config b/buildroot-2021.05/package/swupdate/swupdate.config
index a6b7a74948..bd3ae0c127 100644
--- a/buildroot-2021.05/package/swupdate/swupdate.config
+++ b/buildroot-2021.05/package/swupdate/swupdate.config
@@ -4,7 +4,7 @@
#
CONFIG_HAVE_DOT_CONFIG=y
-#
+#
# Swupdate Settings
#
@@ -14,7 +14,7 @@ CONFIG_HAVE_DOT_CONFIG=y
# CONFIG_CURL is not set
# CONFIG_CURL_SSL is not set
# CONFIG_SYSTEMD is not set
-CONFIG_DEFAULT_CONFIG_FILE="/etc/swupdate.cfg"
+CONFIG_DEFAULT_CONFIG_FILE="/etc/swupdate/swupdate.cfg"
CONFIG_SCRIPTS=y
# CONFIG_HW_COMPATIBILITY is not set
CONFIG_SW_VERSIONS_FILE="/etc/sw-versions"
@@ -25,14 +25,8 @@ CONFIG_SW_VERSIONS_FILE="/etc/sw-versions"
CONFIG_SOCKET_CTRL_PATH="/tmp/sockinstctrl"
CONFIG_SOCKET_PROGRESS_PATH="/tmp/swupdateprog"
CONFIG_SOCKET_REMOTE_HANDLER_DIRECTORY="/tmp/"
-
-#
-# MTD support needs libmtd
-#
-
-#
-# Lua support needs a Lua interpreter
-#
+# CONFIG_MTD is not set
+# CONFIG_LUA is not set
# CONFIG_FEATURE_SYSLOG is not set
#
@@ -50,86 +44,45 @@ CONFIG_EXTRA_LDLIBS=""
# CONFIG_DEBUG is not set
# CONFIG_WERROR is not set
# CONFIG_NOCLEANUP is not set
-
-#
-# EFI Boot Guard needs libebgenv and libz
-#
-CONFIG_BOOTLOADER_NONE=y
+# CONFIG_BOOTLOADER_EBG is not set
+CONFIG_UBOOT=y
+# CONFIG_BOOTLOADER_NONE is not set
# CONFIG_BOOTLOADER_GRUB is not set
-
-#
-# U-Boot support needs libubootenv, libz
-#
-CONFIG_SSL_IMPL_NONE=y
-
-#
-# Image downloading support needs libcurl
-#
-
-#
-# Hash checking needs an SSL implementation
-#
-
-#
-# Image signature verification needs an SSL implementation
-#
-
-#
-# Image encryption needs an SSL implementation
-#
+CONFIG_UBOOT_FWENV="/etc/fw_env.config"
+CONFIG_UBOOT_DEFAULTENV="/etc/u-boot-initial-env"
+# CONFIG_SSL_IMPL_NONE is not set
+CONFIG_SSL_IMPL_OPENSSL=y
+# CONFIG_SSL_IMPL_MBEDTLS is not set
+# CONFIG_DOWNLOAD is not set
+CONFIG_HASH_VERIFY=y
+# CONFIG_SIGNED_IMAGES is not set
+# CONFIG_ENCRYPTED_IMAGES is not set
# CONFIG_SURICATTA is not set
CONFIG_WEBSERVER=y
CONFIG_MONGOOSE=y
CONFIG_MONGOOSEIPV6=y
-
-#
-# SSL support needs an SSL implementation
-#
+# CONFIG_MONGOOSESSL is not set
+CONFIG_GUNZIP=y
+CONFIG_ZSTD=y
#
# Parser Features
#
CONFIG_LIBCONFIG=y
CONFIG_PARSERROOT=""
-
-#
-# JSON config parser support needs json-c
-#
+# CONFIG_JSON is not set
# CONFIG_SETSWDESCRIPTION is not set
#
# Image Handlers
#
-
-#
-# ubivol support needs libubi
-#
# CONFIG_DISKPART is not set
CONFIG_RAW=y
# CONFIG_RDIFFHANDLER is not set
+# CONFIG_READBACKHANDLER is not set
# CONFIG_SHELLSCRIPTHANDLER is not set
-
-#
-# archive support needs libarchive
-#
-
-#
-# remote handler needs zeromq
-#
-
-#
-# swuforward handler needs json-c and curl
-#
-
-#
-# SWU forwarder requires libcurl
-#
-
-#
-# swuforward handler needs json-c and curl
-#
+# CONFIG_ARCHIVE is not set
+# CONFIG_REMOTE_HANDLER is not set
+# CONFIG_SWUFORWARDER_HANDLER is not set
# CONFIG_BOOTLOADERHANDLER is not set
-
-#
-# Microcontroller handler depends on libgpiod
-#
+# CONFIG_UCFWHANDLER is not set
diff --git a/buildroot-2021.05/package/swupdate/swupdate.hash b/buildroot-2021.05/package/swupdate/swupdate.hash
index 40f978d225..f40a9428ac 100644
--- a/buildroot-2021.05/package/swupdate/swupdate.hash
+++ b/buildroot-2021.05/package/swupdate/swupdate.hash
@@ -1,6 +1,2 @@
# Locally calculated
-sha256 132df2ff1ad41c7aabd0fbef6a23d28607cbd5cad52aab050c4822977a107486 swupdate-2020.04.tar.gz
-sha256 43492b377cf2fb67942d1dd231146bd4e6578646ad13ef289297c9dd75cbc478 Licenses/Exceptions
-sha256 8177f97513213526df2cf6184d8ff986c675afb514d4e68a404010521b880643 Licenses/gpl-2.0.txt
-sha256 dc626520dcd53a22f727af3ee42c770e56c97a64fe3adb063799d8ab032fe551 Licenses/lgpl-2.1.txt
-sha256 89807acf2309bd285f033404ee78581602f3cd9b819a16ac2f0e5f60ff4a473e Licenses/mit.txt
+sha256 e6335e87812a98a87f1c55df03c9f4e4ef042789570002c5db120b09f64b0d86 swupdate-2022.12.tar.gz
diff --git a/buildroot-2021.05/package/swupdate/swupdate.mk b/buildroot-2021.05/package/swupdate/swupdate.mk
index d96a0c2e07..57776bc505 100644
--- a/buildroot-2021.05/package/swupdate/swupdate.mk
+++ b/buildroot-2021.05/package/swupdate/swupdate.mk
@@ -4,10 +4,10 @@
#
################################################################################
-SWUPDATE_VERSION = 2020.04
-SWUPDATE_SITE = $(call github,sbabic,swupdate,$(SWUPDATE_VERSION))
+SWUPDATE_VERSION = 2022.12
+SWUPDATE_SITE = https://github.com/sbabic/swupdate/archive/$(SWUPDATE_VERSION)
SWUPDATE_LICENSE = GPL-2.0+ with OpenSSL exception, LGPL-2.1+, MIT
-SWUPDATE_LICENSE_FILES = Licenses/Exceptions Licenses/gpl-2.0.txt \
+#SWUPDATE_LICENSE_FILES = Licenses/Exceptions Licenses/gpl-2.0.txt \
Licenses/lgpl-2.1.txt Licenses/mit.txt
# swupdate uses $CROSS-cc instead of $CROSS-gcc, which is not
diff --git a/device/common/br_overlay/etc/wpa_supplicant_khacks.conf b/device/common/br_overlay/etc/wpa_supplicant_khacks.conf
deleted file mode 100644
index f0446dd3bd..0000000000
--- a/device/common/br_overlay/etc/wpa_supplicant_khacks.conf
+++ /dev/null
@@ -1,9 +0,0 @@
-ctrl_interface=/var/run/wpa_supplicant
-ap_scan=1
-update_config=1
-
-network={
- ssid="khacks"
- psk="khacks++"
- key_mgmt=WPA-PSK
-}
diff --git a/device/common/overlay/mnt/system/auto.sh b/device/common/overlay/mnt/system/auto.sh
index c93d62d50d..93aeb9abaa 100755
--- a/device/common/overlay/mnt/system/auto.sh
+++ b/device/common/overlay/mnt/system/auto.sh
@@ -78,7 +78,7 @@ wait_and_set_mac() {
# Wait for valid MAC addresses
if ! wait_for_mac_addresses; then
echo "$(date +'%Y-%m-%d %H:%M:%S') Failed to obtain valid MAC addresses, exiting" >> "$log_file"
- exit 1
+ #exit 1
fi
# Wait for eth0 and set its MAC address
@@ -86,11 +86,3 @@ wait_and_set_mac "eth0" "$mac1"
# Wait for wlan0 and set its MAC address
wait_and_set_mac "wlan0" "$mac2"
-
-# Start wpa_supplicant for wlan0 if it exists
-if ip link show wlan0 > /dev/null 2>&1; then
- echo "$(date +'%Y-%m-%d %H:%M:%S') Starting wpa_supplicant for wlan0..." >> "$log_file"
- wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant_khacks.conf >> "$log_file" 2>&1
-else
- echo "$(date +'%Y-%m-%d %H:%M:%S') wlan0 interface not available, skipping wpa_supplicant" >> "$log_file"
-fi
diff --git a/device/gen_swu.sh b/device/gen_swu.sh
new file mode 100755
index 0000000000..e8d400c109
--- /dev/null
+++ b/device/gen_swu.sh
@@ -0,0 +1,67 @@
+#!/bin/bash
+
+# Check arguments
+if [ "$#" -ne 2 ]; then
+ echo "Usage: $0 "
+ exit 1
+fi
+
+# Arguments
+ROOTFS_PATH="$1"
+VERSION="$2"
+
+# Ensure the rootfs file exists
+if [ ! -f "$ROOTFS_PATH" ]; then
+ echo "Error: RootFS file not found: $ROOTFS_PATH"
+ exit 1
+fi
+
+# Determine the directory and filename
+ROOTFS_DIR=$(dirname "$ROOTFS_PATH")
+ROOTFS_FILENAME=$(basename "$ROOTFS_PATH")
+
+# Define staging directory
+SWU_DIR="/tmp/swu"
+
+# Clean up and recreate staging directory
+rm -rf "$SWU_DIR"
+mkdir -p "$SWU_DIR"
+
+# Copy and compress the rootfs
+cp "$ROOTFS_PATH" "$SWU_DIR/rootfs.ext4"
+gzip -f "$SWU_DIR/rootfs.ext4"
+
+# Generate SHA256 checksum
+SHA256SUM=$(sha256sum "$SWU_DIR/rootfs.ext4.gz" | awk '{print $1}')
+
+# Create sw-description file
+SW_DESCRIPTION="$SWU_DIR/sw-description"
+cat > "$SW_DESCRIPTION" < "zbot.swu"
+
+# Move the SWU package to the rootfs directory
+mv "$SWU_DIR/zbot.swu" "$ROOTFS_DIR/zbot.swu"
+
+# Cleanup temporary directory
+rm -rf "$SWU_DIR"
+
+echo "SWU package created: $ROOTFS_DIR/zbot.swu"
diff --git a/device/milkv-duos-ota-sd/Readme.md b/device/milkv-duos-ota-sd/Readme.md
new file mode 100644
index 0000000000..68031ecb58
--- /dev/null
+++ b/device/milkv-duos-ota-sd/Readme.md
@@ -0,0 +1,132 @@
+------------------------------------
+Build ZBot OTA System
+------------------------------------
+```
+source device/milkv-duos-ota-sd/boardconfig.sh
+source build/milkvsetup-ota.sh
+defconfig cv1813h_milkv_duos_ota_sd
+clean_all
+build_all
+
+# generate three blank ext4 filesystems
+------
+dd if=/dev/zero of=install/soc_cv1813h_milkv_duos_ota_sd/env.ext4 bs=1k count=256
+mkfs.ext4 install/soc_cv1813h_milkv_duos_ota_sd/env.ext4
+
+dd if=/dev/zero of=install/soc_cv1813h_milkv_duos_ota_sd/placeholder_staging.ext4 bs=1k count=300000
+mkfs.ext4 install/soc_cv1813h_milkv_duos_ota_sd/placeholder_staging.ext4
+
+dd if=/dev/zero of=install/soc_cv1813h_milkv_duos_ota_sd/placeholder_data.ext4 bs=1k count=50000
+mkfs.ext4 install/soc_cv1813h_milkv_duos_ota_sd/placeholder_data.ext4
+
+# should now have the following:
+./install/soc_cv1813h_milkv_duos_ota_sd/env.ext4
+./install/soc_cv1813h_milkv_duos_ota_sd/placeholder_data.ext4
+./install/soc_cv1813h_milkv_duos_ota_sd/placeholder_staging.ext4
+----
+
+# generate the sd image file
+pack_sd_image
+
+# alternatively generate compressed image file for distribution
+pack_sd_image_gz
+
+# burn image to sd
+Add wpa_supplicant.conf to boot parition
+```
+
+
+------------------------------------
+Build ZBot Main OS and perform OTA Updates
+------------------------------------
+```
+source device/milkv-duos-sd/boardconfig.sh
+source build/milkvsetup.sh
+defconfig cv1813h_milkv_duos_sd
+clean_all
+build_all
+pack_sd_image
+gen_swu_ota
+tools/zbot_updater.py update 192.168.42.1 install//zbot.swu
+```
+
+
+------------------------------------
+Parition Table
+GPT/MBR Hybrid (Boot Partition UUID Set such that Mac/Windows will mount)
+------------------------------------
+Upgraded Genimage to v18 (Support UUID Partition Types and Improved Hybrid Support)
+(GPT Partition Table)
+├── /dev/mmcblk0p1 (boot) [EFI System Partition, FAT32, 128M, Bootable]
+├── /dev/mmcblk0p2 (env) [Linux, 256K]
+├── /dev/mmcblk0p3 (otafs) [Linux, EXT4, 125M]
+├── /dev/mmcblk0p4 (rootfs) [Linux, 275M]
+├── /dev/mmcblk0p5 (data) [Linux, 50M]
+└── /dev/mmcblk0p6 (staging) [Linux, 300M]
+
+U-Boot Configured to Support Persistent Environment (ext4 backend via env partition)
+
+Added data parition to seperate from rootfs. (config, weights, data)
+
+------------------------------------
+OTA Environment Mechanics
+------------------------------------
+```
+Key Variables
+---
+rootfs=root=/dev/mmcblk0p4 rootwait rw -- default rootfs location
+otafs=root=/dev/mmcblk0p3 rootwait rw -- default otafs location
+root=root=/dev/mmcblk0p4 rootwait rw -- booted partition
+next_boot = {otafs, rootfs} -- next boot partition
+
+# example (boot into otafs)
+fw_setenv next_boot otafs
+reboot
+
+boot-ota
+boot-zbot
+```
+
+------------------------------------
+OTA Updater
+------------------------------------
+```
+# OTA CLI Tool
+tools/zbot_updater.py update
+```
+
+SWUpdate Backend (Updated to v2022.12)
+- listens on port 10000 (via websocket and http)
+- stages firmware, writes raw image to partition, writes files, updates microcontrollers
+- handles hw compatibility, sw version rules, hash validation and compressed images.
+
+
+---
+sw-description (generated via gen_swu_ota)
+---
+```
+software = {
+ version = "1.01";
+ description = "Zeroth01 v1.01 Update";
+ hardware_compatibility = ["1.0", "1.1"];
+ images = (
+ {
+ filename = "rootfs.ext4.gz";
+ device = "/dev/mmcblk0p4";
+ type = "raw";
+ sha256 = "2a603bae7d73c95f4bff20f775a487c1e336430a21e525777a2516c7f73d5a5f";
+ compressed = "zlib";
+ }
+ );
+}
+```
+
+------------------------------------
+Work in progress
+------------------------------------
+- Update utility triggers rootfs to reboot into otafs for updates
+- LCD / Local UI for update process (show progress, ask confirm to update etc.)
+- Checking/Downloading update from github/gitlab (Zeroth team feedback)
+- Move this to BR_EXTERNAL (shouldn't be entangled in buildroot source tree direclty)
+- Add redundancy (u-boot env, otafs a/b, u-boot a/b) (ordered for priority)
+- Security
diff --git a/device/milkv-duos-ota-sd/boardconfig.sh b/device/milkv-duos-ota-sd/boardconfig.sh
new file mode 100644
index 0000000000..17f4f02afb
--- /dev/null
+++ b/device/milkv-duos-ota-sd/boardconfig.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+export MV_BOARD=milkv-duos-ota-sd
+export MV_BOARD_CPU=cv1813h
+export MV_VENDOR=milkv
+export MV_BUILD_ENV=milkvsetup-ota.sh
+export MV_BOARD_LINK=cv1813h_milkv_duos_ota_sd
+
diff --git a/device/milkv-duos-ota-sd/boot-env-part/env.ext4 b/device/milkv-duos-ota-sd/boot-env-part/env.ext4
new file mode 100644
index 0000000000..4a26d35e02
Binary files /dev/null and b/device/milkv-duos-ota-sd/boot-env-part/env.ext4 differ
diff --git a/device/milkv-duos-ota-sd/genimage.cfg b/device/milkv-duos-ota-sd/genimage.cfg
new file mode 100644
index 0000000000..c7e7e7d5d5
--- /dev/null
+++ b/device/milkv-duos-ota-sd/genimage.cfg
@@ -0,0 +1,64 @@
+image boot.vfat {
+ vfat {
+ label = "zbot-boot"
+ files = {
+ "fip.bin",
+ "rawimages/boot.sd",
+ }
+ }
+ size = 128M
+}
+
+image otafs.ext4 {
+ ext4 {
+ label = "otafs"
+ }
+ size = 125M
+}
+
+image milkv-duos-ota-sd.img {
+ hdimage {
+ partition-table-type = "hybrid"
+ disk-uuid = "b0326371-955b-42e3-ad81-ad0151d813ec"
+ }
+
+ partition boot {
+ #partition-type-uuid = "uefi" # EFI System Partition
+ partition-type-uuid = "EBD0A0A2-B9E5-4433-87C0-68B6B72699C7" # Microsoft Basic Data (Use this so Mac/Windows mounts boot)
+ partition-type = 0x0c
+ bootable = "true"
+ image = "boot.vfat"
+ }
+
+ partition env {
+ partition-type-uuid = "linux"
+ image = "env.ext4"
+ }
+
+ partition otafs {
+ partition-type-uuid = "linux"
+
+ image = "otafs.ext4"
+ }
+
+ partition rootfs {
+ partition-type-uuid = "linux"
+
+ size = 275M
+ }
+
+ partition data {
+ partition-type-uuid = "linux"
+
+ size = 50M
+ image = "placeholder_data.ext4"
+ }
+
+ partition staging {
+ partition-type-uuid = "0FC63DAF-8483-4772-8E79-3D69D8477DE4" # Linux Filesystem
+
+ size = 300M
+ image = "placeholder_staging.ext4"
+ }
+
+}
diff --git a/device/milkv-duos-ota-sd/logo.jpg b/device/milkv-duos-ota-sd/logo.jpg
new file mode 100644
index 0000000000..eaf575385d
Binary files /dev/null and b/device/milkv-duos-ota-sd/logo.jpg differ
diff --git a/device/common/br_overlay/etc/fstab b/device/milkv-duos-ota-sd/overlay/etc/fstab
similarity index 84%
rename from device/common/br_overlay/etc/fstab
rename to device/milkv-duos-ota-sd/overlay/etc/fstab
index 55ebdaea71..c9d392d8eb 100644
--- a/device/common/br_overlay/etc/fstab
+++ b/device/milkv-duos-ota-sd/overlay/etc/fstab
@@ -8,3 +8,5 @@ tmpfs /run tmpfs mode=0755,nosuid,nodev 0 0
sysfs /sys sysfs defaults 0 0
debug /sys/kernel/debug debugfs defaults 0 0
/dev/mmcblk0p1 /boot vfat defaults 0 0
+/dev/mmcblk0p2 /bootenv auto defaults 0 0
+/dev/mmcblk0p6 /staging auto defaults 0 0
diff --git a/device/milkv-duos-ota-sd/overlay/etc/fw_env.config b/device/milkv-duos-ota-sd/overlay/etc/fw_env.config
new file mode 100644
index 0000000000..70d57a4b47
--- /dev/null
+++ b/device/milkv-duos-ota-sd/overlay/etc/fw_env.config
@@ -0,0 +1,2 @@
+# u-boot ext4 192K env_size
+/bootenv/uboot.env 0x0000 0x30000
\ No newline at end of file
diff --git a/device/milkv-duos-ota-sd/overlay/etc/hostname b/device/milkv-duos-ota-sd/overlay/etc/hostname
new file mode 100644
index 0000000000..6be71cac3b
--- /dev/null
+++ b/device/milkv-duos-ota-sd/overlay/etc/hostname
@@ -0,0 +1 @@
+zbot-ota
\ No newline at end of file
diff --git a/device/milkv-duos-ota-sd/overlay/etc/init.d/S60wpa_supplicant b/device/milkv-duos-ota-sd/overlay/etc/init.d/S60wpa_supplicant
new file mode 100755
index 0000000000..f610dee2fd
--- /dev/null
+++ b/device/milkv-duos-ota-sd/overlay/etc/init.d/S60wpa_supplicant
@@ -0,0 +1,48 @@
+#!/bin/sh
+log_file="/var/log/wpa_supplicant_start.log"
+
+start_wpa_supplicant() {
+ echo "$(date +'%Y-%m-%d %H:%M:%S') Starting wpa_supplicant script..." >> "$log_file"
+
+ # Copy the configuration file if it exists
+ if [ -f /boot/wpa_supplicant.conf ]; then
+ cp /boot/wpa_supplicant.conf /etc/wpa_supplicant.conf
+ echo "$(date +'%Y-%m-%d %H:%M:%S') Copied wpa_supplicant.conf from /boot to /etc" >> "$log_file"
+ else
+ echo "$(date +'%Y-%m-%d %H:%M:%S') No wpa_supplicant.conf found on /boot. Skipping copy." >> "$log_file"
+ exit 0
+ fi
+
+ # Wait for wlan0 to reach the DOWN state (available and ready)
+ echo "$(date +'%Y-%m-%d %H:%M:%S') Waiting for wlan0 to become available..." >> "$log_file"
+ while ! ip link show wlan0 | grep -q "state DOWN"; do
+ sleep 1
+ done
+ echo "$(date +'%Y-%m-%d %H:%M:%S') wlan0 is available in DOWN state. Continuing." >> "$log_file"
+
+ # Start wpa_supplicant
+ echo "$(date +'%Y-%m-%d %H:%M:%S') Starting wpa_supplicant..." >> "$log_file"
+ wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf >> "$log_file" 2>&1
+ if [ $? -eq 0 ]; then
+ echo "$(date +'%Y-%m-%d %H:%M:%S') wpa_supplicant started successfully." >> "$log_file"
+ else
+ echo "$(date +'%Y-%m-%d %H:%M:%S') Failed to start wpa_supplicant." >> "$log_file"
+ fi
+}
+
+# Run the script in the background
+case "$1" in
+start)
+ ( start_wpa_supplicant ) &
+ ;;
+stop)
+ echo "$(date +'%Y-%m-%d %H:%M:%S') Stopping wpa_supplicant..." >> "$log_file"
+ killall wpa_supplicant 2>/dev/null || echo "$(date +'%Y-%m-%d %H:%M:%S') wpa_supplicant not running." >> "$log_file"
+ ;;
+*)
+ echo "Usage: $0 {start|stop}" >> "$log_file"
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/device/milkv-duos-ota-sd/overlay/etc/init.d/S98swupdate b/device/milkv-duos-ota-sd/overlay/etc/init.d/S98swupdate
new file mode 100755
index 0000000000..f10e4f5dcc
--- /dev/null
+++ b/device/milkv-duos-ota-sd/overlay/etc/init.d/S98swupdate
@@ -0,0 +1,33 @@
+#!/bin/sh
+#
+# SWUpdate Service
+case "$1" in
+ start)
+ # Ensure /staging is mounted before starting (max wait: 10 seconds)
+ TIMEOUT=10
+ COUNT=0
+ echo "Waiting for /staging to be mounted."
+ while ! mountpoint -q /staging && [ "$COUNT" -lt "$TIMEOUT" ]; do
+ echo "Waiting for /staging to be mounted... ($COUNT sec)"
+ sleep 1
+ COUNT=$((COUNT + 1))
+ done
+ sleep 2
+ echo "Starting SWUpdate Web Server..."
+ TMPDIR="/staging" /usr/bin/swupdate -w "--document-root /var/www/swupdate --port 10000" &
+ ;;
+ stop)
+ echo "Stopping SWUpdate Web Server..."
+ killall swupdate
+ ;;
+ restart)
+ $0 stop
+ $0 start
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|restart}"
+ exit 1
+ ;;
+esac
+
+exit 0
\ No newline at end of file
diff --git a/device/milkv-duos-ota-sd/overlay/etc/swupdate/swupdate.cfg b/device/milkv-duos-ota-sd/overlay/etc/swupdate/swupdate.cfg
new file mode 100644
index 0000000000..e9083ae94c
--- /dev/null
+++ b/device/milkv-duos-ota-sd/overlay/etc/swupdate/swupdate.cfg
@@ -0,0 +1,296 @@
+# SWUpdate configuration file
+#
+# SPDX-FileCopyrightText: 2014-2021 Stefano Babic
+# SPDX-License-Identifier: CC0-1.0
+#
+# This is responsible to pass configuration and parameters
+# to SWUpdate. Most of configuration can be overwritten
+# with command line parameters.
+#
+
+# globals : general configuration for the installer
+#
+#verbose : true
+# set verbose mode (Default: false)
+# loglevel : integer
+# level for logging from 1 (no log) to 6
+# syslog : boolean
+# enable sending logs to syslog daemon
+# public-key-file : string
+# file with public key for
+# image verification
+# mtd-blacklist : list integers
+# MTD devices where SWUpdate
+# must not try to check for UBI filesystem.
+# aes-key-file : string
+# file containing the symmetric key for
+# image decryption
+#preupdatecmd : /bin/touch /root/pre
+# command to be executed right before the update
+# is installed
+#postupdatecmd : /bin/touch /root/posted
+# command to be executed after a successful update
+# ca-path : string
+# path to the Certificate Authority (PEM)
+# no-downgrading : string
+# not install a release older as
+# no-reinstalling : string
+# not install a release same as
+# cert-purpose : string
+# set expected certificate purpose
+# [emailProtection|codeSigning] (default: emailProtection)
+# forced-signer-name : string
+# set expected common name of signer certificate
+# select: : string
+# select software images set and source (,)
+# bootloader: : string
+# bootloader interface to use, overruling compile-time default.
+# Possible values are ebg, grub, uboot, and none for
+# EFI Boot Guard, U-Boot, GRUB, and the Environment in RAM bootloader,
+# respectively, given the respective bootloader support is compiled-in.
+# namespace-vars : namespace used by libubootenv for application/SWUpdate persistent
+# variables. This can be overridden in sw-description.
+# It is one set in libubootenv configuration file.
+# fwenv-config-location : path of the configuration file for libubootenv
+# gen-swversions : generate a version file containing all installed (versioned) images.
+globals :
+{
+
+ verbose = true;
+ loglevel = 5;
+ #preupdatecmd = "/bin/touch /root/pre" # might use this to make sure /staging partition is empty
+ postupdatecmd="sleep 2; /usr/bin/fw_setenv next_boot rootfs; sleep 1; sync; reboot"
+
+
+ syslog = false;
+ #public-key-file = "test.pem";
+ #mtd-blacklist = "0 1 2 3 4 5 6";
+};
+
+# logcolors : set colors for output to stdout / stderr
+# color is set indivisually for each level
+# each entry is in the format
+# loglevel = color:attribute
+# where loglevel is one of:
+# "error","warning", "info", "debug", "trace"
+# and color is one of:
+# "black", "red", "green", "yellow", "blue", "magenta", "cyan", "white"
+# and attribute is one of:
+# "normal", "bright", "dim", "underline", "blink", "reverse", "hidden"
+#
+# Example :
+# error = "red";
+#
+logcolors : {
+ error = "red:blink";
+ trace = "green:normal";
+ debug = "magenta:normal";
+ warning = "yellow:underline";
+};
+
+#
+# download : setup for the downloader
+# It requires that SWUpdate is started with -d
+#
+# url : string
+# complete URL pointing to the SWU image of the update package
+# retries : integer
+# Number of retries (0=forever)
+# userid : integer
+# userID for Webserver process
+# groupid : integer
+# groupId for Webserver process
+# timeout : integer
+# it is the number of seconds that can be accepted without
+# receiving any packets. If it elapses, the connection is
+# considered broken.
+# retrywait : integer
+# it is the number of seconds to wait between each failed attepm.
+# authentication : string
+# credentials needed to get software if server
+# enables Basic Auth to allow this downloading
+# max-download-speed : string
+# Specify maximum download speed to use. Value can be expressed as
+# B/s, kB/s, M/s, G/s. Example: 512k
+#download :
+#{
+# authentication = "user:password";
+# retries = 3;
+# timeout = 1800;
+# max-download-speed = "1M";
+# retrywait = 5;
+# url = "http://example.com/software.swu";
+# userid = 1000;
+# groupid = 1000;
+#};
+
+#
+# versions : list of installed artifacts
+# they are used when install-if-different is set
+#versions : (
+# {
+# name = "uboot";
+# version = "2016.03";
+# },
+# {
+# name = "kernel";
+# version = "4.4";
+# }
+#);
+
+#
+# identify section : it is just used to inform a backend about the running target
+# any entry is a copule of . For example, MAC address, serial number,
+# and so on.
+identify : (
+ { name = "versionSpC"; value = "v1.0"; },
+ { name = "hwId"; value = "zerothv1"; },
+ { name = "hwVersion"; value = "333"; },
+ { name = "serialNo"; value = "1234567890"; },
+ { name = "swCompatibility"; value = "unknown";}
+);
+
+#
+# suricatta section: setup for backend
+#
+# Currently, they refer to the Hawkbit agent.
+#
+# tenant : string
+# Hawkbit tenant
+# id : string
+# target identifier
+# url : string
+# URL of the Hawkbit server
+# polldelay : integer
+# polling cycle (seconds)
+# retry : integer
+# number of retries to connect to server
+# retrywait : integer
+# userid : integer
+# userID for Webserver process
+# groupid : integer
+# groupId for Webserver process
+# enable : bool
+# default=true
+# If set to false, suricatta do not try to connect to the server
+# Enable can be done then via IPC
+# cafile : string
+# File with Public Certificate Authority
+# sslkey : string
+# path of the file containing the key for SSL connection or pkcs11 URI
+# ex. "pkcs11:model=ATECC608B;token=0ABC;serial=0123456789abcdef;object=device;type=private")
+# sslcert : string
+# path of the file containing the certificate for SSL connection or pkcs11 URI
+# (ex. "pkcs11:model=ATECC608B;token=0ABC;serial=0123456789abcdef;object=device;type=cert")
+# targettoken : string
+# hawkBit target security token
+# gatewaytoken : string
+# hawkBit gateway security token
+# usetokentodwl :bool
+# send authentication token also to download the artefacts
+# Hawkbit server checks for the token, but if a SWU is stored on a different server
+# the token can be rejected if a different authentication mechanism is used. Default on.
+# proxy : string
+# in case the server is reached via a proxy
+# ciphers : string in the format used by CURL to set the allowed ciphers suite
+# This allows to disable some ciphers, for example
+# ciphers = "!eNULL:!aNULL:!EXP:!LOW:!MEDIUM:!ADH:!AECDH:!IDEA:!SEED:!MD5:!SHA:!RC4:HIGH+EECDH:HIGH+EDH";
+# interface : string
+# interface name (e.g. "eth0") or IP address to bind communication channel to.
+# This allows to select source interface/address for outgoing traffic, if needed.
+# initial-report-resend-period : integer
+# Specify period between re-tryint to send initial state, specified with "-c" option,
+# when connection to Hawkbit is not available. Default value is 10 seconds.
+# connection-timeout : integer
+# Specify server connection timeout. If no connection has been established in this
+# period, libcurl will consider connection unsuccessful.
+# Default value is determined by underlying libcurl implementation (300s).
+# max-download-speed : string
+# Specify maximum download speed to use. Value can be expressed as
+# B/s, kB/s, M/s, G/s. Example: 512k
+
+#suricatta :
+#{
+# tenant = "default";
+# id = "123456";
+# url = "http://papero.fritz.box:8080";
+# polldelay = 20;
+# nocheckcert = true;
+# retry = 4;
+# retrywait = 200;
+# loglevel = 10;
+# userid = 1000;
+# groupid = 1000;
+# enable = true;
+# initial-report-resend-period = 30;
+# connection-timeout = 10;
+# max-download-speed = "1M";
+#/*
+# cafile = "/etc/ssl/cafile";
+# sslkey = "/etc/ssl/sslkey";
+# sslcert = "/etc/ssl/sslcert";
+# targettoken = "3bc13b476cb3962a0c63a5c92beacfh7";
+# gatewaytoken = "99616d4fae39167deddf21cd90047861";
+# usetokentodwl = false;
+#*/
+#};
+
+#
+# webserver : setup for the embedded webserver
+# see ./swupdate -h for details
+#
+# document_root : string
+# directory to the website
+# userid : integer
+# userID for Webserver process
+# groupid : integer
+# groupId for Webserver process
+# listening_ports : integer
+# Webserver listening ports
+# enable_directory_listing : boolean
+# true to list directories
+# ssl_certificate : string
+# path to SSL certificat
+# ssl_certificate_key : string
+# path to SSL private key
+# api : integer
+# 1 = simple REST API for M2M communication
+# 2 = WebApp with Websockets support
+# global-auth-file : string
+# path to the global authorization file, if any
+# default = none
+# auth-domain : string
+# path to auth-domain, if any
+# default = none
+#run-postupdate : true
+# run the postupdate command automatically after
+# a successful update
+# timeout : timeout in seconds to monitor the connection
+# when an update is started. If no data is received
+# during this time, connection is closed by the Webserver
+# and update is aborted.
+
+
+# TODO: This should be used to drop privledge
+
+#webserver :
+#{
+# document_root = "./www";
+# userid = 1000;
+# groupid = 1000;
+# timeout = 20;
+#};
+
+# delta update section
+#
+# sslkey : string
+# path of the file containing the key for SSL connection or pkcs11 URI
+# (ex. "pkcs11:model=ATECC608B;token=0ABC;serial=0123456789abcdef;object=device;type=private")
+# sslcert : string
+# path of the file containing the certificate for SSL connection or pkcs11 URI
+# (ex. "pkcs11:model=ATECC608B;token=0ABC;serial=0123456789abcdef;object=device;type=cert")
+#delta :
+#{
+# sslkey = "/etc/ssl/sslkey";
+# sslcert = "/etc/ssl/sslcert";
+#};
diff --git a/device/milkv-duos-ota-sd/overlay/etc/wpa_supplicant.conf b/device/milkv-duos-ota-sd/overlay/etc/wpa_supplicant.conf
new file mode 100644
index 0000000000..29b123960c
--- /dev/null
+++ b/device/milkv-duos-ota-sd/overlay/etc/wpa_supplicant.conf
@@ -0,0 +1,8 @@
+ap_scan=1
+update_config=1
+
+network={
+ ssid="somessid"
+ psk="sompsk"
+ key_mgmt=WPA-PSK
+}
\ No newline at end of file
diff --git a/device/milkv-duos-ota-sd/overlay/mnt/system/usb-rndis.sh b/device/milkv-duos-ota-sd/overlay/mnt/system/usb-rndis.sh
new file mode 100755
index 0000000000..06e1924d04
--- /dev/null
+++ b/device/milkv-duos-ota-sd/overlay/mnt/system/usb-rndis.sh
@@ -0,0 +1,39 @@
+#!/bin/sh
+
+usb_en=453
+usb_select=510
+
+function set_gpio()
+{
+ local gpio_num=$1
+ local gpio_val=$2
+ local gpio_path="/sys/class/gpio/gpio${gpio_num}"
+
+ if test -d ${gpio_path}; then
+ echo "GPIO ${gpio_num} already exported" >> /tmp/rndis.log 2>&1
+ else
+ echo ${gpio_num} > /sys/class/gpio/export
+ fi
+
+ echo out > ${gpio_path}/direction
+ sleep 0.1
+ echo ${gpio_val} > ${gpio_path}/value
+}
+
+set_gpio ${usb_en} 0
+sleep 0.5
+set_gpio ${usb_select} 0
+sleep 0.5
+
+/etc/uhubon.sh device >> /tmp/rndis.log 2>&1
+/etc/run_usb.sh probe rndis >> /tmp/rndis.log 2>&1
+/etc/run_usb.sh start rndis >> /tmp/rndis.log 2>&1
+
+sleep 0.5
+ifconfig usb0 192.168.42.1
+
+count=`ps | grep dnsmasq | grep -v grep | wc -l`
+if [ ${count} -lt 1 ] ;then
+ echo "/etc/init.d/S80dnsmasq start" >> /tmp/rndis.log 2>&1
+ /etc/init.d/S80dnsmasq start >> /tmp/rndis.log 2>&1
+fi
diff --git a/device/milkv-duos-ota-sd/overlay/mnt/system/usb.sh b/device/milkv-duos-ota-sd/overlay/mnt/system/usb.sh
new file mode 120000
index 0000000000..f947e921e9
--- /dev/null
+++ b/device/milkv-duos-ota-sd/overlay/mnt/system/usb.sh
@@ -0,0 +1 @@
+usb-ncm.sh
\ No newline at end of file
diff --git a/device/milkv-duos-ota-sd/overlay/usr/bin/bt_test b/device/milkv-duos-ota-sd/overlay/usr/bin/bt_test
new file mode 100755
index 0000000000..9afea9935c
Binary files /dev/null and b/device/milkv-duos-ota-sd/overlay/usr/bin/bt_test differ
diff --git a/device/milkv-duos-ota-sd/overlay/usr/bin/wifi_test b/device/milkv-duos-ota-sd/overlay/usr/bin/wifi_test
new file mode 100755
index 0000000000..c482636239
Binary files /dev/null and b/device/milkv-duos-ota-sd/overlay/usr/bin/wifi_test differ
diff --git a/device/milkv-duos-sd/genimage.cfg b/device/milkv-duos-sd/genimage.cfg
index 55e9dbe72e..9ab850f64f 100644
--- a/device/milkv-duos-sd/genimage.cfg
+++ b/device/milkv-duos-sd/genimage.cfg
@@ -13,7 +13,7 @@ image rootfs.ext4 {
ext4 {
label = "rootfs"
}
- size = 768M
+ size = 275M
}
image milkv-duos-sd.img {
diff --git a/device/milkv-duos-sd/overlay/etc/fstab b/device/milkv-duos-sd/overlay/etc/fstab
new file mode 100644
index 0000000000..c9d392d8eb
--- /dev/null
+++ b/device/milkv-duos-sd/overlay/etc/fstab
@@ -0,0 +1,12 @@
+#
+/dev/root / ext2 rw,noauto 0 1
+proc /proc proc defaults 0 0
+devpts /dev/pts devpts defaults,gid=5,mode=620,ptmxmode=0666 0 0
+tmpfs /dev/shm tmpfs mode=0777 0 0
+tmpfs /tmp tmpfs mode=1777 0 0
+tmpfs /run tmpfs mode=0755,nosuid,nodev 0 0
+sysfs /sys sysfs defaults 0 0
+debug /sys/kernel/debug debugfs defaults 0 0
+/dev/mmcblk0p1 /boot vfat defaults 0 0
+/dev/mmcblk0p2 /bootenv auto defaults 0 0
+/dev/mmcblk0p6 /staging auto defaults 0 0
diff --git a/device/milkv-duos-sd/overlay/etc/fw_env.config b/device/milkv-duos-sd/overlay/etc/fw_env.config
new file mode 100644
index 0000000000..70d57a4b47
--- /dev/null
+++ b/device/milkv-duos-sd/overlay/etc/fw_env.config
@@ -0,0 +1,2 @@
+# u-boot ext4 192K env_size
+/bootenv/uboot.env 0x0000 0x30000
\ No newline at end of file
diff --git a/device/milkv-duos-sd/overlay/etc/hostname b/device/milkv-duos-sd/overlay/etc/hostname
new file mode 100644
index 0000000000..65432d8314
--- /dev/null
+++ b/device/milkv-duos-sd/overlay/etc/hostname
@@ -0,0 +1 @@
+zbot
\ No newline at end of file
diff --git a/device/milkv-duos-sd/overlay/etc/init.d/S60wpa_supplicant b/device/milkv-duos-sd/overlay/etc/init.d/S60wpa_supplicant
new file mode 100755
index 0000000000..f610dee2fd
--- /dev/null
+++ b/device/milkv-duos-sd/overlay/etc/init.d/S60wpa_supplicant
@@ -0,0 +1,48 @@
+#!/bin/sh
+log_file="/var/log/wpa_supplicant_start.log"
+
+start_wpa_supplicant() {
+ echo "$(date +'%Y-%m-%d %H:%M:%S') Starting wpa_supplicant script..." >> "$log_file"
+
+ # Copy the configuration file if it exists
+ if [ -f /boot/wpa_supplicant.conf ]; then
+ cp /boot/wpa_supplicant.conf /etc/wpa_supplicant.conf
+ echo "$(date +'%Y-%m-%d %H:%M:%S') Copied wpa_supplicant.conf from /boot to /etc" >> "$log_file"
+ else
+ echo "$(date +'%Y-%m-%d %H:%M:%S') No wpa_supplicant.conf found on /boot. Skipping copy." >> "$log_file"
+ exit 0
+ fi
+
+ # Wait for wlan0 to reach the DOWN state (available and ready)
+ echo "$(date +'%Y-%m-%d %H:%M:%S') Waiting for wlan0 to become available..." >> "$log_file"
+ while ! ip link show wlan0 | grep -q "state DOWN"; do
+ sleep 1
+ done
+ echo "$(date +'%Y-%m-%d %H:%M:%S') wlan0 is available in DOWN state. Continuing." >> "$log_file"
+
+ # Start wpa_supplicant
+ echo "$(date +'%Y-%m-%d %H:%M:%S') Starting wpa_supplicant..." >> "$log_file"
+ wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf >> "$log_file" 2>&1
+ if [ $? -eq 0 ]; then
+ echo "$(date +'%Y-%m-%d %H:%M:%S') wpa_supplicant started successfully." >> "$log_file"
+ else
+ echo "$(date +'%Y-%m-%d %H:%M:%S') Failed to start wpa_supplicant." >> "$log_file"
+ fi
+}
+
+# Run the script in the background
+case "$1" in
+start)
+ ( start_wpa_supplicant ) &
+ ;;
+stop)
+ echo "$(date +'%Y-%m-%d %H:%M:%S') Stopping wpa_supplicant..." >> "$log_file"
+ killall wpa_supplicant 2>/dev/null || echo "$(date +'%Y-%m-%d %H:%M:%S') wpa_supplicant not running." >> "$log_file"
+ ;;
+*)
+ echo "Usage: $0 {start|stop}" >> "$log_file"
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/device/milkv-duos-sd/overlay/etc/init.d/S70ota-agent b/device/milkv-duos-sd/overlay/etc/init.d/S70ota-agent
new file mode 100755
index 0000000000..d222dd115b
--- /dev/null
+++ b/device/milkv-duos-sd/overlay/etc/init.d/S70ota-agent
@@ -0,0 +1,23 @@
+#!/bin/sh
+#
+# OTA Agent (responds to discovery, and reboots to otafs for updates)
+case "$1" in
+ start)
+ echo "Starting OTA Agent..."
+ /usr/local/bin/ota-agent &
+ ;;
+ stop)
+ echo "Stopping OTA Agent..."
+ killall swupdate
+ ;;
+ restart)
+ $0 stop
+ $0 start
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|restart}"
+ exit 1
+ ;;
+esac
+
+exit 0
\ No newline at end of file
diff --git a/device/milkv-duos-sd/overlay/etc/wpa_supplicant.conf b/device/milkv-duos-sd/overlay/etc/wpa_supplicant.conf
new file mode 100644
index 0000000000..29b123960c
--- /dev/null
+++ b/device/milkv-duos-sd/overlay/etc/wpa_supplicant.conf
@@ -0,0 +1,8 @@
+ap_scan=1
+update_config=1
+
+network={
+ ssid="somessid"
+ psk="sompsk"
+ key_mgmt=WPA-PSK
+}
\ No newline at end of file
diff --git a/device/milkv-duos-sd/overlay/usr/local/bin/boot_ota b/device/milkv-duos-sd/overlay/usr/local/bin/boot_ota
new file mode 100755
index 0000000000..a134de18da
--- /dev/null
+++ b/device/milkv-duos-sd/overlay/usr/local/bin/boot_ota
@@ -0,0 +1,5 @@
+#!/bin/bash
+fw_setenv next_boot otafs
+sleep 1
+sync
+reboot
\ No newline at end of file
diff --git a/device/milkv-duos-sd/overlay/usr/local/bin/ota-agent b/device/milkv-duos-sd/overlay/usr/local/bin/ota-agent
new file mode 100755
index 0000000000..662dedd406
--- /dev/null
+++ b/device/milkv-duos-sd/overlay/usr/local/bin/ota-agent
@@ -0,0 +1,18 @@
+#!/bin/sh
+#hack for discovery / boot to otafs mechanism with no security
+PORT=10000
+
+while true; do
+ echo "Listening on port $PORT..."
+
+ # Handles one connection at a time, ensuring response goes back
+ echo -e "zbot" | nc -l -p "$PORT" | while read -r cmd; do
+ if [ "$cmd" = "ota" ]; then
+ /usr/bin/fw_setenv next_boot otafs; sleep 1; sync; reboot
+ elif [ "$cmd" = "discover" ]; then
+ echo "zbot"
+ fi
+ done
+done
+
+
diff --git a/tools/zbot_updater.py b/tools/zbot_updater.py
new file mode 100755
index 0000000000..9d30d936f6
--- /dev/null
+++ b/tools/zbot_updater.py
@@ -0,0 +1,199 @@
+#!/usr/bin/env python3
+
+import asyncio
+import websockets
+import json
+import os
+import http.client
+import argparse
+import socket
+import time
+import requests
+from tqdm import tqdm
+from termcolor import colored
+
+
+def send_command(host, port, command):
+ """Send a command to the TCP server and return the response."""
+ try:
+ with socket.create_connection((host, port), timeout=1) as sock:
+ sock.sendall(command.encode() + b"\n")
+ response = sock.recv(1024).decode().strip()
+ return response
+
+ except Exception:
+ return None
+
+
+async def check_websocket(host, port):
+ """Attempt to connect to the WebSocket server with a timeout."""
+ try:
+ return await asyncio.wait_for(websockets.connect(f"ws://{host}:{port}/ws"), timeout=2)
+ except (asyncio.TimeoutError, websockets.exceptions.ConnectionClosed, OSError):
+ return False
+
+
+
+def wait_for_reboot(host, port, timeout=120):
+ """Wait for the device to reboot and start the SWUpdate WebSocket server."""
+ print(colored("waiting for zbot to reboot...", "yellow"))
+ start_time = time.time()
+
+ while time.time() - start_time < timeout:
+ try:
+ if asyncio.run(check_websocket(host, port)): # Fix: Proper async handling
+ print(colored("zbot is back online", "green"))
+ return True
+ except RuntimeError:
+ print(colored("Async event loop error. Retrying...", "red"))
+ time.sleep(1)
+ continue # Keep retrying
+
+ time.sleep(1) # Retry every second
+
+ print(colored("Could not connect to zbot: timeout.", "red"))
+ return False
+
+
+
+def upload_file_http(file_path, host, port=10000, endpoint="/upload"):
+ """Upload SWU file using HTTP POST."""
+ try:
+ file_size = os.path.getsize(file_path)
+ boundary = "----WebKitFormBoundary7MA4YWxkTrZu0gW"
+ headers = {
+ "Content-Type": f"multipart/form-data; boundary={boundary}",
+ "Connection": "keep-alive",
+ }
+
+ body_start = (
+ f"--{boundary}\r\n"
+ f"Content-Disposition: form-data; name=\"file\"; filename=\"{os.path.basename(file_path)}\"\r\n"
+ f"Content-Type: application/octet-stream\r\n\r\n"
+ ).encode()
+
+ body_end = f"\r\n--{boundary}--\r\n".encode()
+ total_size = len(body_start) + file_size + len(body_end)
+
+ with open(file_path, "rb") as file, tqdm(total=file_size, unit="B", unit_scale=True, desc="uploading") as bar:
+ conn = http.client.HTTPConnection(host, port)
+ conn.putrequest("POST", endpoint)
+ conn.putheader("Content-Length", str(total_size))
+ for key, value in headers.items():
+ conn.putheader(key, value)
+ conn.endheaders()
+
+ conn.send(body_start)
+ while chunk := file.read(1024):
+ conn.send(chunk)
+ bar.update(len(chunk))
+ conn.send(body_end)
+
+ bar.close()
+ print("\033[K", end="\r") # Clear progress bar
+
+ response = conn.getresponse()
+ print(f"Response: {response.status} {response.reason}")
+ #print(response.read().decode())
+ conn.close()
+ except Exception as e:
+ print(f"Error uploading file: {e}")
+
+
+async def keep_alive(websocket, interval=10):
+ """Send keep-alive pings to WebSocket server."""
+ while True:
+ try:
+ await websocket.ping()
+ await asyncio.sleep(interval)
+ except websockets.ConnectionClosed:
+ print("WebSocket connection closed during keep-alive.")
+ break
+
+
+async def connect(host, file_path):
+ """Connect to SWUpdate WebSocket and monitor update process."""
+ ws_url = f"ws://{host}:10000/ws"
+ progress_bar = None
+
+ try:
+ async with websockets.connect(ws_url) as websocket:
+ print(colored("connected to update service", "green"))
+ asyncio.create_task(keep_alive(websocket))
+
+ upload_file_http(file_path, host)
+
+ while True:
+ try:
+ message = await websocket.recv()
+ data = json.loads(message)
+
+ if data.get("type") == "step":
+ step = int(data.get("step", 0))
+ number = int(data.get("number", 1))
+ percent = int(data.get("percent", 0))
+ name = data.get("name", "Unknown")
+
+ if progress_bar is None:
+ progress_bar = tqdm(
+ total=100,
+ desc=f"updating: {name}",
+ ncols=80,
+ dynamic_ncols=True,
+ bar_format="{l_bar}{bar}| {n_fmt}/{total_fmt}%",
+ leave=False,
+ )
+
+ progress_bar.n = percent
+ progress_bar.refresh()
+
+ if percent == 100:
+ progress_bar.close()
+ progress_bar = None
+ print("\033[K", end="\r") # Clear progress bar
+
+ if data.get("type") == "status":
+ status = data.get("status")
+ if status == "DONE":
+ print(colored("Update complete!", "green"))
+ exit(0)
+ elif status == "SUCCESS":
+ print(colored("Successfully completed.", "green"))
+
+ except json.JSONDecodeError:
+ pass
+ except websockets.ConnectionClosed:
+ print(colored("Update service connection closed.", "red"))
+ break
+ except:
+ print(colored(f"zbot not found @ {host}", "red"))
+
+if __name__ == "__main__":
+ parser = argparse.ArgumentParser(
+ description="zbot_updater: a tool for updating zbot firmware.",
+ formatter_class=argparse.RawTextHelpFormatter
+ )
+
+ subparsers = parser.add_subparsers(dest="command", required=True)
+
+ update_parser = subparsers.add_parser("update", help="Upload and apply an SWU file to a zbot device.")
+ update_parser.add_argument("host", help="The zbot device host (e.g., 192.168.42.1).")
+ update_parser.add_argument("swu_file", help="The SWU package to upload and apply.")
+
+ args = parser.parse_args()
+
+ if args.command == "update":
+ host = args.host
+ swu_file = args.swu_file
+
+ ota_response = send_command(host, 10000, "ota")
+
+ if ota_response == "zbot":
+ print(colored("zbot detected", "grey"))
+ print(colored("rebooting...", "grey"))
+ if not wait_for_reboot(host, 10000):
+ print(colored("Timeout waiting for reboot. Aborting update.", "red"))
+ exit(1)
+
+ asyncio.run(connect(host, swu_file))
+
diff --git a/u-boot-2021.10/board/cvitek/cv181x/board.c b/u-boot-2021.10/board/cvitek/cv181x/board.c
index f3ad355772..baded95e95 100644
--- a/u-boot-2021.10/board/cvitek/cv181x/board.c
+++ b/u-boot-2021.10/board/cvitek/cv181x/board.c
@@ -344,3 +344,15 @@ void board_save_time_record(uintptr_t saveaddr)
mmio_write_16(saveaddr, DIV_ROUND_UP(boot_us, 1000));
}
+
+void apply_uart_clock_settings(void)
+{
+ printf("Applying custom UART clock settings before kernel handoff...\n");
+ volatile uint32_t *reg_div_clk_cam0_200 = (volatile uint32_t *)0x030020a8;
+ *reg_div_clk_cam0_200 = 0xF0109; // Set custom UART clock divider
+
+ volatile uint32_t *uart0_dll = (volatile uint32_t *)0x04140020;
+ *uart0_dll = 43; // Set Divisor Latch Low
+
+ printf("UART clock settings applied successfully.\n");
+}
\ No newline at end of file
diff --git a/u-boot-2021.10/common/autoboot.c b/u-boot-2021.10/common/autoboot.c
index 1589928ea9..c23cf977d1 100644
--- a/u-boot-2021.10/common/autoboot.c
+++ b/u-boot-2021.10/common/autoboot.c
@@ -52,6 +52,11 @@ static int menukey;
#define AUTOBOOT_MENUKEY 0
#endif
+__weak void apply_uart_clock_settings(void)
+{
+ // Default: Do nothing for other boards
+}
+
/**
* passwd_abort_crypt() - check for a crypt-style hashed key sequence to abort booting
*
@@ -481,6 +486,19 @@ void autoboot_command(const char *s)
bool lock;
int prev;
+ //// Call the milkv duos UART clock configuration
+ apply_uart_clock_settings();
+
+ //// Apply custom UART clock settings
+ //printf("Applying custom UART clock settings before kernel handoff...\n");
+ //volatile uint32_t *reg_div_clk_cam0_200 = (volatile uint32_t *)0x030020a8;
+ //*reg_div_clk_cam0_200 = 0xF0109; // Set custom UART clock divider
+
+ //volatile uint32_t *uart0_dll = (volatile uint32_t *)0x04140020;
+ //*uart0_dll = 43; // Set Divisor Latch Low
+
+ //printf("UART clock settings applied successfully.\n");
+
lock = autoboot_keyed() &&
!IS_ENABLED(CONFIG_AUTOBOOT_KEYED_CTRLC);
if (lock)
diff --git a/u-boot-2021.10/include/configs/cv181x-asic-ota.h b/u-boot-2021.10/include/configs/cv181x-asic-ota.h
new file mode 100644
index 0000000000..692d0e2c81
--- /dev/null
+++ b/u-boot-2021.10/include/configs/cv181x-asic-ota.h
@@ -0,0 +1,369 @@
+/*
+ * Configuration for Versatile Express. Parts were derived from other ARM
+ * configurations.
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#ifndef __CV181X_ASIC_H__
+#define __CV181X_ASIC_H__
+
+#include <../../../board/cvitek/cv181x/cv181x_reg.h>
+
+/* defined in cvipart.h */
+#undef CONFIG_ENV_OFFSET
+#undef CONFIG_ENV_OFFSET_REDUND
+#undef CONFIG_ENV_SIZE
+#undef CONFIG_ENV_IS_IN_SPI_FLASH
+#undef CONFIG_ENV_IS_IN_MMC
+#undef CONFIG_ENV_IS_IN_NAND
+#undef CONFIG_ENV_SECT_SIZE
+
+/* cvi_board_memmap.h is generated from build/boards/{CHIP_ARCH}/{BOARD}/memmap.py */
+#include "cvi_board_memmap.h"
+/* partition definitions header which is created by mkcvipart.py */
+/* please do not modify header manually */
+#include "cvipart.h"
+#include "cvi_panels/cvi_panel_diffs.h"
+
+// defined in this .h
+#undef CONFIG_BOOTCOMMAND
+
+#if defined(__aarch64__)
+#define CONFIG_ARMV8_SWITCH_TO_EL1
+#endif
+
+#define CONFIG_REMAKE_ELF
+
+/* Physical Memory Map */
+#define CONFIG_SYS_RESVIONSZ CVIMMAP_ION_SIZE
+#define CONFIG_SYS_RESVLOGOSZ CVIMMAP_BOOTLOGO_SIZE
+#define CONFIG_SYS_BOOTMAPSZ CVIMMAP_KERNEL_MEMORY_SIZE
+
+#define PHYS_SDRAM_1 CVIMMAP_KERNEL_MEMORY_ADDR
+#define PHYS_SDRAM_1_SIZE CVIMMAP_KERNEL_MEMORY_SIZE
+#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM_1
+
+/* Link Definitions */
+#define CONFIG_SYS_INIT_SP_ADDR CVIMMAP_CONFIG_SYS_INIT_SP_ADDR
+
+/* default address for bootm command without arguments */
+#define CONFIG_SYS_LOAD_ADDR 0x80080000
+#define CONFIG_SYS_BOOTM_LEN (64 << 20)
+
+/* Generic Interrupt Controller Definitions */
+#define GICD_BASE (0x01F01000)
+#define GICC_BASE (0x01F02000)
+
+/* Size of malloc() pool */
+#define CONFIG_SYS_MALLOC_LEN (CONFIG_ENV_SIZE + (9 << 20))
+
+#if defined(__aarch64__)
+#define CONFIG_SYS_NONCACHED_MEMORY BIT(20) /* 1 MiB */
+#endif
+
+#if defined(__riscv)
+#define CONFIG_SYS_CACHELINE_SIZE 64
+#endif
+
+// Frequency of ARM arch timer and RISC-V rdtime
+#define SYS_COUNTER_FREQ_IN_SECOND 25000000
+
+/* 16550 Serial Configuration */
+#define CONFIG_SYS_NS16550_COM1 0x04140000
+#define CONFIG_SYS_NS16550_SERIAL
+#define CONFIG_SYS_NS16550_REG_SIZE (-4)
+#define CONFIG_SYS_NS16550_MEM32
+#define CONFIG_SYS_NS16550_CLK 25000000
+
+/* include/generated/autoconf.h would define CONFIG_BAUDRATE from drivers/serial/Kconfig (default 115200) */
+
+/*#define CONFIG_MENU_SHOW*/
+
+
+/* Download related definitions */
+#define UPGRADE_SRAM_ADDR 0x0e000030
+#define UBOOT_PID_SRAM_ADDR 0x0e000030
+#define UPDATE_ADDR CVIMMAP_ION_ADDR
+#define HEADER_ADDR UPDATE_ADDR
+#define USB_UPDATE_MAGIC MAGIC_NUM_USB_DL
+/*----------------------------------------------------------------------
+ * SPI Flash Configuration
+ * ---------------------------------------------------------------------
+ */
+
+#ifdef CONFIG_SPI_FLASH
+ #define CONFIG_SPI_FLASH_CVSFC
+
+ #define CONFIG_CMD_MTDPARTS
+ #define CONFIG_MTD_PARTITIONS
+ #define CONFIG_FLASH_CFI_MTD
+ #define CONFIG_SYS_MAX_FLASH_BANKS 1
+ #define CONFIG_SPI_FLASH_MTD
+#endif /* CONFIG_SPI_FLASH */
+
+/*-----------------------------------------------------------------------
+ * SPI NAND Flash Configuration
+ *----------------------------------------------------------------------
+ */
+
+#ifdef CONFIG_NAND_SUPPORT
+ /*#define CONFIG_ENV_IS_IN_NAND*/ /* env in nand flash */
+ #define CONFIG_CMD_NAND
+ #define CONFIG_SYS_MAX_NAND_DEVICE 1
+
+ #define CONFIG_NAND_FLASH_CVSNFC
+ #define CONFIG_SYS_MAX_NAND_CHIPS 1
+ /*#define CONFIG_SYS_NAND_SELF_INIT*/
+
+ #define CONFIG_CMD_MTDPARTS
+ #define CONFIG_MTD_PARTITIONS
+ /* For CMD_UBI && CMD_UBIFS */
+ #define CONFIG_RBTREE
+ #define CONFIG_LZO
+ //#define CONFIG_CMD_UBI
+ //#define CONFIG_CMD_UBIFS
+ #define CONFIG_MTD_UBI_WL_THRESHOLD 4096
+ #define CONFIG_MTD_UBI_BEB_LIMIT 20
+ #define NANDBOOT_V2
+#endif /* CONFIG_NAND_SUPPORT */
+
+#ifdef CONFIG_NAND_FLASH_CVSNFC
+ #define SPI_NAND_TX_DATA_BASE 0x4060060
+ #define SPI_NAND_RX_DATA_BASE 0x4060064
+
+ #define SPI_NAND_REG_BASE 0x4060000
+
+ #define CONFIG_SYS_NAND_MAX_CHIPS 1
+ #define CONFIG_SYS_NAND_BASE SPI_NAND_REG_BASE
+ #define CONFIG_CVSNFC_MAX_CHIP CONFIG_SYS_MAX_NAND_DEVICE
+ #define CONFIG_CVSNFC_REG_BASE_ADDRESS SPI_NAND_REG_BASE
+ #define CONFIG_CVSNFC_BUFFER_BASE_ADDRESS SPI_NAND_MEM_BASE
+ #define CONFIG_CVSNFC_HARDWARE_PAGESIZE_ECC
+ #define CONFIG_SYS_NAND_BASE_LIST {CONFIG_SYS_NAND_BASE}
+
+#endif /* CONFIG_NAND_SUPPORT */
+
+/* Monitor Command Prompt */
+#define CONFIG_SYS_CBSIZE 512 /* Console I/O Buffer Size */
+#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + \
+ sizeof(CONFIG_SYS_PROMPT) + 16)
+#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE
+#define CONFIG_SYS_MAXARGS 64 /* max command args */
+
+#ifndef CONFIG_ENV_SECT_SIZE
+#define CONFIG_ENV_SECT_SIZE 0x00040000
+#endif
+
+#define CONFIG_ENV_OVERWRITE
+
+#define CONFIG_MMC_UHS_SUPPORT
+#define CONFIG_MMC_HS200_SUPPORT
+#define CONFIG_MMC_SUPPORTS_TUNING
+/* #define CONFIG_USB_DWC2 */
+/* #define CONFIG_USB_DWC2_REG_ADDR 0x04340000 */
+/* Enable below CONFIG for fastboot */
+
+/* To use usb fastboot, you need to enable below Kconfig
+ * CONFIG_USB, CONFIG_USB_GADGET and CONFIG_USB_GADGET_DWC2_OTG
+ */
+
+#ifdef CONFIG_USB_GADGET
+#define CONFIG_USB_FUNCTION_FASTBOOT
+#define CONFIG_USB_GADGET_DOWNLOAD
+#define CONFIG_G_DNL_MANUFACTURER "Cvitek"
+#define CONFIG_G_DNL_VENDOR_NUM 0x18d1
+#define CONFIG_G_DNL_PRODUCT_NUM 0x4ee0
+#endif
+
+#define CONFIG_IPADDR 192.168.0.3
+#define CONFIG_NETMASK 255.255.255.0
+#define CONFIG_GATEWAYIP 192.168.0.11
+#define CONFIG_SERVERIP 192.168.56.101
+
+#ifdef CONFIG_USE_DEFAULT_ENV
+/* The following Settings are chip dependent */
+/******************************************************************************/
+ #define UIMAG_ADDR CVIMMAP_UIMAG_ADDR
+
+ #ifdef CONFIG_BOOTLOGO
+ #define LOGO_RESERVED_ADDR __stringify(CVIMMAP_BOOTLOGO_ADDR)//yuv load addr
+ #define LOGO_READ_ADDR "0x84080000" //jpeg load addr
+ #define VO_ALIGNMENT "16"
+ #define LOGOSIZE "0x80000" //jpeg max size
+ #endif
+/******************************************************************************/
+/* define common env */
+/*******************************************************************************/
+ /* Config FDT_NO */
+ #ifndef USE_HOSTCC
+ #define FDT_NO __stringify(CVICHIP) "_" __stringify(CVIBOARD)
+ #else
+ #define FDT_NO ""
+ #endif
+
+ /* config root */
+ #ifdef CONFIG_NAND_SUPPORT
+ #ifdef CONFIG_SKIP_RAMDISK
+ #define ROOTARGS "ubi.mtd=ROOTFS ubi.block=0,0 root=/dev/ubiblock0_0 rootfstype=squashfs"
+
+ #else
+ #define ROOTARGS "ubi.mtd=ROOTFS ubi.block=0,0"
+ #endif /* CONFIG_SKIP_RAMDISK */
+ #elif defined(CONFIG_SD_BOOT) || defined(CONFIG_EMMC_SUPPORT)
+ #define ROOTARGS "root=" ROOTFS_DEV " rootwait rw"
+ #define OTAFS_ARGS "root=" OTAFS_DEV " rootwait rw"
+ //#define OTAFS_BAK_ARGS "root=" OTAFS_BAK_ARGS " rootwait rw"
+ #else
+ #define ROOTARGS "rootfstype=squashfs rootwait ro root=" ROOTFS_DEV
+ #endif
+
+ /* BOOTARGS */
+ #define PARTS PART_LAYOUT
+
+ /* config uart */
+ #define CONSOLEDEV "ttyS0\0"
+
+ /* config loglevel */
+ #ifdef RELEASE
+ #define CONSOLE_LOGLEVEL " loglevel=0"
+ #define EARLYCON_RELEASE " release "
+ #else
+ #define CONSOLE_LOGLEVEL " loglevel=9"
+ #define EARLYCON_RELEASE " "
+ #endif
+
+ #define OTHERBOOTARGS "earlycon=sbi riscv.fwsz=" __stringify(CVIMMAP_OPENSBI_SIZE) " " \
+ EARLYCON_RELEASE CONSOLE_LOGLEVEL
+
+ /* config mtdids */
+ #ifdef CONFIG_NAND_SUPPORT
+ #define MTDIDS_DEFAULT "nand0=cvsnfc"
+ #elif CONFIG_SPI_FLASH
+ #define MTDIDS_DEFAULT "nor1=flash-0"
+ #else
+ #define MTDIDS_DEFAULT ""
+ #endif
+
+ #define CONFIG_EXTRA_ENV_SETTINGS \
+ "netdev=eth0\0" \
+ "consoledev=" CONSOLEDEV \
+ "baudrate=115200\0" \
+ "uImage_addr=" __stringify(UIMAG_ADDR) "\0" \
+ "update_addr=" __stringify(UPDATE_ADDR) "\0" \
+ "mtdparts=" PARTS "\0" \
+ "mtdids=" MTDIDS_DEFAULT "\0" \
+ "root=" OTAFS_ARGS "\0" \
+ "sdboot=" SD_BOOTM_COMMAND "\0" \
+ "othbootargs=" OTHERBOOTARGS "\0" \
+ PARTS_OFFSET \
+ "otafs=" OTAFS_ARGS "\0" \
+ "rootfs=" ROOTARGS "\0" \
+ "next_boot=otafs\0" \
+
+/********************************************************************************/
+ /* UBOOT_VBOOT commands */
+ #ifdef UBOOT_VBOOT
+ #define UBOOT_VBOOT_BOOTM_COMMAND \
+ "aes_itb dec_fdt_key 0 ${uImage_addr} ${uImage_addr}; " \
+ "if test $? -ne 0; then " \
+ " echo ITB decryption failed; " \
+ "else; " \
+ " bootm ${uImage_addr}#config-" FDT_NO ";" \
+ "fi;"
+ #else
+ #define UBOOT_VBOOT_BOOTM_COMMAND "bootm ${uImage_addr}#config-" FDT_NO ";"
+ #endif
+
+ /* BOOTLOGO */
+ #ifdef CONFIG_BOOTLOGO
+ #define SHOWLOGOCMD "run showlogo;"
+
+ #ifdef CONFIG_NAND_SUPPORT
+ #define LOAD_LOGO "nand read " LOGO_READ_ADDR " MISC;"
+ #elif defined(CONFIG_SPI_FLASH)
+ #define LOAD_LOGO "sf probe;sf read " LOGO_READ_ADDR " ${MISC_PART_OFFSET} ${MISC_PART_SIZE};"
+ #else
+ #define LOAD_LOGO "mmc dev 0;mmc read " LOGO_READ_ADDR " ${MISC_PART_OFFSET} ${MISC_PART_SIZE};"
+ #endif
+ #define SHOWLOGOCOMMAND LOAD_LOGO CVI_JPEG START_VO START_VL SET_VO_BG
+ #else
+ #define SHOWLOGOCMD
+ #endif
+
+ #define SET_BOOTARGS "setenv bootargs ${reserved_mem} ${root} ${mtdparts} " \
+ "console=$consoledev,$baudrate $othbootargs;"
+
+
+ // TODO: clean this up, add boot counts/limits
+ #define SD_BOOTM_COMMAND \
+ "if test -n ${first_boot}; then " \
+ "echo Environment loaded from persistent storage.; " \
+ "else " \
+ "echo First boot detected. Initializing environment variables...; " \
+ "setenv first_boot 1; " \
+ "saveenv; " \
+ "fi; " \
+ "if test ${next_boot} = otafs; then " \
+ "setenv root ${otafs}; " \
+ "saveenv; " \
+ "elif test ${next_boot} = rootfs; then " \
+ "setenv root ${rootfs}; " \
+ "saveenv; " \
+ "else " \
+ "echo Invalid next_boot value! Booting otafs as fallback.; " \
+ "setenv root ${otafs}; " \
+ "saveenv; " \
+ "fi; " \
+ "setenv bootargs ${reserved_mem} ${root} ${mtdparts} console=$consoledev,$baudrate $othbootargs; " \
+ "echo Boot from ${next_boot} ...; " \
+ "mmc dev 0 && fatload mmc 0 ${uImage_addr} boot.sd; " \
+ "if test $? -eq 0; then " \
+ UBOOT_VBOOT_BOOTM_COMMAND \
+ "fi;" \
+
+ #ifndef CONFIG_SD_BOOT
+ #ifdef CONFIG_ENABLE_ALIOS_UPDATE
+ #define CONFIG_BOOTCOMMAND "cvi_update_rtos"
+ #else
+ #define CONFIG_BOOTCOMMAND SHOWLOGOCMD "cvi_update || run norboot || run nandboot ||run emmcboot"
+ #endif
+ #else
+ #define CONFIG_BOOTCOMMAND SHOWLOGOCMD "run sdboot"
+ #endif
+
+ #if defined(CONFIG_NAND_SUPPORT)
+ /* For spi nand boot, need to reset DMA and its setting before exiting uboot */
+ /* 0x4330058 : DMA reset */
+ /* 0x3000154 : restore DMA remap to 0 */
+
+ #define CONFIG_NANDBOOTCOMMAND \
+ SET_BOOTARGS \
+ "nand read ${uImage_addr} BOOT;" \
+ "mw.l 4330058 1 1; md.l 4330058 1; mw.l 3000154 0 1;" \
+ UBOOT_VBOOT_BOOTM_COMMAND
+ #elif defined(CONFIG_SPI_FLASH)
+ #define CONFIG_NORBOOTCOMMAND \
+ SET_BOOTARGS \
+ "sf probe;sf read ${uImage_addr} ${BOOT_PART_OFFSET} ${BOOT_PART_SIZE};" \
+ UBOOT_VBOOT_BOOTM_COMMAND
+ #elif defined(CONFIG_EMMC_SUPPORT)
+ #define CONFIG_EMMCBOOTCOMMAND \
+ SET_BOOTARGS \
+ "mmc dev 0 ;" \
+ "mmc read ${uImage_addr} ${BOOT_PART_OFFSET} ${BOOT_PART_SIZE} ;" \
+ UBOOT_VBOOT_BOOTM_COMMAND
+ #endif
+
+#else
+ /* define your environment */
+ #define CONFIG_BOOTCOMMAND ""
+
+#endif /* CONFIG_USE_DEFAULT_ENV */
+
+#define CVI_SPL_BOOTAGRS \
+ PARTS " " \
+ ROOTARGS " " \
+ "console=ttyS0,115200 " \
+ OTHERBOOTARGS "\0"
+#endif /* __CV181X_ASIC_H__ */