MDK(Keil)实现Kconfig图形化配置

内容摘要在嵌入式开发中通常使用.h头文件宏定义配置各种参数,来适配各种应用场景,以及统一修改工程中使用到的参数,避免漏改引起的程序bug。在一个相对比较复杂的项目中,往往需要配置各种各样的参数, 不同功能的模块对应不同.h,而有效配置项目是具有关联

在嵌入式开发中通常使用.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
24小时热闻
今日推荐
浙ICP备19001410号-1