diff --git a/articles/20221228-riscv-buildroot-nezha.md b/articles/20221228-riscv-buildroot-nezha.md
new file mode 100644
index 0000000000000000000000000000000000000000..c8ad418ba4ef589a50b1f35b927ac170241b76e1
--- /dev/null
+++ b/articles/20221228-riscv-buildroot-nezha.md
@@ -0,0 +1,642 @@
+> Corrector: [TinyCorrect](https://gitee.com/tinylab/tinycorrect) v0.1 - [toc pangu]
+
+> Author: Kepontry
+> Date: 2022/12/28
+> Revisor: Falcon
+> Project: [RISC-V Linux 内核剖析](https://gitee.com/tinylab/riscv-linux)
+> Proposal: [VisionFive 2 开发板软硬件调研](https://gitee.com/tinylab/riscv-linux/issues/I64ESM)
+> Sponsor: PLCT Lab, ISCAS
+
+# 使用 buildroot 构建哪吒开发板的系统镜像
+
+## 简介
+
+[buildroot][001] 是一种简单、高效、易用的嵌入式 Linux 系统生成工具。利用交叉编译工具链,它能够完成 root fs 生成,内核镜像编译和 bootloader 的编译。像内核编译一样,它也支持 menuconfig, gconfig 和 xconfig 等配置方式。buildroot 支持数千个软件包,通常花费 15-30 分钟即可完成构建。
+
+## 环境搭建
+
+### 使用 Docker 启动 Ubuntu 20.04
+
+Docker 是一种轻量级的容器,能够简化配置,统一环境。执行如下命令可以非常快速的配置好 Ubuntu 20.04 环境。
+
+```shell
+# 拉取 ubuntu20.04 镜像
+sudo docker pull ubuntu:20.04
+# 启动镜像,通过指定-d 参数,使容器在后台运行
+sudo docker run -itd --name ubuntu-2004 ubuntu:20.04 /bin/bash
+# 进入容器
+sudo docker exec -it ubuntu-2004 /bin/bash
+```
+
+### 更换系统镜像源
+
+Ubuntu 自带的镜像源对国内用户不太友好,软件包下载速度慢。我们这里换成阿里云的源,执行下面的命令,写入新的镜像源。最后执行 apt-get update 命令,获取最新软件包列表。
+
+```shell
+echo "deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
+deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
+
+deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
+deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
+
+deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
+deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
+
+deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
+deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
+
+deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
+deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse">/etc/apt/sources.list
+```
+
+### 必要软件安装
+
+接下来安装一些必要的软件包,例如版本控制软件 git,编译工具库 build-essential。由于 buildroot 的 Makefile 中有依赖检查功能,剩下的软件包只需要根据 make 命令的报错信息补充即可。
+
+```shell
+# 软件包安装
+apt-get install git build-essential tree file wget cpio unzip rsync bc
+```
+
+### 获取 buildroot 源码
+
+随后使用 git 命令从 [官方仓库][002] 克隆最新版本的源码,指定--depth=1 可以避免下载历史提交记录,从而减小下载体积。如果开发板型号不是最新的可以下载 buildroot 的稳定版本。
+
+```shell
+# 源码获取
+git clone git://git.buildroot.net/buildroot --depth=1
+```
+
+### buildroot 目录结构介绍
+
+buildroot 的目录结构如下所示,make 命令后面跟着的配置文件就存放在 configs 目录下。此外,编译完成后会多出两个目录:dl 和 output 目录。dl 目录用于存放构建过程中下载的软件源码压缩包,供后续使用。output 目录存放构建出的镜像文件和构建过程中产生的中间文件。
+
+```shell
+root@670d3896bb83:/home/buildroot# tree -L 1
+.
+|-- CHANGES
+|-- COPYING
+|-- Config.in
+|-- Config.in.legacy
+|-- DEVELOPERS
+|-- Makefile # 构建脚本
+|-- Makefile.legacy
+|-- README
+|-- arch # 架构相关的配置脚本,如 arm/mips/x86/riscv
+|-- board # 存放各开发板的一些配置补丁
+|-- boot # 各类启动软件
+|-- configs # 各类开发板的配置文件
+|-- docs # 参考文档
+|-- fs # 各类文件系统源码
+|-- linux # linux kernel 的自动构建脚本
+|-- package # 存放各软件包的配置文件和构建脚本
+|-- support # 构件中可能用到的支持软件
+|-- system # 根目录的配置和构建脚本,skeleton 目录下存放根目录的骨架
+|-- toolchain # 存放构建工具链的脚本
+|-- utils # 一些工具软件
+```
+
+## 构建基于 QEMU 的 RISCV64 虚拟环境
+
+QEMU 是一种高性能仿真器,利用动态代码翻译机制,可以模拟任意一种指令集的硬件,并在上面执行软件程序。接下来我们构建 QEMU-RISCV64 上的系统镜像,并用 QEMU 启动它。
+
+### config 配置文件生成
+
+使用 make qemu_riscv64_virt_defconfig 命令,在当前目录下生成.config 文件,文件中包括系统镜像编译的配置参数。这和使用 make menuconfig 命令,在图形界面中配置并保存的.config 文件的作用是相同的。系统镜像的构建都是直接使用开发板厂商预先写好的配置选项文件,并不需要手动配置。
+
+```shell
+root@670d3896bb83:/home/buildroot# make qemu_riscv64_virt_defconfig
+
+mkdir -p /home/buildroot/output/build/buildroot-config/lxdialog
+PKG_CONFIG_PATH="" make CC="/usr/bin/gcc" HOSTCC="/usr/bin/gcc" \
+ obj=/home/buildroot/output/build/buildroot-config -C support/kconfig -f Makefile.br conf
+make[1]: Entering directory '/home/buildroot/support/kconfig'
+/usr/bin/gcc -DCURSES_LOC="" -DLOCALE -I/home/buildroot/output/build/buildroot-config -DCONFIG_=\"\" -MM *.c > /home/buildroot/output/build/buildroot-config/.depend 2>/dev/null || :
+/usr/bin/gcc -DCURSES_LOC="" -DLOCALE -I/home/buildroot/output/build/buildroot-config -DCONFIG_=\"\" -c conf.c -o /home/buildroot/output/build/buildroot-config/conf.o
+/usr/bin/gcc -DCURSES_LOC="" -DLOCALE -I/home/buildroot/output/build/buildroot-config -DCONFIG_=\"\" -I. -c /home/buildroot/output/build/buildroot-config/zconf.tab.c -o /home/buildroot/output/build/buildroot-config/zconf.tab.o
+/usr/bin/gcc -DCURSES_LOC="" -DLOCALE -I/home/buildroot/output/build/buildroot-config -DCONFIG_=\"\" /home/buildroot/output/build/buildroot-config/conf.o /home/buildroot/output/build/buildroot-config/zconf.tab.o -o /home/buildroot/output/build/buildroot-config/conf
+rm /home/buildroot/output/build/buildroot-config/zconf.tab.c
+make[1]: Leaving directory '/home/buildroot/support/kconfig'
+#
+# configuration written to /home/buildroot/.config
+#
+```
+
+### 多核镜像编译
+
+执行 make -j20 命令,使用 20 个核进行编译。由于是初次编译,需要下载较多的软件包,大概经过一个小时完成。
+
+```shell
+root@670d3896bb83:/home/buildroot# make -j20
+...
+>>> Generating filesystem image rootfs.tar
+mkdir -p /home/buildroot/output/images
+rm -rf /home/buildroot/output/build/buildroot-fs/tar
+mkdir -p /home/buildroot/output/build/buildroot-fs/tar
+rsync -auH --exclude=/THIS_IS_NOT_YOUR_ROOT_FILESYSTEM /home/buildroot/output/target/ /home/buildroot/output/build/buildroot-fs/tar/target
+echo '#!/bin/sh' > /home/buildroot/output/build/buildroot-fs/tar/fakeroot
+... # 省略 fakeroot 文件的写入过程
+chmod a+x /home/buildroot/output/build/buildroot-fs/tar/fakeroot
+PATH="/home/buildroot/output/host/bin:/home/buildroot/output/host/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" FAKEROOTDONTTRYCHOWN=1 /home/buildroot/output/host/bin/fakeroot -- /home/buildroot/output/build/buildroot-fs/tar/fakeroot
+rootdir=/home/buildroot/output/build/buildroot-fs/tar/target
+table='/home/buildroot/output/build/buildroot-fs/full_devices_table.txt'
+ln -snf /home/buildroot/output/host/riscv64-buildroot-linux-gnu/sysroot /home/buildroot/output/staging
+>>> Executing post-image script board/qemu/post-image.sh
+
+root@670d3896bb83:/home/buildroot# ls output/images/
+Image fw_dynamic.bin fw_dynamic.elf fw_jump.bin fw_jump.elf rootfs.ext2 rootfs.tar start-qemu.sh
+```
+
+### QEMU 启动编译的内核镜像和文件系统
+
+接下来通过执行 output/images/start-qemu.sh 脚本文件,使用 QEMU 启动一个 riscv64 的虚拟环境。查看 start-qemu.sh 的内容,该脚本使用构建的 fw_jump.elf 文件作为 bios 参数,Image 文件作为内核参数,rootfs.ext2 作为文件系统参数启动 QEMU。
+
+```shell
+root@670d3896bb83:/home/buildroot# cat output/images/start-qemu.sh
+#!/bin/sh
+(
+BINARIES_DIR="${0%/*}/"
+cd ${BINARIES_DIR}
+
+if [ "${1}" = "serial-only" ]; then
+ EXTRA_ARGS='-nographic'
+else
+ EXTRA_ARGS=''
+fi
+
+export PATH="/home/buildroot/output/host/bin:${PATH}"
+exec qemu-system-riscv64 -M virt -bios fw_jump.elf -kernel Image -append "rootwait root=/dev/vda ro" -drive file=rootfs.ext2,format=raw,id=hd0 -device virtio-blk-device,drive=hd0 -netdev user,id=net0 -device virtio-net-device,netdev=net0 -nographic ${EXTRA_ARGS}
+)
+
+```
+
+QEMU 成功启动内核,使用 uname -a 命令查看处理器以及操作系统的相关信息。
+
+```shell
+root@670d3896bb83:/home/buildroot# ./output/images/start-qemu.sh
+
+OpenSBI v0.9
+ ____ _____ ____ _____
+ / __ \ / ____| _ \_ _|
+ | | | |_ __ ___ _ __ | (___ | |_) || |
+ | | | | '_ \ / _ \ '_ \ \___ \| _ < | |
+ | |__| | |_) | __/ | | |____) | |_) || |_
+ \____/| .__/ \___|_| |_|_____/|____/_____|
+ | |
+ |_|
+
+Platform Name : riscv-virtio,qemu
+Platform Features : timer,mfdeleg
+Platform HART Count : 1
+Firmware Base : 0x80000000
+Firmware Size : 124 KB
+Runtime SBI Version : 0.2
+
+...
+
+Welcome to Buildroot
+buildroot login: root
+# uname -a
+Linux buildroot 5.15.43 #1 SMP Tue Dec 27 15:19:22 UTC 2022 riscv64 GNU/Linux
+# ls /
+bin lib lost+found opt run tmp
+dev lib64 media proc sbin usr
+etc linuxrc mnt root sys var
+#
+```
+
+## 构建哪吒开发板的系统镜像
+
+最后我们使用 buildroot 构建哪吒开发板的系统镜像,并上板测试。
+
+### config 配置文件生成及编译
+
+按照与之前一样的流程生成配置文件并编译,将 output/images 目录下的 sdcard.img 镜像拷贝至宿主机中。
+
+```shell
+# 生成.config 配置文件
+root@670d3896bb83:/home/buildroot# make nezha_defconfig
+#
+# configuration written to /home/buildroot/.config
+#
+# 编译
+root@670d3896bb83:/home/buildroot# make -j20
+# 宿主机中执行,将 sdcard.img 拷贝到宿主机中
+sudo docker cp ubuntu-2004:/home/buildroot/output/images/sdcard.img ./
+```
+
+### 镜像烧写及上板测试
+
+1. 把 SD 卡插入读卡器,并将读卡器连接至电脑 USB 口,使用 dd 命令烧写 sdcard.img 文件到 SD 卡
+
+2. 烧写结果如下:
+
+ ```shell
+ $ time sudo dd if=sdcard.img of=/dev/sda bs=2M
+ 39+0 records in
+ 39+0 records out
+ 81788928 bytes (82 MB, 78 MiB) copied, 10.4105 s, 7.9 MB/s
+
+ real 0m10.436s
+ user 0m0.009s
+ sys 0m0.013s
+ ```
+
+3. 把烧写好的 SD 卡拔出,插入哪吒开发板的 SD 卡槽,上电启动哪吒开发板
+4. buildroot 详细启动信息如下:
+
+```shell
+[227]HELLO! BOOT0 is starting!
+[230]BOOT0 commit : 40bd4a32aa
+[233]set pll start
+[235]periph0 has been enabled
+[238]set pll end
+[239]board init ok
+[241]DRAM only have internal ZQ!!
+[244]get_pmu_exist() = -1
+[247]ddr_efuse_type: 0x0
+[250][AUTO DEBUG] two rank and full DQ!
+[253]ddr_efuse_type: 0x0
+[256][AUTO DEBUG] rank 0 row = 15
+[259][AUTO DEBUG] rank 0 bank = 8
+[263][AUTO DEBUG] rank 0 page size = 2 KB
+[266][AUTO DEBUG] rank 1 row = 15
+[269][AUTO DEBUG] rank 1 bank = 8
+[273][AUTO DEBUG] rank 1 page size = 2 KB
+[276]rank1 config same as rank0
+[279]DRAM BOOT DRIVE INFO: V0.24
+[282]DRAM CLK = 792 MHz
+[285]DRAM Type = 3 (2:DDR2,3:DDR3)
+[288]DRAMC ZQ value: 0x7b7bfb
+[291]DRAM ODT value: 0x42.
+[293]ddr_efuse_type: 0x0
+[296]DRAM SIZE =1024 M
+[300]DRAM simple test OK.
+[302]dram size =1024
+[304]card no is 0
+[306]sdcard 0 line count 4
+[308][mmc]: mmc driver ver 2021-04-2 16:45
+[317][mmc]: Wrong media type 0x0
+[320][mmc]: ***Try SD card 0***
+[329][mmc]: HSSDR52/SDR25 4 bit
+[332][mmc]: 50000000 Hz
+[334][mmc]: 29818 MB
+[336][mmc]: ***SD/MMC 0 init OK!!!***
+[387]Loading boot-pkg Succeed(index=0).
+[390]Entry_name = opensbi
+[393]Entry_name = dtb
+[396]Entry_name = u-boot
+[400]Adding DRAM info to DTB.
+[405]Jump to second Boot.
+
+OpenSBI v1.1
+ ____ _____ ____ _____
+ / __ \ / ____| _ \_ _|
+ | | | |_ __ ___ _ __ | (___ | |_) || |
+ | | | | '_ \ / _ \ '_ \ \___ \| _ < | |
+ | |__| | |_) | __/ | | |____) | |_) || |_
+ \____/| .__/ \___|_| |_|_____/|____/_____|
+ | |
+ |_|
+
+Platform Name : Allwinner D1 Nezha
+Platform Features : medeleg
+Platform HART Count : 1
+Platform IPI Device : ---
+Platform Timer Device : --- @ 0Hz
+Platform Console Device : uart8250
+Platform HSM Device : sun20i-d1-ppu
+Platform Reboot Device : sunxi-wdt-reset
+Platform Shutdown Device : ---
+Firmware Base : 0x40000000
+Firmware Size : 240 KB
+Runtime SBI Version : 1.0
+
+Domain0 Name : root
+Domain0 Boot HART : 0
+Domain0 HARTs : 0*
+Domain0 Region00 : 0x0000000040000000-0x000000004003ffff ()
+Domain0 Region01 : 0x0000000000000000-0xffffffffffffffff (R,W,X)
+Domain0 Next Address : 0x000000004a000000
+Domain0 Next Arg1 : 0x0000000044000000
+Domain0 Next Mode : S-mode
+Domain0 SysReset : yes
+
+Boot HART ID : 0
+Boot HART Domain : root
+Boot HART Priv Version : v1.11
+Boot HART Base ISA : rv64imafdcvx
+Boot HART ISA Extensions : time
+Boot HART PMP Count : 8
+Boot HART PMP Granularity : 2048
+Boot HART PMP Address Bits: 38
+Boot HART MHPM Count : 0
+Boot HART MIDELEG : 0x0000000000000222
+Boot HART MEDELEG : 0x000000000000b109
+
+U-Boot 2022.07-rc3 (Dec 27 2022 - 23:25:44 +0800)
+
+CPU: rv64imafdc
+Model: Allwinner D1 Nezha
+DRAM: 1 GiB
+sunxi_set_gate: (CLK#24) unhandled
+Core: 66 devices, 24 uclasses, devicetree: board
+WDT: Started watchdog@6011000 with servicing (16s timeout)
+MMC: mmc@4020000: 0, mmc@4021000: 1
+Loading Environment from nowhere... OK
+In: serial@2500000
+Out: serial@2500000
+Err: serial@2500000
+Net:
+Warning: ethernet@4500000 (eth0) using random MAC address - 06:58:7d:c3:58:d6
+eth0: ethernet@4500000
+Hit any key to stop autoboot: 0
+switch to partitions #0, OK
+mmc0 is current device
+Scanning mmc 0:1...
+Found /boot/extlinux/extlinux.conf
+Retrieving file: /boot/extlinux/extlinux.conf
+1: linux
+Retrieving file: /boot/Image
+append: console=ttyS0,115200 root=/dev/mmcblk0p1 ro rootwait
+Moving Image from 0x40040000 to 0x40200000, end=415e7c98
+## Flattened Device Tree blob at 7fb14730
+ Booting using the fdt blob at 0x7fb14730
+ Loading Device Tree to 0000000042df5000, end 0000000042dff68f ... OK
+
+Starting kernel ...
+
+[ 0.000000] Linux version 5.19.0-rc1 (root@603c9b6a45b4) (riscv64-buildroot-linux-gnu-gcc.br_real (Buildroot 2022.11) 11.3.0, GNU ld (GNU Binutils) 2.38) #1 PREEMPT Tue Dec 27 23:26:20 CST 2022
+[ 0.000000] OF: fdt: Ignoring memory range 0x40000000 - 0x40200000
+[ 0.000000] Machine model: Allwinner D1 Nezha
+[ 0.000000] Zone ranges:
+[ 0.000000] DMA32 [mem 0x0000000040200000-0x000000007fffffff]
+[ 0.000000] Normal empty
+[ 0.000000] Movable zone start for each node
+[ 0.000000] Early memory node ranges
+[ 0.000000] node 0: [mem 0x0000000040200000-0x000000007fffffff]
+[ 0.000000] Initmem setup node 0 [mem 0x0000000040200000-0x000000007fffffff]
+[ 0.000000] riscv: SBI specification v1.0 detected
+[ 0.000000] riscv: SBI implementation ID=0x1 Version=0x10001
+[ 0.000000] riscv: SBI TIME extension detected
+[ 0.000000] riscv: SBI IPI extension detected
+[ 0.000000] riscv: SBI RFENCE extension detected
+[ 0.000000] riscv: SBI SRST extension detected
+[ 0.000000] riscv: base ISA extensions acdfim
+[ 0.000000] riscv: ELF capabilities acdfim
+[ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 257544
+[ 0.000000] Kernel command line: console=ttyS0,115200 root=/dev/mmcblk0p1 ro rootwait
+[ 0.000000] Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes, linear)
+[ 0.000000] Inode-cache hash table entries: 65536 (order: 7, 524288 bytes, linear)
+[ 0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
+[ 0.000000] Memory: 1007888K/1046528K available (6885K kernel code, 5580K rwdata, 4096K rodata, 2191K init, 319K bss, 38640K reserved, 0K cma-reserved)
+[ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
+[ 0.000000] trace event string verifier disabled
+[ 0.000000] rcu: Preemptible hierarchical RCU implementation.
+[ 0.000000] Trampoline variant of Tasks RCU enabled.
+[ 0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.
+[ 0.000000] NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0
+[ 0.000000] OF: of_irq_init: found /cpus/cpu@0/interrupt-controller with parent (null)
+[ 0.000000] OF: of_irq_init: found /soc/interrupt-controller@6010000 with parent /soc/interrupt-controller@10000000
+[ 0.000000] OF: of_irq_init: found /soc/interrupt-controller@10000000 with parent /cpus/cpu@0/interrupt-controller
+[ 0.000000] OF: of_irq_init: init /cpus/cpu@0/interrupt-controller with parent (null)
+[ 0.000000] riscv-intc: 64 local interrupts mapped
+[ 0.000000] OF: of_irq_init: init /soc/interrupt-controller@10000000 with parent /cpus/cpu@0/interrupt-controller
+[ 0.000000] plic: interrupt-controller@10000000: mapped 176 interrupts with 1 handlers for 2 contexts.
+[ 0.000000] OF: of_irq_init: init /soc/interrupt-controller@6010000 with parent /soc/interrupt-controller@10000000
+[ 0.000000] rcu: srcu_init: Setting srcu_struct sizes based on contention.
+[ 0.000000] riscv_timer_init_dt: Registering clocksource cpuid [0] hartid [0]
+[ 0.000000] clocksource: riscv_clocksource: mask: 0xffffffffffffffff max_cycles: 0x588fe9dc0, max_idle_ns: 440795202592 ns
+[ 0.000001] sched_clock: 64 bits at 24MHz, resolution 41ns, wraps every 4398046511097ns
+[ 0.000368] clocksource: timer: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 79635851949 ns
+[ 0.001017] Console: colour dummy device 80x25
+[ 0.001106] Calibrating delay loop (skipped), value calculated using timer frequency.. 48.00 BogoMIPS (lpj=96000)
+[ 0.001130] pid_max: default: 32768 minimum: 301
+[ 0.001438] Mount-cache hash table entries: 2048 (order: 2, 16384 bytes, linear)
+[ 0.001466] Mountpoint-cache hash table entries: 2048 (order: 2, 16384 bytes, linear)
+[ 0.003917] cblist_init_generic: Setting adjustable number of callback queues.
+[ 0.003932] cblist_init_generic: Setting shift to 0 and lim to 1.
+[ 0.004095] riscv: ELF compat mode failed
+[ 0.004145] ASID allocator using 16 bits (65536 entries)
+[ 0.004351] rcu: Hierarchical SRCU implementation.
+[ 0.005440] devtmpfs: initialized
+[ 0.018343] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
+[ 0.018369] futex hash table entries: 256 (order: 0, 6144 bytes, linear)
+[ 0.018513] pinctrl core: initialized pinctrl subsystem
+[ 0.020648] NET: Registered PF_NETLINK/PF_ROUTE protocol family
+[ 0.021016] DMA: preallocated 128 KiB GFP_KERNEL pool for atomic allocations
+[ 0.021068] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations
+[ 0.021877] thermal_sys: Registered thermal governor 'bang_bang'
+[ 0.021890] thermal_sys: Registered thermal governor 'step_wise'
+[ 0.021896] thermal_sys: Registered thermal governor 'user_space'
+[ 0.022489] cpuidle: using governor menu
+[ 0.049441] platform 5460000.tcon-top: Fixing up cyclic dependency with 5200000.mixer
+[ 0.049572] platform 5460000.tcon-top: Fixing up cyclic dependency with 5100000.mixer
+[ 0.050332] platform 5461000.lcd-controller: Fixing up cyclic dependency with 5460000.tcon-top
+[ 0.051027] platform 5470000.lcd-controller: Fixing up cyclic dependency with 5460000.tcon-top
+[ 0.051900] platform 5500000.hdmi: Fixing up cyclic dependency with 5460000.tcon-top
+[ 0.055442] platform 7090000.rtc: Fixing up cyclic dependency with 7010000.clock-controller
+[ 0.057826] platform connector: Fixing up cyclic dependency with 5500000.hdmi
+[ 0.090637] iommu: Default domain type: Translated
+[ 0.090647] iommu: DMA domain TLB invalidation policy: strict mode
+[ 0.091084] SCSI subsystem initialized
+[ 0.091448] usbcore: registered new interface driver usbfs
+[ 0.091537] usbcore: registered new interface driver hub
+[ 0.091612] usbcore: registered new device driver usb
+[ 0.091979] mc: Linux media interface: v0.10
+[ 0.092084] videodev: Linux video capture interface: v2.00
+[ 0.092909] Advanced Linux Sound Architecture Driver Initialized.
+[ 0.094037] clocksource: Switched to clocksource riscv_clocksource
+[ 0.132085] NET: Registered PF_INET protocol family
+[ 0.132447] IP idents hash table entries: 16384 (order: 5, 131072 bytes, linear)
+[ 0.135984] tcp_listen_portaddr_hash hash table entries: 512 (order: 0, 4096 bytes, linear)
+[ 0.136047] TCP established hash table entries: 8192 (order: 4, 65536 bytes, linear)
+[ 0.136153] TCP bind bhash tables hash table entries: 8192 (order: 5, 131072 bytes, linear)
+[ 0.136604] TCP: Hash tables configured (established 8192 bind 8192)
+[ 0.136747] UDP hash table entries: 512 (order: 2, 16384 bytes, linear)
+[ 0.136805] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes, linear)
+[ 0.137070] NET: Registered PF_UNIX/PF_LOCAL protocol family
+[ 0.142163] workingset: timestamp_bits=46 max_order=18 bucket_order=0
+[ 0.166131] SGI XFS with ACLs, security attributes, no debug enabled
+[ 0.174601] NET: Registered PF_ALG protocol family
+[ 0.174852] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 248)
+[ 0.241896] Serial: 8250/16550 driver, 6 ports, IRQ sharing disabled
+[ 0.257537] sun8i-mixer 5100000.mixer: Adding to iommu group 0
+[ 0.262237] sun8i-mixer 5200000.mixer: Adding to iommu group 0
+[ 0.271661] zram: Added device: zram0
+[ 0.275655] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
+[ 0.275665] ehci-platform: EHCI generic platform driver
+[ 0.276200] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
+[ 0.276261] ohci-platform: OHCI generic platform driver
+[ 0.282316] usbcore: registered new interface driver uas
+[ 0.282416] usbcore: registered new interface driver usb-storage
+[ 0.282574] usbcore: registered new interface driver ch341
+[ 0.282623] usbserial: USB Serial support registered for ch341-uart
+[ 0.283353] UDC core: g_ether: couldn't find an available UDC
+[ 0.286610] sun6i-rtc 7090000.rtc: registered as rtc0
+[ 0.286714] sun6i-rtc 7090000.rtc: setting system clock to 1970-01-02T00:00:07 UTC (86407)
+[ 0.286949] sun6i-rtc 7090000.rtc: RTC enabled
+[ 0.287316] i2c_dev: i2c /dev entries driver
+[ 0.294410] sunxi-wdt 6011000.watchdog: Watchdog enabled (timeout=16 sec, nowayout=0)
+[ 0.297354] ledtrig-cpu: registered to indicate activity on CPUs
+[ 0.297750] sun8i-ce 3040000.crypto: Set mod clock to 300000000 (300 Mhz) from 400000000 (400 Mhz)
+[ 0.302118] sun8i-ce 3040000.crypto: will run requests pump with realtime priority
+[ 0.302355] sun8i-ce 3040000.crypto: will run requests pump with realtime priority
+[ 0.306114] sun8i-ce 3040000.crypto: will run requests pump with realtime priority
+[ 0.306346] sun8i-ce 3040000.crypto: will run requests pump with realtime priority
+[ 0.306480] sun8i-ce 3040000.crypto: Register cbc(aes)
+[ 0.306510] sun8i-ce 3040000.crypto: Register ecb(aes)
+[ 0.306522] sun8i-ce 3040000.crypto: Register cbc(des3_ede)
+[ 0.306534] sun8i-ce 3040000.crypto: Register ecb(des3_ede)
+[ 0.306549] sun8i-ce 3040000.crypto: Register md5
+[ 0.306563] sun8i-ce 3040000.crypto: Register sha1
+[ 0.306579] sun8i-ce 3040000.crypto: Register sha224
+[ 0.306594] sun8i-ce 3040000.crypto: Register sha256
+[ 0.306617] sun8i-ce 3040000.crypto: Register sha384
+[ 0.306635] sun8i-ce 3040000.crypto: Register sha512
+[ 0.306651] sun8i-ce 3040000.crypto: Register stdrng
+[ 0.310683] sun8i-ce 3040000.crypto: CryptoEngine Die ID 0
+[ 0.311302] usbcore: registered new interface driver usbhid
+[ 0.311311] usbhid: USB HID core driver
+[ 0.311552] cedrus 1c0e000.video-codec: Adding to iommu group 0
+[ 0.312241] cedrus 1c0e000.video-codec: Device registered as /dev/video0
+[ 0.313213] random: crng init done
+[ 0.322269] usbcore: registered new interface driver snd-usb-audio
+[ 0.330889] sun20i-codec 2030000.audio-codec: ASoC: Adding component 2030000.audio-codec for platform /soc/audio-codec@2030000
+[ 0.330914] sun20i-codec 2030000.audio-codec: ASoC: Adding component 2030000.audio-codec for platform /soc/audio-codec@2030000
+[ 0.347968] NET: Registered PF_INET6 protocol family
+[ 0.354639] Segment Routing with IPv6
+[ 0.354687] In-situ OAM (IOAM) with IPv6
+[ 0.354792] NET: Registered PF_PACKET protocol family
+[ 0.457383] sun20i-d1-pinctrl 2000000.pinctrl: initialized sunXi PIO driver
+[ 0.466253] printk: console [ttyS0] disabled
+[ 0.510089] 2500000.serial: ttyS0 at MMIO 0x2500000 (irq = 207, base_baud = 1500000) is a 16550A
+[ 0.514152] printk: console [ttyS0] enabled
+[ 0.536244] printk: console [ttyS0] printing thread started
+[ 0.582086] 2500400.serial: ttyS1 at MMIO 0x2500400 (irq = 208, base_baud = 1500000) is a 16550A
+[ 0.583291] sun4i-drm display-engine: Adding to iommu group 0
+[ 0.696996] sun4i-drm display-engine: bound 5100000.mixer (ops 0xffffffff80c62638)
+[ 0.708330] sun4i-drm display-engine: bound 5200000.mixer (ops 0xffffffff80c62638)
+[ 0.708959] sun4i-drm display-engine: bound 5460000.tcon-top (ops 0xffffffff80c66cd8)
+[ 0.709719] sun4i-drm display-engine: No panel or bridge found... RGB output disabled
+[ 0.709742] sun4i-drm display-engine: bound 5461000.lcd-controller (ops 0xffffffff80c5f668)
+[ 0.720010] sun4i-drm display-engine: bound 5470000.lcd-controller (ops 0xffffffff80c5f668)
+[ 0.720662] sun8i-dw-hdmi 5500000.hdmi: Detected HDMI TX controller v2.12a with HDCP (sun8i_dw_hdmi_phy)
+[ 0.726624] sun8i-dw-hdmi 5500000.hdmi: registered DesignWare HDMI I2C bus driver
+[ 0.727177] sun4i-drm display-engine: bound 5500000.hdmi (ops 0xffffffff80c61708)
+[ 0.732796] [drm] Initialized sun4i-drm 1.0.0 20150629 for display-engine on minor 0
+[ 0.732948] sun4i-drm display-engine: [drm] Cannot find any crtc or sizes
+[ 0.735713] spi-nand spi0.0: Macronix SPI NAND was found.
+[ 0.735726] spi-nand spi0.0: 256 MiB, block size: 128 KiB, page size: 2048, OOB size: 64
+[ 0.742469] 4 fixed-partitions partitions found on MTD device spi0.0
+[ 0.742489] Creating 4 MTD partitions on "spi0.0":
+[ 0.742501] 0x000000000000-0x000000100000 : "boot0"
+[ 0.751498] 0x000000100000-0x000000400000 : "uboot"
+[ 0.772891] 0x000000400000-0x000000500000 : "secure_storage"
+[ 0.781553] 0x000000500000-0x000010000000 : "sys"
+[ 2.349527] dwmac-sun8i 4500000.ethernet: IRQ eth_wake_irq not found
+[ 2.349542] dwmac-sun8i 4500000.ethernet: IRQ eth_lpi not found
+[ 2.349977] dwmac-sun8i 4500000.ethernet: PTP uses main clock
+[ 2.350029] dwmac-sun8i 4500000.ethernet: Current syscon value is not the default 50006 (expect 0)
+[ 2.356780] dwmac-sun8i 4500000.ethernet: No HW DMA feature register supported
+[ 2.356795] dwmac-sun8i 4500000.ethernet: RX Checksum Offload Engine supported
+[ 2.356800] dwmac-sun8i 4500000.ethernet: COE Type 2
+[ 2.356809] dwmac-sun8i 4500000.ethernet: TX Checksum insertion supported
+[ 2.356817] dwmac-sun8i 4500000.ethernet: Normal descriptors
+[ 2.356824] dwmac-sun8i 4500000.ethernet: Chain mode enabled
+[ 2.424329] input: 2009800.keys as /devices/platform/soc/2009800.keys/input/input0
+[ 2.436951] pcf857x 2-0038: probed
+[ 2.449370] sun50i-r329-ledc 2008000.led-controller: Registered 1 LEDs
+[ 2.456891] sunxi-mmc 4021000.mmc: allocated mmc-pwrseq
+[ 2.457435] sunxi-mmc 4020000.mmc: Got CD GPIO
+[ 2.467761] phy phy-4100400.phy.0: Changing dr_mode to 1
+[ 2.467777] phy phy-4100400.phy.0: External vbus detected, not enabling our own vbus
+[ 2.467785] ehci-platform 4101000.usb: EHCI Host Controller
+[ 2.467826] ehci-platform 4101000.usb: new USB bus registered, assigned bus number 1
+[ 2.468024] ehci-platform 4101000.usb: irq 222, io mem 0x04101000
+[ 2.470013] musb-sunxi 4100000.usb: Invalid or missing 'dr_mode' property
+[ 2.470026] musb-sunxi: probe of 4100000.usb failed with error -22
+[ 2.471554] ehci-platform 4200000.usb: EHCI Host Controller
+[ 2.471594] ehci-platform 4200000.usb: new USB bus registered, assigned bus number 2
+[ 2.471805] ehci-platform 4200000.usb: irq 223, io mem 0x04200000
+[ 2.473654] ALSA device list:
+[ 2.473665] #0: sun20i-codec
+[ 2.474897] ohci-platform 4200400.usb: Generic Platform OHCI controller
+[ 2.474935] ohci-platform 4200400.usb: new USB bus registered, assigned bus number 3
+[ 2.475099] ohci-platform 4200400.usb: irq 224, io mem 0x04200400
+[ 2.475611] ohci-platform 4101400.usb: Generic Platform OHCI controller
+[ 2.475648] ohci-platform 4101400.usb: new USB bus registered, assigned bus number 4
+[ 2.475830] ohci-platform 4101400.usb: irq 225, io mem 0x04101400
+[ 2.480706] sunxi-mmc 4021000.mmc: initialized, max. request size: 2047 KB, uses new timings mode
+[ 2.486792] ehci-platform 4101000.usb: USB 2.0 started, EHCI 1.00
+[ 2.487243] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 5.19
+[ 2.487260] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
+[ 2.487269] usb usb1: Product: EHCI Host Controller
+[ 2.487276] usb usb1: Manufacturer: Linux 5.19.0-rc1 ehci_hcd
+[ 2.487282] usb usb1: SerialNumber: 4101000.usb
+[ 2.488341] hub 1-0:1.0: USB hub found
+[ 2.488420] hub 1-0:1.0: 1 port detected
+[ 2.498796] sunxi-mmc 4020000.mmc: initialized, max. request size: 2047 KB, uses new timings mode
+[ 2.505114] ehci-platform 4200000.usb: USB 2.0 started, EHCI 1.00
+[ 2.505417] usb usb2: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 5.19
+[ 2.505434] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
+[ 2.505442] usb usb2: Product: EHCI Host Controller
+[ 2.505449] usb usb2: Manufacturer: Linux 5.19.0-rc1 ehci_hcd
+[ 2.505456] usb usb2: SerialNumber: 4200000.usb
+[ 2.506501] hub 2-0:1.0: USB hub found
+[ 2.506607] hub 2-0:1.0: 1 port detected
+[ 2.543847] usb usb4: New USB device found, idVendor=1d6b, idProduct=0001, bcdDevice= 5.19
+[ 2.543865] usb usb4: New USB device strings: Mfr=3, Product=2, SerialNumber=1
+[ 2.543874] usb usb4: Product: Generic Platform OHCI controller
+[ 2.543881] usb usb4: Manufacturer: Linux 5.19.0-rc1 ohci_hcd
+[ 2.543888] usb usb4: SerialNumber: 4101400.usb
+[ 2.550683] hub 4-0:1.0: USB hub found
+[ 2.550750] hub 4-0:1.0: 1 port detected
+[ 2.552957] usb usb3: New USB device found, idVendor=1d6b, idProduct=0001, bcdDevice= 5.19
+[ 2.552975] usb usb3: New USB device strings: Mfr=3, Product=2, SerialNumber=1
+[ 2.552984] usb usb3: Product: Generic Platform OHCI controller
+[ 2.552990] usb usb3: Manufacturer: Linux 5.19.0-rc1 ohci_hcd
+[ 2.552997] usb usb3: SerialNumber: 4200400.usb
+[ 2.554194] hub 3-0:1.0: USB hub found
+[ 2.554259] hub 3-0:1.0: 1 port detected
+[ 2.557300] Waiting for root device /dev/mmcblk0p1...
+[ 2.579394] mmc1: new high speed SDIO card at address 0001
+[ 2.636561] mmc0: new high speed SDHC card at address b368
+[ 2.645982] mmcblk0: mmc0:b368 NCard 29.1 GiB
+[ 2.654639] mmcblk0: p1
+[ 2.724440] EXT4-fs (mmcblk0p1): mounted filesystem with ordered data mode. Quota mode: disabled.
+[ 2.724512] VFS: Mounted root (ext4 filesystem) readonly on device 179:1.
+[ 2.729489] devtmpfs: mounted
+[ 2.730994] Freeing unused kernel image (initmem) memory: 2188K
+[ 2.731043] Run /sbin/init as init process
+[ 3.091293] EXT4-fs (mmcblk0p1): re-mounted. Quota mode: disabled.
+Starting syslogd: OK
+Starting klogd: OK
+Running sysctl: OK
+Saving random seed: OK
+Starting network: [ 3.686081] dwmac-sun8i 4500000.ethernet eth0: PHY [stmmac-0:01] driver [RTL8211F Gigabit Ethernet] (irq=POLL)
+[ 3.686499] dwmac-sun8i 4500000.ethernet eth0: Register MEM_TYPE_PAGE_POOL RxQ-0
+[ 3.687401] dwmac-sun8i 4500000.ethernet eth0: No Safety Features support found
+[ 3.687419] dwmac-sun8i 4500000.ethernet eth0: No MAC Management Counters available
+[ 3.687429] dwmac-sun8i 4500000.ethernet eth0: PTP not supported by HW
+[ 3.687867] dwmac-sun8i 4500000.ethernet eth0: configuring for phy/rgmii-id link mode
+udhcpc: started, v1.35.0
+udhcpc: broadcasting discover
+
+udhcpc: no lease, forking to background
+OK
+
+Welcome to Buildroot
+buildroot login:
+```
+
+## 总结
+
+本次实验中,我们使用 buildroot 构建了基于 QEMU 的 RISCV64 虚拟环境,编译了哪吒开发板的系统镜像,并通过了上板测试,体会到了使用 buildroot 构建系统镜像的方便、快捷。
+
+## 参考资料
+
+* [buildroot 官网][001]
+
+[001]: https://buildroot.org/
+[002]: https://git.buildroot.net/buildroot/