Linux内核配置解析 - 概述(基于ARM64架构)
1. 前言
对刚接触Linux kernel的同学来说,遇到的第一个问题就是:我该从哪里入手?、
话说Linux kernel的打开方式是多种多样的:从简单的设备驱动入手;从源代码的目录结构入手;从kernel的启动过程入手;从大的功能模块入手;等等。不管怎样,每条都是正途(条条大路通罗马嘛)。
而本文(以及随后的系列文章),将从Linux kernel的配置项入手,从整体上认识Linux kernel。之所以这么做,原因有二:
1)Linux kernel的配置项数目繁多,以至于进行kernel移植的时候,看到menuconfig界面后,会有深深的恐惧感(可参考下面图片1)。
2)配置项的目的,是功能配置和功能开关,从一定程度上可以看出一个软件的功能模块划分。以Linux kernel为例,Kconfig所呈现出来的树状结构,从功能划分的角度看,比source code的目录结构还清晰。
注1:本系列文章使用的Linux kernel版本是“X Project”所用的“Linux 4.6-rc5”,具体可参考“https://github.com/wowotechX/linux.git”。
2. Kernel配置项初识
Linux kernel的配置项,是以架构(ARCH)为单位,通过Kconfig语言组织在一起的。以ARM64为例,其Kconfig的入口位于:
arch/arm64/Kconfig
在Kernel根目录下以“ARCH=arm64”为参数,执行make menuconfig,可以得到如下的配置界面:
make ARCH=arm64 menuconfig

图片1 Kernel_menuconfig
第一个画面,还可以接受,毕竟画风清爽。但点进到二级菜单,脑袋就大了。不过不着急,我们一层一层的分析。
开始之前,先交代一下分析的手段,很简单,要点有四:
结合Kconfig文件;
跟随menuconfig的菜单项;
加上强大的Google;
必要时阅读source code。
另外,鉴于篇幅问题,本文只介绍Kconfig的一级菜单(就是图片1所能看到的部分),相当于一个索引,后续文章会一个一个展开描述。
3. 一级菜单
本章我们将根据arch/arm64/Kconfig文件,对menuconfig的一级菜单进行简要的分析,目的是从实际的例子出发,理解Kconfig语言的语法,一级Linux kernel配置项的整体结构。具体请参考如下表格:
| 配置项 | Kconfig文件位置 | 功能说明 |
| ARM64架构的默认配置项 | arch/arm64/Kconfig | 指定ARCH为ARM64之后,ARM64的Kconfig会默认帮我们确定众多的配置项,例如CONFIG_64BIT、CONFIG_MMU、CONFIG_OF等等。这些配置项不会体现在menuconfig的菜单中,但可以在最终生成的config文件中看到。 |
| General setup | init/Kconfig 位于menu "General setup"和对应的endmenu之间 |
该配置项由“menu … endmenu”定义,是一个配置菜单,表示一类配置的集合(参考上面图片1,“--->”结尾的配置项都是菜单项,按Enter直接进入对应的菜单界面); 主要用于配置和功能无关的的通用选项,例如kernel的版本号、压缩方式、等等。 |
| loadable module | init/Kconfig 由“menuconfig MODULES”定义 |
menuconfig和menu不同,是一个可以选择是否开启的菜单(参考图片1中的“[*]”); 用于配置内核“模块”有关的特性。 |
| block device | block/Kconfig 由“menuconfig BLOCK”定义 |
内核块设备有关的特性。 |
| Platform selection | arch/arm64/Kconfig.platforms 位于menu "Platform selection"和endmenu之间 |
用于配置和具体平台有关的配置项,如SUNIX、HISI等; 自从ARM64把“mach-xxx”目录抛弃之后,这里可能是各个平台可自行发挥的最后一个空间了。 |
| PCI Bus support | arch/arm64/Kconfig drivers/pci/Kconfi |
PCI总线有关的特性。 |
| ACPI support | drivers/acpi/Kconfig | ACPI总线有关的特性。 |
| Kernel Features | arch/arm64/Kconfig kernel/Kconfig.preempt kernel/Kconfig.hz mm/Kconfig 位于menu "Kernel Features"和对应的endmenu之间 |
Linux kernel的核心功能的配置,如进程管理、内存管理、等等。是Linux kernel配置项中最复杂的一类。 |
| Boot options | arch/arm64/Kconfig 位于menu "Boot options"和对应的endmenu之间 |
用于配置和内核启动有关的功能,如默认的Command line、UEFI支持等。 |
| Userspace binary formats | arch/arm64/Kconfig fs/Kconfig.binfmt 位于menu "Userspace binary formats"和对应的endmenu之间 |
用于配置用户空间二进制的格式。 |
| Power management | arch/arm64/Kconfig kernel/power/Kconfig 位于menu "Power management options"和对应的endmenu之间 |
Linux kernel电源管理有关的特性。 |
| CPU Power Management | arch/arm64/Kconfig drivers/cpuidle/Kconfig drivers/cpufreq/Kconfig 位于menu "CPU Power Management"和对应的endmenu之间 |
CPU有关的电源管理特性,如cpuidle、cpufreq等; 这是新版kernel的一大改进,将CPU有关的电源管理功能,抽象成一个顶层功能,和系统的电源管理并列。 |
| Networking support | net/Kconfig | 网络有关的特性。 |
| Device Drivers | drivers/Kconfig | 设备驱动有关的配置项。 |
| Firmware Drivers | drivers/firmware/Kconfig … |
Firmware有关的配置项。 |
| File systems | fs/Kconfig | 文件系统有关的配置项。 |
| Virtualization | arch/arm64/kvm/Kconfig | 虚拟化有关的配置项。 |
| Kernel hacking | arch/arm64/Kconfig.debug | Kernel调试有关的配置项。 |
| Security options | security/Kconfig | 安全特性有关的配置项。 |
| Cryptographic API | crypto/Kconfig arch/arm64/crypto/Kconfig |
加密算法有关的配置项。 |
| Library routines | lib/Kconfig | 用于配置常用的library,如CRC16等。 |
Linux内核配置解析 - 概述(基于ARM64架构)的更多相关文章
- Linux内核配置解析 - Boot options
1. 前言 本文将介绍ARM64架构下,Linux kernel和启动有关的配置项. 注1:本系列文章使用的Linux kernel版本是“X Project”所用的“Linux 4.6-rc5”,具 ...
- Linux内核配置机制(make menuconfig 、Kconfig、Makefile)讲解【转】
本文转载自:http://www.codexiu.cn/linux/blog/34801/ 前面我们介绍模块编程的时候介绍了驱动进入内核有两种方式:模块和直接编译进内核,并介绍了模块的一种编译方式—— ...
- Linux内核配置浅析
1.Linux Kernel Kconfig系统的基本结构 Linux内核的配置系统由三个部分组成,分别是: 1>.Makefile:分布在 Linux 内核源代码根目录及各层目录中,定义 Li ...
- Linux 内核配置机制(make menuconfig、Kconfig、makefile)讲解
前面我们介绍模块编程的时候介绍了驱动进入内核有两种方式:模块和直接编译进内核,并介绍了模块的一种编译方式--在一个独立的文件夹通过makefile配合内核源码路径完成 那么如何将驱动直接编译进内核呢? ...
- Linux内核配置编译及基本调试方法
一.Linux内核配置编译 1. 交叉编译设置:make ARCH=arm CROSS_COMPILE=arm-linux- 注:也可以直接修改顶层Makefile ARCH ?= arm CROSS ...
- Linux 内核配置和编译
Linux 内核配置和编译 一.配置内核 (1). 为什么要配置内核 1. 硬件需求 2. 软件需求 选出需要的,去掉不要的 (2). 如何配置内核 1. make config 基于文本模式的交互 ...
- [转帖]Linux内核系统体系概述
Linux内核系统体系概述 https://www.cnblogs.com/alantu2018/p/8447369.html Linux 内核主要由 5 个模块构成,它们分别是: 进程调度模块 用来 ...
- Linux内核启动过程概述
版权声明:本文原创,转载需声明作者ID和原文链接地址. Hi!大家好,我是CrazyCatJack.今天给大家带来的是Linux内核启动过程概述.希望能够帮助大家更好的理解Linux内核的启动,并且创 ...
- linux内核配置 kbuild
Linux 内核配置机制 http://blog.csdn.net/dianhuiren/article/details/6917132 linux kbuild文档 http://blog.chin ...
随机推荐
- WF4.0(1)---WorkFlow简介
编程编的越久就发现自己以前的语文真的没学好,写个随笔取个名字都需要思考半天,以前工作的时候只是听说过工作流,知道的范围仅限于工作流在OA审批流程中用的比较多,现在自己实实在在的用工作流也做过不少项目, ...
- vue-router登录校验后跳转到之前指定页面如何实现
两个需求:1.用户点击购买需要下单,并跳转到订单页面,但是如果用户没有登录的话,中间有登录验证,会拦截:2.点击购买的时候,登录校验成功了,跳转到订单页面时,订单已创建,去付款即可.3.处理拦截至登录 ...
- 本地主机DNS劫持演示及防范
劫持演示 如果要进行DNS劫持 ...
- (转)Unity3D Android手机开发环境配置,可真机发布调试
此方法配置好,在可以在unity直接发布到手机上,并可以实时调试. 1.配置eclipse环境:首先在官网下载安装包:http://developer.android.com/sdk/index.ht ...
- Drupal 通过API动态的加入样式文件
前面几篇文章中讲到关于样式的载入方式.已经了解到能够通过 theme.info 载入样式文件,但都须要更新缓存才干够使用.因些这样子没有办法动态的载入一些样式文件,在DP中提供了两个API操作样式文件 ...
- Mapnik读取PostGIS数据渲染图片
__author__ = 'Administrator' # encoding: utf-8 import sys import datetime import mapnik m = mapnik.M ...
- Windows改桌面文件路径
默认的桌面和用户文件都是C盘,每次重装系统要备份,为了方便可以把它设置到其他盘符,一种方式是通过一些软件功能,如360有一个C盘搬家,也可以修改注册表文件: Windows Registry Edit ...
- php之快速入门学习-11(数组排序)
PHP 数组排序 数组中的元素可以按字母或数字顺序进行降序或升序排列. PHP - 数组排序函数 在本章中,我们将一一介绍下列 PHP 数组排序函数: sort() - 对数组进行升序排列 rsort ...
- 总结js(1)
已经一个月没敲代码了,工作难找,挺烦. 先总结一下javascript吧. 1.js概述 2.语法结构 3.类型.值和变量 4.表达式和运算符 5.语句 6.对象 7.数组 8.函数 9.类和模块 1 ...
- Spring -- 三种配置方式
1.Explicit configuration in XML:显示的XML配置. 优点: 1)XML配置方式进一步降低了耦合,使得应用更加容易扩展,即使对配置文件进一步修改也不需要工程进行修改和重新 ...