Porting OpenWRT to Milk-V Duo (CVITEK CV1800b), Problem met

Hello, I'm new to OpenWRT and is working on a RISC-V board Milk-V Duo with CVITEK CV1800B, the board can be found on https://milkv.io/duo .
kernel and boot.sd comes from https://github.com/milkv-duo/duo-buildroot-sdk/tree/develop/linux_5.10

working fork repository: https://github.com/luyanaa/openwrt/tree/cv1800b

Problem: can boot to the kernel, but directly goes into failsafe mode without any response, and dmesg reports no error except into failsafe mode.

log: https://paste.xinu.at/xufIxn/

You are not in failsafe, for this you need to press "f". That's the usual boot message telling you how to enter failsafe. And the messages already come from userspace, it's stuck somewhere in the init process.

I have tried to dig further.

The /etc/preinit script has exited with success (confirmed by logging at the end of it), and the non-preinit version of procd doesn't seem to be executed at all (confirmed by replacing it with a script to logging and exec the real binary)

It seems that when entering failsafe mode, the shell was launched within preinit phase (the last step of /etc/preinit, boot_run_hook preinit_main), so it never leaves the preinit phase. But during a regular boot, initd is supposed to launch procd afterwards (according to https://github.com/openwrt/procd/blob/master/initd/preinit.c, spawn_procd is supposed to be the callback of preinit_proc which should be a fork of initd itself?).

I'll try to contact OP for a kernel configured with init_debug=4 so that I could gain knowledge of what's happening inside of initd.