rt-thread工具之env使用

2020-06-29

学习一下如何使用env工具吧~之前大部分时间使用的还是IDE,如何要用命令行,学习是有必要的。更何况env工具给予了可视化的配置,与编译的功能,是非常值得参考和借鉴的。

准备工作

具体的使用步骤,就不细说了,因为rt-thread的官网早已写好等君来。我这里只是写一下自己的笔记,想想哪些重要,哪些需要注意的地方。在物联网操作系统上,希望我兔子弯道超车!env使用方法

Env 工具要实现的功能 :

  • RT-Thread 源代码开发编译环境
  • RT-Thread 软件包管理系统,软件包的管理需要git的支持

下载:

  • 下载env.注意,里面有学习文档哟~
  • 下载git

安装:

  • 注意在工作环境中,所有的路径都不可以有中文字符或者空格

env的逻辑:

  • 以命令行控制台为主,主要指编译和软件包的管理
  • 以字符型界面来进行辅助,主要指配置文件
  • 中心思想是以搭建积木的方式来取舍组件等配置,通过使能不同的宏,结合scons来编译

env里面有什么:

  1. conEmu,她是什么呢?我还没有了解过,interesting!但我现在猜想,只有在这个conEmu终端下,才能正常使用里面的工具,所以我认为她是为我们开发者提供了一套独立命令行环境。
  2. gnu,提供了一套gnu编译环境
  3. python,结合scons库,作为make和makefile的替代
  4. MinGit,提供软件包管理的支持
  5. pkgs,软件包管理工具哟
  6. menuconfig,图像化配置工具,支持对整个系统进行配置、裁剪

可见:env就是对工具们的整合!而我们要使用她们就必须通过conEmu~

把env加入到右键菜单

在右键菜单下启动env有个好处在于,可以在任意文件夹下启动env。

项目的编译

点击env.bat,并把目录切换到rt-thread\bsp\stm32\stm32l475-atk-pandora。Env 中携带了 Python & scons 环境,因此直接执行scons命令即可编译bsp。

最终在bsp下生成的文件如下:

1

  • 其中BSP文件夹下则是生成的中间目标文件*.o
  • .sconsign.dblite应该是用来确定记录文件戳的,以保证增量构建
  • cconfig.h,在py脚本中被生成,然后再libc_signal.h使用
  • rtthread.bin rt-thread.elf则是二进制文件,用于运行滴,是最终的成果
  • rt-thread.map则是生成以后,其中的接口所在的内存映射

当然,如果你喜欢使用IDE开发,比如mdk/iar来进行项目开发,你可以使用scons来生成工程文件啊,nice~

scons --target=iar
scons --target=mdk4
scons --target=mdk5

BSP 配置:menuconfig

menuconfig 是一种图形化配置工具,RT-Thread 使用其对整个系统进行配置、裁剪。

进入BSP根目录,输入 menuconfig 命令后即可打开其界面。其实也就是说需要再Kconfig所在的目录bsp目录:

2

选择好配置项之后按 ESC 键退出,选择保存修改即可自动生成 rtconfig.h 文件。此时再次使用 scons 命令就会根据新的 rtconfig.h 文件重新编译工程了。

通过对比,发现改变了两个文件:

  • .config,以前的变成了.config.old作为备份
  • rtconfig.h

这里我只添加了组件中的sal套接字抽象层,变化如下:

3

4

可见SAL层要用,那么netdev和workqueue也必须使能。是具有相关性的,但是,如果我取消sal,netdev和workqueue却是没有被取消,必须手动取消,不知道为何?可见还缺少了判断的能力~

软件包管理:package

RT-Thread 提供一个软件包管理平台,这里存放了官方提供或开发者提供的软件包。该平台为开发者提供了众多可重用软件包的选择,这也是 RT-Thread 生态的重要组成部分。

说实话,我很好奇,package是怎么来索引软件包管理的呢?同样的好奇也在于pip是怎么管理软件包的呢?以及yum或者apt呢?哈哈~

5

  • 下载 :如果软件包在本地已被选中,但是未下载,此时输入:pkgs --update ,该软件包自动下载;
  • 更新 :如果选中的软件包在服务器端有更新,并且版本号选择的是 latest 。此时输入: pkgs --update ,该软件包将会在本地进行更新;
  • 删除 :某个软件包如果无需使用,需要先在 menuconfig 中取消其的选中状态,然后再执行: pkgs --update 。此时本地已下载但未被选中的软件包将会被删除。

升级本地软件包信息

随着 package 系统的不断壮大,会有越来越多的软件包加入进来,所以本地看到 menuconfig 中的软件包列表可能会与服务器 不同步

使用 pkgs --upgrade 命令即可解决该问题,这个命令不仅会对本地的包信息进行更新同步,还会对 Env 的功能脚本进行升级,建议定期使用。

pkgs –upgrade 命令和 pkgs –update 命令有什么区别?

  1. pkgs –upgrade 命令是用来升级 Env 功能脚本本身和软件包列表的。没有最新的包列表就不能选择最近更新的软件包。
  2. pkgs –update 命令是用来更新软件包本身的,比如说你在 menuconfig 中选中了 json 和 mqtt 的软件包,但是退出 menuconfig 时并没有下载这些软件包。你需要使用 pkgs –update 命令,这时候 Env 就会下载你选中的软件包并且加入到你的工程中去。
  3. 新版本的 Env 支持 menuconfig -s/–setting 命令,如果你不想每次更换软件包后使用 pkgs –update 命令,在使用 menuconfig -s/–setting 命令后配置 Env 选择每次使用 menuconfig 后自动更新软件包即可。