Skip to content

Program freeloader

Huaqi Fang edited this page Nov 24, 2023 · 13 revisions

There are several ways to program the generated freeloader by developer or artifacts downloaded from this SDK's github action for dev_nuclei_next or directly get from us.

About branch information, check https://github.com/Nuclei-Software/nuclei-linux-sdk/issues/2

  1. Program freeloader directly using make upload_freeloader in linux sdk, compiling freeloader is required.
  2. Program freeloader with the help of Nuclei SDK, no need to compile freeloader
  3. Program freeloader with the help of Nuclei Studio, no need to compile freeloader

For above method 2 and 3, you have downloaded artifacts bootimages_ux600_sd from latest action build.

1. Program freeloader using Nuclei Linux SDK

For this, just following guide in Nuclei Linux SDK, see https://github.com/Nuclei-Software/nuclei-linux-sdk#build-freeloader

2. Program freeloader using Nuclei SDK

There are three steps to program freeloader using Nuclei SDK

  • Step 1: Setup Nuclei SDK

Follow guide in quick start page for Nuclei SDK, see https://doc.nucleisys.com/nuclei_sdk/quickstart.html. You only need to follow the sections before "Hardware Preparation" section.

  • Step 2: Download freeloader

Downloaded artifacts bootimages_ux600_sd from latest action build. Then extract it and under the freeloader folder you will find freeloader.elf. We make the absolute path to freeloader.elf as /path/to/freeloader.elf.

  • Step 3: load freeloader.elf

Open command terminal in nuclei-sdk folder which you setup in step 1. Setup the environment as quick start page section "Build, Run and Debug Sample Application" write.

Connect the Nuclei DDR200T Development BOARD to your computer. Enter following command to start gdb.

make CORE=ux600 DOWNLOAD=flashxip BOARD=nuclei_fpga_eval SOC=demosoc debug

Then enter following command in GDB.

load /path/to/freeloader.elf

Part of the sample output is as follows.

Type "apropos word" to search for commands related to "word"...
Reading symbols from helloworld.elf...
Remote debugging using | openocd -c "gdb_port pipe; log_output openocd.log" -f ../../../SoC/demosoc/Board/nuclei_fpga_eval/openocd_demosoc.cfg
Nuclei OpenOCD, 64-bit Open On-Chip Debugger 0.10.0+dev-00036-gbfc178ffb (2021-02-01-06:41)
Licensed under GNU GPL v2
For bug reports, read
        http://openocd.org/doc/doxygen/bugs.html
0x00000000a0002106 in ?? ()
(gdb) monitor reset halt
(gdb) load D:/bootimages_ux600_sd/freeloader/freeloader.elf
Loading section .text, size 0x7d2b0 lma 0x20000000
Loading section .interp, size 0x20 lma 0x2007d2b0
Loading section .dynsym, size 0x18 lma 0x2007d2d0
Loading section .dynstr, size 0xb lma 0x2007d2e8
Loading section .hash, size 0x10 lma 0x2007d2f8
Loading section .gnu.hash, size 0x1c lma 0x2007d308
Loading section .dynamic, size 0x110 lma 0x2007d328
Loading section .got, size 0x8 lma 0x2007d438
Start address 0x20000000, load size 513079
Transfer rate: 23 KB/sec, 13155 bytes/write.
(gdb) monitor resume
(gdb) quit

Then enter q to quit GDB.

Sample output in UART @ 115200bps, Data 8bit, Parity None, Stop Bits 1bit, No Flow Control.

OpenSBI v0.9
   ____                    _____ ____ _____
  / __ \                  / ____|  _ \_   _|
 | |  | |_ __   ___ _ __ | (___ | |_) || |
 | |  | | '_ \ / _ \ '_ \ \___ \|  _ < | |
 | |__| | |_) |  __/ | | |____) | |_) || |_
  \____/| .__/ \___|_| |_|_____/|____/_____|
        | |
        |_|

Platform Name             : Nuclei Demo SoC
Platform Features         : timer,mfdeleg
Platform HART Count       : 1
Firmware Base             : 0xa0000000
Firmware Size             : 84 KB
Runtime SBI Version       : 0.2

Domain0 Name              : root
Domain0 Boot HART         : 0
Domain0 HARTs             : 0*
Domain0 Region00          : 0x00000000a0000000-0x00000000a001ffff ()
Domain0 Region01          : 0x0000000000000000-0xffffffffffffffff (R,W,X)
Domain0 Next Address      : 0x00000000a0400000
Domain0 Next Arg1         : 0x00000000a8000000
Domain0 Next Mode         : S-mode
Domain0 SysReset          : yes

Boot HART ID              : 0
Boot HART Domain          : root
Boot HART ISA             : rv64imafdcsu
Boot HART Features        : scounteren,mcounteren,time
Boot HART PMP Count       : 16
Boot HART PMP Granularity : 4096
Boot HART PMP Address Bits: 36
Boot HART MHPM Count      : 0
Boot HART MHPM Count      : 0
Boot HART MIDELEG         : 0x0000000000000222
Boot HART MEDELEG         : 0x000000000000b109


U-Boot 2021.01-00012-gccba5cffc5 (Mar 19 2021 - 10:33:37 +0800)

CPU:   rv64imac
Model: nuclei,demo-soc
DRAM:  256 MiB
Board: Initialized
MMC:   spi@10034000:mmc@0: 0
In:    console
Out:   console
Err:   console
Net:   No ethernet found.
Hit any key to stop autoboot:  0
switch to partitions #0, OK
mmc0 is current device
Scanning mmc 0:1...
Found U-Boot script /boot.scr
314 bytes read in 67 ms (3.9 KiB/s)
## Executing script at a8100000
Loading kernel
2431019 bytes read in 16997 ms (139.6 KiB/s)
Loading ramdisk
2975296 bytes read in 20729 ms (139.6 KiB/s)
Loading dtb
2760 bytes read in 86 ms (31.3 KiB/s)
Starts booting from SD
## Booting kernel from Legacy Image at a1000000 ...
   Image Name:   Linux
   Image Type:   RISC-V Linux Kernel Image (lz4 compressed)
   Data Size:    2430955 Bytes = 2.3 MiB
   Load Address: a0400000
   Entry Point:  a0400000
   Verifying Checksum ... OK
## Loading init Ramdisk from Legacy Image at a8300000 ...
   Image Name:   Initrd
   Image Type:   RISC-V Linux RAMDisk Image (lz4 compressed)
   Data Size:    2975232 Bytes = 2.8 MiB
   Load Address: 00000000
   Entry Point:  00000000
   Verifying Checksum ... OK
## Flattened Device Tree blob at a8000000
   Booting using the fdt blob at 0xa8000000
   Uncompressing Kernel Image
   Using Device Tree in place at 00000000a8000000, end 00000000a8003ac7

Starting kernel ...

[    0.000000] Linux version 5.10.0+ (xl_ci@softserver) (riscv-nuclei-linux-gnu-gcc (GCC) 9.2.0, GNU ld (GNU Binutils) 2.32) #1 Fri Mar 19 10:34:42 CST 2021
[    0.000000] OF: fdt: Ignoring memory range 0xa0000000 - 0xa0400000
[    0.000000] earlycon: sbi0 at I/O port 0x0 (options '')
[    0.000000] printk: bootconsole [sbi0] enabled
[    0.000000] efi: UEFI not found.
[    0.000000] Initial ramdisk at: 0x(____ptrval____) (2977792 bytes)
[    0.000000] Zone ranges:
[    0.000000]   DMA32    [mem 0x00000000a0400000-0x00000000afffffff]
[    0.000000]   Normal   empty
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x00000000a0400000-0x00000000afffffff]
[    0.000000] Initmem setup node 0 [mem 0x00000000a0400000-0x00000000afffffff]
[    0.000000] software IO TLB: mapped [mem 0x00000000abc89000-0x00000000afc89000] (64MB)
[    0.000000] SBI specification v0.2 detected
[    0.000000] SBI implementation ID=0x1 Version=0x9
[    0.000000] SBI v0.2 TIME extension detected
[    0.000000] SBI v0.2 IPI extension detected
[    0.000000] SBI v0.2 RFENCE extension detected
[    0.000000] riscv: ISA extensions acim
[    0.000000] riscv: ELF capabilities acim
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 63630
[    0.000000] Kernel command line: earlycon=sbi console=ttyNUC0
[    0.000000] Dentry cache hash table entries: 32768 (order: 6, 262144 bytes, linear)
[    0.000000] Inode-cache hash table entries: 16384 (order: 5, 131072 bytes, linear)
[    0.000000] Sorting __ex_table...
[    0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[    0.000000] Memory: 174076K/258048K available (2696K kernel code, 4044K rwdata, 2048K rodata, 128K init, 280K bss, 83972K reserved, 0K cma-reserved)
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[    0.000000] NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0
[    0.000000] riscv-intc: 64 local interrupts mapped
[    0.000000] plic: interrupt-controller@8000000: mapped 53 interrupts with 1 handlers for 2 contexts.
[    0.000000] random: get_random_bytes called from 0xffffffe000002910 with crng_init=0
[    0.000000] riscv_timer_init_dt: Registering clocksource cpuid [0] hartid [0]
[    0.000000] clocksource: riscv_clocksource: mask: 0xffffffffffffffff max_cycles: 0x1ef4687b1, max_idle_ns: 112843571739654 ns
[    0.000549] sched_clock: 64 bits at 32kHz, resolution 30517ns, wraps every 70368744171142ns
[    0.012512] Calibrating delay loop (skipped), value calculated using timer frequency.. 0.06 BogoMIPS (lpj=327)
[    0.024505] pid_max: default: 32768 minimum: 301
[    0.042907] Mount-cache hash table entries: 512 (order: 0, 4096 bytes, linear)
[    0.052398] Mountpoint-cache hash table entries: 512 (order: 0, 4096 bytes, linear)
[    0.156005] EFI services will not be available.
[    0.177459] devtmpfs: initialized
[    0.282592] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[    0.294403] futex hash table entries: 256 (order: 0, 6144 bytes, linear)
[    0.306640] pinctrl core: initialized pinctrl subsystem
[    0.335601] NET: Registered protocol family 16
[    1.011871] clocksource: Switched to clocksource riscv_clocksource
[    1.104187] NET: Registered protocol family 2
[    1.156402] tcp_listen_portaddr_hash hash table entries: 256 (order: 0, 4096 bytes, linear)
[    1.167785] TCP established hash table entries: 2048 (order: 2, 16384 bytes, linear)
[    1.180389] TCP bind hash table entries: 2048 (order: 2, 16384 bytes, linear)
[    1.193115] TCP: Hash tables configured (established 2048 bind 2048)
[    1.213287] UDP hash table entries: 256 (order: 1, 8192 bytes, linear)
[    1.223144] UDP-Lite hash table entries: 256 (order: 1, 8192 bytes, linear)
[    1.243774] NET: Registered protocol family 1
[    1.292449] RPC: Registered named UNIX socket transport module.
[    1.298797] RPC: Registered udp transport module.
[    1.304748] RPC: Registered tcp transport module.
[    1.309814] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    1.335418] Trying to unpack rootfs image as initramfs...
[   14.888092] Freeing initrd memory: 2900K
[   14.930847] workingset: timestamp_bits=62 max_order=16 bucket_order=0
[   15.429321] io scheduler mq-deadline registered
[   15.435272] io scheduler kyber registered
[   19.279907] 10013000.serial: ttyNUC0 at MMIO 0x10013000 (irq = 1, base_baud = 0) is a Nuclei UART/USART
[   19.291564] printk: console [ttyNUC0] enabled
[   19.291564] printk: console [ttyNUC0] enabled
[   19.301544] printk: bootconsole [sbi0] disabled
[   19.301544] printk: bootconsole [sbi0] disabled
[   19.339843] 10023000.serial: ttyNUC1 at MMIO 0x10023000 (irq = 2, base_baud = 0) is a Nuclei UART/USART
[   20.226654] brd: module loaded
[   20.825378] loop: module loaded
[   20.849182] nuclei_spi 10014000.spi: mapped; irq=3, cs=1
[   20.905487] nuclei_spi 10034000.spi: mapped; irq=4, cs=1
[   21.026824] mmc_spi spi1.0: SD/MMC host mmc0, no DMA, no WP, no poweroff, cd polling
[   21.066528] NET: Registered protocol family 17
[   21.144989] Freeing unused kernel memory: 128K
[   21.159332] Run /init as init process
[   21.414581] mmc0: host does not support reading read-only switch, assuming write-enable
[   21.424438] mmc0: new SDHC card on SPI
[   21.556915] mmcblk0: mmc0:0000 SA08G 7.21 GiB
[   21.858367]  mmcblk0: p1
Starting syslogd: OK
Starting klogd: OK
Running sysctl: OK
Starting mdev... OK
modprobe: can't change directory to '/lib/modules': No such file or directory
Saving random seed: [   93.607543] random: dd: uninitialized urandom read (512 bytes read)
OK

Welcome to Nuclei System Techology
nucleisys login: root
Password:
#
# cat /proc/cpuinfo
processor       : 0
hart            : 0
isa             : rv64imac
mmu             : sv39

# uname -a
Linux nucleisys 5.10.0+ #1 Fri Mar 19 10:34:42 CST 2021 riscv64 GNU/Linux
# ls /[ 1154.794952] random: fast init done

bin      init     linuxrc  opt      run      tmp
dev      lib      media    proc     sbin     usr
etc      lib64    mnt      root     sys      var

3. Program freeloader using Nuclei Studio

There are three steps to program freeloader using Nuclei Studio.

  • Step 1: Download Nuclei Studio and freeloader

Download Nuclei Studio from Download page of Nuclei Technology website based on your OS. Extract and simply run NucleiStudio.exe in windows or NucleiStudio in Linux.

Downloaded artifacts from github action. Then extract it and under the freeloader folder you will find freeloader.elf.

  • Step 2: Setup Project

To create a new project, select File -> New -> C/C++ Project in menu bar to open setup window.

Select C Managed Build in the window.

Then enter the Project name and select Nuclei SDK Project For Nuclei demosoc SoC as following picture.

image-20210527111938840

In next window, change Board to nuclei_fpga_eval, Core to Ux600 (ARCH=rv64imac,ABI=lp64) and DOWNLOAD to FLASHXIP.

image-20210527112426405

The following pages select Next until finish.

Right click project and select Run As -> Run Configurations.

In opening window, select GDB OpenOCD Debugging -> Freeloader_debug_openocd. Then click Browse and select freeloader.elf which you download before.

image-20210527114334648

Click Apply to save configuration.

  • Step 3: load freeloader

Connect the Nuclei DDR200T Development BOARD to your computer. Select Freeloader_debug_openocd and Run at Tool Bar. Click play button to load freeloader to board as following picture.

image-20210527115412436

The part of sample output in console is as following picture.

image-20210527115621219

Sample output in UART @ 115200bps, Data 8bit, Parity None, Stop Bits 1bit, No Flow Control.

OpenSBI v0.9
   ____                    _____ ____ _____
  / __ \                  / ____|  _ \_   _|
 | |  | |_ __   ___ _ __ | (___ | |_) || |
 | |  | | '_ \ / _ \ '_ \ \___ \|  _ < | |
 | |__| | |_) |  __/ | | |____) | |_) || |_
  \____/| .__/ \___|_| |_|_____/|____/_____|
        | |
        |_|

Platform Name             : Nuclei Demo SoC
Platform Features         : timer,mfdeleg
Platform HART Count       : 1
Firmware Base             : 0xa0000000
Firmware Size             : 84 KB
Runtime SBI Version       : 0.2

Domain0 Name              : root
Domain0 Boot HART         : 0
Domain0 HARTs             : 0*
Domain0 Region00          : 0x00000000a0000000-0x00000000a001ffff ()
Domain0 Region01          : 0x0000000000000000-0xffffffffffffffff (R,W,X)
Domain0 Next Address      : 0x00000000a0400000
Domain0 Next Arg1         : 0x00000000a8000000
Domain0 Next Mode         : S-mode
Domain0 SysReset          : yes

Boot HART ID              : 0
Boot HART Domain          : root
Boot HART ISA             : rv64imafdcsu
Boot HART Features        : scounteren,mcounteren,time
Boot HART PMP Count       : 16
Boot HART PMP Granularity : 4096
Boot HART PMP Address Bits: 36
Boot HART MHPM Count      : 0
Boot HART MHPM Count      : 0
Boot HART MIDELEG         : 0x0000000000000222
Boot HART MEDELEG         : 0x000000000000b109


U-Boot 2021.01-00012-gccba5cffc5 (Mar 19 2021 - 10:33:37 +0800)

CPU:   rv64imac
Model: nuclei,demo-soc
DRAM:  256 MiB
Board: Initialized
MMC:   spi@10034000:mmc@0: 0
In:    console
Out:   console
Err:   console
Net:   No ethernet found.
Hit any key to stop autoboot:  0
switch to partitions #0, OK
mmc0 is current device
Scanning mmc 0:1...
Found U-Boot script /boot.scr
314 bytes read in 67 ms (3.9 KiB/s)
## Executing script at a8100000
Loading kernel
2431019 bytes read in 16997 ms (139.6 KiB/s)
Loading ramdisk
2975296 bytes read in 20729 ms (139.6 KiB/s)
Loading dtb
2760 bytes read in 86 ms (31.3 KiB/s)
Starts booting from SD
## Booting kernel from Legacy Image at a1000000 ...
   Image Name:   Linux
   Image Type:   RISC-V Linux Kernel Image (lz4 compressed)
   Data Size:    2430955 Bytes = 2.3 MiB
   Load Address: a0400000
   Entry Point:  a0400000
   Verifying Checksum ... OK
## Loading init Ramdisk from Legacy Image at a8300000 ...
   Image Name:   Initrd
   Image Type:   RISC-V Linux RAMDisk Image (lz4 compressed)
   Data Size:    2975232 Bytes = 2.8 MiB
   Load Address: 00000000
   Entry Point:  00000000
   Verifying Checksum ... OK
## Flattened Device Tree blob at a8000000
   Booting using the fdt blob at 0xa8000000
   Uncompressing Kernel Image
   Using Device Tree in place at 00000000a8000000, end 00000000a8003ac7

Starting kernel ...

[    0.000000] Linux version 5.10.0+ (xl_ci@softserver) (riscv-nuclei-linux-gnu-gcc (GCC) 9.2.0, GNU ld (GNU Binutils) 2.32) #1 Fri Mar 19 10:34:42 CST 2021
[    0.000000] OF: fdt: Ignoring memory range 0xa0000000 - 0xa0400000
[    0.000000] earlycon: sbi0 at I/O port 0x0 (options '')
[    0.000000] printk: bootconsole [sbi0] enabled
[    0.000000] efi: UEFI not found.
[    0.000000] Initial ramdisk at: 0x(____ptrval____) (2977792 bytes)
[    0.000000] Zone ranges:
[    0.000000]   DMA32    [mem 0x00000000a0400000-0x00000000afffffff]
[    0.000000]   Normal   empty
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x00000000a0400000-0x00000000afffffff]
[    0.000000] Initmem setup node 0 [mem 0x00000000a0400000-0x00000000afffffff]
[    0.000000] software IO TLB: mapped [mem 0x00000000abc89000-0x00000000afc89000] (64MB)
[    0.000000] SBI specification v0.2 detected
[    0.000000] SBI implementation ID=0x1 Version=0x9
[    0.000000] SBI v0.2 TIME extension detected
[    0.000000] SBI v0.2 IPI extension detected
[    0.000000] SBI v0.2 RFENCE extension detected
[    0.000000] riscv: ISA extensions acim
[    0.000000] riscv: ELF capabilities acim
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 63630
[    0.000000] Kernel command line: earlycon=sbi console=ttyNUC0
[    0.000000] Dentry cache hash table entries: 32768 (order: 6, 262144 bytes, linear)
[    0.000000] Inode-cache hash table entries: 16384 (order: 5, 131072 bytes, linear)
[    0.000000] Sorting __ex_table...
[    0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[    0.000000] Memory: 174076K/258048K available (2696K kernel code, 4044K rwdata, 2048K rodata, 128K init, 280K bss, 83972K reserved, 0K cma-reserved)
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[    0.000000] NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0
[    0.000000] riscv-intc: 64 local interrupts mapped
[    0.000000] plic: interrupt-controller@8000000: mapped 53 interrupts with 1 handlers for 2 contexts.
[    0.000000] random: get_random_bytes called from 0xffffffe000002910 with crng_init=0
[    0.000000] riscv_timer_init_dt: Registering clocksource cpuid [0] hartid [0]
[    0.000000] clocksource: riscv_clocksource: mask: 0xffffffffffffffff max_cycles: 0x1ef4687b1, max_idle_ns: 112843571739654 ns
[    0.000549] sched_clock: 64 bits at 32kHz, resolution 30517ns, wraps every 70368744171142ns
[    0.012512] Calibrating delay loop (skipped), value calculated using timer frequency.. 0.06 BogoMIPS (lpj=327)
[    0.024505] pid_max: default: 32768 minimum: 301
[    0.042907] Mount-cache hash table entries: 512 (order: 0, 4096 bytes, linear)
[    0.052398] Mountpoint-cache hash table entries: 512 (order: 0, 4096 bytes, linear)
[    0.156005] EFI services will not be available.
[    0.177459] devtmpfs: initialized
[    0.282592] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[    0.294403] futex hash table entries: 256 (order: 0, 6144 bytes, linear)
[    0.306640] pinctrl core: initialized pinctrl subsystem
[    0.335601] NET: Registered protocol family 16
[    1.011871] clocksource: Switched to clocksource riscv_clocksource
[    1.104187] NET: Registered protocol family 2
[    1.156402] tcp_listen_portaddr_hash hash table entries: 256 (order: 0, 4096 bytes, linear)
[    1.167785] TCP established hash table entries: 2048 (order: 2, 16384 bytes, linear)
[    1.180389] TCP bind hash table entries: 2048 (order: 2, 16384 bytes, linear)
[    1.193115] TCP: Hash tables configured (established 2048 bind 2048)
[    1.213287] UDP hash table entries: 256 (order: 1, 8192 bytes, linear)
[    1.223144] UDP-Lite hash table entries: 256 (order: 1, 8192 bytes, linear)
[    1.243774] NET: Registered protocol family 1
[    1.292449] RPC: Registered named UNIX socket transport module.
[    1.298797] RPC: Registered udp transport module.
[    1.304748] RPC: Registered tcp transport module.
[    1.309814] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    1.335418] Trying to unpack rootfs image as initramfs...
[   14.888092] Freeing initrd memory: 2900K
[   14.930847] workingset: timestamp_bits=62 max_order=16 bucket_order=0
[   15.429321] io scheduler mq-deadline registered
[   15.435272] io scheduler kyber registered
[   19.279907] 10013000.serial: ttyNUC0 at MMIO 0x10013000 (irq = 1, base_baud = 0) is a Nuclei UART/USART
[   19.291564] printk: console [ttyNUC0] enabled
[   19.291564] printk: console [ttyNUC0] enabled
[   19.301544] printk: bootconsole [sbi0] disabled
[   19.301544] printk: bootconsole [sbi0] disabled
[   19.339843] 10023000.serial: ttyNUC1 at MMIO 0x10023000 (irq = 2, base_baud = 0) is a Nuclei UART/USART
[   20.226654] brd: module loaded
[   20.825378] loop: module loaded
[   20.849182] nuclei_spi 10014000.spi: mapped; irq=3, cs=1
[   20.905487] nuclei_spi 10034000.spi: mapped; irq=4, cs=1
[   21.026824] mmc_spi spi1.0: SD/MMC host mmc0, no DMA, no WP, no poweroff, cd polling
[   21.066528] NET: Registered protocol family 17
[   21.144989] Freeing unused kernel memory: 128K
[   21.159332] Run /init as init process
[   21.414581] mmc0: host does not support reading read-only switch, assuming write-enable
[   21.424438] mmc0: new SDHC card on SPI
[   21.556915] mmcblk0: mmc0:0000 SA08G 7.21 GiB
[   21.858367]  mmcblk0: p1
Starting syslogd: OK
Starting klogd: OK
Running sysctl: OK
Starting mdev... OK
modprobe: can't change directory to '/lib/modules': No such file or directory
Saving random seed: [   93.607543] random: dd: uninitialized urandom read (512 bytes read)
OK

Welcome to Nuclei System Techology
nucleisys login: root
Password:
#
# cat /proc/cpuinfo
processor       : 0
hart            : 0
isa             : rv64imac
mmu             : sv39

# uname -a
Linux nucleisys 5.10.0+ #1 Fri Mar 19 10:34:42 CST 2021 riscv64 GNU/Linux
# ls /[ 1154.794952] random: fast init done

bin      init     linuxrc  opt      run      tmp
dev      lib      media    proc     sbin     usr
etc      lib64    mnt      root     sys      var