根据提供的错误信息,问题出在GD32 BSP打包过程中NoneType对象无长度属性的类型错误。以下是可能的原因及解决方案:
BSP库路径配置错误(最常见原因)
=> copy gd32 bsp library后在计算路径长度时失败,表明gd32_lib_path变量为None SConscript文件配置异常
目录结构变动
libraries/gd32_drivers目录移动或重命名)在对应BSP的SConstruct文件中(路径:bsp/gd32/arm/gd32470z-lickfb/SConstruct):
# 查找类似以下代码段(通常在文件开头):
gd32_lib_path = os.path.join(rtconfig.RTT_ROOT, 'libraries/gd32_drivers')
# 确保路径正确指向存在的目录
print("GD32 Lib path:", gd32_lib_path) # 调试输出? 验证点:
rtconfig.RTT_ROOT未定义,替换为os.getcwd() libraries/gd32_drivers是否存在(对比STM32的stm32_libraries目录结构)修正示例:
# 修正前(可能导致None):
gd32_lib_path = None
# 修正后(使用显式路径):
rt_root = os.path.abspath('.') # 获取当前BSP绝对路径
gd32_lib_path = os.path.normpath(rt_root + '/../../libraries/gd32_drivers')对比同版本下正常STM32 BSP的SConstruct文件(如bsp/stm32/stm32f407-atk-explorer/SConstruct),特别注意:
# STM32通常包含类似:
from building import *
env = Environment()
ob = env.BoardConfig().get_bsp_tree() # GD32可能缺少此类配置在终端执行以下命令检查库目录:
# 进入RT-Thread根目录
cd path/to/RT-Thread
# 检查关键目录是否存在
ls libraries/gd32_drivers # 库驱动
ls bsp/gd32/arm/gd32470z-lckfb # BSP目录获取详细错误栈:
scons --dist --debug=explain 2>&1 | tee build.log在输出日志中搜索gd32_lib_path或NoneType定位具体出错位置
git pull origin master # RT-Thread主仓库
git submodule update # 更新子模块scons -c
rm -rf rtconfig.h .config
scons --menuconfig
scons --dist
若以上步骤仍无法解决,请在GD32的
SConstruct文件中77行附近(DoBuilding调用处)添加打印语句检查参数值:
print("TARGET:", TARGET) # 77行前插入
print("ob type:", type(ob))
通过路径修正和构建脚本对比,通常可解决此类打包错误。GD32与STM32的BSP结构差异可能导致配置遗漏,需重点检查库路径声明机制。
举报
更多回帖