1. 一个完整的编译过程

  1. 源码链接
    源码链接

  2. 编译方式

    # for arm
    $ export ARCH=arm
    $ export CROSS_COMPILE=arm-linux-gnueabi-
    $ make  vexpress_ca9x4_defconfig
    $ make -j4
    

2. Kconfig编译过程分析

  1. 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
    输出:.config

  2. make 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。

  1. 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
    
  2. 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相关推荐

  1. MATLAB数学计算与工程分析范例教程,MATLAB数学计算与工程分析范例教程

    基本信息 书名:MATLAB数学计算与工程分析范例教程 定价:28.00元 作者:石博强,赵金 编著 出版社:中国铁道出版社 出版日期:2005-05-01 ISBN:9787#113057596 字 ...

  2. ML之FE:利用FE特征工程(分析两两数值型特征之间的相关性)对AllstateClaimsSeverity(Kaggle2016竞赛)数据集实现索赔成本值的回归预测

    ML之FE:利用FE特征工程(分析两两数值型特征之间的相关性)对AllstateClaimsSeverity(Kaggle2016竞赛)数据集实现索赔成本值的回归预测 目录 输出结果 设计思路 核心代 ...

  3. 机器学习cae_CAE工程分析技术年会记

    读书使人充实,讨论使人机智,笔记使人准确,读史使人明智,读诗使人灵秀,数学使人周密,科学使人深刻,伦理使人庄重,逻辑修辞使人善辩.凡有所学,皆成性格.---- (英国)培根 可能是会议热度不够,非常遗 ...

  4. 03-instancing 工程分析详解

    opengl编程指南第8版源码怎么下载.编译,请参考<opengl编程指南第8版源码编译详细说明> 1. 程序启动 请参考<03-drawcommands工程分析详解> 2. ...

  5. python与金融工程的区别_科研进阶 | 纽约大学 | 金融工程、量化金融、商业分析:Python金融工程分析...

    科研进阶 | 纽约大学 | 金融工程.量化金融.商业分析:Python金融工程分析(2021.2.6开课)​mp.weixin.qq.com 课题名称 = Python金融工程分析 = 项目配景 大数 ...

  6. MATLAB数学计算与工程分析范例教程,MATLAB 2016数学计算与工程分析从入门到精通...

    全书通过近400个实例讲解了利用MATLAB 2016进行数学计算和工程分析的方法和技巧,涵盖了MATLAB的五大功能:1)数值计算功能:2)符号计算功能:3)图形与数据可视化功能:4)可视化建模与仿 ...

  7. 计算机辅助工程分析课程论文,教学大纲—计算机辅助工程分析.doc

    <计算机辅助工程分析>课程教学大纲 英文课程名Computer Aided Engineering总 学 时32学 分2课程编码202725理论教学学时8适用专业机械工程.过程装备与控制工 ...

  8. FPGA设计心得(5)Aurora 例子工程分析与仿真实例分析(streaming版)

    文章目录 背景 例子工程预览 例子程序用户模块逻辑分析 收(CHECK) 发(GEN) 例子程序仿真文件分析 写在最后 工程分享 参考资料 交个朋友 背景 熬夜写完了上两篇博客: Aurora IP ...

  9. 【Android 逆向】Android 逆向通用工具开发 ( PC 端工程分析 | 网络初始化操作 | PC 端工程核心业务逻辑 )

    文章目录 前言 一.网络初始化操作 二.PC 端工程核心业务逻辑 三.博客资源 前言 本篇博客重点分析 PC 端 hacktool 模块 ; 一.网络初始化操作 HackCommand::Prepar ...

  10. imagecomposition工程分析

    imagecomposition工程存放在Qt安装目录下的 Examples\Qt-x.xx.xx\widgets\painting\imagecomposition 目录下.其中 x.xx.xx为Q ...

最新文章

  1. linux用户及权限详解(20170425)
  2. ROS系统MoveIt玩转双臂机器人系列(二)--生成MoveIt配置包
  3. java 方法体 out 参数_Java方法详解
  4. php 写一个大富翁游戏,抽奖系列:如何用纯js做一个大富翁游戏
  5. Momenta 陈凯:从人才角度看 L4 无人驾驶的实现 | AI 研习社职播间第 4 期(附 Momenta 招聘解读)...
  6. RefreshParenwin 打开子窗体 并回发
  7. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---31
  8. C#-反射知识点(转载)
  9. miui8 android版本,miui8官方正式版下载_小米8系统安卓下载|好特下载
  10. Excel如何对比两列数据
  11. 国务院办公厅关于2015年部分节假日安排的通知
  12. Linux_进程管理详解《鸟哥的Linux私房菜》学习笔记(极其详细,看完这篇就够了)
  13. ctf之crypto练习二
  14. 关于mysql的行转列问题
  15. 借助Docker hub自己手动制作镜像(以Nginx镜像为例)
  16. 快排算法的针对重复键值的优化
  17. 2022-6-4 小明爱上课,切木头,最多分成多少块,躲猫猫,争渡
  18. 埋在大学时光里的那些人
  19. CMT2380F32模块开发0-总览
  20. 为什么要学习 Python?这是我听过最实用的答案

热门文章

  1. 计算机无法进入pe系统,u盘启动盘无法进入pe解决方法
  2. 【西门子PLC S7-200smart与汇川变频器通过通讯控制】
  3. android 性能测试iozone篇
  4. win10下实现bat转exe
  5. udhcpc 的使用
  6. 海思hi3798mv100刷linux,(JL)咪咕mg101_hi3798mv100盒子强刷第三方固件教程
  7. idea中代码统计工具Statistic的配置与使用
  8. Mac版Charles免费安装及使用
  9. android 常用机型尺寸_android手机屏幕密度和逻辑尺寸
  10. php 将网页转成pdf_利用PHP将HTML页面转换成PDF文件