在嵌入式开发中通常使用.h头文件宏定义配置各种参数,来适配各种应用场景,以及统一修改工程中使用到的参数,避免漏改引起的程序bug。在一个相对比较复杂的项目中,往往需要配置各种各样的参数, 不同功能的模块对应不同.h,而有效配置项目是具有关联性,比如A模块依赖B模块,如果模块B关闭(如#define MODULE_B 0)时,那么就不应该启用模块A,当依赖层级比较多时,容易出现修改这忘了改那,尤其随着时间拉长,对项目没有之前那么熟悉的情况,依靠记忆配置存在隐患。
本文引用地址:
参考linux开发,使用make menuconfig命令调用Kconfig进行配置,不仅可以管理如此庞大的工程,同时图形化配置又显得非常直观,高大上~, 刚好手上项目是基于GD32 MDK开发的,因为是多人参与的项目,需要考虑团队适应,因此不方便移植到linux平台上(menuconfig本身的linux kernel量身打造的,在linux中搭建环境更加方便),于是萌生了搭建WIndows中MDK使用Kconfig环境想法,开干~
Windows中menuconfig
menuconfig(KConfig)图形化依赖ncurses和kconfiglib库,python已经帮我们实现了,因此我们这里使用python来安装。这里我以python3为例子(python安装这里就不介绍了,并且需要将python添加到系统环境变量中)
检测python是否安装成功
这里我们使用pyhton 的pip来安装。
安装windows-curses
安装windows-curses库
出现”Successfully installed windows-curses-xxx“ 表示安装成功。
另外如果安装失败,有可能是你的pip版本太低, 根据提示更新:
安装kconfiglib
安装kconfiglib库
出现”Successfully installed kconfiglib-xxx“ 表示安装成功。
至此依赖库已安装好,根据自己电脑上安装的python路径查看是否真的生成我们所要的文件:
python3Libsite-packagesgenconfig.py //作用将menuconfig生成的.config文件转成.h头文件
python3scriptsmenuconfig.exe
尝试menuconfig
首先我们需要一个Kconfig,关于Kconfig语法,这篇文章不过多介绍。这里摘用网上一个简单的例子:
使用cmd命令行
使用win+R打开cmd, 并切到测试Kconfig所在路径,并输入:menuconfig
如出现以下图片,表示成功了:
cmd执行menuconfig成功
使用powershll命令行
执行也是正常,结果跟cmd一致,这里就不重复贴图了。
使用git bash命令行
git bash执行失败
发现执行出错,提示:Redirection is not supported 重定向不支持。个人猜测是git bash命令行是类linux shell的,而我们使用的menuconfig是基于windows的,2者系统重定向符合不一致,导致无法执行(如果读者有更准确的答案,欢迎留言分享)。
好了,我们的重点来了,如何在mdk如何使用menconfig呢?
将Kconfig添加到Keil工程中
这里我们随便拿一个原子简单的例程,只要能编译即可(即使编译错误也行不影响)。我们将Kconfig拷贝到工程目录下:
工程示例
配置工程
点击”魔术棒 工程配置,选择User栏:
配置keil工程
在Before Build/Rebuild(编译/重新编译前执行)栏填入:menuconfig,并勾选
配置Befort Build/Rebuild
然后OK保存,尝试编译,在Keil的Build Output编译输出栏中又出现错误:Redirection is not supported
执行menuconfig报错
怀疑是MDK的终端也是重定向符合不匹配的问题,这里我尝试了好几次方法,尝试通过指定cmd和powershell执行menuconfig,发现还是不行。
解决重定向
因为我们在第三步已经验证通过cmd和powershell是能够正常运行menuconfig,解决思路就是通过它们间距来执行。
于是通过编写python脚本config.py来实现(这里参考了网友,表示感谢~),具体如下:
简单介绍下脚本作用:定义个project_menuconfig函数用于区分当前环境是否为windows,如果是,则执行命令:
其中:
start:: 启动一个新的命令行
/wait: 与start命令一起使用,表示在启动新程序或命令后,当前命令行等待执行完 成在继续执行后续命令
cmd.exe:指定使用cmd命令行
menuconfig:就是我们要执行的命令
%s file:其中file函数未传参,使用默认值Kconfig
并放到工程目录下:
将config.py添加到工程中
接着,修改MDK工程User配置:
再次尝试编译,正常出现图形化界面,即成功解决~
4.生成配置头文件
使用menuconfig解析Kconfig文件,在其路径生成.config(默认名,文件名称可修改)
menuconfig生成.config文件
我们打开.config看下其内容:
.
接下来我们还需要依据.config生成我们最终所需的.h头文件,这里我们就需要用到genconfig.py脚本文件(在第二步骤安装依赖库时),并在MDK中添加以下命令,使其自动生成。
其中:
D:Mysoftworkpython3Libsite-packagesgenconfig.py 根据自己实际python安装路径
--header-path 指定输出头文件名,如果不指定,则默认生成config.h,其他选项可--help查看
myconfig.h 我们指定生成的头文件名
接着再次编译,发现工程路径下成功生成了myconfig.h配置头文件
myconfig.h内容
至此,我们成功实现了在Window中MDK使用menuconfig-Kconfig实现图形化配置。
环境搭建成功,后面就是运用于实际项目中,关于kconfig语法本篇没有过多介绍,相关介绍,可以参看:
Kconfig官网:doc/html/latest/kbuild/kconfig-language.html
RTT-Thread介绍:document/site/#/development-tools/build-config-system/Kconfig
综上所述,关于Windows如何使用menuconfig-Kconfig介绍,相信大家有了一定了解,可以运用于自己的实际项目哦。如果有任何疑问,欢迎点赞转发,以及留言讨论, 另外喜欢嵌入式技术的小伙伴,可以关注走一波哈。好了,今天的分享到此咯,下次再见~
0 条