RT-Thread论坛
直播中

lotusp

11年用户 1195经验值
擅长:电源/新能源
私信 关注
[问答]

使用ENV工具scons —dist打包GD32F470的BSP一直报错,是什么原因导致?

最近使用ENV工具scons —dist打包GD32F470的BSP一直出现下面的错误,不知道是什么原因;STM32的BSP,scons —dist打包正常的。

  • $ scons --dist
  • scons: Reading SConscript files ...
  • Newlib version: 4.1.0
  • make distribution....
  • => gd32470z-lckfb
  • => start dist handle
  • => copy gd32 bsp library
  • TypeError: object of type 'NoneType' has no len():
  •   File "F:RT-Thread_OSrt-thread-masterbspgd32armgd32470z-lckfbSConstruct", line 77:
  •     DoBuilding(TARGET, objs)
  •   File "F:RT-Thread_OSrt-thread-mastertoolsbuilding.py", line 803:
  •     EndBuilding(target, program)
  •   File "F:RT-Thread_OSrt-thread-mastertoolsbuilding.py", line 927:
  •     MkDist(program, BSP_ROOT, Rtt_Root, Env, project_name, project_path)
  •   File "F:RT-Thread_OSrt-thread-mastertoolsmkdist.py", line 195:
  •     dist_handle(BSP_ROOT, dist_dir)
  •   File "F:RT-Thread_OSrt-thread-masterbspgd32armgd32470z-lckfbrtconfig.py", line 150:
  •     dist_do_building(BSP_ROOT, dist_dir)
  •   File "F:RT-Thread_OSrt-thread-masterbspgd32armtoolssdk_dist.py", line 30:
  •     bsp_copy_files(os.path.join(library_path, rtconfig.BSP_LIBRARY_TYPE),
  •   File "D:env-windows-v1.5.2toolsbin....toolsPython27libntpath.py", line 67:
  •     p_drive, p_path = splitdrive(p)
  •   File "D:env-windows-v1.5.2toolsbin....toolsPython27libntpath.py", line 115:
  •     if len(p) > 1:



  • $ scons --dist
  • scons: Reading SConscript files ...
  • Newlib version: 4.1.0
  • make distribution....
  • => gd32470z-lckfb
  • => start dist handle
  • => copy gd32 bsp library
  • TypeError: object of type 'NoneType' has no len():
  •   File "F:RT-Thread_OSrt-thread-masterbspgd32armgd32470z-lckfbSConstruct", line 77:
  •     DoBuilding(TARGET, objs)
  •   File "F:RT-Thread_OSrt-thread-mastertoolsbuilding.py", line 803:
  •     EndBuilding(target, program)
  •   File "F:RT-Thread_OSrt-thread-mastertoolsbuilding.py", line 927:
  •     MkDist(program, BSP_ROOT, Rtt_Root, Env, project_name, project_path)
  •   File "F:RT-Thread_OSrt-thread-mastertoolsmkdist.py", line 195:
  •     dist_handle(BSP_ROOT, dist_dir)
  •   File "F:RT-Thread_OSrt-thread-masterbspgd32armgd32470z-lckfbrtconfig.py", line 150:
  •     dist_do_building(BSP_ROOT, dist_dir)
  •   File "F:RT-Thread_OSrt-thread-masterbspgd32armtoolssdk_dist.py", line 30:
  •     bsp_copy_files(os.path.join(library_path, rtconfig.BSP_LIBRARY_TYPE),
  •   File "D:env-windows-v1.5.2toolsbin....toolsPython27libntpath.py", line 67:
  •     p_drive, p_path = splitdrive(p)
  •   File "D:env-windows-v1.5.2toolsbin....toolsPython27libntpath.py", line 115:
  •     if len(p) > 1:

回帖(1)

吴凡

2025-9-11 17:56:01

根据提供的错误信息,问题出在GD32 BSP打包过程中NoneType对象无长度属性的类型错误。以下是可能的原因及解决方案:


错误原因分析:




  1. BSP库路径配置错误(最常见原因)  



    • 错误信息中显示=> copy gd32 bsp library后在计算路径长度时失败,表明gd32_lib_path变量为None  

    • 通常发生在BSP的SConstruct文件中引用了无效的库路径变量




  2. SConscript文件配置异常  



    • GD32的构建脚本可能缺少关键路径声明(对比STM32的脚本可能缺失某些组件)




  3. 目录结构变动  



    • RT-Thread代码库更新后,GD32库文件的默认位置可能发生改变(如libraries/gd32_drivers目录移动或重命名)






解决步骤:


1. 检查BSP库路径声明 (关键步骤)


在对应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目录结构)


2. 修复路径声明(若发现错误)


修正示例:


# 修正前(可能导致None):
gd32_lib_path = None

# 修正后(使用显式路径):
rt_root = os.path.abspath('.')  # 获取当前BSP绝对路径
gd32_lib_path = os.path.normpath(rt_root + '/../../libraries/gd32_drivers')

3. 更新GD32 BSP构建脚本


对比同版本下正常STM32 BSP的SConstruct文件(如bsp/stm32/stm32f407-atk-explorer/SConstruct),特别注意:


# STM32通常包含类似:
from building import *
env = Environment()
ob = env.BoardConfig().get_bsp_tree()  # GD32可能缺少此类配置

4. 手动验证库存在性


在终端执行以下命令检查库目录:


# 进入RT-Thread根目录
cd path/to/RT-Thread

# 检查关键目录是否存在
ls libraries/gd32_drivers            # 库驱动
ls bsp/gd32/arm/gd32470z-lckfb       # BSP目录

5. 使用调试模式运行SCons


获取详细错误栈:


scons --dist --debug=explain 2>&1 | tee build.log

在输出日志中搜索gd32_lib_pathNoneType定位具体出错位置




补充建议:



  • GD32 BSP更新:同步最新GD32 BSP代码(可能已修复该问题)
    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结构差异可能导致配置遗漏,需重点检查库路径声明机制。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分