学习一下如何使用env工具吧~之前大部分时间使用的还是IDE,如何要用命令行,学习是有必要的。更何况env工具给予了可视化的配置,与编译的功能,是非常值得参考和借鉴的。
准备工作
具体的使用步骤,就不细说了,因为rt-thread的官网早已写好等君来。我这里只是写一下自己的笔记,想想哪些重要,哪些需要注意的地方。在物联网操作系统上,希望我兔子弯道超车!env使用方法
Env 工具要实现的功能 :
- RT-Thread 源代码开发编译环境
- RT-Thread 软件包管理系统,软件包的管理需要git的支持
下载:
安装:
- 注意在工作环境中,所有的路径都不可以有中文字符或者空格
env的逻辑:
- 以命令行控制台为主,主要指编译和软件包的管理
- 以字符型界面来进行辅助,主要指配置文件
- 中心思想是以搭建积木的方式来取舍组件等配置,通过使能不同的宏,结合scons来编译
env里面有什么:
- conEmu,她是什么呢?我还没有了解过,interesting!但我现在猜想,只有在这个conEmu终端下,才能正常使用里面的工具,所以我认为她是为我们开发者提供了一套独立命令行环境。
- gnu,提供了一套gnu编译环境
- python,结合scons库,作为make和makefile的替代
- MinGit,提供软件包管理的支持
- pkgs,软件包管理工具哟
- menuconfig,图像化配置工具,支持对整个系统进行配置、裁剪
可见:env就是对工具们的整合!而我们要使用她们就必须通过conEmu~
把env加入到右键菜单:
在右键菜单下启动env有个好处在于,可以在任意文件夹下启动env。
项目的编译
点击env.bat,并把目录切换到rt-thread\bsp\stm32\stm32l475-atk-pandora
。Env 中携带了 Python & scons
环境,因此直接执行scons
命令即可编译bsp。
最终在bsp下生成的文件如下:
- 其中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目录:
选择好配置项之后按 ESC 键退出,选择保存修改即可自动生成 rtconfig.h 文件。此时再次使用 scons 命令就会根据新的 rtconfig.h 文件重新编译工程了。
通过对比,发现改变了两个文件:
- .config,以前的变成了.config.old作为备份
- rtconfig.h
这里我只添加了组件中的sal套接字抽象层,变化如下:
可见SAL层要用,那么netdev和workqueue也必须使能。是具有相关性的,但是,如果我取消sal,netdev和workqueue却是没有被取消,必须手动取消,不知道为何?可见还缺少了判断的能力~
软件包管理:package
RT-Thread 提供一个软件包管理平台,这里存放了官方提供或开发者提供的软件包。该平台为开发者提供了众多可重用软件包的选择,这也是 RT-Thread 生态的重要组成部分。
说实话,我很好奇,package是怎么来索引软件包管理的呢?同样的好奇也在于pip是怎么管理软件包的呢?以及yum或者apt呢?哈哈~
- 下载 :如果软件包在本地已被选中,但是未下载,此时输入:
pkgs --update
,该软件包自动下载; - 更新 :如果选中的软件包在服务器端有更新,并且版本号选择的是 latest 。此时输入:
pkgs --update
,该软件包将会在本地进行更新; - 删除 :某个软件包如果无需使用,需要先在 menuconfig 中取消其的选中状态,然后再执行:
pkgs --update
。此时本地已下载但未被选中的软件包将会被删除。
升级本地软件包信息
随着 package 系统的不断壮大,会有越来越多的软件包加入进来,所以本地看到 menuconfig 中的软件包列表可能会与服务器 不同步 。
使用 pkgs --upgrade
命令即可解决该问题,这个命令不仅会对本地的包信息进行更新同步,还会对 Env 的功能脚本进行升级,建议定期使用。
pkgs –upgrade 命令和 pkgs –update 命令有什么区别?
- pkgs –upgrade 命令是用来升级 Env 功能脚本本身和软件包列表的。没有最新的包列表就不能选择最近更新的软件包。
- pkgs –update 命令是用来更新软件包本身的,比如说你在 menuconfig 中选中了 json 和 mqtt 的软件包,但是退出 menuconfig 时并没有下载这些软件包。你需要使用 pkgs –update 命令,这时候 Env 就会下载你选中的软件包并且加入到你的工程中去。
- 新版本的 Env 支持 menuconfig -s/–setting 命令,如果你不想每次更换软件包后使用 pkgs –update 命令,在使用 menuconfig -s/–setting 命令后配置 Env 选择每次使用 menuconfig 后自动更新软件包即可。