[bsp][qemu-virt64-aarch64] add DM config and docs
RT-Thread BSP Static Build Check / 🔍 Summary of Git Diff Changes (push) Has been cancelled
RT-Thread BSP Static Build Check / ${{ matrix.legs.RTT_BSP }} (push) Has been cancelled
RT-Thread BSP Static Build Check / collect-artifacts (push) Has been cancelled
pkgs_test / change (push) Has been cancelled
utest_auto_run / A9 :components/dfs.cfg (push) Has been cancelled
utest_auto_run / A9 :components/lwip.cfg (push) Has been cancelled
utest_auto_run / A9 :components/netdev.cfg (push) Has been cancelled
utest_auto_run / A9 :components/sal.cfg (push) Has been cancelled
utest_auto_run / A9 :cpp11/cpp11.cfg (push) Has been cancelled
utest_auto_run / AARCH64-rtsmart :default.cfg (push) Has been cancelled
utest_auto_run / A9-rtsmart :default.cfg (push) Has been cancelled
utest_auto_run / RISCV-rtsmart :default.cfg (push) Has been cancelled
utest_auto_run / XUANTIE-rtsmart :default.cfg (push) Has been cancelled
utest_auto_run / AARCH64 :default.cfg (push) Has been cancelled
utest_auto_run / AARCH64-smp :default.cfg (push) Has been cancelled
utest_auto_run / A9 :default.cfg (push) Has been cancelled
utest_auto_run / A9-smp :default.cfg (push) Has been cancelled
utest_auto_run / RISCV :default.cfg (push) Has been cancelled
utest_auto_run / RISCV-smp :default.cfg (push) Has been cancelled
utest_auto_run / A9 :kernel/atomic_c11.cfg (push) Has been cancelled
utest_auto_run / RISCV :kernel/atomic_c11.cfg (push) Has been cancelled
utest_auto_run / A9-rtsmart :kernel/ipc.cfg (push) Has been cancelled
utest_auto_run / RISCV-rtsmart :kernel/ipc.cfg (push) Has been cancelled
utest_auto_run / XUANTIE-rtsmart :kernel/ipc.cfg (push) Has been cancelled
utest_auto_run / A9 :kernel/ipc.cfg (push) Has been cancelled
utest_auto_run / A9-smp :kernel/ipc.cfg (push) Has been cancelled
utest_auto_run / RISCV :kernel/ipc.cfg (push) Has been cancelled
utest_auto_run / A9-rtsmart :kernel/kernel_basic.cfg (push) Has been cancelled
utest_auto_run / RISCV-rtsmart :kernel/kernel_basic.cfg (push) Has been cancelled
utest_auto_run / XUANTIE-rtsmart :kernel/kernel_basic.cfg (push) Has been cancelled
utest_auto_run / A9 :kernel/kernel_basic.cfg (push) Has been cancelled
utest_auto_run / A9-smp :kernel/kernel_basic.cfg (push) Has been cancelled
utest_auto_run / RISCV :kernel/kernel_basic.cfg (push) Has been cancelled
utest_auto_run / AARCH64-rtsmart :kernel/mem.cfg (push) Has been cancelled
utest_auto_run / A9-rtsmart :kernel/mem.cfg (push) Has been cancelled
utest_auto_run / RISCV-rtsmart :kernel/mem.cfg (push) Has been cancelled
utest_auto_run / XUANTIE-rtsmart :kernel/mem.cfg (push) Has been cancelled
utest_auto_run / AARCH64 :kernel/mem.cfg (push) Has been cancelled
utest_auto_run / AARCH64-smp :kernel/mem.cfg (push) Has been cancelled
utest_auto_run / A9 :kernel/mem.cfg (push) Has been cancelled
utest_auto_run / A9-smp :kernel/mem.cfg (push) Has been cancelled
utest_auto_run / RISCV :kernel/mem.cfg (push) Has been cancelled
utest_auto_run / RISCV-smp :kernel/mem.cfg (push) Has been cancelled
ToolsCI / Tools (push) Has been cancelled
doc_doxygen / doxygen_doc generate (push) Has been cancelled
doc_doxygen / deploy (push) Has been cancelled

Signed-off-by: GuEe-GUI <2991707448@qq.com>
This commit is contained in:
GuEe-GUI
2026-06-15 10:00:57 +08:00
committed by Rbb666
parent b2b3331fd5
commit ea5a974305
9 changed files with 873 additions and 150 deletions
+3 -2
View File
@@ -293,8 +293,9 @@ jobs:
if [[ "${{ matrix.platform.QEMU_ARCH }}" == "aarch64" ]]; then
sudo apt-get -yqq install device-tree-compiler
if [[ "${{ matrix.platform.QEMU_MACHINE }}" == "virt" ]]; then
qemu-system-$TEST_QEMU_ARCH -M virt,gic-version=2 -cpu cortex-a53 -smp 4 -kernel $TEST_BSP_ROOT/rtthread.bin -nographic \
-drive if=none,file=$TEST_BSP_ROOT/sd.bin,format=raw,id=blk0 -device virtio-blk-device,drive=blk0,bus=virtio-mmio-bus.0 \
qemu-system-$TEST_QEMU_ARCH -M virt -cpu max -smp 4 -m 128M -kernel $TEST_BSP_ROOT/rtthread.bin -nographic \
-append "console=ttyAMA0 earlycon cma=8M coherent_pool=2M root=vda0 rootfstype=elm rootwait rw" \
-drive if=none,file=$TEST_BSP_ROOT/sd.bin,format=raw,id=blk0 -device virtio-blk-device,drive=blk0 \
-netdev user,id=net0 -device virtio-net-device,netdev=net0,bus=virtio-mmio-bus.1 \
> qemu_output_$TEST_QEMU_ARCH.log 2>&1 &
elif [[ "${{ matrix.platform.QEMU_MACHINE }}" == "xlnx-zcu102" ]]; then
+42 -59
View File
@@ -106,7 +106,7 @@
# end of rt_strnlen options
# end of klibc options
CONFIG_RT_NAME_MAX=16
CONFIG_RT_NAME_MAX=24
# CONFIG_RT_USING_ARCH_DATA_TYPE is not set
# CONFIG_RT_USING_NANO is not set
# CONFIG_RT_USING_SMART is not set
@@ -131,7 +131,8 @@ CONFIG_RT_USING_TIMER_SOFT=y
CONFIG_RT_TIMER_THREAD_PRIO=4
CONFIG_RT_TIMER_THREAD_STACK_SIZE=8192
# CONFIG_RT_USING_TIMER_ALL_SOFT is not set
# CONFIG_RT_USING_CPU_USAGE_TRACER is not set
CONFIG_RT_USING_CPU_USAGE_TRACER=y
CONFIG_RT_CPU_USAGE_CALC_INTERVAL_MS=200
#
# kservice options
@@ -165,7 +166,7 @@ CONFIG_RT_USING_MESSAGEQUEUE=y
#
CONFIG_RT_USING_MEMPOOL=y
CONFIG_RT_USING_SMALL_MEM=y
# CONFIG_RT_USING_SLAB is not set
CONFIG_RT_USING_SLAB=y
CONFIG_RT_USING_MEMHEAP=y
CONFIG_RT_MEMHEAP_FAST_MODE=y
# CONFIG_RT_MEMHEAP_BEST_MODE is not set
@@ -229,7 +230,7 @@ CONFIG_RT_USING_FINSH=y
CONFIG_FINSH_USING_MSH=y
CONFIG_FINSH_THREAD_NAME="tshell"
CONFIG_FINSH_THREAD_PRIORITY=20
CONFIG_FINSH_THREAD_STACK_SIZE=4096
CONFIG_FINSH_THREAD_STACK_SIZE=8192
CONFIG_FINSH_USING_HISTORY=y
CONFIG_FINSH_HISTORY_LINES=10
# CONFIG_FINSH_USING_WORD_OPERATION is not set
@@ -249,12 +250,9 @@ CONFIG_FINSH_USING_OPTION_COMPLETION=y
CONFIG_RT_USING_DFS=y
CONFIG_DFS_USING_POSIX=y
CONFIG_DFS_USING_WORKDIR=y
# CONFIG_RT_USING_DFS_MNTTABLE is not set
CONFIG_DFS_FD_MAX=32
CONFIG_RT_USING_DFS_V1=y
# CONFIG_RT_USING_DFS_V2 is not set
CONFIG_DFS_FILESYSTEMS_MAX=4
CONFIG_DFS_FILESYSTEM_TYPES_MAX=8
# CONFIG_RT_USING_DFS_V1 is not set
CONFIG_RT_USING_DFS_V2=y
CONFIG_RT_USING_DFS_ELMFAT=y
#
@@ -282,12 +280,8 @@ CONFIG_RT_DFS_ELM_MUTEX_TIMEOUT=3000
# end of elm-chan's FatFs, Generic FAT Filesystem Module
CONFIG_RT_USING_DFS_DEVFS=y
CONFIG_RT_USING_DFS_9PFS=y
# CONFIG_RT_USING_DFS_ISO9660 is not set
CONFIG_RT_USING_DFS_ROMFS=y
# CONFIG_RT_USING_DFS_ROMFS_USER_ROOT is not set
# CONFIG_RT_USING_DFS_CROMFS is not set
# CONFIG_RT_USING_DFS_RAMFS is not set
# CONFIG_RT_USING_DFS_TMPFS is not set
# CONFIG_RT_USING_DFS_MQUEUE is not set
# end of DFS: device virtual file system
@@ -309,7 +303,7 @@ CONFIG_RT_USING_SERIAL_V1=y
# CONFIG_RT_USING_SERIAL_V2 is not set
CONFIG_RT_SERIAL_USING_DMA=y
CONFIG_RT_SERIAL_RB_BUFSZ=256
# CONFIG_RT_USING_SERIAL_BYPASS is not set
CONFIG_RT_USING_SERIAL_BYPASS=y
# CONFIG_RT_SERIAL_EARLY_HVC is not set
CONFIG_RT_SERIAL_PL011=y
CONFIG_RT_SERIAL_8250=y
@@ -346,10 +340,16 @@ CONFIG_RT_RTC_PL031=y
# CONFIG_RT_USING_SDIO is not set
# CONFIG_RT_USING_SPI is not set
CONFIG_RT_USING_WDT=y
# CONFIG_RT_WDT_DW is not set
CONFIG_RT_WDT_I6300ESB=y
# CONFIG_RT_USING_AUDIO is not set
CONFIG_RT_USING_AUDIO=y
CONFIG_RT_AUDIO_REPLAY_MP_BLOCK_SIZE=4096
CONFIG_RT_AUDIO_REPLAY_MP_BLOCK_COUNT=2
CONFIG_RT_AUDIO_RECORD_PIPE_SIZE=2048
CONFIG_RT_AUDIO_INTEL_HDA=y
# CONFIG_RT_USING_SENSOR is not set
# CONFIG_RT_USING_TOUCH is not set
CONFIG_RT_USING_TOUCH=y
# CONFIG_RT_TOUCH_PIN_IRQ is not set
CONFIG_RT_USING_LCD=y
CONFIG_RT_USING_GRAPHIC=y
# CONFIG_RT_GRAPHIC_BACKLIGHT is not set
@@ -392,14 +392,21 @@ CONFIG_RT_INPUT_POWER=y
CONFIG_RT_INPUT_KEYBOARD=y
CONFIG_RT_INPUT_KEYBOARD_GPIO=y
# CONFIG_RT_INPUT_MISC is not set
# CONFIG_RT_INPUT_TOUCHSCREEN is not set
# CONFIG_RT_USING_MBOX is not set
CONFIG_RT_INPUT_TOUCHSCREEN=y
CONFIG_RT_USING_MBOX=y
CONFIG_RT_MBOX_PIC=y
# CONFIG_RT_USING_HWSPINLOCK is not set
CONFIG_RT_USING_RPMSG=y
CONFIG_RT_RPMSG_CHAR_MSG_MAX=64
CONFIG_RT_RPMSG_CHAR_MSG_SIZE_MAX=256
CONFIG_RT_RPMSG_RT_THREAD_VIRTIO=y
# CONFIG_RT_USING_PHYE is not set
CONFIG_RT_USING_ATA=y
CONFIG_RT_ATA_AHCI=y
CONFIG_RT_ATA_AHCI_PCI=y
# CONFIG_RT_USING_NVME is not set
CONFIG_RT_USING_NVME=y
CONFIG_RT_USING_NVME_IO_QUEUE=4
CONFIG_RT_NVME_PCI=y
CONFIG_RT_USING_BLK=y
#
@@ -412,13 +419,16 @@ CONFIG_RT_BLK_PARTITION_EFI=y
CONFIG_RT_USING_SCSI=y
CONFIG_RT_SCSI_SD=y
CONFIG_RT_SCSI_CDROM=y
CONFIG_RT_USING_UFS=y
CONFIG_RT_UFS_PCI=y
CONFIG_RT_USING_FIRMWARE=y
CONFIG_RT_FIRMWARE_QEMU_FW_CFG=y
# CONFIG_RT_FIRMWARE_ARM_SCMI is not set
# CONFIG_RT_USING_HWCACHE is not set
CONFIG_RT_USING_REGULATOR=y
# CONFIG_RT_REGULATOR_GPIO is not set
# CONFIG_RT_USING_RESET is not set
CONFIG_RT_USING_RESET=y
# CONFIG_RT_RESET_SIMPLE is not set
#
# Power Management (PM) Domains device drivers
@@ -434,13 +444,17 @@ CONFIG_RT_VIRTIO_TRANSPORT_PCI=y
CONFIG_RT_VIRTIO_BLK=y
CONFIG_RT_VIRTIO_CONSOLE=y
CONFIG_RT_VIRTIO_RNG=y
CONFIG_RT_VIRTIO_RPMSG=y
CONFIG_RT_VIRTIO_SCSI=y
# CONFIG_RT_VIRTIO_9P is not set
CONFIG_RT_VIRTIO_RPROC_SERIAL=y
CONFIG_RT_VIRTIO_GPU=y
CONFIG_RT_VIRTIO_INPUT=y
CONFIG_RT_VIRTIO_CRYPTO=y
CONFIG_RT_VIRTIO_SOUND=y
# CONFIG_RT_USING_NVMEM is not set
CONFIG_RT_USING_DMA=y
# CONFIG_RT_DMA_PL330 is not set
CONFIG_RT_USING_MFD=y
CONFIG_RT_MFD_EDU=y
CONFIG_RT_MFD_SYSCON=y
@@ -480,6 +494,10 @@ CONFIG_RT_USING_CLK=y
#
# SoC (System on Chip) Drivers
#
CONFIG_RT_GRAPHIC_ROMFB_WIDTH=800
CONFIG_RT_GRAPHIC_ROMFB_HEIGHT=600
CONFIG_RT_SOC_CAMERA=y
# end of SoC (System on Chip) Drivers
# end of Device Drivers
#
@@ -517,7 +535,7 @@ CONFIG_RT_USING_POSIX_TERMIOS=y
# CONFIG_RT_USING_POSIX_MMAN is not set
CONFIG_RT_USING_POSIX_DELAY=y
CONFIG_RT_USING_POSIX_CLOCK=y
# CONFIG_RT_USING_POSIX_TIMER is not set
CONFIG_RT_USING_POSIX_TIMER=y
# CONFIG_RT_USING_PTHREADS is not set
# CONFIG_RT_USING_MODULE is not set
@@ -596,6 +614,7 @@ CONFIG_RT_INIT_MEMORY_REGIONS=128
# end of Using USB legacy version
# CONFIG_RT_USING_FDT is not set
# CONFIG_BSP_USING_VIRTIO is not set
# CONFIG_RT_USING_RUST is not set
# end of RT-Thread Components
@@ -798,7 +817,6 @@ CONFIG_RT_INIT_MEMORY_REGIONS=128
# CONFIG_PKG_USING_U8G2 is not set
# end of u8g2: a monochrome graphic library
# CONFIG_PKG_USING_NES_SIMULATOR is not set
# CONFIG_PKG_USING_OPENMV is not set
# CONFIG_PKG_USING_MUPDF is not set
# CONFIG_PKG_USING_STEMWIN is not set
@@ -823,9 +841,6 @@ CONFIG_RT_INIT_MEMORY_REGIONS=128
#
# tools packages
#
# CONFIG_PKG_USING_VECTOR is not set
# CONFIG_PKG_USING_SORCH is not set
# CONFIG_PKG_USING_DICT is not set
# CONFIG_PKG_USING_CMBACKTRACE is not set
# CONFIG_PKG_USING_MCOREDUMP is not set
# CONFIG_PKG_USING_EASYFLASH is not set
@@ -874,9 +889,6 @@ CONFIG_RT_INIT_MEMORY_REGIONS=128
# CONFIG_PKG_USING_RVBACKTRACE is not set
# CONFIG_PKG_USING_HPATCHLITE is not set
# CONFIG_PKG_USING_THREAD_METRIC is not set
# CONFIG_PKG_USING_UORB is not set
# CONFIG_PKG_USING_RT_TUNNEL is not set
# CONFIG_PKG_USING_VIRTUAL_TERMINAL is not set
# end of tools packages
#
@@ -971,9 +983,6 @@ CONFIG_RT_INIT_MEMORY_REGIONS=128
# CONFIG_PKG_USING_R_RHEALSTONE is not set
# CONFIG_PKG_USING_HEARTBEAT is not set
# CONFIG_PKG_USING_MICRO_ROS_RTTHREAD_PACKAGE is not set
# CONFIG_PKG_USING_CHERRYECAT is not set
# CONFIG_PKG_USING_EVENT_LOOP is not set
# CONFIG_PKG_USING_THREAD_MANAGER is not set
# end of system packages
#
@@ -1119,7 +1128,9 @@ CONFIG_RT_INIT_MEMORY_REGIONS=128
#
# NUVOTON Drivers
#
# CONFIG_PKG_USING_NUVOTON_CMSIS_DRIVER is not set
# CONFIG_PKG_USING_NUVOTON_SERIES_DRIVER is not set
# CONFIG_PKG_USING_NUVOTON_ARM926_LIB is not set
# end of NUVOTON Drivers
#
@@ -1127,24 +1138,7 @@ CONFIG_RT_INIT_MEMORY_REGIONS=128
#
# CONFIG_PKG_USING_GD32_ARM_CMSIS_DRIVER is not set
# CONFIG_PKG_USING_GD32_ARM_SERIES_DRIVER is not set
# CONFIG_PKG_USING_GD32_RISCV_SERIES_DRIVER is not set
# CONFIG_PKG_USING_GD32VW55X_WIFI is not set
# end of GD32 Drivers
#
# HPMicro SDK
#
# CONFIG_PKG_USING_HPM_SDK is not set
# end of HPMicro SDK
#
# FT32 HAL & SDK Drivers
#
# CONFIG_PKG_USING_FT32F0_STD_DRIVER is not set
# CONFIG_PKG_USING_FT32F0_CMSIS_DRIVER is not set
# CONFIG_PKG_USING_FT32F4_STD_DRIVER is not set
# CONFIG_PKG_USING_FT32F4_CMSIS_DRIVER is not set
# end of FT32 HAL & SDK Drivers
# end of HAL & SDK Drivers
#
@@ -1190,11 +1184,9 @@ CONFIG_RT_INIT_MEMORY_REGIONS=128
# CONFIG_PKG_USING_RT3020 is not set
# CONFIG_PKG_USING_MLX90632 is not set
# CONFIG_PKG_USING_MLX90382 is not set
# CONFIG_PKG_USING_MLX90384 is not set
# CONFIG_PKG_USING_MLX90393 is not set
# CONFIG_PKG_USING_MLX90392 is not set
# CONFIG_PKG_USING_MLX90394 is not set
# CONFIG_PKG_USING_MLX90396 is not set
# CONFIG_PKG_USING_MLX90397 is not set
# CONFIG_PKG_USING_MS5611 is not set
# CONFIG_PKG_USING_MAX31865 is not set
@@ -1223,7 +1215,6 @@ CONFIG_RT_INIT_MEMORY_REGIONS=128
# CONFIG_PKG_USING_P3T1755 is not set
# CONFIG_PKG_USING_QMI8658 is not set
# CONFIG_PKG_USING_ICM20948 is not set
# CONFIG_PKG_USING_SCD4X is not set
# end of sensors drivers
#
@@ -1241,7 +1232,6 @@ CONFIG_RT_INIT_MEMORY_REGIONS=128
# CONFIG_PKG_USING_CST812T is not set
# end of touch drivers
# CONFIG_PKG_USING_LCD_SPI_DRIVER is not set
# CONFIG_PKG_USING_REALTEK_AMEBA is not set
# CONFIG_PKG_USING_BUTTON is not set
# CONFIG_PKG_USING_PCF8574 is not set
@@ -1321,13 +1311,6 @@ CONFIG_RT_INIT_MEMORY_REGIONS=128
# CONFIG_PKG_USING_IC74HC165 is not set
# CONFIG_PKG_USING_IST8310 is not set
# CONFIG_PKG_USING_ST7789_SPI is not set
# CONFIG_PKG_USING_CAN_UDS is not set
# CONFIG_PKG_USING_ISOTP_C is not set
# CONFIG_PKG_USING_IKUNLED is not set
# CONFIG_PKG_USING_INS5T8025 is not set
# CONFIG_PKG_USING_IRUART is not set
# CONFIG_PKG_USING_ST7305 is not set
# CONFIG_PKG_USING_TM1668 is not set
# CONFIG_PKG_USING_SPI_TOOLS is not set
# end of peripheral libraries and drivers
+383 -34
View File
@@ -4,70 +4,419 @@
## 1. Introduction
The AArch64 execution state was introduced with the ARMv8 ISA for machines executing A64 instructions. This project ported RT-Thread on QEMU AArch64 VIRT machine.
AArch64 is the 64-bit execution state of the ARMv8 architecture for machines executing A64 instructions. This BSP ports RT-Thread to the QEMU `virt` AArch64 machine, based on the device model (DM), Open Firmware (OFW/FDT), and PCI bus framework. It serves as a development and validation platform for VirtIO, PCI, and other platform drivers.
Default configuration highlights:
| Item | Description |
| ---- | ----------- |
| RT-Thread version | 5.3 |
| Architecture | ARMv8 AArch64, MMU |
| SMP | 4 cores (`RT_CPUS_NR=4`) |
| Interrupt controller | GICv2 / GICv3 (with ITS, MSI) |
| Console | UART0 (PL011, `ttyAMA0`) |
| Root filesystem | VirtIO Block `vda0`, FatFs (elm-chan) |
| Memory | 128 MB by default (adjustable via `qemu.py -mem`) |
## 2. Compiling
Usage ARM Developer GNU ToolChain, it support Linux and Windows:
ARM Developer GNU cross-compiler toolchain is recommended, supporting Linux and Windows:
```
https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads/
```
Download the `xxx-aarch64-none-elf` of x86_64 hosted platformset the `RTT_EXEC_PATH` is system environment after decompress the binary.
Enter directory `rt-thread/bsp/qemu-virt64-aarch64` and input:
Download the `xxx-aarch64-none-elf` package for the x86_64 hosted platform, extract it, and set the `RTT_EXEC_PATH` environment variable to the compiler's `bin` directory.
Enter the `rt-thread/bsp/qemu-virt64-aarch64` directory and run:
```
scons
```
## 3. Execution
This produces `rtthread.elf` and `rtthread.bin`.
The project execution tool is `qemu-system-aarch64`, the project can be configured to `Cortex-A53/A57/A72`, GIC supports `V2/V3` version, and `V2` of GIC can use 8 processors max.
You can also compile with a specific toolchain path:
```
scons --exec-path="path-to-gcc-toolchain"
```
Use `scons --menuconfig` to change configuration, then run `scons` again to rebuild.
## 3. Running
This BSP uses the `qemu-system-aarch64` emulator and is started via `qemu.py`.
### 3.1 Installing QEMU
Windows:
Download Windows platform from website:
```
https://www.qemu.org/download/
```
On Linux platform (Ubuntu, Deepin and so on), install QEMU by apt.
Linux (Ubuntu, Deepin, etc.):
```
sudo apt update
sudo apt install qemu-system-arm
```
Please fixup the exec scripts if modify the default configuration of the project. Run qemu.bat or qemu.sh in terminal:
Some optional features require a minimum QEMU version:
| Feature | Minimum QEMU version |
| ------- | -------------------- |
| UFS storage | 8.2.0 |
| VirtIO Sound (`-sound virtio`) | 8.2.0 |
### 3.2 Environment Variables
| Variable | Description |
| -------- | ----------- |
| `RTT_QEMU_ROOT` | Prefix path to QEMU binaries (the script appends `qemu-system-aarch64`) |
| `RTT_ROOT` | RT-Thread source root; defaults to two levels above the BSP directory |
### 3.3 Basic Startup
In the BSP directory, run:
```
python qemu.py
```
or:
```
./qemu.py
```
On first run, 64 MB `qcow2` disk images are created automatically for each storage device. The default is `-nographic` mode with serial output on the current terminal.
Typical boot log:
```
heap: [0x40042aa0 - 0x40142aa0]
\ | /
- RT - Thread Operating System
/ | \ 4.0.4 build Aug 6 2021
2006 - 2021 Copyright by rt-thread team
Hi, this is RT-Thread!!
/ | \ 5.3.0 build ...
2006 - 2026 Copyright by rt-thread team
hello rt-thread
msh />
```
Use VirtIO-Console in new terminal by:
````
### 3.4 `qemu.py` Command-Line Options
| Option | Default | Description |
| ------ | ------- | ----------- |
| `-gic` | `2` | GIC version (`2` / `3` / `max`); auto-switches to GICv3 when `-smp` > 8 |
| `-smp` | `RT_CPUS_NR` (4) | Number of CPU cores |
| `-mem` | `128` | Memory size (MB) |
| `-el` | `1` | Exception level: `1` default; `2` virtualization on; `3` secure on |
| `-bootargs` | see below | Kernel boot arguments |
| `-initrd` | — | Path to initrd image |
| `-graphic` | — | Graphics mode (ramfb + VirtIO keyboard/tablet), replaces `-nographic` |
| `-gl` | — | In graphics mode, attach `virtio-gpu-gl-pci` and enable QEMU display OpenGL (e.g. `-gl gtk`); requires QEMU built with `--enable-opengl` and `--enable-virglrenderer`; must be used with `-graphic` |
| `-debug` | — | Enable GDB debugging (`-S -s`) |
| `-dumpdtb` | — | Export runtime DTB and convert to DTS |
| `-dtb` | — | Use a custom DTB file |
| `-virtio-block` | `virtio` | VirtIO Block disk image prefix (creates `virtio.qcow2`, mounted as `vda`) |
| `-scsi` | `scsi` | VirtIO SCSI disk image prefix |
| `-flash` | `flash` | pflash disk image prefix (pflash1, CFI NOR) |
| `-emmc` | `emmc` | SDHCI eMMC disk image prefix |
| `-nvme` | `nvme` | NVMe disk image prefix |
| `-ahci` | `ahci` | AHCI SATA disk image prefix |
| `-ufs` | `ufs` | UFS disk image prefix (QEMU ≥ 8.2.0) |
| `-cdrom` | — | SCSI CD-ROM image path (e.g. ISO file) |
| `-sound` | `hda` | Audio device: `hda` (Intel HDA) or `virtio` (VirtIO Sound PCI) |
| `-tap` | — | Use TAP networking (replaces user mode) |
| `-ssh` | `12055` | SSH port forwarding in user mode (`hostfwd=tcp::PORT-:22`) |
| `-9p` | — | VirtIO 9P shared directory path (enable VirtIO 9P in menuconfig) |
| `-camera` | — | Enable vfio-user camera (Linux only, with `qemu-device-camera`) |
| `-dtbo` | — | AMP mode: DTBO overlay file (e.g. `amp.dtsi`); **requires Smart kernel** (see below) |
Default `-bootargs`:
```
console=ttyAMA0 earlycon cma=8M coherent_pool=2M root=vda0 rootfstype=elm rootwait rw
```
### 3.5 Common Startup Examples
Graphics (VirtIO GPU + keyboard/mouse):
```
./qemu.py -graphic
```
QEMU OpenGL display (`-gl`):
```
./qemu.py -graphic -gl gtk
```
> **Note**: `-gl` enables OpenGL only on the QEMU / host display path (`virtio-gpu-gl-pci` + VirGL). This BSP includes only the VirtIO GPU 2D framebuffer driver by default — **no OpenGL / VirGL user-space or kernel implementation**. `-gl` does not provide OpenGL acceleration inside RT-Thread. For graphics demos, use `-graphic` (`virtio-gpu-device`) with framebuffer / HMI tests.
GDB debugging:
```
./qemu.py -debug
```
More memory and GICv3:
```
./qemu.py -mem 256 -gic 3
```
Mount CD-ROM:
```
./qemu.py -cdrom /path/to/image.iso
```
VirtIO Sound:
```
./qemu.py -sound virtio
```
9P directory sharing (enable `RT_VIRTIO_9P` first):
```
./qemu.py -9p /path/to/share
```
AMP heterogeneous multi-core (RPMSG slave, **requires Smart version**):
```
./qemu.py -dtbo amp.dtsi -mem 258
```
> **Note**: The AMP demo requires the **Smart version** (`RT_USING_SMART`). The standard kernel must run in a region where virtual addresses equal physical addresses. The slave image is loaded by QEMU `loader` to fixed physical addresses specified in `amp.dtsi` (e.g. `kernel-entry = 0x48480000`), which differs from the primary MMU layout; the standard kernel cannot boot correctly in that address space. Enable Smart in menuconfig and rebuild.
Camera demo:
```
./qemu.py -graphic -camera
```
### 3.6 Console and Telnet
| Port | Device | Description |
| ---- | ------ | ----------- |
| Current terminal | UART0 (PL011) | Default `-nographic` serial |
| `4321` | VirtIO Console | `telnet 127.0.0.1 4321`, port name `org.rt-thread.console` |
| `4322` | PCI 8250 serial | `telnet 127.0.0.1 4322` |
| `4323` | AMP slave console | `-dtbo` mode only, `telnet localhost 4323` |
VirtIO Console connection example:
```
telnet 127.0.0.1 4321
````
If use tap net mode with tap0 card, modify qemu run script config
```
-netdev user,id=net0
```
to
```
-netdev tap,id=net0,ifname=tap0
```
## 4. Condition
### 3.7 Networking
| Driver | Condition | Remark |
| ------ | --------- | ------ |
| UART | Support | UART0 |
| RTC | Support | - |
| GPIO | Support | - |
| VIRTIO BLK | Support | - |
| VIRTIO NET | Support | - |
| VIRTIO Console | Support | - |
| VIRTIO GPU | Support | 2D |
| VIRTIO Input | Support | Keyboard, Mouse, Tablet |
User-mode networking (`-netdev user`) is used by default, with SSH forwarded to local port `12055` (changeable via `-ssh`).
TAP networking example:
```
./qemu.py -tap
```
TAP requires bridge setup on Linux; support on Windows / WSL is limited. SSH port forwarding is not available in TAP mode.
## 4. Default QEMU Devices
`qemu.py` attaches the following devices by default (matching the default driver configuration):
| QEMU device | Image file | RT-Thread side |
| ----------- | ---------- | -------------- |
| `virtio-blk-device` | `virtio.qcow2` | VirtIO Block, root partition `vda0` |
| `virtio-scsi-pci` + `scsi-hd` | `scsi.qcow2` | VirtIO SCSI |
| `scsi-cd` (optional `-cdrom`) | user-specified | SCSI CD-ROM |
| `pflash` (index=1) | `flash.qcow2` | MTD NOR CFI |
| `sdhci-pci` + `sd-card` | `emmc.qcow2` | SDHCI eMMC (enable SDIO) |
| `nvme` + `nvme-ns` | `nvme.qcow2` | NVMe |
| `ahci` + `ide-hd` | `ahci.qcow2` | AHCI SATA |
| `ufs` + `ufs-lu` | `ufs.qcow2` | UFS (QEMU ≥ 8.2.0) |
| `virtio-net-device` | — | VirtIO Net (enable network stack) |
| `virtio-rng-device` | — | VirtIO RNG |
| `virtio-crypto-device` | — | VirtIO Crypto |
| `virtio-serial-device` | — | VirtIO Console / RPROC Serial |
| `pci-serial` (8250 PCI) | — | PCI 8250 serial |
| `intel-hda` + `hda-duplex` | — | Intel HDA audio |
| `i6300esb` | — | I6300ESB watchdog |
| `edu` | — | QEMU EDU teaching device (MFD) |
| `virtio-gpu-device` (`-graphic`) | — | VirtIO GPU 2D (default) |
| `virtio-gpu-gl-pci` (`-graphic -gl`) | — | QEMU OpenGL display; no GL driver on RT-Thread side |
| `virtio-keyboard-device` / `virtio-tablet-device` | — | VirtIO Input |
| `virtio-9p-device` (`-9p`) | — | VirtIO 9P (enable driver) |
| `virtio-sound-pci` (`-sound virtio`) | — | VirtIO Sound |
| vfio-user camera (`-camera`) | — | PCI camera (BSP `drv_camera`) |
## 5. Driver Support
### 5.1 Enabled by Default
| Category | Driver | Description |
| -------- | ------ | ----------- |
| Serial | PL011 | UART0, system console `uart0` / `ttyAMA0` |
| Serial | 8250 PCI | PCI serial, Telnet port 4322 |
| RTC | PL031 | Real-time clock |
| GPIO | PL061 | GPIO controller |
| Clock | ARM Architected Timer | System tick |
| Watchdog | I6300ESB | PCI watchdog |
| Storage | VirtIO Block | Block device, `vda` |
| Storage | VirtIO SCSI | SD / CD-ROM |
| Storage | AHCI PCI | SATA disk |
| Storage | NVMe PCI | NVMe disk |
| Storage | UFS PCI | UFS disk |
| Storage | MTD NOR CFI | pflash flash |
| Storage | BLK partition | DFS / EFI partition table |
| Graphics | VirtIO GPU | 2D framebuffer (`-graphic`); no OpenGL / VirGL |
| Graphics | Framebuffer | ROMFB 800×600, HMI / graphics tests |
| Graphics | LCD | LCD device framework |
| Input | VirtIO Input | Keyboard, mouse, tablet (`-graphic`) |
| Input | Touchscreen | Touchscreen framework |
| Input | Keyboard GPIO | GPIO keyboard |
| Input | Power | Power key |
| Audio | Intel HDA | Default `-sound hda` |
| Audio | VirtIO Sound | `-sound virtio` |
| Crypto | HwCrypto | AES / DES / 3DES / RC4 / RNG |
| Crypto | VirtIO Crypto | VirtIO crypto backend |
| Random | VirtIO RNG | Hardware random number |
| Comm | VirtIO Console | Telnet 4321 |
| Comm | VirtIO RPROC Serial | Remoteproc serial link |
| Comm | RPMSG | VirtIO RPMSG character device |
| Comm | Mailbox PIC | Mailbox interrupt controller |
| Firmware | QEMU FW_CFG | Firmware configuration interface |
| Bus | PCI | ECAM + Generic Host, MSI / MSI-X |
| Bus | VirtIO | MMIO + PCI transport |
| IRQ | GICv2 / GICv3 / ITS | Including GICv2m MSI |
| Devicetree | OFW / FDT | Dynamic devicetree parsing |
| Other | DMA | DMA framework |
| Other | MFD EDU / SYSCON | Multi-function devices |
| Other | Regulator / Reset | Power and reset framework |
| Filesystem | DFS v2 | FatFs, devfs, romfs |
| POSIX | Partial APIs | poll / select / termios / pipe, etc. |
### 5.2 Not Enabled by Default but Available via menuconfig
This BSP enables the PCI bus and VirtIO PCI transport; QEMU also attaches the corresponding devices. The following drivers are unchecked in the default `.config` but can be used after enabling the Kconfig options and rebuilding (no `qemu.py` changes required):
| Driver / feature | Kconfig | QEMU device | Notes |
| ---------------- | ------- | ----------- | ----- |
| VirtIO Net | `RT_USING_SAL` + `RT_USING_LWIP` + `RT_USING_ETHERNET` | `virtio-net-device` | Network stack not enabled by default |
| VirtIO 9P | `RT_VIRTIO_9P` | `virtio-9p-device` | Use with `-9p` shared directory |
| SDHCI eMMC | `RT_USING_SDIO` + `RT_SDIO_SDHCI_PCI` | `sdhci-pci` | eMMC storage |
| SDIO DW MMC PCI | `RT_USING_SDIO` + `RT_SDIO_DW_MMC_PCI` | — | DesignWare MMC |
| USB | `RT_USING_USB_HOST` / `RT_USING_USB_DEVICE` | Add USB controller manually | Not a default QEMU device |
| CherryUSB | `RT_USING_CHERRYUSB` | Add USB controller manually | — |
| I2C / SPI | `RT_USING_I2C` / `RT_USING_SPI` | Depends on PCI device | Requires matching PCI controller driver |
| CAN | `RT_USING_CAN` | Depends on PCI device | — |
| Sensor | `RT_USING_SENSOR` | — | — |
| WiFi | `RT_USING_WIFI` | — | — |
| PM | `RT_USING_PM` | — | — |
| Pinctrl | `RT_USING_PINCTRL` | — | — |
| SCMI firmware | `RT_FIRMWARE_ARM_SCMI` + `RT_VIRTIO_SCMI` | — | — |
> **Note**: Any PCI driver marked `depends on RT_USING_PCI` can be enabled on this BSP via menuconfig. If QEMU does not attach the device by default, add the corresponding `-device` argument in `qemu.py`.
### 5.3 BSP-Specific Features (Driver Layer)
| Feature | Config | Startup |
| ------- | ------ | ------- |
| HMI graphics test | `RT_GRAPHIC_HMI_TEST` | `-graphic` (embedded in `drv_romfb.c`) |
| Graphics draw test | `RT_GRAPHIC_GRAPHIC_TEST` | `-graphic` (embedded in `drv_romfb.c`) |
| Camera driver | `RT_SOC_CAMERA` | `-graphic -camera` |
### 5.4 Sample Applications (`applications/`)
| Source | Build condition | Description |
| ------ | --------------- | ----------- |
| `main.c` | Always | Entry `main()`, prints `hello rt-thread` |
| `amp.c` | `RT_RPMSG_RT_THREAD_VIRTIO` | AMP heterogeneous multi-core and RPMSG demo |
| `camera.c` | `RT_SOC_CAMERA` | Overlay camera feed onto framebuffer |
**`main.c`**
Default application. Prints `hello rt-thread` after boot, then enters msh.
**`amp.c` (AMP + RPMSG)**
The primary core boots an additional CPU running RT-Thread as slave via the `amp_soc` devicetree node and PSCI. Primary and slave communicate through VirtIO RPMSG and Mailbox. The primary writes VirtIO Block `vdb` resource info into the slave DTB before starting the slave.
**Version requirement**: **Smart version** required (`RT_USING_SMART` in menuconfig). The standard kernel must run with virtual addresses equal to physical addresses. The AMP slave is loaded by QEMU into a separate physical memory region (see `amp_memory`, `kernel-entry` in `amp.dtsi`), which violates that constraint — the standard kernel cannot be used for AMP demos.
Startup:
```
./qemu.py -dtbo amp.dtsi -mem 258
```
Slave console: `telnet localhost 4323`.
msh commands:
| Command | Description |
| ------- | ----------- |
| `rpmsg_write <device> <message>` | Write a message to an RPMSG character device |
| `rpmsg_read <device>` | Read all messages from an RPMSG character device |
| `amp_startup` | Manually trigger AMP slave boot (exported when console and msh are both enabled; otherwise runs automatically at app init) |
An RPMSG endpoint is created automatically at boot (`rpmsg_char0`, endpoint name `rpmsg-char`, addresses 114/514). Addresses are swapped on the slave side.
**`camera.c` (Camera Preview)**
Centers and overlays the vfio-user PCI camera feed onto the framebuffer. Default devices `camera0``fb0`, runs for about 10 seconds (300 frames).
Startup:
```
./qemu.py -graphic -camera
```
msh command:
```
camera [camera_device] [framebuffer_device]
```
Example: `camera camera0 fb0`
## 6. Storage and Partitions
- Root filesystem is mounted on the first partition of VirtIO Block `vda0`, filesystem type `elm` (FatFs).
- Storage images are auto-created as 64 MB `qcow2` files on first run; resize with `qemu-img` or replace beforehand.
- pflash0 is used for BootROM (e.g. UEFI); this BSP uses pflash1 (`flash.qcow2`) as CFI NOR. pflash0 data is not preserved after QEMU exits.
- On Linux, partition `qcow2` images with `qemu-nbd` + `fdisk` (not supported on Windows).
## 7. QEMU Monitor Hot-Plug Tips
Dynamically add or remove VirtIO serial ports in the QEMU Monitor:
```
(qemu) chardev-add socket,host=127.0.0.1,port=4323,server=on,wait=off,telnet=on,id=console2
(qemu) device_add virtserialport,chardev=console2,name=org.rt-thread.port,id=port2
(qemu) device_del port2
(qemu) chardev-remove console2
```
Optional VirtIO device arguments (add in `qemu.py` as needed):
- Disable legacy: `-global virtio-mmio.force-legacy=false`
- Virtqueue packed: `-device virtio-XXX-device,packed=on`
- PCI mode (≥ 1.0): `-device virtio-XXX-pci,disable-legacy=on`
## 8. Notes After Configuration Changes
- After changing CPU count, adjust `qemu.py -smp` or rebuild so `RT_CPUS_NR` matches.
- GIC auto-switches to v3 when exceeding 8 cores; or specify `-gic 3` manually.
- 9P directory sharing requires QEMU built with virtfs (`--enable-virtfs`).
- `-gl` requires QEMU built with OpenGL / VirGL (`--enable-opengl`, `--enable-virglrenderer`); this is independent of RT-Thread OpenGL support — the default software stack is 2D graphics only.
- AMP (`-dtbo`) requires Smart kernel (`RT_USING_SMART`); the standard kernel requires VA=PA and cannot be used with slave images loaded at fixed physical addresses.
- Override root device or boot parameters via `-bootargs`.
+375 -33
View File
@@ -1,76 +1,418 @@
# QEMU/AArch64 VIRT板级支持包说明
# QEMU/AArch64 VIRT 板级支持包说明
中文页 | [English](README.md)
## 1. 简介
AArch64是一种采用ARMv8 ISA,用于执行A64指令的机器的64位执行模式。本工程是在QEMU的AArch64 VIRT版本上进行的一份移植
AArch64ARMv8 架构下执行 A64 指令的 64 位执行状态。本 BSP 将 RT-Thread 移植到 QEMU `virt` AArch64 机器上,基于设备模型(DM)、Open FirmwareOFW/FDT)与 PCI 总线框架,可作为 VirtIO、PCI 及各类平台驱动的开发与验证平台
当前默认配置要点:
| 项目 | 说明 |
| ---- | ---- |
| RT-Thread 版本 | 5.3 |
| 架构 | ARMv8 AArch64MMU |
| SMP | 4 核(`RT_CPUS_NR=4` |
| 中断控制器 | GICv2 / GICv3(含 ITS、MSI |
| 控制台 | UART0PL011`ttyAMA0` |
| 根文件系统 | VirtIO Block `vda0`FatFselm-chan |
| 内存 | 默认 128 MB(可通过 `qemu.py -mem` 调整) |
## 2. 编译说明
建议使用ARM Developer GNU交叉编译工具链,目前支持Linux/Windows平台:
建议使用 ARM Developer GNU 交叉编译工具链,支持 Linux / Windows 平台:
```
https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads/
```
下载x86_64 Hosted平台下载对应的`xxx-aarch64-none-elf`二进制包,解压后设置`RTT_EXEC_PATH`环境变量为该编译器的bin目录下即可。
进入到`rt-thread/bsp/qemu-virt64-aarch64`目录进行输入:
下载 x86_64 Hosted 平台对应的 `xxx-aarch64-none-elf` 二进制包,解压后将 `RTT_EXEC_PATH` 环境变量指向该编译器的 `bin` 目录。
进入 `rt-thread/bsp/qemu-virt64-aarch64` 目录执行:
```
scons
```
可以看到正常生成`rtthread.elf``rtthread.bin`文件。
或者通过 `scons --exec-path="GCC工具链路径"` 命令,在指定工具链位置的同时直接编译
正常生成 `rtthread.elf``rtthread.bin` 文件
## 3. 执行
也可通过 `scons --exec-path="GCC工具链路径"` 在指定工具链的同时直接编译。
本工程执行环境为`qemu-system-aarch64`模拟器,工程可配置为使用`Cortex-A53/A57/A72`等芯片,GIC支持`V2/V3`版本,其中`V2`最多可配置8个处理器
配置修改可使用 `scons --menuconfig`,保存后重新 `scons` 编译
## 3. 运行
本 BSP 使用 `qemu-system-aarch64` 模拟器,通过 `qemu.py` 启动。
### 3.1 安装 QEMU
Windows 平台:
Windows平台下,可以在此获取到QEMU:
```
https://www.qemu.org/download/
```
Linux平台下,以Ubuntu、Deepin系列发行版为例,可通过该命令安装QEMU:
Linux 平台(以 Ubuntu、Deepin 为例):
```
sudo apt update
sudo apt install qemu-system-arm
```
工程默认配置修改后请注意修改运行脚本。在终端执行qemu.bat或qemu.sh可以看到程序运行
部分可选功能对 QEMU 版本有要求
| 功能 | 最低 QEMU 版本 |
| ---- | -------------- |
| UFS 存储 | 8.2.0 |
| VirtIO Sound`-sound virtio` | 8.2.0 |
### 3.2 环境变量
| 变量 | 说明 |
| ---- | ---- |
| `RTT_QEMU_ROOT` | QEMU 可执行文件所在目录前缀(脚本会在其后拼接 `qemu-system-aarch64` |
| `RTT_ROOT` | RT-Thread 源码根目录,默认自动取 BSP 上两级目录 |
### 3.3 基本启动
在 BSP 目录下执行:
```
python qemu.py
```
或:
```
./qemu.py
```
首次运行会自动创建各存储设备对应的 64 MB `qcow2` 镜像。默认以 `-nographic` 模式启动,串口输出到当前终端。
典型启动日志:
```
heap: [0x40042aa0 - 0x40142aa0]
\ | /
- RT - Thread Operating System
/ | \ 4.0.4 build Aug 6 2021
2006 - 2021 Copyright by rt-thread team
Hi, this is RT-Thread!!
/ | \ 5.3.0 build ...
2006 - 2026 Copyright by rt-thread team
hello rt-thread
msh />
```
如果需要使用VirtIO-Console,请在新终端使用以下命令连接控制台:
### 3.4 `qemu.py` 命令行参数
| 参数 | 默认值 | 说明 |
| ---- | ------ | ---- |
| `-gic` | `2` | GIC 版本(`2` / `3` / `max`);`-smp` 大于 8 时自动切换为 GICv3 |
| `-smp` | `RT_CPUS_NR`4 | CPU 核心数 |
| `-mem` | `128` | 内存大小(MB |
| `-el` | `1` | 异常级别:`1` 默认;`2` 开启虚拟化;`3` 开启 secure |
| `-bootargs` | 见下文 | 内核启动参数 |
| `-initrd` | — | 指定 initrd 镜像路径 |
| `-graphic` | — | 图形模式(ramfb + VirtIO 键盘/平板),替代 `-nographic` |
| `-gl` | — | 图形模式下挂载 `virtio-gpu-gl-pci` 并开启 QEMU 显示端 OpenGL(如 `-gl gtk`);需 QEMU 带 `--enable-opengl``--enable-virglrenderer`,且须与 `-graphic` 合用 |
| `-debug` | — | 启用 GDB 调试(`-S -s` |
| `-dumpdtb` | — | 导出运行时 DTB 并转为 DTS |
| `-dtb` | — | 使用自定义 DTB 文件 |
| `-virtio-block` | `virtio` | VirtIO Block 磁盘镜像名前缀(生成 `virtio.qcow2`,挂载为 `vda` |
| `-scsi` | `scsi` | VirtIO SCSI 磁盘镜像名前缀 |
| `-flash` | `flash` | pflash 磁盘镜像名前缀(pflash1CFI NOR |
| `-emmc` | `emmc` | SDHCI eMMC 磁盘镜像名前缀 |
| `-nvme` | `nvme` | NVMe 磁盘镜像名前缀 |
| `-ahci` | `ahci` | AHCI SATA 磁盘镜像名前缀 |
| `-ufs` | `ufs` | UFS 磁盘镜像名前缀(QEMU ≥ 8.2.0 |
| `-cdrom` | — | SCSI CD-ROM 镜像路径(如 ISO 文件) |
| `-sound` | `hda` | 音频设备:`hda`Intel HDA)或 `virtio`VirtIO Sound PCI |
| `-tap` | — | 使用 TAP 网卡(替代 user 模式) |
| `-ssh` | `12055` | user 模式下 SSH 端口转发(`hostfwd=tcp::PORT-:22` |
| `-9p` | — | VirtIO 9P 共享目录路径(需在 menuconfig 中启用 VirtIO 9P |
| `-camera` | — | 启用 vfio-user 摄像头(仅 Linux,配合 `qemu-device-camera` |
| `-dtbo` | — | AMP 模式:指定 DTBO overlay 文件(如 `amp.dtsi`);**须 Smart 版本内核**(见下文说明) |
默认 `-bootargs`
```
console=ttyAMA0 earlycon cma=8M coherent_pool=2M root=vda0 rootfstype=elm rootwait rw
```
### 3.5 常用启动示例
图形界面(VirtIO GPU + 键鼠):
```
./qemu.py -graphic
```
QEMU OpenGL 显示(`-gl`):
```
./qemu.py -graphic -gl gtk
```
> **说明**`-gl` 仅在 QEMU / 宿主机显示链路侧启用 OpenGL`virtio-gpu-gl-pci` + VirGL)。本 BSP 默认仅包含 VirtIO GPU 2D 帧缓冲驱动,**没有 OpenGL / VirGL 用户态与内核侧实现**,因此 `-gl` 不会带来 RT-Thread 内的 OpenGL 加速;图形演示请使用 `-graphic``virtio-gpu-device`)配合 framebuffer / HMI 测试。
GDB 调试:
```
./qemu.py -debug
```
更大内存与 GICv3
```
./qemu.py -mem 256 -gic 3
```
挂载 CD-ROM
```
./qemu.py -cdrom /path/to/image.iso
```
VirtIO Sound 音频:
```
./qemu.py -sound virtio
```
9P 目录共享(需先启用 `RT_VIRTIO_9P`):
```
./qemu.py -9p /path/to/share
```
AMP 异构多核(RPMSG 从核,**须 Smart 版本**):
```
./qemu.py -dtbo amp.dtsi -mem 258
```
> **说明**AMP 示例要求启用 **Smart 版本**`RT_USING_SMART`)。标准版内核要求在虚拟地址与物理地址相等的区域运行;从核镜像由 QEMU `loader` 加载到 `amp.dtsi` 指定的固定物理地址(如 `kernel-entry = 0x48480000`),与主核 MMU 映射布局不同,标准版无法在该地址空间正常启动。请在 menuconfig 中开启 Smart 后重新编译。
摄像头演示:
```
./qemu.py -graphic -camera
```
### 3.6 控制台与 Telnet
| 端口 | 设备 | 说明 |
| ---- | ---- | ---- |
| 当前终端 | UART0PL011 | 默认 `-nographic` 串口 |
| `4321` | VirtIO Console | `telnet 127.0.0.1 4321`,端口名 `org.rt-thread.console` |
| `4322` | PCI 8250 串口 | `telnet 127.0.0.1 4322` |
| `4323` | AMP 从核控制台 | 仅 `-dtbo` 模式,`telnet localhost 4323` |
VirtIO Console 连接示例:
```
telnet 127.0.0.1 4321
```
如果使用tap网卡模式,以设备tap0为例,将qemu运行脚本
### 3.7 网络
默认使用 user 模式网络(`-netdev user`),SSH 端口转发到本机 `12055`(可用 `-ssh` 修改)。
TAP 网卡模式示例(以 `tap0` 为例):
```
-netdev user,id=net0
```
修改为
```
-netdev tap,id=net0,ifname=tap0
./qemu.py -tap
```
## 4.支持情况
Linux 下需预先配置 TAP 网桥,Windows / WSL 下 TAP 支持有限。TAP 模式下 SSH 端口转发不可用。
| 驱动 | 支持情况 | 备注 |
| ------ | ---- | :------: |
| UART | 支持 | UART0 |
| RTC | 支持 | - |
| GPIO | 支持 | - |
| VIRTIO BLK | 支持 | - |
| VIRTIO NET | 支持 | - |
| VIRTIO Console | 支持 | - |
| VIRTIO GPU | 支持 | 2D |
| VIRTIO Input | 支持 | Keyboard, Mouse, Tablet |
## 4. QEMU 默认挂载设备
`qemu.py` 默认向虚拟机挂载以下设备(与驱动默认配置对应):
| QEMU 设备 | 镜像文件 | RT-Thread 侧 |
| --------- | -------- | ------------ |
| `virtio-blk-device` | `virtio.qcow2` | VirtIO Block,根分区 `vda0` |
| `virtio-scsi-pci` + `scsi-hd` | `scsi.qcow2` | VirtIO SCSI |
| `scsi-cd`(可选 `-cdrom` | 用户指定 | SCSI CD-ROM |
| `pflash`index=1 | `flash.qcow2` | MTD NOR CFI |
| `sdhci-pci` + `sd-card` | `emmc.qcow2` | SDHCI eMMC(需启用 SDIO |
| `nvme` + `nvme-ns` | `nvme.qcow2` | NVMe |
| `ahci` + `ide-hd` | `ahci.qcow2` | AHCI SATA |
| `ufs` + `ufs-lu` | `ufs.qcow2` | UFSQEMU ≥ 8.2.0 |
| `virtio-net-device` | — | VirtIO Net(需启用网络协议栈) |
| `virtio-rng-device` | — | VirtIO RNG |
| `virtio-crypto-device` | — | VirtIO Crypto |
| `virtio-serial-device` | — | VirtIO Console / RPROC Serial |
| `pci-serial`8250 PCI | — | PCI 8250 串口 |
| `intel-hda` + `hda-duplex` | — | Intel HDA 音频 |
| `i6300esb` | — | I6300ESB 看门狗 |
| `edu` | — | QEMU EDU 教学设备(MFD |
| `virtio-gpu-device``-graphic` | — | VirtIO GPU 2D(默认) |
| `virtio-gpu-gl-pci``-graphic -gl` | — | QEMU OpenGL 显示设备;RT-Thread 侧无对应 GL 驱动 |
| `virtio-keyboard-device` / `virtio-tablet-device` | — | VirtIO Input |
| `virtio-9p-device``-9p` | — | VirtIO 9P(需启用驱动) |
| `virtio-sound-pci``-sound virtio` | — | VirtIO Sound |
| vfio-user 摄像头(`-camera` | — | PCI 摄像头(BSP `drv_camera` |
## 5. 驱动支持情况
### 5.1 默认已启用
| 类别 | 驱动 | 说明 |
| ---- | ---- | ---- |
| 串口 | PL011 | UART0,系统控制台 `uart0` / `ttyAMA0` |
| 串口 | 8250 PCI | PCI 串口,Telnet 端口 4322 |
| RTC | PL031 | 实时时钟 |
| GPIO | PL061 | GPIO 控制器 |
| 时钟 | ARM Architected Timer | 系统 tick |
| 看门狗 | I6300ESB | PCI 看门狗 |
| 存储 | VirtIO Block | 块设备,`vda` |
| 存储 | VirtIO SCSI | SD / CD-ROM |
| 存储 | AHCI PCI | SATA 磁盘 |
| 存储 | NVMe PCI | NVMe 磁盘 |
| 存储 | UFS PCI | UFS 磁盘 |
| 存储 | MTD NOR CFI | pflash 闪存 |
| 存储 | BLK 分区 | DFS / EFI 分区表 |
| 图形 | VirtIO GPU | 2D 帧缓冲(`-graphic`);不含 OpenGL / VirGL |
| 图形 | Framebuffer | ROMFB 800×600,含 HMI / 图形测试 |
| 图形 | LCD | LCD 设备框架 |
| 输入 | VirtIO Input | 键盘、鼠标、平板(`-graphic` |
| 输入 | Touchscreen | 触摸屏框架 |
| 输入 | Keyboard GPIO | GPIO 键盘 |
| 输入 | Power | 电源键 |
| 音频 | Intel HDA | 默认 `-sound hda` |
| 音频 | VirtIO Sound | `-sound virtio` |
| 加密 | HwCrypto | AES / DES / 3DES / RC4 / RNG |
| 加密 | VirtIO Crypto | VirtIO 加密后端 |
| 随机数 | VirtIO RNG | 硬件随机数 |
| 通信 | VirtIO Console | Telnet 4321 |
| 通信 | VirtIO RPROC Serial | Remoteproc 串口链路 |
| 通信 | RPMSG | VirtIO RPMSG 字符设备 |
| 通信 | Mailbox PIC | 邮箱中断控制器 |
| 固件 | QEMU FW_CFG | 固件配置接口 |
| 总线 | PCI | ECAM + Generic HostMSI / MSI-X |
| 总线 | VirtIO | MMIO + PCI 传输 |
| 中断 | GICv2 / GICv3 / ITS | 含 GICv2m MSI |
| 设备树 | OFW / FDT | 动态设备树解析 |
| 其他 | DMA | DMA 框架 |
| 其他 | MFD EDU / SYSCON | 多功能设备 |
| 其他 | Regulator / Reset | 电源与复位框架 |
| 文件系统 | DFS v2 | FatFs、devfs、romfs |
| POSIX | 部分接口 | poll / select / termios / pipe 等 |
### 5.2 默认未启用但可通过 menuconfig 开启
本 BSP 已启用 PCI 总线与 VirtIO PCI 传输,QEMU 中也已挂载对应设备。下列驱动在默认 `.config` 中未勾选,开启相应 Kconfig 选项并重新编译后即可使用(无需修改 `qemu.py`):
| 驱动 / 功能 | Kconfig 要点 | QEMU 设备 | 说明 |
| ----------- | ------------ | --------- | ---- |
| VirtIO Net | `RT_USING_SAL` + `RT_USING_LWIP` + `RT_USING_ETHERNET` | `virtio-net-device` | 网络协议栈未默认启用 |
| VirtIO 9P | `RT_VIRTIO_9P` | `virtio-9p-device` | 配合 `-9p` 共享目录 |
| SDHCI eMMC | `RT_USING_SDIO` + `RT_SDIO_SDHCI_PCI` | `sdhci-pci` | eMMC 存储 |
| SDIO DW MMC PCI | `RT_USING_SDIO` + `RT_SDIO_DW_MMC_PCI` | — | DesignWare MMC |
| USB | `RT_USING_USB_HOST` / `RT_USING_USB_DEVICE` | 需自行添加 USB 控制器 | 非 QEMU 默认设备 |
| CherryUSB | `RT_USING_CHERRYUSB` | 需自行添加 USB 控制器 | — |
| I2C / SPI | `RT_USING_I2C` / `RT_USING_SPI` | 视具体 PCI 设备 | 需对应 PCI 控制器驱动 |
| CAN | `RT_USING_CAN` | 视具体 PCI 设备 | — |
| Sensor | `RT_USING_SENSOR` | — | — |
| WiFi | `RT_USING_WIFI` | — | — |
| PM 电源管理 | `RT_USING_PM` | — | — |
| Pinctrl | `RT_USING_PINCTRL` | — | — |
| SCMI 固件 | `RT_FIRMWARE_ARM_SCMI` + `RT_VIRTIO_SCMI` | — | — |
> **说明**:凡标注 `depends on RT_USING_PCI` 的 PCI 类驱动,均可在此 BSP 上通过 menuconfig 启用;QEMU 侧若未挂载对应设备,需自行在 `qemu.py` 中添加 `-device` 参数。
### 5.3 BSP 特有功能(驱动层)
| 功能 | 配置项 | 启动方式 |
| ---- | ------ | -------- |
| HMI 图形测试 | `RT_GRAPHIC_HMI_TEST` | `-graphic``drv_romfb.c` 内嵌) |
| 图形绘制测试 | `RT_GRAPHIC_GRAPHIC_TEST` | `-graphic``drv_romfb.c` 内嵌) |
| 摄像头驱动 | `RT_SOC_CAMERA` | `-graphic -camera` |
### 5.4 示例应用(`applications/`
| 源文件 | 编译条件 | 说明 |
| ------ | -------- | ---- |
| `main.c` | 始终编译 | 入口 `main()`,打印 `hello rt-thread` |
| `amp.c` | `RT_RPMSG_RT_THREAD_VIRTIO` | AMP 异构多核与 RPMSG 通信示例 |
| `camera.c` | `RT_SOC_CAMERA` | 摄像头画面叠加到 framebuffer |
**`main.c`**
默认应用,系统启动后输出 `hello rt-thread`,随后进入 msh。
**`amp.c`AMP + RPMSG**
主核通过设备树 `amp_soc` 节点,以 PSCI 拉起额外一颗 CPU 运行从核 RT-Thread,主从之间通过 VirtIO RPMSG + Mailbox 通信。主核将 VirtIO Block `vdb` 的资源信息写入从核 DTB 后启动从核。
**版本要求**:须 **Smart 版本**menuconfig 中 `RT_USING_SMART`)。标准版内核必须在虚拟地址与物理地址一致的映射下运行;AMP 从核由 QEMU 加载到独立物理内存区域(见 `amp.dtsi``amp_memory``kernel-entry` 等),不满足该约束,因此标准版无法用于 AMP 演示。
启动方式:
```
./qemu.py -dtbo amp.dtsi -mem 258
```
从核控制台:`telnet localhost 4323`
msh 命令:
| 命令 | 说明 |
| ---- | ---- |
| `rpmsg_write <设备> <消息>` | 向 RPMSG 字符设备写入消息 |
| `rpmsg_read <设备>` | 读取 RPMSG 字符设备全部消息 |
| `amp_startup` | 手动触发 AMP 从核启动(同时启用控制台与 msh 时导出;否则自动在应用初始化阶段执行) |
系统启动时会自动创建 RPMSG 端点(`rpmsg_char0`,端点名 `rpmsg-char`,地址 114/514)。从核侧地址互换。
**`camera.c`(摄像头预览)**
将 vfio-user PCI 摄像头画面居中叠加到 framebuffer,默认设备 `camera0``fb0`,约 10 秒(300 帧)。
启动方式:
```
./qemu.py -graphic -camera
```
msh 命令:
```
camera [摄像头设备] [framebuffer设备]
```
示例:`camera camera0 fb0`
## 6. 存储与分区
- 根文件系统默认挂载在 VirtIO Block 第一个分区 `vda0`,文件系统类型 `elm`FatFs)。
- 各存储镜像首次运行自动创建为 64 MB `qcow2` 文件,可通过 `qemu-img` 扩容或预先替换。
- pflash0 用于 BootROM(如 UEFI),本 BSP 使用 pflash1`flash.qcow2`)作为 CFI NORpflash0 数据在 QEMU 退出后不保留。
- Linux 下可使用 `qemu-nbd` + `fdisk``qcow2` 镜像分区(Windows 不支持)。
## 7. QEMU Monitor 热插拔提示
在 QEMU Monitor 中可动态增删 VirtIO 串口端口:
```
(qemu) chardev-add socket,host=127.0.0.1,port=4323,server=on,wait=off,telnet=on,id=console2
(qemu) device_add virtserialport,chardev=console2,name=org.rt-thread.port,id=port2
(qemu) device_del port2
(qemu) chardev-remove console2
```
VirtIO 设备可选参数(在 `qemu.py` 中按需添加):
- 禁用 legacy` -global virtio-mmio.force-legacy=false`
- Virtqueue packed` -device virtio-XXX-device,packed=on`
- PCI 模式(≥ 1.0):` -device virtio-XXX-pci,disable-legacy=on`
## 8. 修改配置后的注意事项
- 修改 CPU 数量后,同步调整 `qemu.py -smp` 或重新编译使 `RT_CPUS_NR` 与之一致。
- 超过 8 核时 GIC 自动切换为 v3,也可手动指定 `-gic 3`
- 启用 9P 目录共享需 QEMU 编译时包含 virtfs`--enable-virtfs`)。
- 使用 `-gl` 需 QEMU 编译时包含 OpenGL / VirGL`--enable-opengl``--enable-virglrenderer`);这与 RT-Thread 是否支持 OpenGL 无关,当前软件栈默认仅 2D 图形。
- AMP`-dtbo`)须 Smart 版本内核(`RT_USING_SMART`);标准版要求 VA=PA 运行,无法用于从核固定物理地址加载场景。
- 修改根设备或启动参数时,通过 `-bootargs` 覆盖默认参数。
@@ -4,7 +4,7 @@ cwd = GetCurrentDir()
src = Glob('*.c') + Glob('*.cpp')
CPPPATH = [cwd]
if not GetDepend(['RT_RPMSG_RT_THREAD_VIRTIO']):
if not GetDepend(['RT_USING_SMART']):
SrcRemove(src, ['amp.c'])
if not GetDepend(['RT_SOC_CAMERA']):
@@ -52,7 +52,7 @@ static void blend_camera_to_fb(rt_uint8_t *cam_fb, rt_uint8_t *fb,
src_row = cam_fb + y * cam_w * 3;
dst = fb + (dst_y + y) * fb_pitch + dst_x * 2;
dst_pixel = (rt_uint16_t*)dst;
for (x = 0; x < draw_w; ++x)
{
rt_uint8_t r = src_row[x * 3 + 0];
@@ -63,7 +63,7 @@ static void blend_camera_to_fb(rt_uint8_t *cam_fb, rt_uint8_t *fb,
}
break;
}
case RTGRAPHIC_PIXEL_FORMAT_ARGB888:
{
rt_uint32_t *dst_pixel;
@@ -72,7 +72,7 @@ static void blend_camera_to_fb(rt_uint8_t *cam_fb, rt_uint8_t *fb,
src_row = cam_fb + y * cam_w * 3;
dst = fb + (dst_y + y) * fb_pitch + dst_x * 4;
dst_pixel = (rt_uint32_t*)dst;
for (x = 0; x < draw_w; ++x)
{
rt_uint8_t r = src_row[x * 3 + 0];
@@ -83,7 +83,7 @@ static void blend_camera_to_fb(rt_uint8_t *cam_fb, rt_uint8_t *fb,
}
break;
}
case RTGRAPHIC_PIXEL_FORMAT_ABGR888:
{
rt_uint32_t *dst_pixel;
@@ -92,7 +92,7 @@ static void blend_camera_to_fb(rt_uint8_t *cam_fb, rt_uint8_t *fb,
src_row = cam_fb + y * cam_w * 3;
dst = fb + (dst_y + y) * fb_pitch + dst_x * 4;
dst_pixel = (rt_uint32_t*)dst;
for (x = 0; x < draw_w; ++x)
{
rt_uint8_t r = src_row[x * 3 + 0];
@@ -103,7 +103,7 @@ static void blend_camera_to_fb(rt_uint8_t *cam_fb, rt_uint8_t *fb,
}
break;
}
default:
/* Fallback: direct copy for RGB888 */
for (y = 0; y < draw_h; ++y)
@@ -14,6 +14,19 @@ exit
* 2026-04-07 GuEe-GUI the first version
*/
/*
* Install libvfio-user
* 1. Dependency library
* Debian:
* sudo apt install libjson-c-dev libcmocka-dev
* RedHat:
* sudo yum install json-c-devel libcmocka-devel
*
* 2. git clone https://github.com/nutanix/libvfio-user.git
* 3. meson build
* 4. ninja -C build
*/
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>
+16 -1
View File
@@ -96,6 +96,7 @@ q_flash = "flash"
q_emmc = "emmc"
q_nvme = "nvme"
q_ahci = "ahci"
q_sound = "hda"
q_gl = None
q_9p = ""
q_ufs = "ufs"
@@ -129,6 +130,7 @@ for i in range(len(opt)):
if is_opt("flash", inkey): q_flash = opt[i + 1]
if is_opt("emmc", inkey): q_emmc = opt[i + 1]
if is_opt("nvme", inkey): q_nvme = opt[i + 1]
if is_opt("sound", inkey): q_sound = opt[i + 1]
if is_opt("gl", inkey): q_gl = "-device virtio-gpu-gl-pci -display {},gl=on ".format(opt[i + 1])
if is_opt("9p", inkey): q_9p = opt[i + 1]
if is_opt("ufs", inkey): q_ufs = opt[i + 1]
@@ -164,6 +166,18 @@ elif q_gl != None:
print("Error: GL should in graphic mode")
exit(-1)
# Sound
if q_sound == "hda":
q_sound = "-device intel-hda -device hda-duplex "
elif q_sound == "virtio":
if qemu_version < '8.2.0':
print("Error: VirtIO Sound is not in this version: {}".format(qemu_version.toString()))
exit(-1)
q_sound = "-device virtio-sound-pci,audiodev=vsnd -audiodev alsa,id=vsnd "
else:
print("Error: Invalid -sound {}".format(q_sound))
exit(-1)
# Net
# --enable-slirp
# Enable TAP in example (not support in Windows, Maybe WSL2):
@@ -284,6 +298,7 @@ cmd_base = """
-device virtio-serial-device \
-chardev socket,host=127.0.0.1,port=4321,server=on,wait=off,telnet=on,id=console0 \
-device virtserialport,chardev=console0,name=org.rt-thread.console \
{} \
-drive if=pflash,file={}.qcow2,format=qcow2,index=1 \
-device pci-serial,chardev=console1 \
-chardev socket,host=127.0.0.1,port=4322,server=on,wait=off,telnet=on,id=console1 \
@@ -304,7 +319,7 @@ cmd_base = """
def cmd():
return cmd_base.format(RTT_QEMU_ROOT, q_gic, q_dumpdtb, q_el, q_smp, q_mem, q_bootargs, q_dtb, q_initrd,
q_graphic, q_debug, q_block, q_net, q_scsi, cdrom_cfg, virtfs_cfg,
q_flash, q_emmc, q_nvme, q_ahci, ufs_cfg, camera_cfg, amp_cfg)
q_sound, q_flash, q_emmc, q_nvme, q_ahci, ufs_cfg, camera_cfg, amp_cfg)
def dumpdtb():
dtb = q_dumpdtb.split('=')[-1]
+34 -14
View File
@@ -61,7 +61,7 @@
/* end of rt_strnlen options */
/* end of klibc options */
#define RT_NAME_MAX 16
#define RT_NAME_MAX 24
#define RT_USING_SMP
#define RT_CPUS_NR 4
#define RT_ALIGN_SIZE 8
@@ -78,6 +78,8 @@
#define RT_USING_TIMER_SOFT
#define RT_TIMER_THREAD_PRIO 4
#define RT_TIMER_THREAD_STACK_SIZE 8192
#define RT_USING_CPU_USAGE_TRACER
#define RT_CPU_USAGE_CALC_INTERVAL_MS 200
/* kservice options */
@@ -100,6 +102,7 @@
#define RT_USING_MEMPOOL
#define RT_USING_SMALL_MEM
#define RT_USING_SLAB
#define RT_USING_MEMHEAP
#define RT_MEMHEAP_FAST_MODE
#define RT_USING_MEMHEAP_AS_HEAP
@@ -151,7 +154,7 @@
#define FINSH_USING_MSH
#define FINSH_THREAD_NAME "tshell"
#define FINSH_THREAD_PRIORITY 20
#define FINSH_THREAD_STACK_SIZE 4096
#define FINSH_THREAD_STACK_SIZE 8192
#define FINSH_USING_HISTORY
#define FINSH_HISTORY_LINES 10
#define FINSH_USING_SYMTAB
@@ -167,9 +170,7 @@
#define DFS_USING_POSIX
#define DFS_USING_WORKDIR
#define DFS_FD_MAX 32
#define RT_USING_DFS_V1
#define DFS_FILESYSTEMS_MAX 4
#define DFS_FILESYSTEM_TYPES_MAX 8
#define RT_USING_DFS_V2
#define RT_USING_DFS_ELMFAT
/* elm-chan's FatFs, Generic FAT Filesystem Module */
@@ -187,7 +188,6 @@
#define RT_DFS_ELM_MUTEX_TIMEOUT 3000
/* end of elm-chan's FatFs, Generic FAT Filesystem Module */
#define RT_USING_DFS_DEVFS
#define RT_USING_DFS_9PFS
#define RT_USING_DFS_ROMFS
/* end of DFS: device virtual file system */
@@ -204,6 +204,7 @@
#define RT_USING_SERIAL_V1
#define RT_SERIAL_USING_DMA
#define RT_SERIAL_RB_BUFSZ 256
#define RT_USING_SERIAL_BYPASS
#define RT_SERIAL_PL011
#define RT_SERIAL_8250
#define RT_SERIAL_8250_PCI
@@ -222,6 +223,12 @@
#define RT_RTC_PL031
#define RT_USING_WDT
#define RT_WDT_I6300ESB
#define RT_USING_AUDIO
#define RT_AUDIO_REPLAY_MP_BLOCK_SIZE 4096
#define RT_AUDIO_REPLAY_MP_BLOCK_COUNT 2
#define RT_AUDIO_RECORD_PIPE_SIZE 2048
#define RT_AUDIO_INTEL_HDA
#define RT_USING_TOUCH
#define RT_USING_LCD
#define RT_USING_GRAPHIC
#define RT_GRAPHIC_FB
@@ -247,9 +254,19 @@
#define RT_INPUT_POWER
#define RT_INPUT_KEYBOARD
#define RT_INPUT_KEYBOARD_GPIO
#define RT_INPUT_TOUCHSCREEN
#define RT_USING_MBOX
#define RT_MBOX_PIC
#define RT_USING_RPMSG
#define RT_RPMSG_CHAR_MSG_MAX 64
#define RT_RPMSG_CHAR_MSG_SIZE_MAX 256
#define RT_RPMSG_RT_THREAD_VIRTIO
#define RT_USING_ATA
#define RT_ATA_AHCI
#define RT_ATA_AHCI_PCI
#define RT_USING_NVME
#define RT_USING_NVME_IO_QUEUE 4
#define RT_NVME_PCI
#define RT_USING_BLK
/* Partition Types */
@@ -260,9 +277,12 @@
#define RT_USING_SCSI
#define RT_SCSI_SD
#define RT_SCSI_CDROM
#define RT_USING_UFS
#define RT_UFS_PCI
#define RT_USING_FIRMWARE
#define RT_FIRMWARE_QEMU_FW_CFG
#define RT_USING_REGULATOR
#define RT_USING_RESET
/* Power Management (PM) Domains device drivers */
@@ -273,10 +293,13 @@
#define RT_VIRTIO_BLK
#define RT_VIRTIO_CONSOLE
#define RT_VIRTIO_RNG
#define RT_VIRTIO_RPMSG
#define RT_VIRTIO_SCSI
#define RT_VIRTIO_RPROC_SERIAL
#define RT_VIRTIO_GPU
#define RT_VIRTIO_INPUT
#define RT_VIRTIO_CRYPTO
#define RT_VIRTIO_SOUND
#define RT_USING_DMA
#define RT_USING_MFD
#define RT_MFD_EDU
@@ -308,6 +331,10 @@
/* SoC (System on Chip) Drivers */
#define RT_GRAPHIC_ROMFB_WIDTH 800
#define RT_GRAPHIC_ROMFB_HEIGHT 600
#define RT_SOC_CAMERA
/* end of SoC (System on Chip) Drivers */
/* end of Device Drivers */
/* C/C++ and POSIX layer */
@@ -333,6 +360,7 @@
#define RT_USING_POSIX_TERMIOS
#define RT_USING_POSIX_DELAY
#define RT_USING_POSIX_CLOCK
#define RT_USING_POSIX_TIMER
/* Interprocess Communication (IPC) */
@@ -505,14 +533,6 @@
/* GD32 Drivers */
/* end of GD32 Drivers */
/* HPMicro SDK */
/* end of HPMicro SDK */
/* FT32 HAL & SDK Drivers */
/* end of FT32 HAL & SDK Drivers */
/* end of HAL & SDK Drivers */
/* sensors drivers */