0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ZephyrOS中对于Kconfig的介绍

恩智浦MCU加油站 来源:恩智浦MCU加油站 作者:恩智浦MCU加油站 2021-10-11 10:17 次阅读

这次小编为大家带来的是ZephyrOS系列文章的第五篇,将为大家介绍Kconfig。

这次小编紧接着上篇给大家带来ZephyrOS中对于Kconfig的介绍。

简单的来说,Kconfig就是Zephyr的配置系统,Zephyr内核可以在构建阶段,根据不同的配置,包含特定的应用和平台。而这个配置过程正是通过Kconfig实现的,其也与Linux内核配置所使用的Kconfig完全一致。设计目标就是让我们无需修改源代码就可以完成Zephyr的配置工作,包括内核,硬件,子系统等。通常配置项(也被称作symbol)是在Kconfig文件中定义的。当然不同的配置项之间也是可以存在依赖关系的,比如定义一个符号A,它依赖于B,那么只有当B被使能之后,A才是有效的。同时,所有的符号可以被合并到一个叫做menu/sub-menu的组里面,便于图形化管理。在正式开篇之前,小编先给大家推荐一个小工具,叫做menuconfig,他是一个可选的图形化工具,可以用来查看和修改Kconfig设置:

当然默认是不会打开的,即默认使用west构建工程是不支持menuconfig的,需要传入-t menuconfig参数

west build –t menuconfig –b mimxrt1060_evksampleshello_world

最终,所有配置项会被生成到一个叫做autoconf.h的文件中,没有用到的代码就不会再被编译系统所编译,以节省代码空间。

下面,介绍Kconfig中的一个比较重要的概念,visible和invisible符号。

首先说visible符号,也就是那些可以在menuconfig窗口中见到的,这些符号,通常都有一个prompt属性,即一个字符串来进行描述,例如:

config FPU bool “Support floating point operations” depends on HAS_FPU

然后,我们就可以在menuconfig界面中找到他:

[ ] Support floating pointoperations

Invisible符号则与之相对,一般没有prompt属性,即字符串来说明,例如:

config CPU_HAS_FPU

bool

help

This symbol is y if the CPU has a hardwarefloating point unit.

他的特殊性在于,这些符号对于用户是不可见的,即不能通过menuconfig提供的图形化工具来配置,只能通过其他手段来修改其的值。

例如,通过Kconfig.defconfig文件设置下面这个符号的值为32:

config FOO_WIDTH

int

我们就可以在Kconfig.defconfig文件中定义:

config FOO_WIDTH

default 32

endif

这样一来,我们就修改了FOO_WIDTH的默认值为32。

要注意的是,Kconfig.defconfig中所定义的默认值会覆盖掉起始值,且优先级比较高。

我们再举一个choice的例子,比起上面我们定义的config形式的变量,choice类似于一种单选框,当有多个配置存在时,只能一个配置项有效,这样一来,达到一个互斥的效果。要如何操作呢?假定有一个choice叫做FOO,他有两个配置项A和B,初始默认值是B:

choice FOO

bool “Foo choice”

default B

config A

bool “A”

config B

bool “B”

endchoice

下面我们把他的默认值修改为A,完成这个操作,除了在Kconfig.defconfig中修改外,我们还可以在prj.conf中添加:

choice FOO

default A

endchoice

当然,这里要注意,如果我们定义了一个invisible的choice变量FOO的话,就只能通过Kconfig.defconfig来修改了。

那么在Zephyr工程中,都有哪些修改默认配置的地方呢?如果只考虑板级(即Zephyr所支持的开发板)+ 应用这一层,大致分为三类:

板子相关的配置文件,一般名为:boards/《ARCH》/《BOARD》/《BOARD》_defconfig

任意的CMake cache文件,以CONFIG_开头

应用配置:

a) 默认prj.conf

b) 通过-DCONF_FILE=《conf_file》指定,进行重载

c) 通过-DOVERLAY_CONFIG=《conf_file》指定,进行扩展

d) 通过prj_《BOARD》.conf进行重载

e) 通过boards/《BOARD》.conf进行扩展

那么小编就不再扩展Kconfig的其他语法了,大家可以参考这里来了解更多。

至此,Zephyr所使用的两大配置系统就大致讲完了,那么有朋友可能会问了,我们什么时候要用DeviceTree什么时候要用Kconfig呢?小编在这里简单总结一下:

使用设备树来描述硬件和启动配置,例如板载外设和设置启动时系统时钟频率等

使用Kconfig来配置哪些源代码将要被放到最终的镜像中,例如是否添加网络的支持,哪个驱动是需要的。

通俗点讲,DeviceTree负责管理那些硬件资源,Kconfig负责管理软件资源。

举个例子,有个设备同时拥有2.4GHz,multi-protocol radio; 蓝牙和802.15.4,那么设备树就用来描述:

是否有radio硬件存在

兼容性驱动

启动阶段配置,比如TX power in dBm

Kconfig文件决定哪个软件包需要被构建,是选择BLE还是选择802.15.4协议栈。

聊到这里,结合上一篇关于DeviceTree的文章,小编就将DeviceTree和Kconfig的一

些知识点分享给大家了,不过,限于篇幅,都只是一些比较简单的介绍,大家可以自行深入探索。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16016

    浏览量

    343587
  • Zephyr
    +关注

    关注

    0

    文章

    15

    浏览量

    5889

原文标题:清风徐来——Zephyr实战篇(4)之Kconfig

文章出处:【微信号:NXP_SMART_HARDWARE,微信公众号:恩智浦MCU加油站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    DshanMCU-R128s2 RTOS 软件包配置

    本文将介绍 RTOS 软件包、地址,内核配置等。 Kconfig 简介 有过 linux 内核开发经验的人,对 menuconfig 不会陌生。对于各类内核,只要是支持 menuconfig 配置
    的头像 发表于 12-22 16:20 205次阅读
    DshanMCU-R128s2 RTOS 软件包配置

    LabVIEWNIPackageManager功能介绍

    LabVIEWPackageManager功能介绍 使用NIPackage Manager可安装、更新、修复和删除NI软件。 安装NI软件使用PackageManager浏览和安装NI软件
    发表于 11-13 18:59

    IAR调试不同复位类型的介绍

    IAR调试不同复位类型的介绍在IAR 环境下调试有不同的复位类型,其中一些只复位内核不复位MCU 外设的复位方式在特定情况下可能会造成仿真问题
    发表于 10-19 07:54

    浅谈Linux内核源码的Makefile、Kconfig和.config文件

    Linux内核源码文件繁多,搞不清Makefile、Kconfig、.config间的关系,不了解内核编译体系,编译修改内核有问题无从下手,自己写的驱动不知道怎么编进内核,不知道怎么配置内核,这些
    发表于 10-17 16:19 1472次阅读
    浅谈Linux内核源码的Makefile、<b class='flag-5'>Kconfig</b>和.config文件

    基于RoboMasterC板的RT-Thread使用分享—PWM使用

    在上篇文章中我是使用基于芯片创建的,我原本想着不通过BSP文件在教程中教大家一步一步的通过Kconfig+CubeMX配置出可以驱动整个开发板所有外设的工程的。在社区前辈的提醒后才知道通过基于芯片创建工程是没有办法Kconfig配置的。
    的头像 发表于 10-13 16:46 1527次阅读
    基于RoboMasterC板的RT-Thread使用分享—PWM使用

    基于RT-Thread的RoboMaster电控框架(二)

    由于 RT-Thread 稳定高效的内核,丰富的文档教程,积极活跃的社区氛围,以及设备驱动框架、Kconfig、Scons、日志系统、海量的软件包
    的头像 发表于 09-20 15:16 470次阅读

    AVR单片机的实时时钟校准和补偿介绍

    系列的外部参考及内部外设来完成,也可以使用外部元件完成。这两种方法在本文档均有介绍。当误差已知时,可以采用基于软件的补偿方式来减小误差。本文档给出了几个示例,并提供了一些实用技巧以便有效地实现基于软件的补偿。
    发表于 09-19 08:06

    执行scons --menuconfig报错怎么解决

    directory /home/fly/project/eeasy/smart-car/venus/eos/tools/kconfig-frontends\' scons: Reading
    发表于 09-08 17:46

    NUC980列目录时对于文件名的汉字均显示为问号如何解决?

    NUC980列目录时对于 文件名的汉字均显示为问号,如何解决?
    发表于 09-01 09:54

    boardKconfig到底有什么用?

    我感觉boardKconfig没有什么用,如果是开发板,还有点用。 如果是自己的板子,所有硬件接口肯定是需要使用的,本来可以一步搞定,用这个Kconfig就变成两步:先给自己做菜单,然后自己打开菜单全部勾上。
    发表于 08-02 18:24

    NUC980列目录时对于文件名的汉字均显示为问号,如何解决?

    NUC980列目录时对于 文件名的汉字均显示为问号,如何解决?
    发表于 06-26 07:33

    别克君越控开关失灵,什么情况怎么解决

    开关
    YS YYDS
    发布于 :2023年06月23日 00:38:57

    NUC980 列目录时对于文件名的汉字均显示为问号,如何解决?

    NUC980列目录时对于 文件名的汉字均显示为问号,如何解决?
    发表于 06-13 07:53

    变频器使用对于散热的处理的考虑

    变频器
    YS YYDS
    发布于 :2023年06月03日 10:05:08

    对于不使用SDRAM而只使用OCRAM的小型应用求分享

    ,MIMXRT1064xxxxx_flexspi_nor.scf 是唯一允许我从 nor flash 加载和引导的。与其他两个链接的图像不能被编程到闪存。 但是对于 MIMXRT1064xxxxx_flexspi_nor.scf,构建的图像显示这个简单
    发表于 05-05 08:55