当前位置:   article > 正文

在 RT-Thread 中开发和使用 Phytium BSP (Env + RT Studio)_rt_cpus_nr

rt_cpus_nr
  • Windows 10 + env 环境
  • RT-Studio IDE

Note: 第0章的内容是配置 env 环境,如果使用 linux/WSL 的 RT-Thread 开发环境,可以参考RT-Thread Qemu环境设置

0. 配置 RT-Thread Env 环境

0.1 安装 mingw 交叉编译链

  • 从 Standalone SDK 的 README 下载 windows + mingw 用的交叉编译链完成解压,获取 AARCH32 和 AARCH64 的交叉编译链

0.2 配置 Env 环境变量

  • 将 mingw 交叉编译链的路径配置成 Windows 环境变量
      1. 添加环境变量 AARCH32_CROSS_PATH 指向 32 位交叉编译链的 bin 目录
      1. 添加环境变量 AARCH64_CROSS_PATH 指向 64 位交叉编译链的 bin 目录
      1. 将上述 AARCH32_CROSS_PATH 和 AARCH64_CROSS_PATH 目录添加到环境变量 PATH 中
        在这里插入图片描述
        在这里插入图片描述在这里插入图片描述

1. 导出 Phytium BSP 库

  • RT-Thread 中复用 Standalone SDK 作为 BSP 库
  • 从 Phytium Standalone SDK 导出 BSP 给 RT-Thread 使用,导出过程由 SDK tools 目录下的脚本 export_rtt_bsp.py 完成
  • BSP 的导出支持两种方式,一是可以将库上代码(指定 Git URL) 导出,二是可以将本地代码导出

1.1 将 Git URL 导出为 BSP 库

  • 运行导出脚本,其中,
    • Git 远程仓库为 https://gitlab.phytium.com.cn/zhugengyu/phytium-standalone-sdk.git
    • Git 远程分支为 rtt_1025
    • 输出目录为 /mnt/d/proj/rt-thread-e2000/rt-thread/bsp/phytium/libraries/standalone
./export_rtt_bsp.py -i=https://gitlab.phytium.com.cn/zhugengyu/phytium-standalone-sdk.git -b=rtt_1025  -o=/mnt/d/proj/rt-thread-e2000/rt-thread/bsp/phytium/libraries/standalone
  • 1

在这里插入图片描述
在这里插入图片描述

  • 导出的版本信息记录在 gitinfo 文件中

在这里插入图片描述

1.2 将本地 SDK 导出为 BSP 库

  • 本地 SDK 库必须有 .git 文件记录信息才能支持导出,通过 download zip 压缩包方式获取的 SDK不能导出

  • 删除 untrack 文件和目录,本地 SDK 库中会有编译生成文件,导出之前要先将 git 仓库中这些 untrack 文件和目录删除

git clean -xfd
  • 1

在这里插入图片描述- 导出前要确保本地仓库的修改已经 commit,否则会导出失败

git status .
  • 1

在这里插入图片描述

  • 运行导出脚本,当前目录为 SDK 的tools子目录,其中 ,
    • Git 本地仓库为 …/
    • 输出目录为 /mnt/d/proj/rt-thread-e2000/rt-thread/bsp/phytium/libraries/standalone
./export_rtt_bsp.py -i=../  -o=/mnt/d/proj/rt-thread-e2000/rt-thread/bsp/phytium/libraries/standalone
  • 1
  • 导出过程会覆盖之前的 BSP 包库
    在这里插入图片描述

1.3 定制导出 BSP 库

  • 通过修改脚本 export_rtt_bsp.py 可以将 Standalone SDK 中的文件加入进或者移除出 BSP 导出库,控制导出 BSP 库的原理是 git 中的 sparse-checkout 功能,具体的方法是将需要保留的文件或者目录路径写在 ‘.git/info/sparse-checkout’ 文件中,不需要保留的文件取反 !也写入。具体的方法说明如下,
  • 脚本提供了两个函数控制文件的取舍
# add file or folder you need
def append_sparse_path(path):
    os.system("echo \"{}\" >> {}".format(path, sparse_ck))

# remove file or folder you do not need
def remove_sparse_path(path):
    os.system("echo \"!{}\" >> {}".format(path, sparse_ck))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 指定需要的文件路径,如下所示,将 SDK 根目录的两个个文件保留
# overall
append_sparse_path(r'/README.md')
append_sparse_path(r'/LICENSE')
  • 1
  • 2
  • 3
  • 指定不需要的文件路径,如下所示,将 board/common 目录保留,但将目录下的 fsmp.c 文件删除
append_sparse_path(r'board/common/*')
remove_sparse_path(r'board/*/fparameters.c') 
remove_sparse_path(r'board/common/fsmp.c') 
  • 1
  • 2
  • 3

2. 使用 RT-Thread 的 Phytium BSP

  • Phytium BSP 包括四个部分
      1. AARCH32/AARCH64 ,存放两种CPU模式的配置和相关代码
      1. Board,支持 E2000/FT2000-4/D2000等开发板
      1. Libraries,导出 Standalone SDK 给 Phytium BSP 使用,将 SDK 驱动适配到 RT-Thread 的驱动框架
      1. Applications, 存放 RT-Thread 应用代码

2.1 配置 RT-Thread 内核 和 Phytium BSP

  • 进入 aarch32 / aarch64目录,运行menuconfig,其中
      1. RT-Thread Kernel 中选择内核配置
      1. Hardware Drviers 中选择硬件驱动
      1. Standalone Setting 中选择 Standalone 配置

在这里插入图片描述

  • 有几个 RT-Thread 的内核配置项需要注意

      1. RT_USING_SMP 使能多核启动
      1. RT_CPUS_NR 开发板上的核心数目,按照实际情况设置
      1. RT_TICK_PER_SECOND 内核的Tick数,越大任务调度越频繁
      1. IDLE_THREAD_STACK_SIZE IDLE 线程的栈大小,对于 AARCH64,要设置为 2048 以上,否在 IDLE 线程有堆栈溢出的可能,对于 AARCH32,设置为 256 或者 512 应该是足够的
      1. SYSTEM_THREAD_STACK_SIZE 开启多核后,SYSTEM 线程的栈大小,可以和 IDLE 线程的栈设成一样大的
  • 在 Hardware Drviers 和 Standalone Setting 中进一步配置 BSP

  • 完成配置或点 Save 保存配置,点Exit退出

在这里插入图片描述

2.2 编译 Phytium BSP

  • 进入 aarch32 / aarch64目录,清理之前的编译中间文件
scons -c
  • 1
  • 编译 BSP,编译如果出现问题,先观察编译链路径 EXEC_PATH, 代码路径 RTT_ROOT, BSP_ROOT等是否正常
scons -j8
  • 1
  • 一键编译并拷贝镜像(32位/64位)
scons && cp rtthread_a32.bin D:\tftboot\rtthread_a32.bin && ls D:\tftboot\rtthread_a32.bin
  • 1
scons && cp rtthread_a64.bin D:\tftboot\rtthread_a64.bin && ls D:\tftboot\rtthread_a64.bin
  • 1
  • 生成镜像的反汇编文件(32位/64位)
arm-none-eabi-objdump -S  rtthread.elf > rtthread.dis
  • 1
aarch64-none-elf-objdump -S  rtthread_a64.elf > rtthread_a64.dis
  • 1

2.2.1 编译 AARCH32

在这里插入图片描述
在这里插入图片描述

2.2.2 编译 AARCH64

在这里插入图片描述在这里插入图片描述

2.3 在 Phytium BSP 新增目录

  • 新增目录和外部之间可以能需要 bridge 来联系在一起
  • 新增目录内部的源文件需要 componet 进行管理
  • 使用 rt-thread 提供的 wizard.py 脚本创建,在 env 环境下运行
python ../../../tools/wizard.py --bridge
python ../../../tools/wizard.py --component drivers
  • 1
  • 2

在这里插入图片描述

2.4 启动 RT-Thread 镜像

  • 将编译的镜像加载到开发板,完成多核启动

  • aarch32 镜像启动
    在这里插入图片描述

  • aarch64 镜像启动
    在这里插入图片描述

2.4 使用 RT-Thread packages

  • RT-Thread 以 packages 的形式提供了大量的第三方库和测试代码
  • 在 menuconfig 中选中需要的 packages

在这里插入图片描述

  • 如下图,选择了文件系统的测试用例,

在这里插入图片描述- 保存配置后,env 环境会自动拉取 package 到 ./packages 目录下

在这里插入图片描述

  • 然后 scons 开始编译就可以将 packages 编入了

3. 在 RT-Studio 中使用 BSP 工程

3.1 Env 环境导出 BSP 给 RT-Studio 使用

  • 在 Env 环境下可以导出 BSP 给 IDE 使用
scons -c
  • 1
python ./export_project.py
  • 1

在这里插入图片描述

  • 导出工程到 BSP 目录下后,BSP 会编译不过,需要先把导出工程删除然后编译

3.2 在 RT-Studio 中导入BSP工程

导入BSP工程选择BSP工程
在这里插入图片描述
BSP工程创建中在这里插入图片描述

3.3 更新 BSP 的 Scons 配置

  • 编译 BSP 前,需要先同步一下 Standalone SDK 的 scons 配置,先选中 phytium-standalone-sdk 然后同步 scons 配置至项目
    在这里插入图片描述

3.5 指定 BSP 工程的交叉编译链

  • 按照下图,指定 BSP 工程的交叉编译链,AARCH32 工程选择 AARCH32_CROSS_PATH 作为交叉编译链路径,AARCH64 工程选择 AARCH64_CROSS_PATH
    在这里插入图片描述在这里插入图片描述

  • 添加构建前步骤,编译前会打印交叉编译链的版本信息

在这里插入图片描述在这里插入图片描述

  • 对于 AARCH64 , 选择不同的编译链,由于 RT-Studio 中没有带 arm 的 aarch64 编译链的选项,这里选择 linaro 的编译链,将目录指向 AARCH64_CROSS_PATH,编译选项中 thumb 指令集相关的选项也要移除

在这里插入图片描述

3.6 更新 BSP 的汇编文件包含路径

  • 导入工程时,汇编文件的包含路径没有自动加入,需要手动添加
    在这里插入图片描述

3.4 编译 BSP 生成镜像文件

  • 点击构建/重新构建开始编译
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

3.5 使用 RT-Studio 自带串口工具

在这里插入图片描述

在这里插入图片描述

4. 相关问题记录

    1. 默认主核编号为0,导致某些情况, 如Smp 模式下,所有中断路由至0核
    1. Armv8 中aarch32/aarch64 interrupt 处理存在差异
    1. 在 WSL 下进行开发和使用 env 环境进行开发存在差异,有些命令不同,目前两种方式都验证过可以使用
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/67292
推荐阅读
相关标签
  

闽ICP备14008679号