配置 RT-Thread 的工程目录

2023-11-16

1. 前言

RT-Thread 基于 Scons 的包管理非常方便让我们使用 RT-Thread 进行开发,但在实际工程中将应用代码写到 RT-Thread 官方提供的 bsp 目录下面会非常不便于使用,无法使用自己 git 工具进行代码管理。
解决方式,可以是 fork 出一个基于特定版本的 RT-Thread,然后基于该版本上开发,这样能够有代码管理,但是后续需要更新 RT-Thread 内核源码就会非常不方便。
如果可以将 RT-Thread 以 submodule 的方式包含进工程,那么就可以实现即能够进行包管理,也能与官方同步升级 RT-Thread 版本。

2. 实战

本篇将以下面步骤进行操作,流程如下:

  1. 创建 git 仓库
  2. 添加 rt-thread 为 submodule
  3. 添加应用程序目录
  4. 修改 Scons 和 Kconfig 脚本
  5. 基于 vscode 下的开发环境搭建

2.1 创建 git 仓库

在 gitee 上创建如下仓库:仓库创建
在这里插入图片描述

2.2 添加 rt-thread 为 submodule

git clone 到本地,随后输入 git submodule add https://gitee.com/rtthread/rt-thread.git 将 RT-Thread 主仓库添加到子模块里:
在这里插入图片描述
下载成功后,会在目录里面生成 .gitmodules 文件,该文件里面记录了子模块信息,虽然提交工程:
在这里插入图片描述
此时远端仓库就会包含 rt-thread 主分支内容,后续 rt-thread 需要更新的话,可以通过 git 更新。
在这里插入图片描述

2.3 添加应用程序目录

应用目录以基于 bsp/stm32/stm32h743-amfly-v7 :
在这里插入图片描述
提交工程
在这里插入图片描述

2.4 修改 Kconfig 和 Scons 脚本

Kconfig

很显然目前 Kconfig 和 Scons 脚本是不能正常使用的,先修改 Kconfig 文件:
先修改根目录下的:Kconfig

mainmenu "RT-Thread Configuration"

config MCU_MANUFACTURER
    string
    option env="MCU_MANUFACTURER"
    default "stm32"

config BSP_DIR
    string
    option env="BSP_ROOT"
    default "."

config RTT_DIR
    string
    option env="RTT_ROOT"
    default "rt-thread"

config PKGS_DIR
    string
    option env="PKGS_ROOT"
    default "packages"

source "$RTT_DIR/Kconfig"
source "$PKGS_DIR/Kconfig"
source "$RTT_DIR/bsp/$MCU_MANUFACTURER/libraries/Kconfig"
source "board/Kconfig"

前后对比如下:
在这里插入图片描述
修改board目录的:board\Kconfig

menu "Hardware Drivers Config"

config SOC_STM32H743XI
    bool
    select SOC_SERIES_STM32H7
    select RT_USING_COMPONENTS_INIT
    select RT_USING_USER_MAIN
    default y

menu "Onboard Peripheral Drivers"

endmenu

menu "On-chip Peripheral Drivers"

    config BSP_USING_GPIO
        bool "Enable GPIO"
        select RT_USING_PIN
        default y

    menuconfig BSP_USING_UART
        bool "Enable UART"
        default y
        select RT_USING_SERIAL
        if BSP_USING_UART
            config BSP_USING_UART1
                bool "Enable UART1"
                default y

        endif

    source "$RTT_DIR/bsp/$MCU_MANUFACTURER/libraries/HAL_Drivers/Kconfig"

endmenu

menu "Board extended module Drivers"

endmenu

endmenu

前后对比如下:
在这里插入图片描述
成功后可以 menuconfig 正常显示出 Kconfig 菜单
在这里插入图片描述

Scons

先修改 rtconfig.py 文件
在这里插入图片描述
修改 Sconstruct 文件
在这里插入图片描述
大家可以通过 gitee 中修改项的对比, 详细看我修改了什么 修改项对比
在这里插入图片描述
在这里插入图片描述

2.5 修改 vscode

使用 Vscode 在 RT-Thread 中查找经常会查找到其它板卡中,导致很多无效查询,解决办法屏蔽掉不需要的目录:
Shift + Ctrl + P 输入 setting.json 选择 workspace settings,该选项只会在本工程生效,不会影响其它工程:
在这里插入图片描述
输入 search.exclude ,true 属性表示查询不生效,false 表示查询生效。
在这里插入图片描述
可以通过多选目录,然后复制相对路径:
在这里插入图片描述
通过 Alt + Shift 一次性操作多行
在这里插入图片描述
结尾的修改,通过 Alt + shift 然后鼠标拉倒最后可以选中所有行的末尾:
在这里插入图片描述
即可一次操作全部板卡的隐藏:
在这里插入图片描述
然后把我们需要的板卡改成 false 即可:
在这里插入图片描述
由于 stm32 目录下还有不同芯片的板卡,上面方式如法炮制即可
这时候再进行查找就不会冒出一大堆没用的信息了:
在这里插入图片描述

总结

本篇的仓库位于 gitee 仓库
每个步骤都标识成一个标签了。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

配置 RT-Thread 的工程目录 的相关文章

  • Git:压缩 master 上提交的最简单方法[重复]

    这个问题在这里已经有答案了 可能的重复 如何使用 git 将最后 X 次提交压缩在一起 https stackoverflow com questions 5189560 how can i squash my last x commits
  • STM32F4 定时器 - 计算周期和预分频,以生成 1 ms 延迟

    我在用STM32F407VGT6 with CubeMX 因此 我从通用定时器开始 但我被预分频值和周期值所困扰 基本上我想每隔一段时间生成一个定时器中断n 其中 n 1 2 3 ms 并执行一些任务 计算周期和预分频值的公式有很多变化 公
  • 无法使用 git 推送或获取 [重复]

    这个问题在这里已经有答案了 我可以拉 但无法使用 git 版本 1 9 5 推送或获取 它突然开始给我以下错误 关于如何修复它有什么想法吗 git fetch fatal unable to access https email prote
  • 在 Azure DevOps 中为 Wix MSI 文件生成 GUID

    我正在为 Web 服务器应用程序和 Sitecore 前端应用程序设置 Wix 安装程序 我的问题并非特定于 Web 服务器或 Sitecore 我的问题是 Wix 以及如何使用它进行持续交付 1 Wix 需要每个文件和产品本身的 GUID
  • 如何禁用 GitHub 中的拉取请求?

    我试图了解如何禁用 github 中的 拉取请求 问题一 我们正在尝试使用变基工作流程 这意味着如果不是快速推进 那么使用拉取请求可能会有害 一种解决方案 为我想要禁用拉取请求的分支设置分支权限 或者将我添加为任何进入 master 的内容
  • 我可以忽略全局 .gitignore 吗?

    我的全局 gitignore 一般都很棒 但对于这个一次性项目 我不希望应用全局规则 如何删除这个怪异存储库的全局 gitignore 规则 在您的存储库中运行此命令 git config local core excludesfile f
  • 清理远程 Git 分支

    我已经将 SVN 存储库移至 Git 可能由于多次克隆 我现在只剩下一堆看起来像这样的分支 BranchA origin BranchA remotes BranchA remotes origin BranchA remotes orig
  • Jenkins GIT 包含从未构建过的区域

    我正在尝试使用包含区域在 Jenkins 中构建我的工作 但每当选中此选项时 民意调查结果总是说未检测到任何更改 我尝试了许多不同的路径 以及使用工作区进行 不进行强制轮询 结果是轮询从未检测到任何更改 但一旦我删除这些选项 它们就会在下一
  • 如何恢复已删除的远程分支

    我们的远程主分支被删除 我有主存储库的本地副本 但它已经过时了 我可以通过将最后一个已知的提交哈希值插入 URL 来查看 github 中的分支 但未能成功恢复它 我尝试了几个步骤来恢复它 git reset hard 16deddc05c
  • Android repo 脚本创建的 .repo/projects/ 中的裸 git 存储库的用途是什么?

    The 安卓源码 http android git kernel org 由以下人员管理repo http source android com source version control html 使用 repo 同步时 一个名为 re
  • 创建多个 git 分支的联合分支

    我希望能够在现有分支之上分层其他分支 并独立修改这些分支 这很有用 例如 允许将各个子项目的二进制文件统一到同一个项目中bin目录 一般来说 给定的文件仅存在于一层中 理想情况下 我想我会使用 unionfs 来完成此任务 但它必须以某种方
  • 如果您使用 CocoaPods,您的 .gitignore 中会包含什么内容?

    我从事 iOS 开发已经几个月了 刚刚了解到有前途的可可豆荚 http cocoapods org 用于依赖管理的库 我在个人项目上尝试过 添加了依赖项Kiwi https github com allending Kiwi到我的 Podf
  • 结帐时出现 Git 错误:“致命:引用不是树”

    当我决定弄清楚为什么我正在从事的项目如此重要时 这一切就开始了 我运行了以下脚本 git rev list objects all git cat file batch check objecttype objectname objects
  • 在种子项目上构建时如何组织 git 存储库

    我正在基于从 github 克隆的种子项目 MEAN io 构建一个网站 如何将这些文件与我自己的文件分开 由于该种子提供了广泛的文件框架 因此我自己的文件分布在整个项目中 我希望能够从种子中提取更新 但不能将其与我添加的文件混合 我知道我
  • Git 删除其他人从远程所做的最后提交

    所以 我的情况是 错误地 我已经授予某人对我的分支的承诺 现在 在我的本地 我已经进行了提交 当我尝试将其推送到远程时 它显示远程在前面 因为对方已经将他的代码推送到了这个分支并进行了多次提交 现在 我可以从远程删除这些提交而不将拉取到本地
  • 如何在源代码管理中存储 Visual Studio 的调试配置

    Visual Studio 的调试配置存储在 user文件是用户特定的并且传统上被源代码管理忽略 我对工作目录参数感兴趣 我需要它在程序员的机器上保持一致 并且它具有以下价值 outDir而不是默认的 ProjectDir 我怎样才能解决这
  • 为什么 Git Bash 无法运行我的可执行文件?

    I am on git for windows https github com git for windows 吉特 巴什 我无法在命令行上运行可执行文件 Pedr Abc 07 MINGW64 c dev ls sqlite3 exe
  • 是否可以使用“git gc”来打包引用日志对象?

    正如答案所暗示的https stackoverflow com a 32025729 https stackoverflow com a 32025729我已经配置了远程裸仓库 git config gc pruneExpire never
  • 如何在 git 中将我的功能分支变基到开发分支,尽可能减少冲突?

    我的功能分支已超过大约 30 次或更多提交 与此同时 在开发分支中 其他开发人员还推出了一些其他功能 因此 每次在开发中发布新功能时 我都会被要求 将开发分支重新建立到我的功能分支上 解决冲突 如有 继续在您的功能分支中开发 问题 第二步就
  • gerrit - git(pull、checkout、cherrypick)的用途是什么?

    在 Android 的 gerrit ex 中 link https android review googlesource com c 109934 要下载补丁 我看到4个选项 回购下载 checkout pull 择优挑选 它们之间有什

随机推荐

  • C++中的函数模板

    觉得大神写的很好 就摘抄下来了 有需要可以查看原版链接 如下 以下内容是摘抄博客 C 中的函数模板 年少轻狂 幸福时光 CSDN博客 函数模板 之前我们知道的交换两个变量的方法有宏定义 函数 这两种方式都能实现两个变量的交换 但是各有各的优
  • Ubuntu镜像下载地址

    镜像地址https launchpad net ubuntu cdmirrors
  • Tomcat集群配置

    1 Tomcat集群 多个 Tomcat 服务器构成了一个集群 Cluster 系统 共同为客户提供服务 集群系统具有以下优点 高可靠性 高性能计算 负载平衡 图1 1显示了由 JK插件和两个 Tomcat服务器构成的集群系统 集群系统的正
  • Jeesite 过滤指定字典的值(显示字典的一部分值)

    一 HTML div class form group div
  • uni/vue transition不生效的解决办法

    uni中目前还是使用vue2 自上而下的过渡效果 从底部飞入 fly in from bottom 进入过渡生效 离开过渡生效 enter active leave active transition transform 3s enter
  • 13-并查集

    数据结构并查集常用于将两个集合并起来以及查询两个元素是否隶属于同一个集合 相对于传统我们的求法 并查集算法极大减少了查询的工作量 提高了效率 合并集合 假设我们有两个集合 常规情况下合并两个集合就是将它们混合起来 但是在计算机中 如果我们想
  • idea 配置详解 (二) 之editor 详解

    3 File Settings Editor 3 1 File Settings Editor General 3 1 1 File Settings Editor General Auto Import 3 1 2 File Settin
  • error: ‘connect‘ was not declared in this scope connect(timer, SIGNAL(timeout()), this, SLOT(up

    错误 error connect was not declared in this scope connect timer SIGNAL timeout this SLOT updateslot 解决方法 类要继承 QObject类
  • 015.PyQt5_QWidget_坐标系统&大小位置

    控件的坐标系统 左上角为坐标原点 向右为x轴正方向 向下为y轴正方向 子控件位置是参照父控件 顶层控件则参照桌面 大小位置 先了解一下控件的结构 没有父控件的控件 称之为窗口 一般会被包装成一个框架 相关API 获取大小和位置的API AP
  • linux怎么查看端口被哪个进程占用

    两种查看方法 例如80端口 1 使用fuser命令 可以直接在Linux上查看指定端口被哪个进程占用了 语法为 fuser v 80 tcp 运行结果里会包含进程的名字和id 2 使用lsof命令 能根据指定端口找到对应的进程信息 语法为
  • STEAM课程的五大教学策略

    格物斯坦小坦克就stem课程的五大教学策略来讲一讲 激发求知欲 培养思维技巧是STEAM课程活动的重点之一 先玩后做 即先呈现成果的乐趣再探索制作 让学生在实践活动中体验和理解相关的概念 力求最match大程度地激发学生的学习需求和求知欲
  • 虚拟机安装与双系统(win10+ubuntu)安装及其他

    近来由于想要尝试下双系统 所以整了个虚拟机玩玩 在真实机器上装双系统方法类似 不过在虚拟机上装要安全些 在此记录下过程 以资日后参考 博客原创性是没有啥原创性的 各处借花献佛 算是一个总结性博客吧 文章目录 1 虚拟机安装 2 一个跨浏览器
  • buck电路_通过DAC调节BUCK电路输出电压

    产品开发中 经常有需要调节DC转换器输出电压的需求 例如一些DC可调电源 或者直流有刷电机的调速等场合 上图中我们采用LM2596S ADJ作为电源模块 用带DAC功能的单片机或专用DAC芯片调节BUCK转换器的电压输出 我们都知道常见的D
  • 网络安全知识试题

    网络安全知识竞赛题库 1 维基解密 网站的总部位于 没有公开办公地址 没有公布办公邮箱 6 苹果的icloud存在安全策略漏洞 苹果公司采用限定账户每天登录次数方法进行弥补 8 在享受云服务带来的便捷时 数据安全的主动权掌握在手里 云服务商
  • JS中模板字符串,怎么设置自动补全html标签

    我们在写代码的时候经常会用到模板字符串 但是没有代码提示 写的还是挺难受的 有一种方法可以解决这个问题 我们在VScode中打开设置 找到任一一个settings json文件打开 将这下面这些代码粘贴在后面 emmet triggerEx
  • 差分数组是个啥?能干啥?怎么用?(差分详解+例题)

    差分数组是个啥 差分数组很明显就是个数组呗 本菜鸡学的比较浅 先说一下我自己认识的差分数组吧 先解释一下什么是 差分 差分其实就是数据之间的差 什么数据的差呢 就是上面所给的原始数组的相邻元素之间的差值 我们令 d i a i 1 a i
  • 【Linux】Linux Systemd 启动守护进程

    1 概述 转载 http www ruanyifeng com blog 2016 03 systemd tutorial commands html 去看原文吧 排版比较好 这里转载防丢失 Systemd 是 Linux 系统工具 用来启
  • 常用的大数据技术有哪些?

    大数据技术为决策提供依据 在政府 企业 科研项目等决策中扮演着重要的角色 在社会治理和企业管理中起到了不容忽视的作用 很多国家 如中国 美国以及欧盟等都已将大数据列入国家发展战略 微软 谷歌 百度以及亚马逊等大型企业也将大数据技术列为未来发
  • Kafka Producer 发送数据

    Kafka Producer 发送数据 1 生产者概览 1 不同的应用场景对消息有不同的需求 即是否允许消息丢失 重复 延迟以及吞吐量的要求 不同场景对Kafka生产者的API使用和配置会有直接的影响 2 Kafka发送消息的主要步骤 消息
  • 配置 RT-Thread 的工程目录

    1 前言 RT Thread 基于 Scons 的包管理非常方便让我们使用 RT Thread 进行开发 但在实际工程中将应用代码写到 RT Thread 官方提供的 bsp 目录下面会非常不便于使用 无法使用自己 git 工具进行代码管理