配置 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 的工程目录 的相关文章

  • 禁止 Gerrit 推送到 refs/for/master

    我已经更新了所有项目昨天获得访问权限 人们说他们今天早上无法将更改推送到存储库 当我恢复访问权限后 他们仍然无法将更改推送到存储库 只能clone工作正常 在将更改推送到远程存储库时 它表示 remote rejected HEAD gt
  • Gitolite 与 LDAP 不工作

    我是 gitolite 的新手 我正在尝试用 gitolite 进行一个非常简单的测试 我已经设置了名为 test repo 的存储库 请注意 除了下面所述之外 我没有修改任何其他内容 我可以在 gitweb 中看到这个仓库 这是仓库配置
  • ssh:连接到主机 bitbucket.org 端口 22:连接超时

    一切都工作得很好 做了一些git pushes 没有问题 今天我决定将我的框架更新到最新版本 因此它稍微改变了我项目的目录结构 因此 在 Bitbucket 中 我创建了一个新的存储库 dev1 project com 并将我的项目文件夹重
  • 使用 Git 部署时压缩 JS/CSS 文件

    我对 git 有点陌生 另外 这是我第一个自动化部署过程的项目 到目前为止 能够做到这一点真是太幸福了git push dev并上传文件 复制配置文件等 现在 当我推送到我的开发服务器时 我想缩小 JS CSS 文件 我正在考虑在服务器上安
  • 目标路径已存在且不是空目录

    我克隆了一个 git 存储库 但不小心弄乱了 所以我重新克隆并显示消息 目标路径已存在且不是空目录 我尝试过删除 Mac 中带有目标路径名称的文件夹 但没有成功 我对编码非常陌生 因此我们将不胜感激 对于根文件夹 以及任何其他文件夹 对于那
  • 永久删除 git 提交历史记录

    我需要永久且完全删除 git 存储库的提交历史记录并继续使用文件的当前版本 旧版本 提交不得以任何方式访问 我尝试创建一个新的主分支 删除所有其他分支 但是当我在 git bash 中尝试 git show xxxx 时 旧的提交继续显示
  • 返回到 Github Desktop 中的上一个提交

    我正在尝试使用 GitHub Desktop 即 GUI 应用程序 而不是命令行 返回到先前的提交 在同一分支上 我认为这是一个核心功能 因为它是首先使用源代码控制的主要原因 我可以看到可以恢复提交 但这并不是我真正想要的 因为它创建了一个
  • git filter-repo:它可以在特定分支上使用吗?

    我正在读什么git filter repo可以做 因为我想用它做一个小实验 我有这个存储库 我只想从中获取一个目录的历史记录 比如说 master 但我不想为主人工作 我想创建一个新分支 例如filter repo test然后让git f
  • 我可以获取两次提交之间 git 子文件夹中已更改文件的列表吗?

    我有一个包含许多文件夹的 git 存储库 我需要找出在两次提交之间这些文件夹之一中的哪些文件发生了更改 有没有一个好的方法来做到这一点 我想你可以坚持走最后的路git diff git diff HEAD HEAD special fold
  • Windows 上的 git 忽略文件名大小写更改 [重复]

    这个问题在这里已经有答案了 我有一个reactjs应用程序 我正在将所有文件名标准化为小写以符合Nodejs 最佳实践 https devcenter heroku com articles node best practices stic
  • 运行 flutter doctor 吐出错误:标准错误:致命:坏对象 HEAD

    我已经从官方网站安装了 Flutter 和 Android Studio 我是 Git GitHub 移动开发和 Android 开发的新手 我试图在命令提示符 Windows 10 中运行 flutter doctor 命令 但是 它会以
  • 从 Eclipse 的历史视图中删除 ORIG_HEAD 和 FETCH_HEAD

    我最近开始使用 Eclipse Kepler 和 EGit 插件 这些分支不是我习惯的 有没有办法永久阻止这些分支的创建 我尝试手动删除它们 但它不起作用 并且我不想在下次获取或变基时保留它们 据我从对您问题的评论中了解到 您只希望这些参考
  • 如何在没有本地存储库的情况下在远程运行 git 命令

    我有一个名为 git export 的脚本 它可以帮助我导出远程存储库 它是这样运行的 git export http host com git repo lt t tag or b branch or c commit gt local
  • Azure git 部署 - 第二个程序集中缺少引用

    我正在尝试将 Bitbucket 部署设置到 Azure 网站 我成功链接了 Bitbucket 和 Azure 但是当我推送到 Bitbucket 时 我在 Azure 站点上收到以下错误 如果我单击 查看日志 它会显示以下编译错误 D
  • GitHub - 指定时间的存储库状态

    我是使用 git 版本控制工具的初学者 我想在指定时间 例如 2013 年 10 月 5 日 下载存储库状态 文件 我怎样才能做到这一点 截至 2019 年 5 月 不确定何时引入 您可以简单地按以下格式添加日期 HEAD 2019 04
  • 如何使用 git-tfs 清理损坏的历史记录

    我不确定我是如何进入这种状态的 但我的 tfs 默认远程分支中有一些 TFS 中不存在的提交 所以我想摆脱它们 所以我的历史是这样的 A B C D tfs default 但提交 B 和 C 实际上并不是 TFS 中的变更集 因此 当我签
  • 如何使用 git 撤消所有空白更改

    我有一个 git 存储库 我在其中本地替换了很多文件 git status 现在显示许多修改的文件 有些是 真正修改过的 其他的只是行结尾不同 我希望那些仅通过行结尾不同的内容消失 git重置它们 但是 我似乎找不到 linux pipin
  • Git 分支之间未跟踪的文件

    我一直在这里寻找答案 看来我可能只是对 git 分支应该如何工作做出了错误的假设 我有我的master分支 我创建了一个名为的功能分支profiles我正在对个人资料进行一些特定的工作 在处理配置文件时 我更改了 5 或 6 个文件 并添加
  • 将远程更改合并到非当前分支的分支中

    我有多个分支 我想将远程更改合并到一个分支中不是我当前的分支 例如 git merge remote branch some other branch 仅当本地分支可以快速转发到远程头时 这才是可行的 在任何分支中 要从源获取远程分支并更新
  • 如何在Git中手动合并所有文件?

    我想合并所有文件manually有了 meld 或任何其他 diff 工具 我如何使用 Git 来做到这一点 当我跑步时git mergetool它说no files need merging 所以我想只有当我有冲突时我才能做到这一点 有更

随机推荐

  • 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 工具进行代码管理