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等。

原文地址:https://www.cnblogs.com/alantu2018/p/8447547.html

时间: 2024-10-10 07:15:45

Linux内核配置解析 - 概述(基于ARM64架构)的相关文章

Linux内核配置浅析

1.Linux Kernel Kconfig系统的基本结构 Linux内核的配置系统由三个部分组成,分别是: 1>.Makefile:分布在 Linux 内核源代码根目录及各层目录中,定义 Linux 内核的编译规则: 2>.Kconfig:分布在 Linux 内核源代码根目录及各层目录中,给用户提供配置选择的功能: 3>..config:保存了配置选项结果: 4>.配置工具:包括配置命令解释器(对配置脚本中使用的配置命令进行解释)和配置用户界面(提供基于字符界面.基于 Ncurs

[转帖]Linux内核系统体系概述

Linux内核系统体系概述 https://www.cnblogs.com/alantu2018/p/8447369.html Linux 内核主要由 5 个模块构成,它们分别是: 进程调度模块 用来负责控制进程对 CPU 资源的使用.所采取的调度策略是各进程能够公平合理地访问 CPU,同时保证内核能及时地执行硬件操作. 内存管理模块 用于确保所有进程能够安全地共享机器主内存区,同时,内存管理模块还支持虚拟内存管理方式,使得 Linux 支持进程使用比实际内存空间更多的内存容量.并可以利用文件系

linux内核配置 kbuild

Linux 内核配置机制 http://blog.csdn.net/dianhuiren/article/details/6917132 linux kbuild文档 http://blog.chinaunix.net/uid-10221131-id-2943265.html

Tiny4412 Linux 内核配置流程

1.配置交叉编译器 默认情况下,内核构建的是与宿主机相同的体系架构镜像.如果要交叉编译,需要设置两个变量ARCH和CORSS_COMPILE. ①ARCH:指明目标体系架构,如x86.arm.mips等. ②CROSS_COMPILE:指定使用的交叉编译器的前缀.例如arm-linux-.在内核顶层的Makefile中,可以看到工具链中的编译器.链接器等都是以$(CROSS_COMPILE)作为前缀. AS = $(CROSS_COMPILE)as LD = $(CROSS_COMPILE)ld

linux 内核配置参考

对于每一个配置选项,用户可以回答"y"."m"或"n".其中"y"表示将相应特性的支持或设备驱动程序编译进内核:"m"表示将相应特性的支持或设备驱动程序编译成可加载模块,在需要时,可由系统或用户自行加入到内核中去:"n"表示内核不提供相应特性或驱动程序的支持.只有<>才能选择M 1. General setup(通用选项) [*]Prompt for development 

[国嵌攻略][099][Linux内核配置与编译]

为什么要配置内核 基于硬件和软件的需求选出需要的功能,去掉不要的功能. 内核配置的方法 make config:基于文本交互的配置. make menuconfig:基于图形菜单的配置. make menuconfig配置方法 1.菜单项的分类 processor type and features   处理器类型 networking support            网络协议支持 device drivers                设备驱动支持 file systems     

Linux内核配置、编译及Makefile简述

Hi,大家好!我是CrazyCatJack.最近在学习Linux内核的配置.编译及Makefile文件.今天总结一下学习成果,分享给大家^_^ 1.解压缩打补丁 首先是解压缩你获取到的Linux内核.这里我用到的是linux.2.22.6版本的内核.在Linux下命令行通过tar xjf linux.2.22.6.tar.bz2解压内核.然后,如果你需要对这个内核打补丁的话,用patch命令:patch -px <../linux.2.22.6.patch.这里的px指的是忽略掉补丁文件中描述的

Linux内核配置

1 开发环境 宿主机:Ubuntu16.04 开发板:Mini2440 内核版本:2.6.34.7 2 下载与解压 下载linux-2.6.34.7.tar.bz2并解压: tar -axvf linux-2.6.34.7.tar.bz2 3 默认配置 进入内核源码顶级目录执行: make defconfig 输出如下: [email protected]:~/Mini2440/Kernels/linux-2.6.34.7$ make defconfig HOSTCC scripts/basic

Linux 内核配置和编译

一.配置内核 (1). 为什么要配置内核 1. 硬件需求 2. 软件需求 选出需要的,去掉不要的 (2). 如何配置内核 1. make  config 基于文本模式的交互式配置 2. make  menuconfig 基于文本模式的菜单式配置  优点:直观,简单,高效 <  > 不选择该功能  <m> 内核模块 不是随时随刻要使用的  B.o文件存到硬盘中,需要才添加到内存里面.节省内存  <*>B.O文件存到内存中,随时随地可使用的. (3). 内核配置结果 ls