鸿蒙移植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(十) 系统时钟
291 0
鸿蒙移植i.mx6ull(十) 系统时钟
|
Shell Python
鸿蒙移植i.mx6ull(十二) 根文件系统
鸿蒙移植i.mx6ull(十二) 根文件系统
187 0
鸿蒙移植i.mx6ull(十二) 根文件系统
|
存储 Linux 内存技术
鸿蒙移植i.mx6ull(十一) 存储设备驱动程序(基于IMX6ULL)
鸿蒙移植i.mx6ull(十一) 存储设备驱动程序(基于IMX6ULL)
312 0
鸿蒙移植i.mx6ull(十一) 存储设备驱动程序(基于IMX6ULL)
|
Shell
鸿蒙移植i.mx6ull(九) 串口移植(基于IMX6ULL)
鸿蒙移植i.mx6ull(九) 串口移植(基于IMX6ULL)
454 0
鸿蒙移植i.mx6ull(九) 串口移植(基于IMX6ULL)
|
C语言
鸿蒙移植i.mx6ull(八) 添加一个单板(下)
鸿蒙移植i.mx6ull(八) 添加一个单板
128 0
鸿蒙移植i.mx6ull(八) 添加一个单板(下)
|
芯片
鸿蒙移植i.mx6ull(八) 添加一个单板(上)
鸿蒙移植i.mx6ull(八) 添加一个单板
299 0
鸿蒙移植i.mx6ull(八) 添加一个单板(上)
|
物联网
鸿蒙移植i.mx6ull (七) Liteos-a的编译系统(下)
鸿蒙移植i.mx6ull (七) Liteos-a的编译系统
322 0
鸿蒙移植i.mx6ull (七) Liteos-a的编译系统(下)
|
IDE JavaScript API
HarmonyOS开发第一步,熟知开发工具DevEco Studio
本文主要以常见的功能点作为概述希望可以帮助到学习HarmonyOS的开发者。
462 0
|
2月前
|
JavaScript 前端开发 小程序
基于js开发快速学习鸿蒙基础
【8月更文挑战第26天】
39 1
|
3月前
|
存储 开发框架 安全
鸿蒙 HarmonyOS NEXT星河版APP应用开发-阶段一
HarmonyOS NEXT星河版的应用开发标志着华为分布式操作系统的全新篇章,它聚焦于打造原生精致、易用、流畅、安全、智能和互联的极致体验。开发者可以利用其先进的API和工具集,如DevEco Studio,构建高性能、跨设备无缝协同的应用程序,从而充分利用HarmonyOS的分布式能力,为用户带来一致且丰富的多场景数字生活体验。随着“学习强国”、岚图汽车、中国电信等知名企业和应用的加入,鸿蒙生态正迅速扩展,引领着原生应用开发的新趋势。
99 3
鸿蒙 HarmonyOS NEXT星河版APP应用开发-阶段一
下一篇
无影云桌面