diff mbox series

[1/1] arch/riscv: RISC-V 32-bit NO MMU support

Message ID 20221117140349.27692-2-ustcymgu@gmail.com
State Superseded
Headers show
Series arch/riscv: RISC-V 32-bit NO MMU support | expand

Commit Message

Yimin Gu Nov. 17, 2022, 2:03 p.m. UTC
Signed-off-by: Yimin Gu <ustcymgu@gmail.com>
---
 arch/Config.in.riscv                          |    2 -
 board/riscv/nommu/patches/linux-headers       |    1 +
 ...imental-RISC-V-32-bit-No-MMU-support.patch | 1355 +++++++++++++++++
 configs/qemu_riscv32_nommu_virt_defconfig     |   19 +
 package/Makefile.in                           |   13 +-
 ...ed-RISC-V-32-bit-compilation-support.patch |   74 +
 .../uclibc/0001-RISC-V-32-bit-support.patch   |  145 ++
 package/uclibc/Config.in                      |    2 +
 8 files changed, 1607 insertions(+), 4 deletions(-)
 create mode 120000 board/riscv/nommu/patches/linux-headers
 create mode 100644 board/riscv/nommu/patches/linux/5.19/0001-Experimental-RISC-V-32-bit-No-MMU-support.patch
 create mode 100644 configs/qemu_riscv32_nommu_virt_defconfig
 create mode 100644 package/elf2flt/0006-Added-RISC-V-32-bit-compilation-support.patch
 create mode 100644 package/uclibc/0001-RISC-V-32-bit-support.patch
diff mbox series

Patch

diff --git a/arch/Config.in.riscv b/arch/Config.in.riscv
index b5e84389e0..c79cf9b410 100644
--- a/arch/Config.in.riscv
+++ b/arch/Config.in.riscv
@@ -71,7 +71,6 @@  choice
 
 config BR2_RISCV_32
 	bool "32-bit"
-	select BR2_USE_MMU
 
 config BR2_RISCV_64
 	bool "64-bit"
@@ -82,7 +81,6 @@  endchoice
 config BR2_RISCV_USE_MMU
 	bool "MMU support"
 	default y
-	depends on BR2_RISCV_64
 	select BR2_USE_MMU
 	help
 	  Enable this option if your RISC-V core has a MMU (Memory
diff --git a/board/riscv/nommu/patches/linux-headers b/board/riscv/nommu/patches/linux-headers
new file mode 120000
index 0000000000..ce5e2c77b2
--- /dev/null
+++ b/board/riscv/nommu/patches/linux-headers
@@ -0,0 +1 @@ 
+linux/
\ No newline at end of file
diff --git a/board/riscv/nommu/patches/linux/5.19/0001-Experimental-RISC-V-32-bit-No-MMU-support.patch b/board/riscv/nommu/patches/linux/5.19/0001-Experimental-RISC-V-32-bit-No-MMU-support.patch
new file mode 100644
index 0000000000..595d73c981
--- /dev/null
+++ b/board/riscv/nommu/patches/linux/5.19/0001-Experimental-RISC-V-32-bit-No-MMU-support.patch
@@ -0,0 +1,1355 @@ 
+From 81a03a2cb16a2e058912e51aa6888feba0cc74a4 Mon Sep 17 00:00:00 2001
+From: Yimin Gu <ustcymgu@gmail.com>
+Date: Thu, 17 Nov 2022 21:30:07 +0900
+Subject: [PATCH] Experimental RISC-V 32-bit No MMU support
+
+Currently the kernel doesn't support 32-bit RISC-V without MMU, but
+this configuration can work with relatively minor changes on 
+toolchains, and might worth to have official support. 
+
+To comply with current uclibc, macros __ARCH_WANT_STAT64 and 
+__ARCH_WANT_TIME32_SYSCALLS are defined. CONFIG_COMPAT_32BIT_TIME also 
+has to be turned on. 
+
+Since 32-bit RISC-V no MMU devices are probably FPGA-based softcores, 
+only the mininum required instruction set options are turned on. FPU 
+and compressed instructions are not used. 
+
+Signed-off-by: Yimin Gu <ustcymgu@gmail.com>
+---
+ arch/riscv/Kconfig                           |    5 +-
+ arch/riscv/configs/nommu_rv32_virt_defconfig | 1278 ++++++++++++++++++
+ arch/riscv/include/uapi/asm/unistd.h         |    7 +-
+ 3 files changed, 1286 insertions(+), 4 deletions(-)
+ create mode 100644 arch/riscv/configs/nommu_rv32_virt_defconfig
+
+diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig
+index fcbb81feb..fc48b458a 100644
+--- a/arch/riscv/Kconfig
++++ b/arch/riscv/Kconfig
+@@ -162,8 +162,8 @@ config MMU
+ 
+ config PAGE_OFFSET
+ 	hex
+-	default 0xC0000000 if 32BIT
+-	default 0x80000000 if 64BIT && !MMU
++	default 0xC0000000 if 32BIT && MMU
++	default 0x80000000 if !MMU
+ 	default 0xff60000000000000 if 64BIT
+ 
+ config KASAN_SHADOW_OFFSET
+@@ -237,7 +237,6 @@ config ARCH_RV32I
+ 	select GENERIC_LIB_ASHRDI3
+ 	select GENERIC_LIB_LSHRDI3
+ 	select GENERIC_LIB_UCMPDI2
+-	select MMU
+ 
+ config ARCH_RV64I
+ 	bool "RV64I"
+diff --git a/arch/riscv/configs/nommu_rv32_virt_defconfig b/arch/riscv/configs/nommu_rv32_virt_defconfig
+new file mode 100644
+index 000000000..377dc28f5
+--- /dev/null
++++ b/arch/riscv/configs/nommu_rv32_virt_defconfig
+@@ -0,0 +1,1278 @@
++#
++# Automatically generated file; DO NOT EDIT.
++# Linux/riscv 5.18.0 Kernel Configuration
++#
++CONFIG_CC_VERSION_TEXT="gcc (GCC) 12.1.0"
++CONFIG_CC_IS_GCC=y
++CONFIG_GCC_VERSION=120100
++CONFIG_CLANG_VERSION=0
++CONFIG_AS_IS_GNU=y
++CONFIG_AS_VERSION=23800
++CONFIG_LD_IS_BFD=y
++CONFIG_LD_VERSION=23800
++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_GOTO_OUTPUT=y
++CONFIG_CC_HAS_ASM_INLINE=y
++CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y
++CONFIG_PAHOLE_VERSION=123
++CONFIG_IRQ_WORK=y
++CONFIG_THREAD_INFO_IN_TASK=y
++
++#
++# General setup
++#
++CONFIG_INIT_ENV_ARG_LIMIT=32
++# CONFIG_COMPILE_TEST is not set
++# CONFIG_WERROR is not set
++CONFIG_LOCALVERSION=""
++CONFIG_LOCALVERSION_AUTO=y
++CONFIG_BUILD_SALT=""
++CONFIG_DEFAULT_INIT=""
++CONFIG_DEFAULT_HOSTNAME="(none)"
++# CONFIG_SYSVIPC is not set
++# CONFIG_WATCH_QUEUE is not set
++# CONFIG_USELIB is not set
++CONFIG_HAVE_ARCH_AUDITSYSCALL=y
++
++#
++# IRQ subsystem
++#
++CONFIG_GENERIC_IRQ_SHOW=y
++CONFIG_GENERIC_IRQ_SHOW_LEVEL=y
++CONFIG_IRQ_DOMAIN=y
++CONFIG_IRQ_DOMAIN_HIERARCHY=y
++CONFIG_IRQ_FORCED_THREADING=y
++CONFIG_SPARSE_IRQ=y
++# end of IRQ subsystem
++
++CONFIG_GENERIC_IRQ_MULTI_HANDLER=y
++CONFIG_ARCH_CLOCKSOURCE_INIT=y
++CONFIG_GENERIC_CLOCKEVENTS=y
++CONFIG_ARCH_HAS_TICK_BROADCAST=y
++CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
++
++#
++# Timers subsystem
++#
++CONFIG_HZ_PERIODIC=y
++# CONFIG_NO_HZ_IDLE is not set
++# CONFIG_NO_HZ is not set
++# CONFIG_HIGH_RES_TIMERS is not set
++# end of Timers subsystem
++
++#
++# BPF subsystem
++#
++# CONFIG_BPF_SYSCALL is not set
++# end of BPF subsystem
++
++CONFIG_PREEMPT_NONE_BUILD=y
++CONFIG_PREEMPT_NONE=y
++# CONFIG_PREEMPT_VOLUNTARY is not set
++# CONFIG_PREEMPT is not set
++
++#
++# CPU/Task time and stats accounting
++#
++CONFIG_TICK_CPU_ACCOUNTING=y
++# CONFIG_IRQ_TIME_ACCOUNTING is not set
++# CONFIG_BSD_PROCESS_ACCT is not set
++# CONFIG_PSI is not set
++# end of CPU/Task time and stats accounting
++
++# CONFIG_CPU_ISOLATION is not set
++
++#
++# RCU Subsystem
++#
++CONFIG_TREE_RCU=y
++# CONFIG_RCU_EXPERT is not set
++CONFIG_SRCU=y
++CONFIG_TREE_SRCU=y
++CONFIG_RCU_STALL_COMMON=y
++CONFIG_RCU_NEED_SEGCBLIST=y
++# end of RCU Subsystem
++
++# CONFIG_IKCONFIG is not set
++# CONFIG_IKHEADERS is not set
++CONFIG_LOG_BUF_SHIFT=16
++CONFIG_LOG_CPU_MAX_BUF_SHIFT=12
++CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT=12
++CONFIG_GENERIC_SCHED_CLOCK=y
++
++#
++# Scheduler features
++#
++# end of Scheduler features
++
++CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5"
++# CONFIG_CGROUPS is not set
++# CONFIG_NAMESPACES is not set
++# CONFIG_CHECKPOINT_RESTORE is not set
++# CONFIG_SCHED_AUTOGROUP is not set
++# CONFIG_SYSFS_DEPRECATED is not set
++# CONFIG_RELAY is not set
++CONFIG_BLK_DEV_INITRD=y
++CONFIG_INITRAMFS_SOURCE=""
++# CONFIG_INITRAMFS_FORCE is not set
++CONFIG_RD_GZIP=y
++# CONFIG_RD_BZIP2 is not set
++# CONFIG_RD_LZMA is not set
++# CONFIG_RD_XZ is not set
++# CONFIG_RD_LZO is not set
++# CONFIG_RD_LZ4 is not set
++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_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=y
++# CONFIG_BASE_FULL is not set
++CONFIG_FUTEX=y
++CONFIG_FUTEX_PI=y
++# CONFIG_EPOLL is not set
++# CONFIG_SIGNALFD is not set
++# CONFIG_TIMERFD is not set
++# CONFIG_EVENTFD is not set
++# CONFIG_AIO is not set
++# CONFIG_IO_URING is not set
++# CONFIG_ADVISE_SYSCALLS is not set
++CONFIG_MEMBARRIER=y
++# CONFIG_KALLSYMS is not set
++# CONFIG_KCMP is not set
++CONFIG_RSEQ=y
++# CONFIG_DEBUG_RSEQ is not set
++# CONFIG_EMBEDDED is not set
++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 is not set
++# CONFIG_COMPAT_BRK is not set
++# CONFIG_SLAB is not set
++# CONFIG_SLUB is not set
++CONFIG_SLOB=y
++# CONFIG_SHUFFLE_PAGE_ALLOCATOR is not set
++# CONFIG_MMAP_ALLOW_UNINITIALIZED is not set
++# CONFIG_PROFILING is not set
++# end of General setup
++
++CONFIG_32BIT=y
++CONFIG_RISCV=y
++CONFIG_ARCH_MMAP_RND_BITS_MIN=8
++CONFIG_ARCH_MMAP_RND_BITS_MAX=17
++CONFIG_RISCV_M_MODE=y
++# CONFIG_MMU is not set
++CONFIG_PAGE_OFFSET=0x80000000
++CONFIG_ARCH_FLATMEM_ENABLE=y
++CONFIG_ARCH_SUPPORTS_UPROBES=y
++CONFIG_STACKTRACE_SUPPORT=y
++CONFIG_GENERIC_BUG=y
++CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_GENERIC_CSUM=y
++CONFIG_GENERIC_HWEIGHT=y
++CONFIG_PGTABLE_LEVELS=2
++CONFIG_LOCKDEP_SUPPORT=y
++
++#
++# SoC selection
++#
++# CONFIG_SOC_MICROCHIP_POLARFIRE is not set
++# CONFIG_SOC_SIFIVE is not set
++# CONFIG_SOC_STARFIVE is not set
++CONFIG_SOC_VIRT=y
++# CONFIG_SOC_CANAAN is not set
++# end of SoC selection
++
++#
++# CPU errata selection
++#
++CONFIG_RISCV_ERRATA_ALTERNATIVE=y
++# CONFIG_ERRATA_SIFIVE is not set
++# end of CPU errata selection
++
++#
++# Platform type
++#
++CONFIG_ARCH_RV32I=y
++# CONFIG_ARCH_RV64I is not set
++# CONFIG_CMODEL_MEDLOW is not set
++CONFIG_CMODEL_MEDANY=y
++CONFIG_SMP=y
++CONFIG_NR_CPUS=8
++# CONFIG_HOTPLUG_CPU is not set
++CONFIG_TUNE_GENERIC=y
++# CONFIG_RISCV_ISA_C is not set
++# CONFIG_FPU is not set
++# end of Platform type
++
++#
++# Kernel features
++#
++# 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_RISCV_BOOT_SPINWAIT=y
++# CONFIG_CRASH_DUMP is not set
++# end of Kernel features
++
++#
++# Boot options
++#
++CONFIG_CMDLINE="root=/dev/vda rw earlycon=uart8250,mmio,0x10000000,115200n8 console=ttyS0"
++# CONFIG_CMDLINE_FALLBACK is not set
++# CONFIG_CMDLINE_EXTEND is not set
++CONFIG_CMDLINE_FORCE=y
++# CONFIG_PHYS_RAM_BASE_FIXED is not set
++# end of Boot options
++
++#
++# Power management options
++#
++# CONFIG_PM is not set
++# end of Power management options
++
++#
++# CPU Power Management
++#
++
++#
++# CPU Idle
++#
++# CONFIG_CPU_IDLE is not set
++# end of CPU Idle
++# end of CPU Power Management
++
++# CONFIG_VIRTUALIZATION is not set
++
++#
++# General architecture-dependent options
++#
++CONFIG_JUMP_LABEL=y
++# CONFIG_STATIC_KEYS_SELFTEST is not set
++CONFIG_HAVE_KPROBES=y
++CONFIG_HAVE_KRETPROBES=y
++CONFIG_HAVE_KPROBES_ON_FTRACE=y
++CONFIG_HAVE_FUNCTION_ERROR_INJECTION=y
++CONFIG_TRACE_IRQFLAGS_SUPPORT=y
++CONFIG_HAVE_ARCH_TRACEHOOK=y
++CONFIG_GENERIC_SMP_IDLE_THREAD=y
++CONFIG_GENERIC_IDLE_POLL_SETUP=y
++CONFIG_ARCH_HAS_FORTIFY_SOURCE=y
++CONFIG_HAVE_ARCH_THREAD_STRUCT_WHITELIST=y
++CONFIG_HAVE_ASM_MODVERSIONS=y
++CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
++CONFIG_HAVE_RSEQ=y
++CONFIG_HAVE_FUNCTION_ARG_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_HAVE_STACKPROTECTOR=y
++CONFIG_STACKPROTECTOR=y
++CONFIG_STACKPROTECTOR_STRONG=y
++CONFIG_LTO_NONE=y
++CONFIG_HAVE_CONTEXT_TRACKING=y
++CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y
++CONFIG_HAVE_MOVE_PUD=y
++CONFIG_HAVE_MOVE_PMD=y
++CONFIG_PAGE_SIZE_LESS_THAN_64KB=y
++CONFIG_PAGE_SIZE_LESS_THAN_256KB=y
++CONFIG_CLONE_BACKWARDS=y
++CONFIG_COMPAT_32BIT_TIME=y
++CONFIG_ARCH_OPTIONAL_KERNEL_RWX_DEFAULT=y
++
++#
++# GCOV-based kernel profiling
++#
++CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y
++# end of GCOV-based kernel profiling
++
++CONFIG_HAVE_GCC_PLUGINS=y
++CONFIG_GCC_PLUGINS=y
++# CONFIG_GCC_PLUGIN_LATENT_ENTROPY is not set
++# CONFIG_GCC_PLUGIN_RANDSTRUCT is not set
++# end of General architecture-dependent options
++
++CONFIG_RT_MUTEXES=y
++CONFIG_BASE_SMALL=1
++# CONFIG_MODULES is not set
++CONFIG_BLOCK=y
++CONFIG_BLOCK_LEGACY_AUTOLOAD=y
++# CONFIG_BLK_DEV_BSGLIB is not set
++# CONFIG_BLK_DEV_INTEGRITY is not set
++# CONFIG_BLK_DEV_ZONED is not set
++# CONFIG_BLK_WBT is not set
++# 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 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 is not set
++# CONFIG_SYSV68_PARTITION is not set
++# CONFIG_CMDLINE_PARTITION is not set
++# end of Partition Types
++
++CONFIG_BLK_MQ_VIRTIO=y
++
++#
++# 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_INLINE_SPIN_UNLOCK_IRQ=y
++CONFIG_INLINE_READ_UNLOCK=y
++CONFIG_INLINE_READ_UNLOCK_IRQ=y
++CONFIG_INLINE_WRITE_UNLOCK=y
++CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
++CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y
++CONFIG_MUTEX_SPIN_ON_OWNER=y
++CONFIG_RWSEM_SPIN_ON_OWNER=y
++CONFIG_LOCK_SPIN_ON_OWNER=y
++CONFIG_ARCH_HAS_MMIOWB=y
++CONFIG_MMIOWB=y
++
++#
++# Executable file formats
++#
++CONFIG_BINFMT_SCRIPT=y
++CONFIG_ARCH_HAS_BINFMT_FLAT=y
++CONFIG_BINFMT_FLAT=y
++CONFIG_BINFMT_FLAT_NO_DATA_START_OFFSET=y
++# CONFIG_BINFMT_FLAT_OLD is not set
++# CONFIG_BINFMT_ZFLAT is not set
++# CONFIG_BINFMT_SHARED_FLAT is not set
++# CONFIG_BINFMT_MISC is not set
++# CONFIG_COREDUMP is not set
++# end of Executable file formats
++
++#
++# Memory Management options
++#
++CONFIG_FLATMEM=y
++CONFIG_EXCLUSIVE_SYSTEM_RAM=y
++CONFIG_SPLIT_PTLOCK_CPUS=999999
++# CONFIG_PAGE_REPORTING is not set
++CONFIG_NOMMU_INITIAL_TRIM_EXCESS=1
++CONFIG_ARCH_WANT_GENERAL_HUGETLB=y
++CONFIG_NEED_PER_CPU_KM=y
++# CONFIG_ZPOOL is not set
++CONFIG_GENERIC_EARLY_IOREMAP=y
++CONFIG_ARCH_HAS_CURRENT_STACK_POINTER=y
++# CONFIG_PERCPU_STATS is not set
++
++#
++# GUP_TEST needs to have DEBUG_FS enabled
++#
++CONFIG_ARCH_HAS_PTE_SPECIAL=y
++
++#
++# Data Access Monitoring
++#
++# CONFIG_DAMON is not set
++# end of Data Access Monitoring
++# end of Memory Management options
++
++# CONFIG_NET is not set
++
++#
++# Device Drivers
++#
++CONFIG_HAVE_PCI=y
++# CONFIG_PCI is not set
++# CONFIG_PCCARD is not set
++
++#
++# Generic Driver Options
++#
++# CONFIG_UEVENT_HELPER is not set
++CONFIG_DEVTMPFS=y
++CONFIG_DEVTMPFS_MOUNT=y
++# CONFIG_DEVTMPFS_SAFE is not set
++CONFIG_STANDALONE=y
++CONFIG_PREVENT_FIRMWARE_BUILD=y
++
++#
++# Firmware loader
++#
++# CONFIG_FW_LOADER 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_REGMAP=y
++CONFIG_REGMAP_MMIO=y
++CONFIG_GENERIC_ARCH_TOPOLOGY=y
++# end of Generic Driver Options
++
++#
++# Bus devices
++#
++# CONFIG_MHI_BUS is not set
++# end of Bus devices
++
++#
++# Firmware Drivers
++#
++
++#
++# ARM System Control and Management Interface Protocol
++#
++# end of ARM System Control and Management Interface Protocol
++
++# CONFIG_FIRMWARE_MEMMAP is not set
++# CONFIG_GOOGLE_FIRMWARE is not set
++
++#
++# Tegra firmware driver
++#
++# end of Tegra firmware driver
++# end of Firmware Drivers
++
++# CONFIG_GNSS is not set
++# CONFIG_MTD 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_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_BLK_DEV_LOOP is not set
++
++#
++# DRBD disabled because PROC_FS or INET not selected
++#
++# CONFIG_BLK_DEV_RAM is not set
++CONFIG_VIRTIO_BLK=y
++
++#
++# NVME Support
++#
++# CONFIG_NVME_FC is not set
++# end of NVME Support
++
++#
++# Misc devices
++#
++# CONFIG_DUMMY_IRQ is not set
++# CONFIG_ENCLOSURE_SERVICES is not set
++# CONFIG_SRAM is not set
++# CONFIG_XILINX_SDFEC is not set
++# CONFIG_OPEN_DICE is not set
++# CONFIG_C2PORT is not set
++
++#
++# EEPROM support
++#
++# CONFIG_EEPROM_93CX6 is not set
++# end of EEPROM support
++
++#
++# Texas Instruments shared transport line discipline
++#
++# end of Texas Instruments shared transport line discipline
++
++#
++# Altera FPGA firmware download module (requires I2C)
++#
++# CONFIG_ECHO is not set
++# CONFIG_PVPANIC is not set
++# end of Misc devices
++
++#
++# SCSI device support
++#
++CONFIG_SCSI_MOD=y
++# CONFIG_RAID_ATTRS is not set
++# CONFIG_SCSI is not set
++# end of SCSI device support
++
++# CONFIG_ATA is not set
++# CONFIG_MD is not set
++# CONFIG_TARGET_CORE is not set
++
++#
++# Input device support
++#
++CONFIG_INPUT=y
++# CONFIG_INPUT_FF_MEMLESS 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 is not set
++# CONFIG_INPUT_EVBUG is not set
++
++#
++# Input Device Drivers
++#
++# CONFIG_INPUT_KEYBOARD is not set
++# CONFIG_INPUT_MOUSE 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 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=y
++CONFIG_CONSOLE_TRANSLATIONS=y
++CONFIG_VT_CONSOLE=y
++CONFIG_HW_CONSOLE=y
++# CONFIG_VT_HW_CONSOLE_BINDING is not set
++CONFIG_UNIX98_PTYS=y
++# CONFIG_LEGACY_PTYS is not set
++# CONFIG_LDISC_AUTOLOAD is not set
++
++#
++# Serial drivers
++#
++CONFIG_SERIAL_EARLYCON=y
++CONFIG_SERIAL_8250=y
++# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set
++CONFIG_SERIAL_8250_16550A_VARIANTS=y
++# CONFIG_SERIAL_8250_FINTEK is not set
++CONFIG_SERIAL_8250_CONSOLE=y
++CONFIG_SERIAL_8250_NR_UARTS=1
++CONFIG_SERIAL_8250_RUNTIME_UARTS=1
++# CONFIG_SERIAL_8250_EXTENDED is not set
++# CONFIG_SERIAL_8250_ASPEED_VUART is not set
++# CONFIG_SERIAL_8250_DW is not set
++# CONFIG_SERIAL_8250_RT288X is not set
++CONFIG_SERIAL_OF_PLATFORM=y
++
++#
++# Non-8250 serial port support
++#
++# 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_ALTERA_JTAGUART is not set
++# CONFIG_SERIAL_ALTERA_UART 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_NONSTANDARD is not set
++# CONFIG_GOLDFISH_TTY is not set
++# CONFIG_NULL_TTY 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 is not set
++# CONFIG_DEVMEM is not set
++# CONFIG_TCG_TPM is not set
++# CONFIG_XILLYBUS is not set
++# CONFIG_RANDOM_TRUST_BOOTLOADER is not set
++# end of Character devices
++
++#
++# I2C support
++#
++# CONFIG_I2C is not set
++# end of I2C support
++
++# CONFIG_I3C is not set
++# CONFIG_SPI 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_OPTIONAL=y
++
++#
++# Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks.
++#
++# end of PTP clock support
++
++# CONFIG_PINCTRL is not set
++# CONFIG_GPIOLIB is not set
++# CONFIG_W1 is not set
++CONFIG_POWER_RESET=y
++# CONFIG_POWER_RESET_RESTART is not set
++CONFIG_POWER_RESET_SYSCON=y
++CONFIG_POWER_RESET_SYSCON_POWEROFF=y
++# CONFIG_SYSCON_REBOOT_MODE is not set
++# CONFIG_NVMEM_REBOOT_MODE is not set
++# CONFIG_POWER_SUPPLY is not set
++# CONFIG_HWMON is not set
++# CONFIG_THERMAL is not set
++# CONFIG_WATCHDOG 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_ATMEL_FLEXCOM is not set
++# CONFIG_MFD_ATMEL_HLCDC is not set
++# CONFIG_MFD_MADERA is not set
++# CONFIG_MFD_HI6421_PMIC is not set
++# CONFIG_HTC_PASIC3 is not set
++# CONFIG_MFD_KEMPLD is not set
++# CONFIG_MFD_MT6397 is not set
++# CONFIG_MFD_SM501 is not set
++CONFIG_MFD_SYSCON=y
++# CONFIG_MFD_TI_AM335X_TSCADC is not set
++# CONFIG_MFD_TQMX86 is not set
++# end of Multifunction device drivers
++
++# CONFIG_REGULATOR is not set
++# CONFIG_RC_CORE is not set
++
++#
++# CEC support
++#
++# CONFIG_MEDIA_CEC_SUPPORT is not set
++# end of CEC support
++
++# CONFIG_MEDIA_SUPPORT is not set
++
++#
++# Graphics support
++#
++# CONFIG_DRM is not set
++# CONFIG_DRM_DEBUG_MODESET_LOCK is not set
++
++#
++# ARM devices
++#
++# end of ARM devices
++
++#
++# Frame buffer Devices
++#
++# CONFIG_FB is not set
++# 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
++
++#
++# Console display driver support
++#
++# CONFIG_VGA_CONSOLE is not set
++CONFIG_DUMMY_CONSOLE=y
++CONFIG_DUMMY_CONSOLE_COLUMNS=80
++CONFIG_DUMMY_CONSOLE_ROWS=25
++# end of Console display driver support
++# end of Graphics support
++
++# CONFIG_SOUND is not set
++
++#
++# HID support
++#
++# CONFIG_HID is not set
++# end of HID support
++
++CONFIG_USB_OHCI_LITTLE_ENDIAN=y
++# CONFIG_USB_SUPPORT is not set
++# CONFIG_MMC is not set
++# CONFIG_MEMSTICK is not set
++# CONFIG_NEW_LEDS is not set
++# CONFIG_ACCESSIBILITY is not set
++CONFIG_EDAC_SUPPORT=y
++# CONFIG_RTC_CLASS is not set
++# CONFIG_DMADEVICES is not set
++
++#
++# DMABUF options
++#
++# CONFIG_SYNC_FILE is not set
++# CONFIG_DMABUF_HEAPS is not set
++# end of DMABUF options
++
++# CONFIG_AUXDISPLAY is not set
++# CONFIG_VFIO is not set
++# CONFIG_VIRT_DRIVERS is not set
++CONFIG_VIRTIO=y
++CONFIG_VIRTIO_MENU=y
++# CONFIG_VIRTIO_BALLOON is not set
++# CONFIG_VIRTIO_INPUT is not set
++CONFIG_VIRTIO_MMIO=y
++CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
++CONFIG_VHOST_MENU=y
++# 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_COMEDI is not set
++# CONFIG_STAGING is not set
++CONFIG_GOLDFISH=y
++# CONFIG_GOLDFISH_PIPE is not set
++CONFIG_HAVE_CLK=y
++CONFIG_HAVE_CLK_PREPARE=y
++CONFIG_COMMON_CLK=y
++# CONFIG_COMMON_CLK_AXI_CLKGEN is not set
++# CONFIG_COMMON_CLK_FIXED_MMIO is not set
++# CONFIG_CLK_SIFIVE is not set
++# CONFIG_XILINX_VCU is not set
++# CONFIG_HWSPINLOCK is not set
++
++#
++# Clock Source drivers
++#
++CONFIG_TIMER_OF=y
++CONFIG_TIMER_PROBE=y
++CONFIG_CLINT_TIMER=y
++# CONFIG_MICROCHIP_PIT64B is not set
++# end of Clock Source drivers
++
++# CONFIG_MAILBOX 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
++
++#
++# 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
++
++#
++# Enable LiteX SoC Builder specific drivers
++#
++# CONFIG_LITEX_SOC_CONTROLLER is not set
++# end of Enable LiteX SoC Builder specific drivers
++
++#
++# Qualcomm SoC drivers
++#
++# end of Qualcomm SoC drivers
++
++# CONFIG_SOC_TI is not set
++
++#
++# Xilinx SoC drivers
++#
++# end of Xilinx 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 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 is not set
++
++#
++# PHY Subsystem
++#
++# CONFIG_GENERIC_PHY is not set
++# CONFIG_PHY_CAN_TRANSCEIVER is not set
++
++#
++# PHY drivers for Broadcom platforms
++#
++# CONFIG_BCM_KONA_USB2_PHY is not set
++# end of PHY drivers for Broadcom platforms
++
++# CONFIG_PHY_CADENCE_TORRENT is not set
++# CONFIG_PHY_CADENCE_DPHY is not set
++# CONFIG_PHY_CADENCE_DPHY_RX is not set
++# CONFIG_PHY_CADENCE_SALVO is not set
++# CONFIG_PHY_PXA_28NM_HSIC is not set
++# CONFIG_PHY_PXA_28NM_USB2 is not set
++# CONFIG_PHY_LAN966X_SERDES is not set
++# CONFIG_PHY_OCELOT_SERDES 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 is not set
++# end of Android
++
++# CONFIG_DAX is not set
++# CONFIG_NVMEM is not set
++
++#
++# 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_PECI is not set
++# end of Device Drivers
++
++#
++# File systems
++#
++# CONFIG_VALIDATE_FS_PARSER is not set
++CONFIG_FS_IOMAP=y
++CONFIG_EXT2_FS=y
++# CONFIG_EXT2_FS_XATTR is not set
++# CONFIG_EXT3_FS is not set
++# CONFIG_EXT4_FS is not set
++# 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_BTRFS_FS is not set
++# CONFIG_NILFS2_FS is not set
++# CONFIG_F2FS_FS is not set
++# CONFIG_EXPORTFS_BLOCK_OPS is not set
++CONFIG_FILE_LOCKING=y
++# CONFIG_FS_ENCRYPTION is not set
++# CONFIG_FS_VERITY is not set
++# CONFIG_DNOTIFY is not set
++# CONFIG_INOTIFY_USER is not set
++# 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_MSDOS_FS is not set
++# CONFIG_VFAT_FS is not set
++# CONFIG_EXFAT_FS is not set
++# CONFIG_NTFS_FS is not set
++# CONFIG_NTFS3_FS is not set
++# end of DOS/FAT/EXFAT/NT Filesystems
++
++#
++# Pseudo filesystems
++#
++CONFIG_PROC_FS=y
++CONFIG_PROC_SYSCTL=y
++# CONFIG_PROC_CHILDREN is not set
++CONFIG_KERNFS=y
++CONFIG_SYSFS=y
++CONFIG_ARCH_HAS_GIGANTIC_PAGE=y
++# CONFIG_CONFIGFS_FS is not set
++# end of Pseudo filesystems
++
++# CONFIG_MISC_FILESYSTEMS is not set
++# CONFIG_NLS is not set
++# CONFIG_UNICODE is not set
++# end of File systems
++
++#
++# Security options
++#
++# CONFIG_KEYS is not set
++# CONFIG_SECURITY_DMESG_RESTRICT is not set
++# CONFIG_SECURITY is not set
++# CONFIG_SECURITYFS is not set
++# CONFIG_FORTIFY_SOURCE is not set
++# CONFIG_STATIC_USERMODEHELPER is not set
++CONFIG_DEFAULT_SECURITY_DAC=y
++CONFIG_LSM="[]"
++
++#
++# Kernel hardening options
++#
++
++#
++# Memory initialization
++#
++CONFIG_CC_HAS_AUTO_VAR_INIT_PATTERN=y
++CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO=y
++# CONFIG_INIT_STACK_NONE is not set
++# CONFIG_INIT_STACK_ALL_PATTERN is not set
++CONFIG_INIT_STACK_ALL_ZERO=y
++# CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set
++# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set
++CONFIG_CC_HAS_ZERO_CALL_USED_REGS=y
++# CONFIG_ZERO_CALL_USED_REGS is not set
++# end of Memory initialization
++# end of Kernel hardening options
++# end of Security options
++
++# CONFIG_CRYPTO is not set
++
++#
++# Library routines
++#
++# CONFIG_PACKING is not set
++CONFIG_BITREVERSE=y
++CONFIG_GENERIC_STRNCPY_FROM_USER=y
++CONFIG_GENERIC_STRNLEN_USER=y
++# CONFIG_CORDIC is not set
++# CONFIG_PRIME_NUMBERS is not set
++CONFIG_RATIONAL=y
++CONFIG_GENERIC_PCI_IOMAP=y
++
++#
++# Crypto library routines
++#
++CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
++# CONFIG_CRYPTO_LIB_CURVE25519 is not set
++CONFIG_CRYPTO_LIB_POLY1305_RSIZE=1
++# CONFIG_CRYPTO_LIB_POLY1305 is not set
++# end of Crypto library routines
++
++# CONFIG_CRC_CCITT is not set
++# CONFIG_CRC16 is not set
++# CONFIG_CRC_T10DIF is not set
++# CONFIG_CRC64_ROCKSOFT 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_ZSTD_DECOMPRESS=y
++# CONFIG_XZ_DEC is not set
++CONFIG_DECOMPRESS_GZIP=y
++CONFIG_DECOMPRESS_ZSTD=y
++CONFIG_HAS_IOMEM=y
++CONFIG_HAS_IOPORT_MAP=y
++CONFIG_HAS_DMA=y
++CONFIG_DMA_DECLARE_COHERENT=y
++CONFIG_DMA_NONCOHERENT_MMAP=y
++# CONFIG_DMA_API_DEBUG is not set
++CONFIG_GENERIC_ATOMIC64=y
++# CONFIG_IRQ_POLL is not set
++CONFIG_LIBFDT=y
++CONFIG_SG_POOL=y
++CONFIG_UACCESS_MEMCPY=y
++CONFIG_ARCH_STACKWALK=y
++CONFIG_SBITMAP=y
++# end of Library routines
++
++CONFIG_GENERIC_LIB_ASHLDI3=y
++CONFIG_GENERIC_LIB_ASHRDI3=y
++CONFIG_GENERIC_LIB_LSHRDI3=y
++CONFIG_GENERIC_LIB_UCMPDI2=y
++CONFIG_GENERIC_LIB_DEVMEM_IS_ALLOWED=y
++
++#
++# Kernel hacking
++#
++
++#
++# printk and dmesg options
++#
++CONFIG_PRINTK_TIME=y
++# CONFIG_PRINTK_CALLER is not set
++# CONFIG_STACKTRACE_BUILD_ID 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 is not set
++# CONFIG_DYNAMIC_DEBUG_CORE is not set
++CONFIG_SYMBOLIC_ERRNAME=y
++CONFIG_DEBUG_BUGVERBOSE=y
++# end of printk and dmesg options
++
++CONFIG_DEBUG_KERNEL=y
++CONFIG_DEBUG_MISC=y
++
++#
++# Compile-time checks and compiler options
++#
++CONFIG_DEBUG_INFO_NONE=y
++# CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT is not set
++# CONFIG_DEBUG_INFO_DWARF4 is not set
++# CONFIG_DEBUG_INFO_DWARF5 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_ARCH_WANT_FRAME_POINTERS=y
++CONFIG_FRAME_POINTER=y
++# CONFIG_VMLINUX_MAP 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 is not set
++CONFIG_HAVE_ARCH_KGDB=y
++CONFIG_HAVE_ARCH_KGDB_QXFER_PKT=y
++# CONFIG_KGDB is not set
++CONFIG_ARCH_HAS_UBSAN_SANITIZE_ALL=y
++# CONFIG_UBSAN is not set
++CONFIG_HAVE_KCSAN_COMPILER=y
++# end of Generic Kernel Debugging Instruments
++
++#
++# Networking Debugging
++#
++# CONFIG_NET_DEV_REFCNT_TRACKER is not set
++# CONFIG_NET_NS_REFCNT_TRACKER is not set
++# end of Networking Debugging
++
++#
++# 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_OBJECTS 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_NOMMU_REGIONS is not set
++# CONFIG_DEBUG_MEMORY_INIT is not set
++# CONFIG_DEBUG_PER_CPU_MAPS is not set
++CONFIG_CC_HAS_KASAN_GENERIC=y
++CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y
++# 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
++# end of Debug Oops, Lockups and Hangs
++
++#
++# Scheduler Debugging
++#
++# CONFIG_SCHED_DEBUG is not set
++# CONFIG_SCHEDSTATS is not set
++# end of Scheduler Debugging
++
++# CONFIG_DEBUG_TIMEKEEPING is not set
++
++#
++# 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
++# end of Lock Debugging (spinlocks, mutexes, etc...)
++
++# CONFIG_DEBUG_IRQFLAGS is not set
++# 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 is not set
++# CONFIG_RCU_EQS_DEBUG is not set
++# end of RCU Debugging
++
++# CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set
++# CONFIG_LATENCYTOP is not set
++CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
++CONFIG_TRACING_SUPPORT=y
++# CONFIG_FTRACE is not set
++# CONFIG_SAMPLES is not set
++
++#
++# riscv Debugging
++#
++# end of 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 is not set
++CONFIG_ARCH_USE_MEMTEST=y
++# CONFIG_MEMTEST is not set
++# end of Kernel Testing and Coverage
++# end of Kernel hacking
+diff --git a/arch/riscv/include/uapi/asm/unistd.h b/arch/riscv/include/uapi/asm/unistd.h
+index 73d7cdd2e..53f5410c1 100644
+--- a/arch/riscv/include/uapi/asm/unistd.h
++++ b/arch/riscv/include/uapi/asm/unistd.h
+@@ -15,9 +15,14 @@
+  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+  */
+ 
+-#if defined(__LP64__) && !defined(__SYSCALL_COMPAT)
++#ifndef __SYSCALL_COMPAT
+ #define __ARCH_WANT_NEW_STAT
+ #define __ARCH_WANT_SET_GET_RLIMIT
++#endif
++
++#ifndef __LP64__
++#define __ARCH_WANT_STAT64
++#define __ARCH_WANT_TIME32_SYSCALLS
+ #endif /* __LP64__ */
+ 
+ #define __ARCH_WANT_SYS_CLONE3
+-- 
+2.38.1
+
diff --git a/configs/qemu_riscv32_nommu_virt_defconfig b/configs/qemu_riscv32_nommu_virt_defconfig
new file mode 100644
index 0000000000..eed86b3164
--- /dev/null
+++ b/configs/qemu_riscv32_nommu_virt_defconfig
@@ -0,0 +1,19 @@ 
+BR2_riscv=y
+BR2_riscv_custom=y
+BR2_RISCV_ISA_CUSTOM_RVM=y
+BR2_RISCV_32=y
+# BR2_RISCV_USE_MMU is not set
+BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_5_19=y
+BR2_PTHREADS_NONE=y
+BR2_GLOBAL_PATCH_DIR="board/riscv/nommu/patches"
+BR2_ROOTFS_POST_IMAGE_SCRIPT="board/qemu/post-image.sh"
+BR2_ROOTFS_POST_SCRIPT_ARGS="$(BR2_DEFCONFIG)"
+BR2_LINUX_KERNEL=y
+BR2_LINUX_KERNEL_CUSTOM_VERSION=y
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.19"
+BR2_LINUX_KERNEL_DEFCONFIG="nommu_rv32_virt"
+BR2_PACKAGE_BUSYBOX_CONFIG="package/busybox/busybox-minimal.config"
+# BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set
+BR2_TARGET_ROOTFS_EXT2=y
+BR2_PACKAGE_HOST_QEMU=y
+BR2_PACKAGE_HOST_QEMU_SYSTEM_MODE=y
diff --git a/package/Makefile.in b/package/Makefile.in
index 43d214bcbe..f196c3a28d 100644
--- a/package/Makefile.in
+++ b/package/Makefile.in
@@ -39,10 +39,16 @@  endif
 # Compute GNU_TARGET_NAME
 GNU_TARGET_NAME = $(ARCH)-$(TARGET_VENDOR)-$(TARGET_OS)-$(LIBC)$(ABI)
 
-# FLAT binary format needs uclinux, except RISC-V 64-bits which needs
+# FLAT binary format needs uclinux, except RISC-V nommu which needs
 # the regular linux name.
-ifeq ($(BR2_BINFMT_FLAT):$(BR2_RISCV_64),y:)
+ifeq ($(BR2_BINFMT_FLAT),y)
+ifeq ($(BR2_RISCV_64),y)
+TARGET_OS = linux
+else ifeq ($(BR2_RISCV_32),y)
+TARGET_OS = linux
+else
 TARGET_OS = uclinux
+endif
 else
 TARGET_OS = linux
 endif
@@ -177,6 +183,9 @@  ifeq ($(BR2_BINFMT_FLAT),y)
 ifeq ($(BR2_RISCV_64),y)
 TARGET_CFLAGS += -fPIC
 endif
+ifeq ($(BR2_RISCV_32),y)
+TARGET_CFLAGS += -fPIC
+endif
 ifeq ($(BR2_BINFMT_FLAT_ONE),y)
 ELF2FLT_FLAGS = $(if $($(PKG)_FLAT_STACKSIZE),\
 	-Wl$(comma)-elf2flt="-r -s$($(PKG)_FLAT_STACKSIZE)",\
diff --git a/package/elf2flt/0006-Added-RISC-V-32-bit-compilation-support.patch b/package/elf2flt/0006-Added-RISC-V-32-bit-compilation-support.patch
new file mode 100644
index 0000000000..13feaa2d3b
--- /dev/null
+++ b/package/elf2flt/0006-Added-RISC-V-32-bit-compilation-support.patch
@@ -0,0 +1,74 @@ 
+From 599e31157815a6e82d920693fafea249ef95dfc7 Mon Sep 17 00:00:00 2001
+From: Yimin Gu <ustcymgu@gmail.com>
+Date: Thu, 17 Nov 2022 21:16:28 +0900
+Subject: [PATCH] Added RISC-V 32-bit compilation support
+
+Let elf2flt compile for RISC-V 32-bit targets. With these changes, the 
+uclibc toolchain and busybox can work fine for rv32 no MMU systems with 
+no noticable problem. 
+
+There's no change of code except macros and definitions. 
+
+Signed-off-by: Yimin Gu <ustcymgu@gmail.com>
+---
+ elf2flt.c    | 9 ++++++---
+ ld-elf2flt.c | 2 +-
+ 2 files changed, 7 insertions(+), 4 deletions(-)
+
+diff --git a/elf2flt.c b/elf2flt.c
+index 949edd1..28f3808 100644
+--- a/elf2flt.c
++++ b/elf2flt.c
+@@ -81,7 +81,7 @@ const char *elf2flt_progname;
+ #include <elf/v850.h>
+ #elif defined(TARGET_xtensa)
+ #include <elf/xtensa.h>
+-#elif defined(TARGET_riscv64)
++#elif defined(TARGET_riscv64) || defined(TARGET_riscv32)
+ #include <elf/riscv.h>
+ #endif
+ 
+@@ -127,6 +127,8 @@ const char *elf2flt_progname;
+ #define ARCH	"xtensa"
+ #elif defined(TARGET_riscv64)
+ #define ARCH	"riscv64"
++#elif defined(TARGET_riscv32)
++#define ARCH	"riscv32"
+ #else
+ #error "Don't know how to support your CPU architecture??"
+ #endif
+@@ -351,7 +353,8 @@ ro_reloc_data_section_should_be_in_text(asection *s)
+ {
+   if ((s->flags & (SEC_DATA | SEC_READONLY | SEC_RELOC)) ==
+       (SEC_DATA | SEC_READONLY | SEC_RELOC)) {
+-#if defined(TARGET_m68k) || defined(TARGET_riscv64) || defined(TARGET_xtensa)
++#if defined(TARGET_m68k) || defined(TARGET_riscv64) || \
++      defined(TARGET_riscv32) || defined(TARGET_xtensa)
+     if (!strcmp(".eh_frame", s->name))
+       return false;
+ #endif
+@@ -838,7 +841,7 @@ output_relocs (
+ 					goto good_32bit_resolved_reloc;
+ 				default:
+ 					goto bad_resolved_reloc;
+-#elif defined(TARGET_riscv64)
++#elif defined(TARGET_riscv64) || defined(TARGET_riscv32)
+ 				case R_RISCV_32_PCREL:
+ 				case R_RISCV_ADD32:
+ 				case R_RISCV_ADD64:
+diff --git a/ld-elf2flt.c b/ld-elf2flt.c
+index 75ee1bb..68b2a4a 100644
+--- a/ld-elf2flt.c
++++ b/ld-elf2flt.c
+@@ -327,7 +327,7 @@ static int do_final_link(void)
+ 	/* riscv adds a global pointer symbol to the linker file with the
+ 	   "RISCV_GP:" prefix. Remove the prefix for riscv64 architecture and
+ 	   the entire line for other architectures. */
+-	if (streq(TARGET_CPU, "riscv64"))
++	if (streq(TARGET_CPU, "riscv64") || streq(TARGET_CPU, "riscv32"))
+ 		append_sed(&sed, "^RISCV_GP:", "");
+ 	else
+ 		append_sed(&sed, "^RISCV_GP:", NULL);
+-- 
+2.38.1
+
diff --git a/package/uclibc/0001-RISC-V-32-bit-support.patch b/package/uclibc/0001-RISC-V-32-bit-support.patch
new file mode 100644
index 0000000000..038a23b0b1
--- /dev/null
+++ b/package/uclibc/0001-RISC-V-32-bit-support.patch
@@ -0,0 +1,145 @@ 
+From 537b2ef6350fdf7604d59bc2a50388cb98045d7f Mon Sep 17 00:00:00 2001
+From: Yimin Gu <ustcymgu@gmail.com>
+Date: Mon, 1 Aug 2022 15:22:40 +0900
+Subject: [PATCH] uclibc: RISC-V 32-bit support
+
+Added 32-bit RISC-V support. With these changes, elf2flt patch
+6055525082d1, and kernel patch 700b2f0ce371, no MMU rv32 buildroot
+system can work without any noticable problem. 
+
+There's no substantial code change except definations and config
+options. 
+
+Signed-off-by: Yimin Gu <ustcymgu@gmail.com>
+---
+ Rules.mak                                  |  2 ++
+ extra/Configs/Config.in                    |  9 +++++++++
+ extra/Configs/Config.riscv32               | 14 ++++++++++++++
+ libc/sysdeps/linux/riscv32                 |  1 +
+ libc/sysdeps/linux/riscv64/bits/wordsize.h |  3 ++-
+ libc/sysdeps/linux/riscv64/sys/asm.h       |  6 +++++-
+ 6 files changed, 33 insertions(+), 2 deletions(-)
+ create mode 100644 extra/Configs/Config.riscv32
+ create mode 120000 libc/sysdeps/linux/riscv32
+
+diff --git a/Rules.mak b/Rules.mak
+index 3fb64c728..71a14fc38 100644
+--- a/Rules.mak
++++ b/Rules.mak
+@@ -305,6 +305,7 @@ ifneq ($(TARGET_ARCH),c6x)
+ ifneq ($(TARGET_ARCH),h8300)
+ ifneq ($(TARGET_ARCH),arc)
+ ifneq ($(TARGET_ARCH),aarch64)
++ifneq ($(TARGET_ARCH),riscv32)
+ CPU_CFLAGS-y += -msoft-float
+ endif
+ endif
+@@ -316,6 +317,7 @@ endif
+ endif
+ endif
+ endif
++endif
+ 
+ ifeq ($(TARGET_ARCH),aarch64)
+ CPU_CFLAGS-y += -ftls-model=initial-exec
+diff --git a/extra/Configs/Config.in b/extra/Configs/Config.in
+index a58ceb265..5e6af800d 100644
+--- a/extra/Configs/Config.in
++++ b/extra/Configs/Config.in
+@@ -39,6 +39,7 @@ choice
+ 	default TARGET_or1k if DESIRED_TARGET_ARCH = "or1k"
+ 	default TARGET_powerpc if DESIRED_TARGET_ARCH = "powerpc"
+ 	default TARGET_riscv64 if DESIRED_TARGET_ARCH = "riscv64"
++	default TARGET_riscv32 if DESIRED_TARGET_ARCH = "riscv32"
+ 	default TARGET_sh if DESIRED_TARGET_ARCH = "sh"
+ 	default TARGET_sparc if DESIRED_TARGET_ARCH = "sparc"
+ 	default TARGET_sparc64 if DESIRED_TARGET_ARCH = "sparc64"
+@@ -125,6 +126,9 @@ config TARGET_powerpc
+ config TARGET_riscv64
+ 	bool "riscv64"
+ 
++config TARGET_riscv32
++	bool "riscv32"
++
+ config TARGET_sh
+ 	bool "superh"
+ 
+@@ -240,6 +244,10 @@ if TARGET_riscv64
+ source "extra/Configs/Config.riscv64"
+ endif
+ 
++if TARGET_riscv32
++source "extra/Configs/Config.riscv32"
++endif
++
+ if TARGET_sh
+ source "extra/Configs/Config.sh"
+ endif
+@@ -538,6 +546,7 @@ config UCLIBC_HAS_LINUXTHREADS
+ 	select UCLIBC_HAS_REALTIME
+ 	depends on !TARGET_aarch64 && \
+ 		   !TARGET_riscv64 && \
++		   !TARGET_riscv32 && \
+ 		   !TARGET_metag
+ 	help
+ 	  If you want to compile uClibc with Linuxthreads support, then answer Y.
+diff --git a/extra/Configs/Config.riscv32 b/extra/Configs/Config.riscv32
+new file mode 100644
+index 000000000..304d30f70
+--- /dev/null
++++ b/extra/Configs/Config.riscv32
+@@ -0,0 +1,14 @@
++#
++# For a description of the syntax of this configuration file,
++# see extra/config/Kconfig-language.txt
++#
++
++config TARGET_ARCH
++	string
++	default "riscv32"
++
++config FORCE_OPTIONS_FOR_ARCH
++	bool
++	default y
++	select ARCH_LITTLE_ENDIAN
++	select ARCH_HAS_MMU
+diff --git a/libc/sysdeps/linux/riscv32 b/libc/sysdeps/linux/riscv32
+new file mode 120000
+index 000000000..11677ef05
+--- /dev/null
++++ b/libc/sysdeps/linux/riscv32
+@@ -0,0 +1 @@
++riscv64
+\ No newline at end of file
+diff --git a/libc/sysdeps/linux/riscv64/bits/wordsize.h b/libc/sysdeps/linux/riscv64/bits/wordsize.h
+index 67a16ba62..1fc649aad 100644
+--- a/libc/sysdeps/linux/riscv64/bits/wordsize.h
++++ b/libc/sysdeps/linux/riscv64/bits/wordsize.h
+@@ -25,5 +25,6 @@
+ #if __riscv_xlen == 64
+ # define __WORDSIZE_TIME64_COMPAT32 1
+ #else
+-# error "rv32i-based targets are not supported"
++# define __WORDSIZE_TIME64_COMPAT32 1
++// # warning "rv32i-based targets are experimental"
+ #endif
+diff --git a/libc/sysdeps/linux/riscv64/sys/asm.h b/libc/sysdeps/linux/riscv64/sys/asm.h
+index ddb84b683..3c94c9a70 100644
+--- a/libc/sysdeps/linux/riscv64/sys/asm.h
++++ b/libc/sysdeps/linux/riscv64/sys/asm.h
+@@ -26,7 +26,11 @@
+ # define REG_S sd
+ # define REG_L ld
+ #elif __riscv_xlen == 32
+-# error "rv32i-based targets are not supported"
++# define PTRLOG 2
++# define SZREG    4
++# define REG_S sw
++# define REG_L lw
++// # warning "rv32i-based targets are experimental"
+ #else
+ # error __riscv_xlen must equal 32 or 64
+ #endif
+-- 
+2.37.1
+
diff --git a/package/uclibc/Config.in b/package/uclibc/Config.in
index 2555487f06..a1e9305ca0 100644
--- a/package/uclibc/Config.in
+++ b/package/uclibc/Config.in
@@ -17,6 +17,7 @@  config BR2_PACKAGE_UCLIBC_ARCH_SUPPORTS
 	default y if BR2_powerpc
 	# see libc/sysdeps/linux/riscv64/sys/asm.h
 	default y if BR2_RISCV_64 && (BR2_RISCV_ABI_LP64 || BR2_RISCV_ABI_LP64D)
+	default y if BR2_RISCV_32
 	default y if BR2_sh4
 	default y if BR2_sh4eb
 	default y if BR2_sparc
@@ -138,6 +139,7 @@  config BR2_UCLIBC_TARGET_ARCH
 	default "i386"	   if BR2_i386
 	default "x86_64"   if BR2_x86_64
 	default "riscv64"  if BR2_RISCV_64
+	default "riscv32"  if BR2_RISCV_32
 
 config BR2_UCLIBC_MIPS_ABI
 	string