|
| 1 | +--- |
| 2 | +id: env-setup-mspm0 |
| 3 | +title: MSPM0环境配置 |
| 4 | +sidebar_position: 3 |
| 5 | +--- |
| 6 | + |
| 7 | +# MSPM0 环境配置 |
| 8 | + |
| 9 | +当前默认使用 GNU Arm Embedded Toolchain,编译器前缀为 `arm-none-eabi-`。目前没有验证在 TI Arm Clang 工具链下的兼容性。 |
| 10 | + |
| 11 | +如果只是想快速开始,推荐直接使用 XRobot 的 MSPM0 Docker 镜像:`ghcr.io/xrobot-org/docker-image-mspm0:main`。 |
| 12 | + |
| 13 | +## CMake 配置 |
| 14 | + |
| 15 | +在 LibXR 外部工程中,MSPM0 通常按下面的方式接入: |
| 16 | + |
| 17 | +```cmake |
| 18 | +set(LIBXR_SYSTEM None) |
| 19 | +set(LIBXR_DRIVER mspm0) |
| 20 | +set(LIBXR_NO_EIGEN True) |
| 21 | +set(MSPM0_SDK_DIR "${CMAKE_CURRENT_SOURCE_DIR}/mspm0-sdk") |
| 22 | +
|
| 23 | +include("${CMAKE_SOURCE_DIR}/cmake/LibXR.CMake") |
| 24 | +``` |
| 25 | + |
| 26 | +其中: |
| 27 | + |
| 28 | +* `LIBXR_SYSTEM None` 表示当前按裸机方式集成 |
| 29 | +* `LIBXR_DRIVER mspm0` 表示启用 LibXR 的 MSPM0 驱动目录 |
| 30 | +* `MSPM0_SDK_DIR` 指向 TI MSPM0 SDK 根目录 |
| 31 | +* `cmake/LibXR.CMake` 负责把 LibXR 和 MSPM0 SDK 接到工程里 |
| 32 | + |
| 33 | +一个清晰的职责分工通常是: |
| 34 | + |
| 35 | +* 根 `CMakeLists.txt` 负责最终应用目标、用户源文件、链接选项和后处理 |
| 36 | +* `cmake/LibXR.CMake` 负责 LibXR 平台选择、SDK 路径检查、SysConfig 输出检查,以及给 `xr` 目标补齐 MSPM0 相关依赖 |
| 37 | + |
| 38 | +## 目录结构约定 |
| 39 | + |
| 40 | +推荐采用下面的目录结构: |
| 41 | + |
| 42 | +```text |
| 43 | +. |
| 44 | +|-- CMakeLists.txt |
| 45 | +|-- cmake/ |
| 46 | +| `-- LibXR.CMake |
| 47 | +|-- libxr/ |
| 48 | +|-- mspm0-sdk/ |
| 49 | +|-- src/ |
| 50 | +`-- sysconfig/ |
| 51 | +``` |
| 52 | + |
| 53 | +其中: |
| 54 | + |
| 55 | +* `libxr/` 是 LibXR 源码目录 |
| 56 | +* `mspm0-sdk/` 是 TI MSPM0 SDK 根目录 |
| 57 | +* `src/` 是应用层源文件 |
| 58 | +* `sysconfig/` 保存 SysConfig 生成的配置文件 |
| 59 | + |
| 60 | +如果你的 SDK 不在仓库内,也可以把 `MSPM0_SDK_DIR` 改到其他位置。 |
| 61 | + |
| 62 | +## SysConfig 输出要求 |
| 63 | + |
| 64 | +MSPM0 工程通常依赖 SysConfig 输出的配置文件。CMake 一般只负责“查找并使用”,不负责调用 SysConfig 自动生成。 |
| 65 | + |
| 66 | +推荐把 SysConfig 输出统一放到: |
| 67 | + |
| 68 | +```text |
| 69 | +sysconfig/ |
| 70 | +``` |
| 71 | + |
| 72 | +CMake 侧通常需要能找到这些文件: |
| 73 | + |
| 74 | +* `ti_msp*_config.c` |
| 75 | +* `ti_msp*_config.h` |
| 76 | +* `device.opt` |
| 77 | +* 一份 `.lds` 链接脚本,常见文件名为 `device_linker.lds` |
| 78 | + |
| 79 | +如果项目采用自动发现方式,那么根工程里不需要手工写死 `ti_msp_dl_config.c` 这类具体文件名,只需要保证生成文件位于 `sysconfig/` 目录即可。 |
| 80 | + |
| 81 | +如果你修改了 `.syscfg` 文件,需要先重新生成这些输出,再重新执行 CMake 构建。 |
| 82 | + |
| 83 | +## 芯片型号相关项 |
| 84 | + |
| 85 | +虽然本文是通用说明,但 MSPM0 项目里仍有几项内容必须随芯片型号或开发板变化: |
| 86 | + |
| 87 | +* 启动文件路径 |
| 88 | +* `driverlib.a` 所在目录 |
| 89 | +* SysConfig 目标板或目标芯片 |
| 90 | +* 编译宏,例如 `__MSPM0xxxx__` |
| 91 | + |
| 92 | +MSPM0 工程里,很多编译问题本质上都是“芯片型号相关文件没有同步替换”。 |
| 93 | + |
| 94 | +## 工具链要求 |
| 95 | + |
| 96 | +推荐使用: |
| 97 | + |
| 98 | +* `cmake` |
| 99 | +* `ninja` |
| 100 | +* `arm-none-eabi-gcc` |
| 101 | +* `arm-none-eabi-g++` |
| 102 | +* `arm-none-eabi-objcopy` |
| 103 | + |
| 104 | +本机直接构建的典型命令如下: |
| 105 | + |
| 106 | +```powershell |
| 107 | +cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=arm-none-eabi-gcc -DCMAKE_CXX_COMPILER=arm-none-eabi-g++ -DCMAKE_ASM_COMPILER=arm-none-eabi-gcc |
| 108 | +cmake --build build |
| 109 | +``` |
| 110 | + |
| 111 | +## Docker 构建 |
| 112 | + |
| 113 | +如果不希望在本机单独安装工具链,可以直接用 Docker。 |
| 114 | + |
| 115 | +PowerShell: |
| 116 | + |
| 117 | +```powershell |
| 118 | +powershell -ExecutionPolicy Bypass -File .\tools\docker_build.ps1 |
| 119 | +``` |
| 120 | + |
| 121 | +Bash: |
| 122 | + |
| 123 | +```bash |
| 124 | +bash ./tools/docker_build.sh |
| 125 | +``` |
| 126 | + |
| 127 | +PowerShell 脚本支持: |
| 128 | + |
| 129 | +```powershell |
| 130 | +.\tools\docker_build.ps1 -Image ghcr.io/xrobot-org/docker-image-mspm0:main -BuildType Release -BuildDir build -CCompiler arm-none-eabi-gcc -CxxCompiler arm-none-eabi-g++ -AsmCompiler arm-none-eabi-gcc |
| 131 | +``` |
| 132 | + |
| 133 | +Bash 脚本支持这些环境变量: |
| 134 | + |
| 135 | +* `XROBOT_MSPM0_IMAGE` |
| 136 | +* `BUILD_TYPE` |
| 137 | +* `BUILD_DIR` |
| 138 | +* `C_COMPILER` |
| 139 | +* `CXX_COMPILER` |
| 140 | +* `ASM_COMPILER` |
| 141 | + |
| 142 | +## 常见问题 |
| 143 | + |
| 144 | +### CMake 提示找不到 MSPM0 SDK |
| 145 | + |
| 146 | +先检查: |
| 147 | + |
| 148 | +```text |
| 149 | +${MSPM0_SDK_DIR}/source |
| 150 | +``` |
| 151 | + |
| 152 | +是否存在。如果不存在,说明 SDK 路径配置不对。 |
| 153 | + |
| 154 | +### CMake 提示找不到 SysConfig 文件 |
| 155 | + |
| 156 | +先检查 `sysconfig/` 下是否已经生成: |
| 157 | + |
| 158 | +* `ti_msp*_config.c` |
| 159 | +* `ti_msp*_config.h` |
| 160 | +* `device.opt` |
| 161 | +* `.lds` |
| 162 | + |
| 163 | +如果缺文件,说明还没有完成 SysConfig 输出生成,或者输出目录与 CMake 约定不一致。 |
| 164 | + |
| 165 | +### 链接阶段出现 `_write/_read/_close` 一类 warning |
| 166 | + |
| 167 | +如果工程使用了: |
| 168 | + |
| 169 | +```text |
| 170 | +--specs=nano.specs |
| 171 | +--specs=nosys.specs |
| 172 | +``` |
| 173 | + |
| 174 | +那么 `_write`、`_read`、`_close`、`_isatty`、`_fstat` 等未实现 warning 是常见现象。只要最终成功生成 ELF,通常不影响裸机程序运行。 |
| 175 | + |
| 176 | +## 示例工程 |
| 177 | + |
| 178 | +* [MSPM0G3507 LibXR Template](https://github.com/xrobot-org/MSPM0G3507_LibXR_Template) |
0 commit comments