diff --git a/rt-thread-version/rt-thread-standard/_sidebar.md b/rt-thread-version/rt-thread-standard/_sidebar.md index aa0f6f60f7f907a63be4a050b0ead5cf88d41ba9..e34b7b635bd97d105c3fe96c08c973246836557a 100644 --- a/rt-thread-version/rt-thread-standard/_sidebar.md +++ b/rt-thread-version/rt-thread-standard/_sidebar.md @@ -2,6 +2,7 @@ - **RT-Thread 标准版本** - 简介 + - [RT-Thread 简介](/rt-thread-version/rt-thread-standard/README.md) - 开发环境搭建 - [在windows平台使用QEMU运行RT-Thread](/rt-thread-version/rt-thread-standard/application-note/setup/qemu/windows/an0006-qemu-windows.md) @@ -209,7 +210,10 @@ - [兆易创新GD32F527I-EVAL开发实践指南](/rt-thread-version/rt-thread-standard/tutorial/make-bsp/gd32/兆易创新GD32F527I-EVAL开发实践指南.md) - 富瀚微系列 - [富瀚微FH8626V300L开发实践指南](/rt-thread-version/rt-thread-standard/tutorial/make-bsp/fullhan/富瀚微FH8626V300L开发实践指南.md) - + + - XUANTIE系列 + - [XUANTIE开发实践指南](/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/XUANTIE开发实践指南.md) + - 官方开发板 - [星火一号](/rt-thread-version/rt-thread-standard/hw-board/spark-1/spark-1.md) - [ART-PI](/rt-thread-version/rt-thread-standard/hw-board/art-pi/art-pi.md) diff --git "a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/XUANTIE\345\274\200\345\217\221\345\256\236\350\267\265\346\214\207\345\215\227.md" "b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/XUANTIE\345\274\200\345\217\221\345\256\236\350\267\265\346\214\207\345\215\227.md" new file mode 100644 index 0000000000000000000000000000000000000000..5df41ceb1125420bd3916b43abed00e3858be886 --- /dev/null +++ "b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/XUANTIE\345\274\200\345\217\221\345\256\236\350\267\265\346\214\207\345\215\227.md" @@ -0,0 +1,298 @@ +# XUANTIE开发实践指南 + +| **目录** | **作者** | +| ----------------------------- | ----------------------- | +| **零、实践指南说明** | **RT-Thread & XUANTIE** | +| **一、XUANTIE开发之CDK IDE** | **RT-Thread & XUANTIE** | +| **二、XUANTIE开发之VSCode** | **RT-Thread & XUANTIE** | +| **三、XUANTIE开发之RT-Smart** | **RT-Thread & XUANTIE** | +| **FAQ** | **RT-Thread & XUANTIE** | + +**我有疑问:**[**RT-Thread 官方论坛**](https://gitee.com/link?target=https%3A%2F%2Fclub.rt-thread.org) + +# 《XUANTIE开发实践指南》说明 + +[XUANTIE系列BSP链接](https://github.com/RT-Thread/rt-thread/tree/master/bsp/xuantie),玄铁系列BSP全面支持了XUANTIE系列的E,C与R内核,所有的内核均支持在XUANTIE官方的QEMU运行RT-Thread标准版本RTOS,针对玄铁C系列支持了RT-Smart,XUANTIE系列BSP方便其它使用XUNATIE系列内核的MCU/MPU可以快速的支持RTOS,该系列BSP未针对具体的MCU/MPU平台,而是直接以芯片内核为基础的BSP,在当前BSP的基础上添加具体MCU/MPU的设备驱动即可快速构建具体MCU/MPU平台的RTOS SDK。 + +同时当前BSP支持多种开发方式,使用XUNATIE系列内核的MCU/MPU可以便捷的为用户提供多种开发方式。 + +# 一、XUANTIE开发之CDK IDE + +CDK IDE是玄铁官方提供的集成开发环境,便于用户开发RISC-V架构的MCU/MPU,当前已经上架至文档中心的[快速上手](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/tutorial/quick-start/xuantie/quick-start)。 + +# 二、XUANTIE开发之VSCode + +VSCode是一个功能丰富的编辑器,借助其丰富的插件可以很方便的搭建一个开发环境。 + +首先可以使用命令的方式设置BSP构建所需的工具链路径,或者可以直接修改rtconfig.py中的EXEC_PATH字段,示例如下: + +```python +EXEC_PATH = r'D:\C-Sky\CDKRepo\Toolchain\XTGccElfNewlib\V3.2.0\R\bin' +``` + +然后使用env在BSP根路径下打开工程,执行scons命令编译生成可执行文件。 + +![](figures/10.prj.png) + +编译生成可执行文件后,执行scons --target=vsc命令即可生成vscode工程所需的文件,示例如下: + +![](figures/11.prj.png) + +上述日志表示成功生成了VSCode所需的文件,然后在当前的路径使用VSCode打开,如下图所示: + +![](figures/12.prj.png) + +然后修改调试配置文件,示例如下: + +- lunch.json + +```json +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Debug QEMU with GDB", + "type": "cppdbg", + "request": "launch", + "program": "E:\\rt-thread\\bsp\\xuantie\\smartl\\e906\\rtthread.elf", + "args": [], + "stopAtEntry": true, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "miDebuggerPath": "D:\\C-Sky\\CDKRepo\\Toolchain\\XTGccElfNewlib\\V3.2.0\\R\\bin\\riscv64-unknown-elf-gdb.exe", + "miDebuggerServerAddress": "localhost:23333", + "setupCommands": [ + { + "description": "Enable pretty-printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true + } + ], + "preLaunchTask": "Start QEMU" + } + ] +} +``` + +- task.json + +```json +{ + "version": "2.0.0", + "tasks": [ + { + "label": "Start QEMU", + "type": "shell", + "command": "E:\\XuanTieCore\\6.QEMU\\qemu-system-riscv32.exe", + "args": [ + "-machine", + "smartl", + "-kernel", + "E:\\rt-thread\\bsp\\xuantie\\smartl\\e906\\rtthread.elf", + "-nographic", + "-gdb", + "tcp::23333", + "-S" + ], + "isBackground": true, + "problemMatcher": [], + "group": { + "kind": "build", + "isDefault": true + } + } + ] +} +``` + +将示例文件中与路径相关的配置修改为实际的路径。 + +完成上述路径后,点击调试即可进入调试模式,示例如下: + +![](figures/13.prj.png) + +接下来就可以使用VSCode进行开发了。 + +# 三、XUANTIE开发之RT-Smart + +下文简要介绍在C906上运行RT-Smart系统的步骤. + +## 1 下载RT-Shread源码 + +RT-Smart与RT-Thread的源码位于同一个仓库,使用menuconfig工具配置选择RT-Smart或RT-Thread. + +```shell +git clone https://github.com/RT-Thread/rt-thread.git +``` + +## 2.配置工具链 + +开发工具链可从 [Xuantie-900-gcc-linux-6.6.0-musl64-x86_64-V3.0.2-20250410.tar.gz](https://github.com/RT-Thread/toolchains-ci/releases/download/v1.9/Xuantie-900-gcc-linux-6.6.0-musl64-x86_64-V3.0.2.tar.gz) 下载。下载完成后,将其解压到 /opt 目录,然后编辑 ~/.bashrc 文件,添加以下环境变量配置: + +```shell +export RTT_CC="gcc" +export RTT_EXEC_PATH="/opt/Xuantie-900-gcc-linux-6.6.0-musl64-x86_64-V3.0.2/bin/" +export RTT_CC_PREFIX="riscv64-unknown-linux-musl-" +export PATH="$RTT_EXEC_PATH:$PATH" +``` + +## 3.使能RT-Smart + +首先进入RT-Thread Kernel配置选项: + +![](figures/5.prj.png) + +开启RT-Thread Smart选项: + +![](figures/6.prj.png) + +## 4.使能 lwext4 软件包 + +基于 rt-thread 仓库的 bsp/xuantie/virt64/c906/ 构建内核镜像,最终生成 rtthread.bin/rtthread.elf,内核默认支持FAT,若需挂载 ext4 的文件系统,则可添加 lwext4 软件包,即使能 PKG_USING_LWEXT4,不使用则可以不选。 + +```shell +RT-Thread online packages -> + system packages -> + lwext4: an excellent choice of ext2/3/4 filesystem for microcontrollers +``` + +![](figures/7.prj.png) + +## 5.Scons编译 + +![](figures/8.prj.png) + +## 6.制作根文件系统 + +拉取[userapps](https://github.com/RT-Thread/userapps)仓库: userapps仓库包含了一些应用程序和配置文件,能够快速生成根文件系统,并为 RT-Thread 操作系统构建所需的应用程序。 + +```shell +git clone https://github.com/RT-Thread/userapps +``` + +在 userapps 目录中,将有如下文件: + +![](figures/9.prj.png) + +1. apps:存放应用程序代码,包管理文件夹及编译产物 +2. env.sh:用于配置环境变量 +3. repo:用于管理软件包的文件夹 + +执行env.sh脚本配置环境: + +```SHEL +source env.sh +``` + +拉取工具链和编译根文件系统: 为了编译 xuantie 目标平台上的代码,您需要下载并安装交叉编译工具链: + +```shell +cd apps +xmake f -a xuantie +xmake +xmake smart-rootfs +``` + +## 7.生成文件系统镜像 + +生成的文件系统需与内核功能匹配。若配置内核时未启用 EXT4 文件系统,可通过以下命令生成 FAT 格式文件系统,最终在build目录下生成fat.img文件: + +```shell +cd build +mkfs.vfat -C fat.img 16M +``` + +若内核已启用 EXT4 支持(即已配置 PKG_USING_LWEXT4),可通过以下命令生成 ext4 格式的文件系统镜像 ext4.img: + +```shell +xmake smart-image +``` + +## 8 运行RT-Smart + +在 QEMU 下运行 SMART 需要三个文件:rtthread.bin(内核文件)、ext4.img 或 fat.img(用户程序镜像)和 run.sh(启动脚本)。 + +run.sh 位于 bsprt-thread/bsp/xuantie/virt64/c906/ 目录。 +rtthread.bin 编译内核后与 run.sh 位于同一目录。 +ext4.img 或 fat.img 在生成镜像后位于 userapps/apps/build/ 目录。 +将上述三个文件放入同一文件夹即可运行 SMART。运行结果如下: + +```shell +$ bash run.sh ext4.img +OpenSBI v1.4 + ____ _____ ____ _____ + / __ \ / ____| _ \_ _| + | | | |_ __ ___ _ __ | (___ | |_) || | + | | | | '_ \ / _ \ '_ \ \___ \| _ < | | + | |__| | |_) | __/ | | |____) | |_) || |_ + \____/| .__/ \___|_| |_|_____/|____/_____| + | | + |_| +Platform Name : riscv-virtio,qemu +Platform Features : medeleg +Platform HART Count : 1 +Platform IPI Device : aclint-mswi +Platform Timer Device : aclint-mtimer @ 10000000Hz +Platform Console Device : uart8250 +Platform HSM Device : --- +Platform PMU Device : --- +Platform Reboot Device : syscon-reboot +Platform Shutdown Device : syscon-poweroff +Platform Suspend Device : --- +Platform CPPC Device : --- +Firmware Base : 0x80000000 +Firmware Size : 323 KB +Firmware RW Offset : 0x40000 +Firmware RW Size : 67 KB +Firmware Heap Offset : 0x48000 +Firmware Heap Size : 35 KB (total), 2 KB (reserved), 9 KB (used), 23 KB (free) +Firmware Scratch Size : 4096 B (total), 328 B (used), 3768 B (free) +Runtime SBI Version : 2.0 +Domain0 Name : root +Domain0 Boot HART : 0 +Domain0 HARTs : 0* +Domain0 Region00 : 0x0000000000100000-0x0000000000100fff M: (I,R,W) S/U: (R,W) +Domain0 Region01 : 0x0000000010000000-0x0000000010000fff M: (I,R,W) S/U: (R,W) +Domain0 Region02 : 0x0000000002000000-0x000000000200ffff M: (I,R,W) S/U: () +Domain0 Region03 : 0x0000000080040000-0x000000008005ffff M: (R,W) S/U: () +Domain0 Region04 : 0x0000000080000000-0x000000008003ffff M: (R,X) S/U: () +Domain0 Region05 : 0x000000000c400000-0x000000000c5fffff M: (I,R,W) S/U: (R,W) +Domain0 Region06 : 0x000000000c000000-0x000000000c3fffff M: (I,R,W) S/U: (R,W) +Domain0 Region07 : 0x0000000000000000-0xffffffffffffffff M: () S/U: (R,W,X) +Domain0 Next Address : 0x0000000080200000 +Domain0 Next Arg1 : 0x000000008fe00000 +Domain0 Next Mode : S-mode +Domain0 SysReset : yes +Domain0 SysSuspend : yes +Boot HART ID : 0 +Boot HART Domain : root +Boot HART Priv Version : v1.10 +Boot HART Base ISA : rv64imafdc +Boot HART ISA Extensions : zicntr,zihpm +Boot HART PMP Count : 16 +Boot HART PMP Granularity : 2 bits +Boot HART PMP Address Bits: 54 +Boot HART MHPM Info : 16 (0x0007fff8) +Boot HART MIDELEG : 0x0000000000000222 +Boot HART MEDELEG : 0x000000000000b109 +heap: [0x003404c0 - 0x043404c0] + \ | / +- RT - Thread Smart Operating System + / | \ 5.2.1 build Jun 13 2025 09:43:35 + 2006 - 2024 Copyright by RT-Thread team +[I/utest] utest is initialize success. +[I/utest] total utest testcase num: (1) +[I/drivers.serial] Using /dev/ttyS0 as default console +[W/DFS.fs] mount / failed with file system type: elm +file system initialization done! +Hello RISC-V +msh />/ # +/ # +/ # ls +bin lib proc sbin usr +dev lost+found root services var +etc mnt run tmp +/ # +``` \ No newline at end of file diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/1.e906.png b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/1.e906.png new file mode 100644 index 0000000000000000000000000000000000000000..35c97430b3ff7a8bc5c9e369fd83d4ec11f700b3 Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/1.e906.png differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/10.prj.png b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/10.prj.png new file mode 100644 index 0000000000000000000000000000000000000000..3d044514262b07c0073fdf2ff61d76cfaa5f87f5 Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/10.prj.png differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/11.prj.png b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/11.prj.png new file mode 100644 index 0000000000000000000000000000000000000000..e30a6f90d79c4453de8f97cf28b5c9e68b77935b Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/11.prj.png differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/12.prj.png b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/12.prj.png new file mode 100644 index 0000000000000000000000000000000000000000..0a320f8cd662e2e4bb991da778682d0c04f1ed2f Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/12.prj.png differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/13.prj.png b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/13.prj.png new file mode 100644 index 0000000000000000000000000000000000000000..5eed9c2f768b5739df5bbfde153f7f799d8b5f09 Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/13.prj.png differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/14.prj.png b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/14.prj.png new file mode 100644 index 0000000000000000000000000000000000000000..97ad626540a9b309977688797a687d18acfdc96d Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/14.prj.png differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/2.rtstudio.png b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/2.rtstudio.png new file mode 100644 index 0000000000000000000000000000000000000000..05c1b4f4ea73b571e7166f314b8e598f05a1e6e1 Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/2.rtstudio.png differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/3.import.png b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/3.import.png new file mode 100644 index 0000000000000000000000000000000000000000..098667998f19dec3fabfdf9820a3071fff1c404e Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/3.import.png differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/4.prj.png b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/4.prj.png new file mode 100644 index 0000000000000000000000000000000000000000..a4ab12f4ded566f60ef486c4e19bd02bbaafb8d7 Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/4.prj.png differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/5.prj.png b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/5.prj.png new file mode 100644 index 0000000000000000000000000000000000000000..fcd5db3f5c6b548534e52f9fd27bc75a6e4495de Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/5.prj.png differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/6.prj.png b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/6.prj.png new file mode 100644 index 0000000000000000000000000000000000000000..ff93d1483b565f5ae61ad42260faec782859148b Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/6.prj.png differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/7.prj.png b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/7.prj.png new file mode 100644 index 0000000000000000000000000000000000000000..d3c4f84b453bd1e37d86a240255ea576f76693aa Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/7.prj.png differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/8.prj.png b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/8.prj.png new file mode 100644 index 0000000000000000000000000000000000000000..233ee3456dda3223f23440f298add2e71a8e4068 Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/8.prj.png differ diff --git a/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/9.prj.png b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/9.prj.png new file mode 100644 index 0000000000000000000000000000000000000000..64019bd5dab01b9fd94958f9baab7faa21786d90 Binary files /dev/null and b/rt-thread-version/rt-thread-standard/tutorial/make-bsp/xuantie/figures/9.prj.png differ