1、系统移植可以分为配置系统和编译系统两大块,其中通过命令makemenuconfig进行图形化界面配置的步骤为配置系统。

2、内核源码包中,不同的目录收集不同的代码块,要通过配置系统将“有用”的代码块“挑选”出来,以便给后续的编译系统编译。

要弄清make menuconfig命令的实现原理,通过以下问题的答案就可以知道。

一、“配置菜单界面”是如何出来的?

执行make menuconfig的时候,会执行顶层的Makefile,

[cpp] view plain copy

%config: scripts_basic outputmakefile FORCE  $(Q)mkdir -p include/linux include/config  $(Q)$(MAKE) $(build)=scripts/kconfig $@

注意:(build)=scripts/kconfig,build是编译规则,(build) =scripts/kconfig,build是编译规则,(build)=scripts/kconfig,build是编译规则,(build) =scripts/kconfig实质是:-f scripts/kconfig/Makefile

则:(Q)(Q)(Q)(MAKE) $(build)=scripts/kconfig $@ ==》make -f scripts/kconfig/Makefile menuconfig

-f:指定执行某个Makefile文件,表示到scripts/kconfig目录下Makefile文件中,生成目标menuconfig

接下来,scripts/kconfig/Makefile找到目标所在的代码:

[cpp] view plain copy

menuconfig: $(obj)/mconf  $< $(Kconfig)

obj := $(CURDIR)

Kconfig :=arch/$(SRCARCH)/Kconfig

SRCARCH := $(ARCH)

而ARCH变量在顶层目录的Makefile中早已赋值arm

所以:
[cpp] view plain copy

menuconfig: scripts/kconfig/mconf  scripts/kconfig/mconf  arch/arm/Kconfig

当我们执行命令make menuconfig时,(1)先创建两个二级目录include /linux 和 include/config,(2)接着

把scripts/kconfig/里面的可执行文件mconf运行起来,有能力的话可以详看scripts/kconfig/mconf.c,根据文件arch/arm/kconfig内容,显示出一个菜单界面。其实,mconf运行起来,首先是“画出”菜单界面(显示内容则根据各级目录的Kconfig文件),然后查看当前目录有没有存在.config文件,若没有,则按照默认显示到菜单里面;若存在.config,则会把它读出来存到内存某块区域,在逐行逐行解析它的内容,再把读出的内容更新到菜单。

最后会保存在.config文件(当前目录中)。

二、kconfig文件的语法分析?

kconfig的总入口是arch/arm/kconfig,不是源码顶层的kconfig,入口一定是根据某款平台的。

概括起来,kconfig的用法有三种:

(1)添加一个菜单选项,菜单选项不是代表某种功能,只有进去菜单里面,才能选择功能属性,意义不大。

如添加一个helloworld菜单。

格式:

menu “xxxxxx”
……

……
endmenu

(2)定义一个功能属性选项,一个功能属性对应一块代码。定义的功能属性最好放在菜单选项里面。

如直接添加一个功能属性printf hello

格式:

config HAVE_PWM

config XXX (XXX是宏)
bool (二态,0或1,后面带提示内容,几乎都有)
default y (y默认是选中的,n默认则是不选)
select 宏1 ( 要是当前的功能属性选上,则宏1代表的功能属性一定自动选上,用户不能修改。 )
depend on 宏 2 ( 当前功能属性依赖于宏2的功能属性,若宏2功能属性没有选上,则当前功能选项不能显示出来。)
help 帮助信息
xxxxxxx

(3)导入别的目录的Kconfig

source “xxx/xxx/kconfig”
可以这样用法:

menu “xxxxxx”

config HAVE_PWM

bool

source “xxx/xxx/kconfig”

endmenu

make menuconfig 命令解析相关推荐

  1. SylixOS DSP upgrade命令解析

    SylixOS DSP upgrade命令解析 --SylixOS DSP6678平台下升级BSP 一.适用范围 本升级方案,针对TI官方评估板(TMDSEVM6678LE),主要介绍如何将Sylix ...

  2. Aix netstat命令解析

    1.1 Aix netstat命令解析 1.1.1 概述 1.1.2 命令报告及其输出 1.1.2.1 接口可用性.地址和统计(-i/-in) 首先,应检验所有配置的网络接口的状态,使用 netsta ...

  3. Aix iostat命令解析

    1.1 Aix iostat命令解析 1.1.1 概述 1.1.2 命令报告及其输出 1.1.2.1 确定磁盘使用率 $ iostat -T 2 10<?xml:namespace prefix ...

  4. 【Linux】一步一步学Linux——初识Linux命令解析器(10)

    00. 目录 文章目录 00. 目录 01. Shell简介 02. Shell分类 03. 交互式shell和非交互式shell 04. 登录shell和非登录shell 05. Shell类型 0 ...

  5. shell--指“提供使用者使用界面”的软件(命令解析器)

    在计算机科学中,Shell俗称壳(用来区别于核), 是指"提供使用者使用界面"的软件(命令解析器). 它类似于DOS下的command.com.它接收用户命令,然后调用相应的应用程 ...

  6. Aix vmstat命令解析

    1.1 Aix vmstat命令解析 1.1.1 概述 vmstat 命令报告内核线程.虚拟内存.磁盘.Traps.CPU 活动的统计数据. AIX <?xml:namespace prefix ...

  7. Android 系统(172)---如何使用addr2line命令解析native backtrace

    如何使用addr2line命令解析native backtrace 有时遇到ANR问题,查看SWT_JBT_TRACES文件,发现有些是native backtrace,且GAT-LogView目前无 ...

  8. 单片机串口实现字符串命令解析

    通常情况下串口通信用的大多数都是用十六进制数据来传输指令,比如最常见的modbus的通信,如读保持寄存器指令:01 03 00 00 00 01 84 0A,这种十六进制的指令在这里就不讨论了.想要详 ...

  9. FTP 编写 4:命令解析

    FTP 编写 4:命令解析     我们知道在现实生活中使用的 FTP 是应答式的,客户端和服务端按照一定的规定进行交流,不是随便弄的,在上几篇中的 FTP 没有人机交互的功能.所以这篇文章的主要内容 ...

最新文章

  1. python封装类在当前文件中使用_name_下调用不了_学python中对于类怎么也不明白,对了是看到简明教程11章,类与变量的对象....想要通俗易懂的答案....
  2. OpenCV-Python bindings是如何生成的(1)
  3. asp 更新 mysql数据库_ASP如何使用MYSQL数据库
  4. 【hortonworks/registry】AVRO 规范-Schema的定义和声明
  5. android 7 apk 安装程序,Android安装apk文件并适配Android 7.0详解
  6. 在程序中表示什么_程序开发中:什么是前后端分离?你搞清楚了吗?
  7. 阿里云 php shopex,开shopex
  8. U盘容量变小后修复的方法
  9. 简单英译汉SQL脚本
  10. SQL12 获取每个部门中当前员工薪水最高的相关信息
  11. Canvas: trying to use a recycled bitmap android.graphics.Bitmap
  12. (转)驾驶证到期换证指南
  13. 奇安信和深信服哪个好_你为什么从深信服离职?
  14. LVS负载均衡DR模式安装和配置过程详解
  15. 基于java的学生宿舍公寓管理系统
  16. AndroidStudio导入Android源码
  17. C语言 字符串与整数的相互转换(atoi/atol/sprintf函数简解)
  18. 50万中国人数据:每天上厕所超过一次,心衰风险增加33%
  19. 实验三:数据预处理1
  20. Win10电脑打开IE会自动跳转到Edge浏览器的完美阻止方法

热门文章

  1. freeCodeCamp | Survey Form
  2. python decimal函数_Python之decimal模块的使用
  3. Easyexcel写操作
  4. c语言 system(quot;pausequot;);,c++中system(quot;pausequot;)的作用和含义,systempause
  5. 基于循环神经网络RNN预测彩票开奖结果附完整代码
  6. CAN201-Computer Network(1)
  7. CDN缓存加速系统wdcdn3.0版本发布(20120720)
  8. MySQL数据库(13):列属性(字段属性)
  9. wsl2 ubuntu无法连接网络,ping不通外网
  10. 公众号后台html,微信公众号后台.html