|
| 1 | +# S100 BSP 编译与加载运行说明 |
| 2 | + |
| 3 | +本文说明 `bsp/s100` 这个 RT-Thread BSP 如何在主机侧编译,以及如何在 RDK S100 板端加载并运行。 |
| 4 | + |
| 5 | +说明分两部分: |
| 6 | + |
| 7 | +- 本地 BSP 实际构建方式:以当前仓库中的 `SConstruct`、`rtconfig.py`、`link.lds` 为准 |
| 8 | +- 板端启动流程:参考 D-Robotics 官方文档“[MCU快速入门指南](https://d-robotics.github.io/rdk_doc/rdk_s/Advanced_development/mcu_development/S100/basic_information/)” |
| 9 | + |
| 10 | +## 1. 背景说明 |
| 11 | + |
| 12 | +官方文档说明了 S100 的 MCU 启动链路: |
| 13 | + |
| 14 | +- MCU0 负责启动 Acore、MCU1 和电源管理 |
| 15 | +- MCU1 由 Acore 通过 `remoteproc` 框架间接控制 |
| 16 | +- 启动时由 Acore 在 `sysfs` 下给 `remoteproc_mcu0` 写入固件名并触发 `start` |
| 17 | + |
| 18 | +参考: |
| 19 | + |
| 20 | +- 官方文档第 “MCU1启动/关闭流程” 章节:`remoteproc_mcu0`、`firmware`、`state` |
| 21 | +- 本地链接脚本 [link.lds](./link.lds) 也包含 `.resource_table` 段,说明这个镜像是按 remoteproc 风格组织的 MCU1 ELF |
| 22 | + |
| 23 | +## 2. 主机编译环境 |
| 24 | + |
| 25 | +### 2.1 推荐系统 |
| 26 | + |
| 27 | +官方文档建议主机使用 Ubuntu 22.04。 |
| 28 | + |
| 29 | +### 2.2 依赖安装 |
| 30 | + |
| 31 | +官方文档给出的依赖如下: |
| 32 | + |
| 33 | +```bash |
| 34 | +sudo apt-get install -y build-essential make cmake libpcre3 libpcre3-dev bc bison \ |
| 35 | + flex python3-numpy mtd-utils zlib1g-dev debootstrap \ |
| 36 | + libdata-hexdumper-perl libncurses5-dev zip qemu-user-static \ |
| 37 | + curl repo git liblz4-tool apt-cacher-ng libssl-dev checkpolicy autoconf \ |
| 38 | + android-sdk-libsparse-utils mtools parted dosfstools udev rsync python3-pip scons |
| 39 | +pip install "scons>=4.0.0" |
| 40 | +pip install ecdsa |
| 41 | +pip install tqdm |
| 42 | +``` |
| 43 | + |
| 44 | +### 2.3 交叉工具链 |
| 45 | + |
| 46 | +当前 BSP 的工具链配置在 [rtconfig.py](./rtconfig.py): |
| 47 | + |
| 48 | +- 架构:`cortex-r52` |
| 49 | +- 工具链前缀:`arm-none-eabi-` |
| 50 | +- 默认工具链路径:`/opt/toolchain/gcc-arm-none-eabi-10.3-2021.10/bin` |
| 51 | + |
| 52 | +如果你的工具链不在这个目录,可以通过环境变量覆盖: |
| 53 | + |
| 54 | +```bash |
| 55 | +export RTT_EXEC_PATH=/your/toolchain/bin |
| 56 | +``` |
| 57 | + |
| 58 | +## 3. BSP 编译方法 |
| 59 | + |
| 60 | +### 3.1 进入目录 |
| 61 | + |
| 62 | +```bash |
| 63 | +cd <repo>/bsp/s100 |
| 64 | +``` |
| 65 | + |
| 66 | +### 3.2 执行编译 |
| 67 | + |
| 68 | +直接运行: |
| 69 | + |
| 70 | +```bash |
| 71 | +scons -j$(nproc) |
| 72 | +``` |
| 73 | + |
| 74 | +如果你想先清理后重编: |
| 75 | + |
| 76 | +```bash |
| 77 | +scons -c |
| 78 | +scons -j$(nproc) |
| 79 | +``` |
| 80 | + |
| 81 | +### 3.3 构建入口 |
| 82 | + |
| 83 | +本 BSP 的构建入口是: |
| 84 | + |
| 85 | +- [SConstruct](./SConstruct) |
| 86 | +- [rtconfig.py](./rtconfig.py) |
| 87 | + |
| 88 | +构建特征: |
| 89 | + |
| 90 | +- 目标文件名:`rtthread.elf` |
| 91 | +- 后处理会自动生成:`rtthread.bin` |
| 92 | + |
| 93 | +## 4. 板端加载运行 |
| 94 | + |
| 95 | +### 4.1 固件放置 |
| 96 | + |
| 97 | +根据官方 remoteproc 启动流程,MCU1 固件需要放到板端 `/lib/firmware/`。 |
| 98 | + |
| 99 | +根据官方 RDK S100 硬件说明,板上有两个有线网口: |
| 100 | + |
| 101 | +- `U43 / eth0`:通用以太网口,IP 需要通过外部 DHCP 获取,或由用户手动配置静态地址 |
| 102 | +- `U45 / eth1`:固定静态 IP 网口,默认地址为 `192.168.127.10` |
| 103 | + |
| 104 | +如果开发主机直接接在 `U45 / eth1`,可以优先使用固定 IP 方式传文件,这样不需要先查询板端地址。由于当前 BSP 输出文件名是 `rtthread.elf`,可以直接推送这个文件: |
| 105 | + |
| 106 | +```bash |
| 107 | +scp rtthread.elf root@192.168.127.10:/lib/firmware/ |
| 108 | +``` |
| 109 | + |
| 110 | +如果你接的是 `U43 / eth0`,则需要先确认板端实际 IP,然后再执行: |
| 111 | + |
| 112 | +```bash |
| 113 | +scp rtthread.elf root@<board_ip>:/lib/firmware/ |
| 114 | +``` |
| 115 | + |
| 116 | +### 4.2 启动 MCU1 |
| 117 | + |
| 118 | +参考官方文档中的 `remoteproc_mcu0` 启动步骤,板端执行: |
| 119 | + |
| 120 | +如果固件名是 `rtthread.elf`: |
| 121 | + |
| 122 | +```bash |
| 123 | +cd /sys/class/remoteproc/remoteproc_mcu0 |
| 124 | +echo rtthread.elf > firmware |
| 125 | +echo start > state |
| 126 | +``` |
| 127 | + |
| 128 | +### 4.3 停止 MCU1 |
| 129 | + |
| 130 | +> 由于该功能还不完善,此处需要重启设备来完成 |
| 131 | +
|
| 132 | +## 5. 一套完整示例 |
| 133 | + |
| 134 | +主机侧: |
| 135 | + |
| 136 | +```bash |
| 137 | +cd <repo>/bsp/s100 |
| 138 | +scons -j$(nproc) |
| 139 | +scp rtthread.elf root@192.168.127.10:/lib/firmware/ |
| 140 | +``` |
| 141 | + |
| 142 | +板端: |
| 143 | + |
| 144 | +```bash |
| 145 | +cd /sys/class/remoteproc/remoteproc_mcu0 |
| 146 | +echo rtthread.elf > firmware |
| 147 | +echo start > state |
| 148 | +``` |
| 149 | + |
| 150 | +停止: |
| 151 | + |
| 152 | +```bash |
| 153 | +reboot |
| 154 | +``` |
0 commit comments