工程分析:Kconfig
1. 一个完整的编译过程
源码链接
源码链接编译方式
# for arm $ export ARCH=arm $ export CROSS_COMPILE=arm-linux-gnueabi- $ make vexpress_ca9x4_defconfig $ make -j4
2. Kconfig编译过程分析
make vexpress_ca9x4_defconfig 做了什么?
# for arm $ export ARCH=arm $ export CROSS_COMPILE=arm-linux-gnueabi- $ make -n vexpress_ca9x4_defconfig
make.cmd :
scripts/kconfig/conf --defconfig=arch/…/configs/vexpress_ca9x4_defconfig Kconfig
输入:arch/…/configs/vexpress_ca9x4_defconfig Kconfig
输出:.configmake menuconfig 做了什么?
# for arm $ export ARCH=arm $ export CROSS_COMPILE=arm-linux-gnueabi- $ make -n menuconfig
make.cmd:
scripts/kconfig/mconf Kconfig
输入:.config Kconfig
输出:.config
3. Kconfig实验
3.1 .config 生成方式1(Kconfig)
scripts/kconfig/conf menu_demo/demo_kconfig
特点:demo_kconfig 要求手动输入config项的默认值
#menu_demo/demo_kconfig 是输入文件,用于定义config项的全集合
$cat menu_demo/demo_kconfigconfig KCONFIG_DEMO_ITEM1boolprompt "demonstate item1 for bool learning"config KCONFIG_DEMO_ITEM2stringprompt "demonstate item2 for string learning"config KCONFIG_DEMO_ITEM3hexprompt "demonstate item3 for hex learning"
#scripts/kconfig/conf 用于设置conifg项的默认值,输出文件为.config。
#and 因为没有指定demo_kconfig中config项的默认值,需要手动输入默认值
$scripts/kconfig/conf menu_demo/demo_kconfig
*
* Linux Kernel Configuration
*
demonstate item1 for bool learning (KCONFIG_DEMO_ITEM1) [N/y/?] (NEW) N
demonstate item2 for string learning (KCONFIG_DEMO_ITEM2) [] (NEW) hello world!
demonstate item3 for hex learning (KCONFIG_DEMO_ITEM3) [] (NEW) 33
#
# configuration written to .config
#$cat .config
#
# Automatically generated file; DO NOT EDIT.
# Linux Kernel Configuration
#
# CONFIG_KCONFIG_DEMO_ITEM1 is not set
CONFIG_KCONFIG_DEMO_ITEM2="hello world!"
CONFIG_KCONFIG_DEMO_ITEM3=0x33
3.2 .config 生成方式2(Kconfig + default_config)
scripts/kconfig/conf --defconfig=./default_config menu_demo/demo_kconfig
特点1:demo_kconfig 的默认值在default_config, 因此不再要求手动输入参数
特点2:CONFIG_KCONFIG_DEMO_ITEM_NoUse** 这些参数是demo_kconfig不需要的,因此.config 里根本不体现
$cat default_config
CONFIG_KCONFIG_DEMO_ITEM1=y
CONFIG_KCONFIG_DEMO_ITEM2="hello world"
CONFIG_KCONFIG_DEMO_ITEM3=0x1CONFIG_KCONFIG_DEMO_ITEM_NoUse_hex=0xFF
CONFIG_KCONFIG_DEMO_ITEM_NoUse_string="test string"
CONFIG_KCONFIG_DEMO_ITEM_NoUse_bool=y#通过default_config文件给如默认值,因此不再要求手动给入
$scripts/kconfig/conf --defconfig=./default_config menu_demo/demo_kconfig
#
# configuration written to .config
#$cat .config
#
# Automatically generated file; DO NOT EDIT.
# Linux Kernel Configuration
#
CONFIG_KCONFIG_DEMO_ITEM1=y
CONFIG_KCONFIG_DEMO_ITEM2="hello there, listening?"
CONFIG_KCONFIG_DEMO_ITEM3=0x1
3.3 .config 修改方式3 (make menuconfig)
scripts/kconfig/mconf menu_demo/demo_kconfig
输入:menu_demo/demo_kconfig && .config
输出:.config
特点1:在一个相对可用的.config 的基础上,用于手动修改.config
特点2:图形化编辑窗口。
3.4 语法标记:if/endif
特点:if < expr > 语句 用于决定config项是否生效
$cat default_config
CONFIG_KCONFIG_DEMO_ITEM1=y
CONFIG_KCONFIG_DEMO_ITEM2="hello world"
CONFIG_KCONFIG_DEMO_ITEM3=0x10
CONFIG_KCONFIG_DEMO_ITEM4=m
$cat menu_demo/demo_kconfig
# bool 类型
config KCONFIG_DEMO_ITEM1boolprompt "demonstate item1 for bool learning"
# string 类型
config KCONFIG_DEMO_ITEM2stringprompt "demonstate item2 for string learning"
# hex 类型
config KCONFIG_DEMO_ITEM3hexprompt "demonstate item3 for hex learning"
#tristate 类型
config KCONFIG_DEMO_ITEM4tristateprompt "demonstate item3 for tristate learning"#KCONFIG_DEMO_ITEM4 是tristate类型.
# if KCONFIG_DEMO_ITEM4 为 trure 如果KCONFIG_DEMO_ITEM4 是 {y,m},其他为false
if KCONFIG_DEMO_ITEM4 config SUB_OF_ITEM4bool "sub item4" default y
endif# hex 类型,返回false,此段无效
if KCONFIG_DEMO_ITEM3config SUB_OF_ITEM3bool "sub item3" default y
endif
# string 类型,返回false,此段无效
if KCONFIG_DEMO_ITEM2config SUB_OF_ITEM2bool "sub item2"default y
endif
#bool 类型,KCONFIG_DEMO_ITEM1=y,表达式为true。否则为false
if KCONFIG_DEMO_ITEM1config SUB_OF_ITEM1bool "sub item1" default y
endif
ospin@ospin-VirtualBox:~/code/u-boot-2018.11$ cat .config
#
# Automatically generated file; DO NOT EDIT.
# Linux Kernel Configuration
#
CONFIG_KCONFIG_DEMO_ITEM1=y
CONFIG_KCONFIG_DEMO_ITEM2="hello world"
CONFIG_KCONFIG_DEMO_ITEM3=0x10
CONFIG_KCONFIG_DEMO_ITEM4=y
CONFIG_SUB_OF_ITEM4=y
CONFIG_SUB_OF_ITEM1=y
3.5 配置项:menuconfig
.config 输出项中:
特点1:menuconfig 和 config 作用相同。 但他多一个能力,即,依赖于它的配置项将成为它的子菜单(在图形显示中)
$git diff menu_demo/demo_kconfig+menuconfig KCONFIG_DEMO_MENUCONFIG1+ bool+ prompt "menuconfig parent menu: demo_menuconfig1"++if KCONFIG_DEMO_MENUCONFIG1++config MENUCONFIG_SUBITEM1+ bool+ prompt "demo_menuconfig subitem1"++config MENUCONFIG_SUBITEM2+ bool+ prompt "demo_menuconfig subitem2"+endif
diff --git a/default_config b/default_config+CONFIG_KCONFIG_DEMO_MENUCONFIG1=y
$cat .config## Automatically generated file; DO NOT EDIT.# Linux Kernel Configuration#CONFIG_KCONFIG_DEMO_ITEM1=yCONFIG_KCONFIG_DEMO_ITEM2="hello world"CONFIG_KCONFIG_DEMO_ITEM3=0x1CONFIG_KCONFIG_DEMO_MENUCONFIG1=y# CONFIG_MENUCONFIG_SUBITEM1 is not set# CONFIG_MENUCONFIG_SUBITEM2 is not set
提示:我们来看下图形
$scripts/kconfig/mconf menu_demo/demo_kconfig
3.6 语法标记:choice/end choice
特点: choice 只能为bool类型或者tristate类型。choice下只能有一个config entry被选中为y。
choice 为bool类型,默认选中了config KCONFIG_CHOICE_ITEM1为y
$cat menu_demo/demo_kconfig #choice config could be of type: bool or tristatechoice KCONFIG_DEMO_CHOICE1 bool prompt "choice demo1"config KCONFIG_CHOICE_ITEM1 bool prompt "choice1"config KCONFIG_CHOICE_ITEM2 bool prompt "choice2"config KCONFIG_CHOICE_ITEM3 tristate prompt "choice3" endchoice
$cat .config # # Automatically generated file; DO NOT EDIT. # Linux Kernel Configuration # CONFIG_CHOICE_ITEM1=y # CONFIG_CHOICE_ITEM2 is not set # CONFIG_CHOICE_ITEM3 is not set
choice 为bool类型,默认配置全部打开
特点:.config 文件最终只能有一个打开, 选中的是CONFIG_CHOICE_ITEM3为y$cat default_config CONFIG_CHOICE_ITEM1=y CONFIG_CHOICE_ITEM2=y CONFIG_CHOICE_ITEM3=y
$scripts/kconfig/conf --defconfig=./default_config menu_demo/demo_kconfig ./default_config:3:warning: override: CHOICE_ITEM2 changes choice state ./default_config:4:warning: override: CHOICE_ITEM3 changes choice state # # configuration written to .config #
$cat .config # # Automatically generated file; DO NOT EDIT. # Linux Kernel Configuration # # CONFIG_CHOICE_ITEM1 is not set # CONFIG_CHOICE_ITEM2 is not set CONFIG_CHOICE_ITEM3=y
3.7 语法标记:menu
$cat menu_demo/demo_kconfig
menu "menu1"config MENU_SUBITEM1-1
bool
prompt "entry1.1"config MENU_SUBITEM1-2
bool
prompt "entry1.2"config MENU_SUBITEM1-3
bool
prompt "entry1.3"endmenu#######################################
menu "menu2"config MENU_SUBITEM2-1
bool
prompt "entry2.1"config MENU_SUBITEM2-2
bool
prompt "entry2.2"config MENU_SUBITEM2-3
bool
prompt "entry2.3"endmenu
$cat .config
#
# Automatically generated file; DO NOT EDIT.
# Linux Kernel Configuration
##
# menu1
#
# CONFIG_MENU_SUBITEM1-1 is not set
# CONFIG_MENU_SUBITEM1-2 is not set
# CONFIG_MENU_SUBITEM1-3 is not set#
# menu2
#
# CONFIG_MENU_SUBITEM2-1 is not set
# CONFIG_MENU_SUBITEM2-2 is not set
# CONFIG_MENU_SUBITEM2-3 is not set
特点:menu只是一个语法标记,用于在图形界面显示的时候显示一个菜单。
$scripts/kconfig/mconf menu_demo/demo_kconfig
3.8 语法标记:mainmenu
标题
3.9 文件嵌套:source
输入:arch/…/configs/vexpress_ca9x4_defconfig + Kconfig
输出:.config输入:/Kconfig 把各种CPU/SOC/Board 可能使用到的配置项目,打包在一起。
vexpress_ca9x4_defconfig 初始化一些配置项,这些配置项用于选中Kconfig中的配置
输出:代码编译使用到的配置项
3. Kconfig 参考文档
https://www.kernel.org/doc/html/latest/kbuild/index.html
https://www.kernel.org/doc/html/latest/kbuild/kconfig-language.html
工程分析:Kconfig相关推荐
- MATLAB数学计算与工程分析范例教程,MATLAB数学计算与工程分析范例教程
基本信息 书名:MATLAB数学计算与工程分析范例教程 定价:28.00元 作者:石博强,赵金 编著 出版社:中国铁道出版社 出版日期:2005-05-01 ISBN:9787#113057596 字 ...
- ML之FE:利用FE特征工程(分析两两数值型特征之间的相关性)对AllstateClaimsSeverity(Kaggle2016竞赛)数据集实现索赔成本值的回归预测
ML之FE:利用FE特征工程(分析两两数值型特征之间的相关性)对AllstateClaimsSeverity(Kaggle2016竞赛)数据集实现索赔成本值的回归预测 目录 输出结果 设计思路 核心代 ...
- 机器学习cae_CAE工程分析技术年会记
读书使人充实,讨论使人机智,笔记使人准确,读史使人明智,读诗使人灵秀,数学使人周密,科学使人深刻,伦理使人庄重,逻辑修辞使人善辩.凡有所学,皆成性格.---- (英国)培根 可能是会议热度不够,非常遗 ...
- 03-instancing 工程分析详解
opengl编程指南第8版源码怎么下载.编译,请参考<opengl编程指南第8版源码编译详细说明> 1. 程序启动 请参考<03-drawcommands工程分析详解> 2. ...
- python与金融工程的区别_科研进阶 | 纽约大学 | 金融工程、量化金融、商业分析:Python金融工程分析...
科研进阶 | 纽约大学 | 金融工程.量化金融.商业分析:Python金融工程分析(2021.2.6开课)mp.weixin.qq.com 课题名称 = Python金融工程分析 = 项目配景 大数 ...
- MATLAB数学计算与工程分析范例教程,MATLAB 2016数学计算与工程分析从入门到精通...
全书通过近400个实例讲解了利用MATLAB 2016进行数学计算和工程分析的方法和技巧,涵盖了MATLAB的五大功能:1)数值计算功能:2)符号计算功能:3)图形与数据可视化功能:4)可视化建模与仿 ...
- 计算机辅助工程分析课程论文,教学大纲—计算机辅助工程分析.doc
<计算机辅助工程分析>课程教学大纲 英文课程名Computer Aided Engineering总 学 时32学 分2课程编码202725理论教学学时8适用专业机械工程.过程装备与控制工 ...
- FPGA设计心得(5)Aurora 例子工程分析与仿真实例分析(streaming版)
文章目录 背景 例子工程预览 例子程序用户模块逻辑分析 收(CHECK) 发(GEN) 例子程序仿真文件分析 写在最后 工程分享 参考资料 交个朋友 背景 熬夜写完了上两篇博客: Aurora IP ...
- 【Android 逆向】Android 逆向通用工具开发 ( PC 端工程分析 | 网络初始化操作 | PC 端工程核心业务逻辑 )
文章目录 前言 一.网络初始化操作 二.PC 端工程核心业务逻辑 三.博客资源 前言 本篇博客重点分析 PC 端 hacktool 模块 ; 一.网络初始化操作 HackCommand::Prepar ...
- imagecomposition工程分析
imagecomposition工程存放在Qt安装目录下的 Examples\Qt-x.xx.xx\widgets\painting\imagecomposition 目录下.其中 x.xx.xx为Q ...
最新文章
- linux用户及权限详解(20170425)
- ROS系统MoveIt玩转双臂机器人系列(二)--生成MoveIt配置包
- java 方法体 out 参数_Java方法详解
- php 写一个大富翁游戏,抽奖系列:如何用纯js做一个大富翁游戏
- Momenta 陈凯:从人才角度看 L4 无人驾驶的实现 | AI 研习社职播间第 4 期(附 Momenta 招聘解读)...
- RefreshParenwin 打开子窗体 并回发
- 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---31
- C#-反射知识点(转载)
- miui8 android版本,miui8官方正式版下载_小米8系统安卓下载|好特下载
- Excel如何对比两列数据
- 国务院办公厅关于2015年部分节假日安排的通知
- Linux_进程管理详解《鸟哥的Linux私房菜》学习笔记(极其详细,看完这篇就够了)
- ctf之crypto练习二
- 关于mysql的行转列问题
- 借助Docker hub自己手动制作镜像(以Nginx镜像为例)
- 快排算法的针对重复键值的优化
- 2022-6-4 小明爱上课,切木头,最多分成多少块,躲猫猫,争渡
- 埋在大学时光里的那些人
- CMT2380F32模块开发0-总览
- 为什么要学习 Python?这是我听过最实用的答案
热门文章
- 计算机无法进入pe系统,u盘启动盘无法进入pe解决方法
- 【西门子PLC S7-200smart与汇川变频器通过通讯控制】
- android 性能测试iozone篇
- win10下实现bat转exe
- udhcpc 的使用
- 海思hi3798mv100刷linux,(JL)咪咕mg101_hi3798mv100盒子强刷第三方固件教程
- idea中代码统计工具Statistic的配置与使用
- Mac版Charles免费安装及使用
- android 常用机型尺寸_android手机屏幕密度和逻辑尺寸
- php 将网页转成pdf_利用PHP将HTML页面转换成PDF文件