鸿蒙系统开发教程_韦东山 3-1Kconfig介绍

2024-03-31 23:38

本文主要是介绍鸿蒙系统开发教程_韦东山 3-1Kconfig介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在线课堂:https://www.100ask.net/index(课程观看)
论  坛:http://bbs.100ask.net/(学术答疑)
开 发 板:https://100ask.taobao.com/ (淘宝)
     https://weidongshan.tmall.com/(天猫)
交流群一:QQ群:869222007(鸿蒙开发/Linux/嵌入式/驱动/资料下载)
交流群二:QQ群:536785813(单片机-嵌入式)
公 众 号:百问科技


版本日期作者说明
V12020韦东山韦东山鸿蒙系统开发教程

>>>视频教程在线观看<<<:

https://www.100ask.net/detail/p_5fcf586ae4b04db7c0939c82/8

Kconfig介绍

参考文档:

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

对于各类内核,只要支持menuconfig配置界面,都是使用Kconfig。
在配置界面中,可以选择、设置选项,这些设置会保存在.config文件里。
Makefile会包含.config,根据里面的值决定编译哪些文件、怎么编译文件。

1.1 配置界面示例

在这里插入图片描述

问题:

  • 这个界面里,各个配置项来自哪里
  • 这个界面里,这些配置项是怎么组织的
  • 这个界面里,我们的选择、设置,结果保存在哪里

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

1.3 描述单个配置项config

1.3.1 示例

make menuconfig界面,可以看到这个配置项:
在这里插入图片描述

在配置界面,使用方向箭头游走到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文件中,它对应下列代码:

在这里插入图片描述

1.3.2 语法

解释如下:

  • 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 示例

在这里插入图片描述

在Kconfig中,代码如下:

menu "Lib"
config LIB_LIBCbool "Enable Libc"default yhelpAnswer Y to enable libc for full code.config LIB_ZLIBbool "Enable Zlib"default ydepends on LIB_LIBChelpAnswer Y to enable LiteOS support compress file library.
endmenu

1.4.2 语法

解释如下:

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

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

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

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

1.5 实现单选choice/endchoice

1.5.1 示例

在这里插入图片描述

在上述界面中,对于LiteOS_Compiler_Type,有2个选择:arm-linux-ohoseabi、clang-llvm。
在Kconfig文件中怎么描述?如下:

menu "Compiler"
choiceprompt "LiteOS_Compiler_Type"default COMPILER_CLANG_LLVMhelpEnable arm-himix100 or aarch64-himix100 or compiler.config COMPILER_HIMIX_32bool "arm-linux-ohoseabi"depends on PLATFORM_HI3518EV300 || PLATFORM_HI3516DV300 || PLATFORM_IMX6ULL || PLATFORM_STM32MP157config COMPILER_CLANG_LLVMbool "clang-llvm"depends on PLATFORM_HI3518EV300 || PLATFORM_HI3516DV300 || PLATFORM_IMX6ULL || PLATFORM_STM32MP157endchoice
endmenu

1.5.2 语法

解释如下:

  • choice表示"选择"
  • choice和endchoice之间的entry是可以选择的项目
    • 它们之间,只能有一个被设置为"y":表示编进内核
    • 它们之间,可以设置多个为"m":表示编译为模块
    • 比如一个硬件有多个驱动程序
      • 同一时间只能有一个驱动能编进内核
      • 但是多个驱动都可以单独编译为模块

1.6 menuconfig

menuconfig XXXconfig XXX类似,
唯一不同的是该选项除了能设置y/m/n外,还可以实现菜单效果(能回车进入该项内部)。

1.6.1 示例

在这里插入图片描述

对于上述界面,Kconfig文件中代码如下:

menuconfig OFbool "Device Tree and Open Firmware support"helpThis option enables the device tree infrastructure.It is automatically selected by platforms that need it or canbe enabled manually for unittests, overlays orcompile-coverage.if OFconfig OF_UNITTESTbool "Device Tree runtime unit tests"depends on OF_IRQselect OF_EARLY_FLATTREEselect OF_RESOLVEhelpThis option builds in test cases for the device tree infrastructurethat are executed once at boot time, and the results dumped to theconsole.If unsure, say N here, but this option is safe to enable.config OF_OVERLAYbool "Device Tree overlays"select OF_DYNAMICselect OF_RESOLVEhelpOverlays are a method to dynamically modify part of the kernel'sdevice tree with dynamically loaded data.While this option is selected automatically when needed, you canenable it manually to improve device tree unit test coverage.endif # OF

1.6.2 语法

menuconfig常用格式有2种:

  menuconfig Mif Mconfig C1config C2endif

或:

  menuconfig Mconfig C1depends on Mconfig C2depends on M

第1项menuconfig Mconfig M语法是一样的,
不同之处在于menuocnfig M后面可以跟着好几个依赖于M的config C1config C2等子配置项。

1.7 if/endif

1.7.1 语法

在上面的menuconfig中就有if/endif的使用,它的语法如下:

"if" <expr>
<if block>
"endif"

1.7.2 示例

示例如下,只有定义的OF项,OF_UNITTESTOF_OVERLAY才会显示出来:

if OFconfig OF_UNITTESTbool "Device Tree runtime unit tests"depends on OF_IRQselect OF_EARLY_FLATTREEselect OF_RESOLVEhelpThis option builds in test cases for the device tree infrastructurethat are executed once at boot time, and the results dumped to theconsole.If unsure, say N here, but this option is safe to enable.config OF_OVERLAYbool "Device Tree overlays"select OF_DYNAMICselect OF_RESOLVEhelpOverlays are a method to dynamically modify part of the kernel'sdevice tree with dynamically loaded data.While this option is selected automatically when needed, you canenable it manually to improve device tree unit test coverage.endif # OF

1.8 source

source 语句用于读取另一个文件中的 Kconfig 文件,如:

source "../../kernel/liteos_a/platform/Kconfig"

1.9 comment

comment 语句出现在界面的第一行,用于定义一些提示信息,如:

config ARCH_ARMboolsource "arch/arm/Kconfig"comment "Extra Configurations"config ARCH_FPU_DISABLEbool "Disable Floating Pointer Unit"default nhelpThis option will bypass floating procedure in system.

界面如下:


## 1.9 comment comment 语句出现在界面的第一行,用于定义一些提示信息,如:```shell
config ARCH_ARMboolsource "arch/arm/Kconfig"comment "Extra Configurations"config ARCH_FPU_DISABLEbool "Disable Floating Pointer Unit"default nhelpThis option will bypass floating procedure in system.

界面如下:
在这里插入图片描述

这篇关于鸿蒙系统开发教程_韦东山 3-1Kconfig介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/865662

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设