From 648e627696bcd4ff9be83597b06312ff0dc65da4 Mon Sep 17 00:00:00 2001 From: LeenixP Date: Wed, 30 Jul 2025 19:39:03 +0800 Subject: [PATCH] [bsp][rockchip][rk3500]: update readme (#10565) * rk3566 bsp: * Add RK3566 Code (Forked from rt-thread/tree/master/bsp/rockchip/rk3500). * Added to the original RK3566 documentation, more detailed usage instructions. Signed-off-by: lipeng --- bsp/rockchip/rk3500/Taishanpi-RK3566_CN.md | 375 ++++++++++++++++++ bsp/rockchip/rk3500/Taishanpi-RK3566_ZH.md | 373 +++++++++++++++++ .../rk3500/figures/rockchip-clean.jpg | Bin 0 -> 31125 bytes bsp/rockchip/rk3500/figures/rufus.jpg | Bin 0 -> 29462 bytes bsp/rockchip/rk3500/figures/tf.jpg | Bin 0 -> 10052 bytes 5 files changed, 748 insertions(+) create mode 100644 bsp/rockchip/rk3500/Taishanpi-RK3566_CN.md create mode 100644 bsp/rockchip/rk3500/Taishanpi-RK3566_ZH.md create mode 100644 bsp/rockchip/rk3500/figures/rockchip-clean.jpg create mode 100644 bsp/rockchip/rk3500/figures/rufus.jpg create mode 100644 bsp/rockchip/rk3500/figures/tf.jpg diff --git a/bsp/rockchip/rk3500/Taishanpi-RK3566_CN.md b/bsp/rockchip/rk3500/Taishanpi-RK3566_CN.md new file mode 100644 index 0000000000..2d57bf174b --- /dev/null +++ b/bsp/rockchip/rk3500/Taishanpi-RK3566_CN.md @@ -0,0 +1,375 @@ +# Taishanpi-RK3566 板级支持包使用说明 + +中文页 | [English](./Taishanpi-RK3566_ZH.md) + +## 0. 说明 + +此文档使用的Commit: +- `a1c642aa3a2848b47f2a1b52679dc4ee5156f2f4` + +在[原有文档](./README.md)基础上面进行了文档补充和步骤说明,丰富了一下原有内容。 + +## 1. 介绍 + +这份支持包使用说明是根据[泰山派1](https://wiki.lckfb.com/zh-hans/tspi-rk3566/)所写的一份使用指南。 + +[泰山派1中原理图、PCB文件和软件资料全部开源](https://wiki.lckfb.com/zh-hans/tspi-rk3566/open-source-hardware/) + +在本指南中会尽可能的详细介绍使用步骤和相关注意事项。 + +### 1.1. 芯片介绍 + +`Rockchip RK3566` 是中高端 `AIOT` 芯片: + +- 采用`22nm`制程工艺。 +- `4`核`Cortex-A55`的`64`位CPU。 +- 主频高达`1.8GHz`。 +- 集成`ARM Mali-G52 GPU` +- 集成`1Tops`算力的`AI`加速器`NPU`; +- 支持`4K 60FPS`解码。 +- 支持`1080P 60FPS`解码。 +- 支持`5M ISP`和`HDR`。 + +### 1.2. 宿主机环境介绍 + +本次使用的是 `Ubuntu22.04.5 LTS Desktop` 运行在`VMware`中。 + +系统信息如下: + +```bash +$ cat /etc/os-release +PRETTY_NAME="Ubuntu 22.04.5 LTS" +NAME="Ubuntu" +VERSION_ID="22.04" +VERSION="22.04.5 LTS (Jammy Jellyfish)" +VERSION_CODENAME=jammy +ID=ubuntu +ID_LIKE=debian +HOME_URL="https://www.ubuntu.com/" +SUPPORT_URL="https://help.ubuntu.com/" +BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" +PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" +UBUNTU_CODENAME=jammy + +``` + +```bash +$ lsb_release -a +No LSB modules are available. +Distributor ID: Ubuntu +Description: Ubuntu 22.04.2 LTS +Release: 22.04 +Codename: jammy +``` + +`Python`版本如下: +```bash +$ python --version +Python 3.10.12 +``` + + +## 2. 环境搭建 + +运行下面的命令安装相关的软件包: + +1. 必要工具: +```bash +sudo apt update && \ +sudo apt install -y python3 python3-pip u-boot-tools device-tree-compiler +``` + +2. 使用`pip`安装工具: +```bash +pip3 install --user tqdm scons +``` + + +3. 设定`python`版本: +```bash +sudo rm -rf /usr/bin/python && \ +sudo ln -s /usr/bin/python3 /usr/bin/python +``` + + +4. 下载 `RT-Thread Smart` 工具链: +```bash +wget https://download.rt-thread.org/download/rt-smart/toolchains/aarch64-linux-musleabi_for_x86_64-pc-linux-gnu_latest.tar.bz2 + +``` + +5. 解压: +```bash +sudo tar -xf aarch64-linux-musleabi_for_x86_64-pc-linux-gnu_latest.tar.bz2 -C /opt +``` + +5. 将工具链下载后,解压至`/opt`目录。并设置环境变量 + +> 直接复制全部,然后粘贴到命令行回车即可。 + +```bash +export RTT_CC="gcc" +export RTT_EXEC_PATH="/opt/aarch64-linux-musleabi_for_x86_64-pc-linux-gnu/bin/" +export RTT_CC_PREFIX="aarch64-linux-musleabi-" +export PATH="$RTT_EXEC_PATH:$PATH" +``` + +## 3. 编译 + +进入`rt-thread/bsp/rockchip/rk3566`目录下输入下面的命令: + +进入 `menuconfig` 后直接 保存退出,生成一个 `.config` 文件: + +```bash +scons --menuconfig +``` + +> 拉取`zlib`软件包,我们编译的时候需要用到。 + +```bash +source ~/.env/tools/scripts/pkgs --update +``` + +开始编译: + +> 或者通过 `scons --exec-path="GCC工具链路径"` 命令,在指定工具链位置的同时直接编译。 + +```bash +scons -j$(nproc) +``` + +可以看到在当前`rk3566`文件夹中正常生成`rtthread.elf`与`rtthread.bin`文件。 + +## 3. 运行 + +### 3.1. 为板子烧录镜像 + +因为我需要在 `Uboot` 环境中使用命令进行引导 `rtthread` 系统,所以需要烧录相关的文件。 + +这里我是用的内核是 [泰山派1](https://wiki.lckfb.com/zh-hans/tspi-rk3566/) 的 `Rockchip Linux5.10 SDK`: + +- `Github`:https://github.com/TaishanPi + +- 教程看 [宿主机构建方式](https://wiki.lckfb.com/zh-hans/tspi-rk3566/sdk-compilation/openkylin-sdk-compilation.html) + +编译完成之后会在 `rockdev/` 目录下生成我们所需要的文件 + +将板子的所有镜像全部擦除: + +![rockchip-clean](./figures/rockchip-clean.jpg) + +然后使用`瑞芯微开发工具`烧录下面的`4`个文件: + +> > 注意: 因为我们的SDK是重新进行分区的,所以使用[泰山派1](https://wiki.lckfb.com/zh-hans/tspi-rk3566/)需要下面的`4`个文件,其他板子没有测试,可以自行尝试。 + +- `MiniLoaderAll.bin` +- `parameter.txt` +- `uboot.img` +- `boot.img` + +### 3.2. 格式化TF卡 + +我们需要准备一张 `TF` 卡,用来存放 `rtthread.bin` 文件。 + +下载 `Rufus`:https://rufus.org.cn/ + +设定为下列的模式,然后点击`开始`: + +![rockchip-clean](./figures/rufus.jpg) + + +### 3.3. 制作boot.scr + +> 这里可以直接使用当前目录下的 `boot.scr`,同样也是用下面的方式制作出来的,如果有需求可以根据下面的方法自己制作。 + +前面我们已经安装过 `u-boot-tools` 所以直接使用即可。 + +创建 `boot.cmd`,并写入下面的内容: + +```bash +fatload mmc 1:1 0x480000 rtthread.bin; +fatload mmc 1:1 0x8300000 tspi-rk3566-user-v10-linux.dtb; +booti 0x480000 - 0x8300000; +``` +> 系统启动需要`设备树文件DTB`,这里我们[泰山派1](https://wiki.lckfb.com/zh-hans/tspi-rk3566/)的`dtb`文件是`kernel/arch/arm64/boot/dts/rockchip/tspi-rk3566-user-v10-linux.dtb`,其他的文件有不同的名字,可以根据不同的开发板选择。不然`rtthread`就会无法启动,详情请看文档最后面的 `常见问题与解决办法` + + +运行生成`boot.scr` + +```bash +mkimage -C none -A arm -T script -d boot.cmd boot.scr +``` + +### 3.4. 复制文件到TF卡 + +将下面三个文件复制到TF中: + +- `boot.scr` +- `tspi-rk3566-user-v10-linux.dtb` +- `rtthread.bin` + +![tf](./figures/tf.jpg) + +### 3.5. 运行 + +连接[开发板串口->MoBaXterm](https://wiki.lckfb.com/zh-hans/tspi-rk3566/tool-use/debug-tools-use.html): + +打开串口工具,选择对应串口,设置波特率为 `1500000` + +因为有 `boot.scr` 会自动引导启动`rtthread`: + +> 注意1:如果卡死在了 `[I/rtdm.ofw] Console: uart0 (fiq-debugger)` 那么看`常见问题与解决办法`。 + +> 注意2:记得每次`rtthread`启动失败(在`uboot`中引导失败后),都应该将开发板完全断电然后在上电,清空内存。 + +> 注意3:如果多次自动引导失败可以手动在`uboot`界面运行 `boot.cmd` 的内容,手动引导,如果还不行,那就要考虑其他的因素了,例如TF质量问题,传输到TF卡中的文件有损坏等等等。 + +```bash +Hit key to stop autoboot('CTRL+C'): 0 +switch to partitions #0, OK +mmc1 is current device +Scanning mmc 1:1... +Found U-Boot script /boot.scr +reading /boot.scr +197 bytes read in 3 ms (63.5 KiB/s) +## Executing script at 00c00000 +reading rtthread.bin +1220848 bytes read in 104 ms (11.2 MiB/s) +reading tspi-rk3566-user-v10-linux.dtb +167469 bytes read in 17 ms (9.4 MiB/s) +Fdt Ramdisk skip relocation +No misc partition +## Flattened Device Tree blob at 0x08300000 + Booting using the fdt blob at 0x08300000 + Using Device Tree in place at 0000000008300000, end 000000000832be2c +No resource file: logo_kernel.bmp +** Unable to read file logo_kernel.bmp ** +Failed to do_load +VP0 fail to load kernel logo +vp0, plane_mask:0x3f, primary-id:4, curser-id:-1 +vp1, plane_mask:0x0, primary-id:0, curser-id:-1 +vp2, plane_mask:0x0, primary-id:0, curser-id:-1 +## reserved-memory: + drm-logo@00000000: addr=7df00000 size=ad000 + drm-cubic-lut@00000000: addr=7ff00000 size=8000 + ramoops@110000: addr=110000 size=f0000 +Adding bank: 0x00200000 - 0x08400000 (size: 0x08200000) +Adding bank: 0x09400000 - 0x80000000 (size: 0x76c00000) +board seed: Pseudo +Total: 600.154/648.331 ms + +Starting kernel ... + +[I/rtdm.ofw] Booting RT-Thread on physical CPU 0x0 +[I/rtdm.ofw] Machine model: lckfb tspi V10 Board +[I/rtdm.ofw] Earlycon: uart8250 at MMIO/PIO 0x00000000fe660000 (options '') +[I/rtdm.ofw] Memory node(1) ranges: 0x0000000000200000 - 0x0000000008400000 +[I/rtdm.ofw] Memory node(1) ranges: 0x0000000009400000 - 0x0000000080000000 +[I/mm.memblock] System memory: +[I/mm.memblock] [0x0000000000200000, 0x0000000008400000] +[I/mm.memblock] [0x0000000009400000, 0x0000000080000000] +[I/mm.memblock] Reserved memory: +[I/mm.memblock] [0x0000000000110000, 0x0000000000200000] +[I/mm.memblock] [0x0000000000480000, 0x00000000006d0000] +[I/mm.memblock] [0x00000000006d0000, 0x00000000046d0000] +[I/mm.memblock] [0x00000000046d0000, 0x00000000048d0000] +[I/mm.memblock] [0x00000000048d0000, 0x00000000048fa000] +[I/mm.memblock] [0x0000000008300000, 0x000000000832a000] +[I/mm.memblock] [0x000000007df00000, 0x000000007dfad000] +[I/mm.memblock] [0x000000007ff00000, 0x000000007ff08000] +[I/mm.memblock] physical memory region [0x0000000000200000-0x0000000000480000] installed to system page +[I/mm.memblock] physical memory region [0x00000000048fa000-0x0000000008300000] installed to system page +[I/mm.memblock] physical memory region [0x000000000832a000-0x0000000008400000] installed to system page +[I/mm.memblock] physical memory region [0x0000000009400000-0x000000007df00000] installed to system page +[I/mm.memblock] physical memory region [0x000000007dfad000-0x000000007ff00000] installed to system page +[I/mm.memblock] physical memory region [0x000000007ff08000-0x0000000080000000] installed to system page +[I/mm.memblock] 2055 MB memory installed to system page +[I/osi.psci] Using PSCI v1.1 Function IDs +[I/clk.rk3568] set cpu_freq to 1800000000 +[I/rtdm.ofw] Console: uart0 (fiq-debugger) + + \ | / +- RT - Thread Smart Operating System + / | \ 5.2.1 build Jul 30 2025 08:58:40 + 2006 - 2024 Copyright by RT-Thread team +lwIP-2.1.2 initialized! +[I/sal.skt] Socket Abstraction Layer initialize success. +[I/utest] utest is initialize success. +[I/utest] total utest testcase num: (5) +[I/drivers.serial] Using /dev/ttyS0 as default console +Press any key to stop init process startup ... 3 +Press any key to stop init process startup ... 2 +Press any key to stop init process startup ... 1 +Starting init ... +[E/DFS.fs] mount point (/proc) already mounted! +[I/rtdm.mnt] File system initialization done +Hi, this is RT-Thread!! +msh />I/TC: Secondary CPU 1 initializing +I/TC: Secondary CPU 1 switching to normal world boot +o/[C3:2 mS[eIc/ocnpdua.raya 6C4P]U 2 inCiatlila lcipzui n1g + n success +I/TC: Secondary CPU 2 switching to normal world boot +I/TC: Secondary CPU 3 initializing +I/TC: Secondary CPU 3 switching to normal world boot +[I/cpu.aa64] Call cpu 2 on success +[I/cpu.aa64] Call cpu 3 on success + +msh /> +msh /> +``` + +## 常见问题与解决办法 + +### Could not find a valid device tree + +我们没有加载 `.dtb` 设备树文件直接启动就会出现这样的情况: + +```bash +Hit key to stop autoboot('CTRL+C'): 0 +=> +=> +=> +=> +=> +=> fatload mmc 1:1 0x480000 rtthread.bin +reading rtthread.bin +1220848 bytes read in 104 ms (11.2 MiB/s) +=> booti 0x480000 - 0x8300000 +Fdt Ramdisk skip relocation +No misc partition +ERROR: Did not find a cmdline Flattened Device Tree +Could not find a valid device tree +=> +``` + +> 注意:记得每次`rtthread`启动失败(在`uboot`中引导失败后),都应该将开发板完全断电然后在上电,清空内存。 + +然后将 `kernel/arch/arm64/boot/dts/rockchip/` 文件夹中编译之后的`.dtb`文件转移到TF卡中,然后使用 `fatload`从TF卡中加载到`0x8300000`地址然后再次跳转即可。 + + +### 卡在 `[I/rtdm.ofw] Console: uart0 (fiq-debugger)` 无法启动 + +大概率和你的设备树有关系,在设备树中有一个参数很重要,需要被读取: + +> 这里我贴出我的参数,我的`Debug`串口硬件是`uart2m0` + +> 这个`chosen` 是重要的,如果不清楚,可以参照我这么写。 + +```ini + chosen: chosen { + bootargs = "earlycon=uart8250,mmio32,0xfe660000 console=ttyFIQ0"; + }; + + fiq-debugger { + compatible = "rockchip,fiq-debugger"; + rockchip,serial-id = <2>; + rockchip,wake-irq = <0>; + /* If enable uart uses irq instead of fiq */ + rockchip,irq-mode-enable = <1>; + rockchip,baudrate = <1500000>; /* Only 115200 and 1500000 */ + interrupts = ; + pinctrl-names = "default"; + pinctrl-0 = <&uart2m0_xfer>; + status = "okay"; + }; +``` \ No newline at end of file diff --git a/bsp/rockchip/rk3500/Taishanpi-RK3566_ZH.md b/bsp/rockchip/rk3500/Taishanpi-RK3566_ZH.md new file mode 100644 index 0000000000..5afcd841a9 --- /dev/null +++ b/bsp/rockchip/rk3500/Taishanpi-RK3566_ZH.md @@ -0,0 +1,373 @@ +# Taishanpi-RK3566 Board Support Package (BSP) Usage Guide + +[中文页](./Taishanpi-RK3566_CN.md) | English + +## 0. Code Source Statement + +The commit used in this document: +- `a1c642aa3a2848b47f2a1b52679dc4ee5156f2f4` + +Based on the[original documentation](./README.md), this guide supplements and elaborates on the content with additional documentation and detailed step-by-step instructions. + +## 1. Introduction + +This support package usage guide is written based on the[ TaishanPi 1 ](https://wiki.lckfb.com/zh-hans/tspi-rk3566/)development board. + +[All schematic diagrams, PCB files, and software resources for TaishanPi 1 are open-source](https://wiki.lckfb.com/zh-hans/tspi-rk3566/open-source-hardware/) + +This guide provides detailed instructions and relevant precautions. + +### 1.1. Chip Introduction + +`Rockchip RK3566` is a mid-to-high-end `AIOT` chip: + +- Manufactured using `22nm` process technology +- Quad-core `Cortex-A55` 64-bit CPU +- Clock speed up to `1.8GHz` +- Integrated `ARM Mali-G52 GPU` +- Integrated `1Tops` AI accelerator `NPU` +- Supports `4K 60FPS` decoding +- Supports `1080P 60FPS` encoding +- Supports `5M ISP` and `HDR` + +### 1.2. Host Machine Environment + +This guide uses `Ubuntu22.04.5 LTS Desktop` running on`VMware`. + +System information: + +```bash +$ cat /etc/os-release +PRETTY_NAME="Ubuntu 22.04.5 LTS" +NAME="Ubuntu" +VERSION_ID="22.04" +VERSION="22.04.5 LTS (Jammy Jellyfish)" +VERSION_CODENAME=jammy +ID=ubuntu +ID_LIKE=debian +HOME_URL="https://www.ubuntu.com/" +SUPPORT_URL="https://help.ubuntu.com/" +BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" +PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" +UBUNTU_CODENAME=jammy + +``` + +```bash +$ lsb_release -a +No LSB modules are available. +Distributor ID: Ubuntu +Description: Ubuntu 22.04.2 LTS +Release: 22.04 +Codename: jammy +``` + +`Python`version: +```bash +$ python --version +Python 3.10.12 +``` + + +## 2. Environment Setup + +Run the following commands to install required packages: + +1. Essential tools: +```bash +sudo apt update && \ +sudo apt install -y python3 python3-pip u-boot-tools device-tree-compiler +``` + +2. Install tools using `pip`: +```bash +pip3 install --user tqdm scons +``` + + +3. Set `Python version`: +```bash +sudo rm -rf /usr/bin/python && \ +sudo ln -s /usr/bin/python3 /usr/bin/python +``` + + +4. Download `RT-Thread Smart` toolchain: +```bash +wget https://download.rt-thread.org/download/rt-smart/toolchains/aarch64-linux-musleabi_for_x86_64-pc-linux-gnu_latest.tar.bz2 + +``` + +5. Extract the toolchain: +```bash +sudo tar -xf aarch64-linux-musleabi_for_x86_64-pc-linux-gnu_latest.tar.bz2 -C /opt +``` + +6. Set environment variables after extraction: + +```bash +export RTT_CC="gcc" +export RTT_EXEC_PATH="/opt/aarch64-linux-musleabi_for_x86_64-pc-linux-gnu/bin/" +export RTT_CC_PREFIX="aarch64-linux-musleabi-" +export PATH="$RTT_EXEC_PATH:$PATH" +``` + +## 3. 编译 + +Navigate to the `rt-thread/bsp/rockchip/rk3566` directory and run: + +After entering `menuconfig`, simply save and exit to generate a `.config` file: + +```bash +scons --menuconfig +``` + +> This command pulls the `zlib` package required for compilation. + +```bash +source ~/.env/tools/scripts/pkgs --update +``` + +Start compilation: + +> Alternatively, use `scons --exec-path="GCC toolchain path"` to specify the toolchain location directly. + +```bash +scons -j$(nproc) +``` + +The `rtthread.elf` and `rtthread.bin` files will be generated in the current `rk3566` directory. + +## 3. Running + +### 3.1. Flashing the Board + +To boot the `rtthread` system using U-Boot commands, flash the following files using the Rockchip development tool. + +This guide uses the [ TaishanPi 1 ](https://wiki.lckfb.com/zh-hans/tspi-rk3566/) `Rockchip Linux5.10 SDK`: + +- `Github`:https://github.com/TaishanPi + +- Tutorial [Host Machine Build Method](https://wiki.lckfb.com/zh-hans/tspi-rk3566/sdk-compilation/openkylin-sdk-compilation.html) + +After compilation, required files will be in the `rockdev/` directory. + +Erase all existing firmware from the board: + +![rockchip-clean](./figures/rockchip-clean.jpg) + +Flash these 4 files using the Rockchip Development Tool: + +> > Note: The TaishanPi 1 SDK uses a custom partition layout. Other boards may require different files. + +- `MiniLoaderAll.bin` +- `parameter.txt` +- `uboot.img` +- `boot.img` + +### 3.2. Formatting the TF Card + +Prepare a TF card to store files. + +Download `Rufus`:https://rufus.org.cn/ + +Configure with these settings and click "Start": + +![rockchip-clean](./figures/rufus.jpg) + + +### 3.3. Creating boot.scr + +> You can use the existing `boot.scr` in this directory, or create your own using the method below. + +Create `boot.cmd` with the following content: + +```bash +fatload mmc 1:1 0x480000 rtthread.bin; +fatload mmc 1:1 0x8300000 tspi-rk3566-user-v10-linux.dtb; +booti 0x480000 - 0x8300000; +``` +> The Device Tree Blob (DTB) file is required for system startup. For TaishanPi 1, the DTB file is located at `kernel/arch/arm64/boot/dts/rockchip/tspi-rk3566-user-v10-linux.dtb`. Other boards may use different DTB files. Without the correct DTB, rtthread will fail to boot (see "Common Issues and Solutions"). + + +Generate `boot.scr` + +```bash +mkimage -C none -A arm -T script -d boot.cmd boot.scr +``` + +### 3.4. Copying Files to TF Card + +Copy these three files to the TF card: + +- `boot.scr` +- `tspi-rk3566-user-v10-linux.dtb` +- `rtthread.bin` + +![tf](./figures/tf.jpg) + +### 3.5. Running + +Connect to the board's serial port using a tool like [MoBaXterm](https://wiki.lckfb.com/zh-hans/tspi-rk3566/tool-use/debug-tools-use.html): + +- Select the correct serial port +- Set baud rate to `1500000` + +With `boot.scr` present, the system will boot automatically: + +> Note 1: If stuck at `[I/rtdm.ofw] Console: uart0 (fiq-debugger)`, see "Common Issues and Solutions". + +> Note 2: After failed boot attempts, completely power cycle the board to clear memory. + +> Note 3: If automatic boot fails, manually execute the `boot.cmd` content in U-Boot. + +```bash +Hit key to stop autoboot('CTRL+C'): 0 +switch to partitions #0, OK +mmc1 is current device +Scanning mmc 1:1... +Found U-Boot script /boot.scr +reading /boot.scr +197 bytes read in 3 ms (63.5 KiB/s) +## Executing script at 00c00000 +reading rtthread.bin +1220848 bytes read in 104 ms (11.2 MiB/s) +reading tspi-rk3566-user-v10-linux.dtb +167469 bytes read in 17 ms (9.4 MiB/s) +Fdt Ramdisk skip relocation +No misc partition +## Flattened Device Tree blob at 0x08300000 + Booting using the fdt blob at 0x08300000 + Using Device Tree in place at 0000000008300000, end 000000000832be2c +No resource file: logo_kernel.bmp +** Unable to read file logo_kernel.bmp ** +Failed to do_load +VP0 fail to load kernel logo +vp0, plane_mask:0x3f, primary-id:4, curser-id:-1 +vp1, plane_mask:0x0, primary-id:0, curser-id:-1 +vp2, plane_mask:0x0, primary-id:0, curser-id:-1 +## reserved-memory: + drm-logo@00000000: addr=7df00000 size=ad000 + drm-cubic-lut@00000000: addr=7ff00000 size=8000 + ramoops@110000: addr=110000 size=f0000 +Adding bank: 0x00200000 - 0x08400000 (size: 0x08200000) +Adding bank: 0x09400000 - 0x80000000 (size: 0x76c00000) +board seed: Pseudo +Total: 600.154/648.331 ms + +Starting kernel ... + +[I/rtdm.ofw] Booting RT-Thread on physical CPU 0x0 +[I/rtdm.ofw] Machine model: lckfb tspi V10 Board +[I/rtdm.ofw] Earlycon: uart8250 at MMIO/PIO 0x00000000fe660000 (options '') +[I/rtdm.ofw] Memory node(1) ranges: 0x0000000000200000 - 0x0000000008400000 +[I/rtdm.ofw] Memory node(1) ranges: 0x0000000009400000 - 0x0000000080000000 +[I/mm.memblock] System memory: +[I/mm.memblock] [0x0000000000200000, 0x0000000008400000] +[I/mm.memblock] [0x0000000009400000, 0x0000000080000000] +[I/mm.memblock] Reserved memory: +[I/mm.memblock] [0x0000000000110000, 0x0000000000200000] +[I/mm.memblock] [0x0000000000480000, 0x00000000006d0000] +[I/mm.memblock] [0x00000000006d0000, 0x00000000046d0000] +[I/mm.memblock] [0x00000000046d0000, 0x00000000048d0000] +[I/mm.memblock] [0x00000000048d0000, 0x00000000048fa000] +[I/mm.memblock] [0x0000000008300000, 0x000000000832a000] +[I/mm.memblock] [0x000000007df00000, 0x000000007dfad000] +[I/mm.memblock] [0x000000007ff00000, 0x000000007ff08000] +[I/mm.memblock] physical memory region [0x0000000000200000-0x0000000000480000] installed to system page +[I/mm.memblock] physical memory region [0x00000000048fa000-0x0000000008300000] installed to system page +[I/mm.memblock] physical memory region [0x000000000832a000-0x0000000008400000] installed to system page +[I/mm.memblock] physical memory region [0x0000000009400000-0x000000007df00000] installed to system page +[I/mm.memblock] physical memory region [0x000000007dfad000-0x000000007ff00000] installed to system page +[I/mm.memblock] physical memory region [0x000000007ff08000-0x0000000080000000] installed to system page +[I/mm.memblock] 2055 MB memory installed to system page +[I/osi.psci] Using PSCI v1.1 Function IDs +[I/clk.rk3568] set cpu_freq to 1800000000 +[I/rtdm.ofw] Console: uart0 (fiq-debugger) + + \ | / +- RT - Thread Smart Operating System + / | \ 5.2.1 build Jul 30 2025 08:58:40 + 2006 - 2024 Copyright by RT-Thread team +lwIP-2.1.2 initialized! +[I/sal.skt] Socket Abstraction Layer initialize success. +[I/utest] utest is initialize success. +[I/utest] total utest testcase num: (5) +[I/drivers.serial] Using /dev/ttyS0 as default console +Press any key to stop init process startup ... 3 +Press any key to stop init process startup ... 2 +Press any key to stop init process startup ... 1 +Starting init ... +[E/DFS.fs] mount point (/proc) already mounted! +[I/rtdm.mnt] File system initialization done +Hi, this is RT-Thread!! +msh />I/TC: Secondary CPU 1 initializing +I/TC: Secondary CPU 1 switching to normal world boot +o/[C3:2 mS[eIc/ocnpdua.raya 6C4P]U 2 inCiatlila lcipzui n1g + n success +I/TC: Secondary CPU 2 switching to normal world boot +I/TC: Secondary CPU 3 initializing +I/TC: Secondary CPU 3 switching to normal world boot +[I/cpu.aa64] Call cpu 2 on success +[I/cpu.aa64] Call cpu 3 on success + +msh /> +msh /> +``` + +## Common Issues and Solutions + +### Could not find a valid device tree + +This error occurs when booting without loading the `.dtb` device tree file: + +```bash +Hit key to stop autoboot('CTRL+C'): 0 +=> +=> +=> +=> +=> +=> fatload mmc 1:1 0x480000 rtthread.bin +reading rtthread.bin +1220848 bytes read in 104 ms (11.2 MiB/s) +=> booti 0x480000 - 0x8300000 +Fdt Ramdisk skip relocation +No misc partition +ERROR: Did not find a cmdline Flattened Device Tree +Could not find a valid device tree +=> +``` + +Solution: + +1. Power cycle the board completely after failed boot attempts +2. Copy the compiled `.dtb` file from `kernel/arch/arm64/boot/dts/rockchip/` to the TF card +3. Load the `DTB` to address `0x8300000` using `fatload` +4. Execute the boot command again + + +### System Stuck at `[I/rtdm.ofw] Console: uart0 (fiq-debugger)` + +This is typically caused by incorrect device tree configuration. The `chosen` node parameters are critical. + +Example configuration for TaishanPi 1 (Debug UART: `uart2m0`): + +```ini + chosen: chosen { + bootargs = "earlycon=uart8250,mmio32,0xfe660000 console=ttyFIQ0"; + }; + + fiq-debugger { + compatible = "rockchip,fiq-debugger"; + rockchip,serial-id = <2>; + rockchip,wake-irq = <0>; + /* If enable uart uses irq instead of fiq */ + rockchip,irq-mode-enable = <1>; + rockchip,baudrate = <1500000>; /* Only 115200 and 1500000 */ + interrupts = ; + pinctrl-names = "default"; + pinctrl-0 = <&uart2m0_xfer>; + status = "okay"; + }; +``` \ No newline at end of file diff --git a/bsp/rockchip/rk3500/figures/rockchip-clean.jpg b/bsp/rockchip/rk3500/figures/rockchip-clean.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eae2deac95603d9d045aa46c57dfe4280d008c44 GIT binary patch literal 31125 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 literal 0 HcmV?d00001 diff --git a/bsp/rockchip/rk3500/figures/rufus.jpg b/bsp/rockchip/rk3500/figures/rufus.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3a116a8bc2e1a4bd944e47893bfd443f0c8c461e GIT binary patch literal 29462 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 ZOMx#a9@K*heGF{A-ec_pUPW&Y{14Utcn1Ig literal 0 HcmV?d00001