鸿蒙移植i.mx6ull(六) Kconfig_GCC_Mkefile(上)

简介: 鸿蒙移植i.mx6ull(六) Kconfig_GCC_Mkefile

1.Kconfig介绍

1670999530751.jpg

参考文档:


任一个Linux内核的Documentation\kbuild\kconfig-language.rst
https://www.rt-thread.org/document/site/programming-manual/kconfig/kconfig/

对于各类内核,只要支持menuconfig配置界面,都是使用Kconfig。

在配置界面中,可以选择、设置选项,这些设置会保存在.config文件里。

Makefile会包含.config,根据里面的值决定编译哪些文件、怎么编译文件。


1.1 配置界面示例

1670999544773.jpg


问题:


这个界面里,各个配置项来自哪里

这个界面里,这些配置项是怎么组织的

这个界面里,我们的选择、设置,结果保存在哪里


1.2 配置结果的保存


1.2.1 示例


在配置界面中操作的结果保存在.config文件中,示例如下:

# LOSCFG_COMPILER_HIMIX_32 is not set
LOSCFG_COMPILER_CLANG_LLVM=y
#
# Platform
#
LOSCFG_PLATFORM="stm32mp157"
# LOSCFG_PLATFORM_HI3516DV300 is not set
# LOSCFG_PLATFORM_HI3518EV300 is not set
LOSCFG_PLATFORM_STM32MP157=y
# LOSCFG_PLATFORM_IMX6ULL is not set
LOSCFG_PLATFORM_BSP_GIC_V2=y
LOSCFG_ARCH_ARM=y
LOSCFG_ARCH_ARM_AARCH32=y
LOSCFG_ARCH_ARM_V7A=y
LOSCFG_ARCH_ARM_VER="armv7-a"
LOSCFG_ARCH_FPU_VFP_V4=y
LOSCFG_ARCH_FPU_VFP_D32=y
LOSCFG_ARCH_FPU_VFP_NEON=y
LOSCFG_ARCH_FPU="neon-vfpv4"
LOSCFG_ARCH_CORTEX_A7=y
LOSCFG_ARCH_CPU="cortex-a7"


Makefile会包含.config文件,它会根据里面的变量比如LOSCFG_PLATFORM_STM32MP157选择单板相关的文件。


1.2.2 配置项的前缀


在Kconfig文件中,假设配置项的名字是XXX,在.config文件中:


默认情况下,它对应的变量名为CONFIG_XXX

如果设置了环境变量CONFIG_=ABC,则对应的变量名为ABC_XXX

在Liteos-a中的Makefile中export CONFIG_=LOSCFG_,所以对应的变量名为LOSCFG_XXX

1670999581340.jpg


1.3 描述单个配置项config


1.3.1 示例


在make menuconfig界面,可以看到这个配置项:

1670999596575.jpg

在配置界面,使用方向箭头游走到Enable FAT Cache Sync Thread后,可以:


输入Y,选择配置项,在.config中对应LOSCFG_FS_FAT_CACHE_SYNC_THREAD=y

输入N,不选择配置项,在.config中对应# LOSCFG_FS_FAT_CACHE_SYNC_THREAD is not set


上图中的配置项怎么实现的? (下面是帮助信息。我们可以通过这个找到kconfig文件)

1670999617582.jpg

grep "FS_FAT_CACHE_SYNC_THREAD" * -nr | grep Kconfig

1670999630147.jpg

在Kconfig文件中,它对应下列代码:

1670999639482.jpg

1.3.2 语法

1670999649610.jpg

解释如下:


config 表示config option,这是Kconfig的基本entry;其他entry是用来管理config的。 config 表示一个配置选项的开始,紧跟着的 FS_FAT_CACHE_SYNC_THREAD 是配置选项的名称。

config 下面几行定义了该配置选项的属性。


属性可以是该配置选项的:类型、输入提示、依赖关系、默认值、帮助信息。


bool 表示配置选项的类型,每个 config 菜单项都要有类型定义,变量有5种类型


bool 布尔类型

tristate 三态类型

string 字符串

hex 十六进制

int 整型

"Enable FAT Cache Sync Thread":提示信息


depends on:表示依赖关系,只有FS_FAT_CACHE被选中,才可以选择FS_FAT_CACHE_SYNC_THREAD


select XXX:表示反向依赖关系,即当前配置选项被选中后,XXX选项就会被选中。


default 表示配置选项的默认值,bool 类型的默认值可以是 y/n。


help 帮助信息,在make menuconfig界面输入H键时,就会提示帮助信息。


1.4 实现菜单menu/endmenu


1.4.1 示例

1670999677718.jpg

1670999684507.jpg

1670999689915.jpg

在Kconfig中,代码如下:

menu "Lib"
config LIB_LIBC
    bool "Enable Libc"
    default y
    help
      Answer Y to enable libc for full code.
config LIB_ZLIB
    bool "Enable Zlib"
    default y
    depends on LIB_LIBC
    help
      Answer Y to enable LiteOS support compress file library.
endmenu


1.4.2 语法


解释如下:


menu "xxx"表示一个菜单,菜单名是"xxx"


menu和endmenu之间的entry都是"xxx"菜单的选项


在上面的例子中子菜单有2个选项:“Enable Libc”、“Enable Zlib”


由于第二个菜单项依赖于第一个菜单项,所以第二个菜单项缩进一格

相关文章
|
Linux 芯片
鸿蒙移植i.mx6ull(十) 系统时钟
鸿蒙移植i.mx6ull(十) 系统时钟
311 0
鸿蒙移植i.mx6ull(十) 系统时钟
|
Shell Python
鸿蒙移植i.mx6ull(十二) 根文件系统
鸿蒙移植i.mx6ull(十二) 根文件系统
206 0
鸿蒙移植i.mx6ull(十二) 根文件系统
|
存储 Linux 内存技术
鸿蒙移植i.mx6ull(十一) 存储设备驱动程序(基于IMX6ULL)
鸿蒙移植i.mx6ull(十一) 存储设备驱动程序(基于IMX6ULL)
326 0
鸿蒙移植i.mx6ull(十一) 存储设备驱动程序(基于IMX6ULL)
|
Shell
鸿蒙移植i.mx6ull(九) 串口移植(基于IMX6ULL)
鸿蒙移植i.mx6ull(九) 串口移植(基于IMX6ULL)
476 0
鸿蒙移植i.mx6ull(九) 串口移植(基于IMX6ULL)
|
C语言
鸿蒙移植i.mx6ull(八) 添加一个单板(下)
鸿蒙移植i.mx6ull(八) 添加一个单板
137 0
鸿蒙移植i.mx6ull(八) 添加一个单板(下)
|
芯片
鸿蒙移植i.mx6ull(八) 添加一个单板(上)
鸿蒙移植i.mx6ull(八) 添加一个单板
313 0
鸿蒙移植i.mx6ull(八) 添加一个单板(上)
|
物联网
鸿蒙移植i.mx6ull (七) Liteos-a的编译系统(下)
鸿蒙移植i.mx6ull (七) Liteos-a的编译系统
337 0
鸿蒙移植i.mx6ull (七) Liteos-a的编译系统(下)
|
20天前
|
JavaScript 安全 前端开发
【HarmonyOS开发】ArkTS基础语法及使用(鸿蒙开发基础教程)
【HarmonyOS开发】ArkTS基础语法及使用(鸿蒙开发基础教程)
259 4
|
20天前
|
存储 数据安全/隐私保护
鸿蒙开发:自定义一个动态输入框
在鸿蒙开发中,如何实现这一效果呢,最重要的解决两个问题,第一个问题是,如何在上一个输入框输入完之后,焦点切换至下一个输入框中,第二个问题是,如何禁止已经输入的输入框的焦点,两个问题解决完之后,其他的就很是简单了。
45 13
鸿蒙开发:自定义一个动态输入框
|
23天前
|
小程序 测试技术 API
鸿蒙原生开发手记:03-元服务开发全流程(开发元服务,只需要看这一篇文章)
本文详细介绍元服务的开发及上架全流程,涵盖元服务的特点、创建项目、服务卡片、签名打包、开发测试及上架审核等环节,帮助开发者轻松掌握从零开始开发并发布元服务的全过程。元服务以其轻量、免安装、易于使用等特点,成为未来服务提供的重要形式。
58 13
鸿蒙原生开发手记:03-元服务开发全流程(开发元服务,只需要看这一篇文章)