Linux内核配置解析 - Boot options
1. 前言
本文将介绍ARM64架构下,Linux kernel和启动有关的配置项。
注1:本系列文章使用的Linux kernel版本是“X Project”所用的“Linux 4.6-rc5”,具体可参考“https://github.com/wowotechX/linux.git”。
2. Kconfig文件
ARM64架构中和Boot有关的配置项,非常简单,主要包括ACPI、命令行参数和UEFI几种。这些配置项位于“ arch/arm64/Kconfig”中,具体如下:
1: menu "Boot options"
2:
3: config ARM64_ACPI_PARKING_PROTOCOL
4: bool "Enable support for the ARM64 ACPI parking protocol"
5: depends on ACPI
6: help
7: Enable support for the ARM64 ACPI parking protocol. If disabled
8: the kernel will not allow booting through the ARM64 ACPI parking
9: protocol even if the corresponding data is present in the ACPI
10: MADT table.
11:
12: config CMDLINE
13: string "Default kernel command string"
14: default ""
15: help
16: Provide a set of default command-line options at build time by
17: entering them here. As a minimum, you should specify the the
18: root device (e.g. root=/dev/nfs).
19:
20: config CMDLINE_FORCE
21: bool "Always use the default kernel command string"
22: help
23: Always use the default kernel command string, even if the boot
24: loader passes other arguments to the kernel.
25: This is useful if you cannot or don't want to change the
26: command-line options your boot loader passes to the kernel.
27:
28: config EFI_STUB
29: bool
30:
31: config EFI
32: bool "UEFI runtime support"
33: depends on OF && !CPU_BIG_ENDIAN
34: select LIBFDT
35: select UCS2_STRING
36: select EFI_PARAMS_FROM_FDT
37: select EFI_RUNTIME_WRAPPERS
38: select EFI_STUB
39: select EFI_ARMSTUB
40: default y
41: help
42: This option provides support for runtime services provided
43: by UEFI firmware (such as non-volatile variables, realtime
44: clock, and platform reset). A UEFI stub is also provided to
45: allow the kernel to be booted as an EFI application. This
46: is only useful on systems that have UEFI firmware.
47:
48: config DMI
49: bool "Enable support for SMBIOS (DMI) tables"
50: depends on EFI
51: default y
52: help
53: This enables SMBIOS/DMI feature for systems.
54:
55: This option is only useful on systems that have UEFI firmware.
56: However, even with this option, the resultant kernel should
57: continue to boot on existing non-UEFI platforms.
58:
59: endmenu
3. 配置项说明
注2:Linux kernel的配置项虽然众多,但大多使用默认值就可以。因此在kernel移植和开发的过程中,真正需要关心的并不是特别多。对于那些常用的、需要关心的配置项,我会在分析文章中用黄色背景标注。
3.1 ACPI有关的配置项
| 配置项 | 说明 | 默认值 |
| CONFIG_ARM64_ACPI_ PARKING_PROTOCOL | 是否支持“ARM64 ACPI parking protocol”。关于ACPI和parking protocol,有机会的话我们会在其它文章中分析,这里不需要过多关注。 | 依赖于CONFIG_ACPI |
3.2 Kernel命令行参数有关的配置项
| 配置项 | 说明 | 默认值 |
| CONFIG_CMDLINE | 内核默认的命令行参数。设置该参数后,可以不需要bootloader传递(开始porting kernel的时候比较有用,因为不能保证bootloader可以正确传递^_^) | 无 |
| CONFIG_CMDLINE_FORCE | 强制使用内核默认的命令行参数(可以忽略bootloader传递来的); 一般在kernel开发的过程中,用来测试某些新的命令行参数(先不修修改bootloader传递的内容)。 | 无 |
注3:如果Kconfig没有通过“default”关键字为某个配置项指定默认值,那么生成的.config文件中就不会出现该配置项,也就是变相的“禁止”了。后同。
3.3 UEFI有关的配置项
DMI
| 配置项 | 说明 | 默认值 |
| CONFIG_EFI_STUB | 用于支持EFI启动; 使能该配置项之后,会修改Kenrel bzImage header,把kernel Image变成一个可以被EFI运行的PE/COFF Image。 具体可参考Documentation/efi-stub.txt中的介绍。 |
无 |
| CONFIG_EFI | 支持一些由UEFI Firmware提供的、运行时的服务,如RTC、reset等; 该配置项依赖Open Firmware(device tree),并且有很多的关联项(可以参考Kconfig文件中的select关键字); 另外,有意思的是(参考第2章Kconfig文件中的“depends on OF && !CPU_BIG_ENDIAN”),该配置项只能在小端CPU中才能使用。有空可以研究一下为什么。 |
y |
| CONFIG_DMI | 用于控制是否支持“SMBIOS/DMI feature”,依赖于CONFIG_EFI; 需要注意的是,就算使能了该配置项,kernel也需要能够在其它非UEFI环境下正常启动。 | y |
4. 参考文档
[1] UEFI,http://www.wowotech.net/armv8a_arch/UEFI.html
[3] SMBIOS/DMI,http://www.dmtf.org/cn/standards/smbios
Linux内核配置解析 - Boot options的更多相关文章
- Linux内核配置解析 - 概述(基于ARM64架构)
1. 前言 对刚接触Linux kernel的同学来说,遇到的第一个问题就是:我该从哪里入手?. 话说Linux kernel的打开方式是多种多样的:从简单的设备驱动入手:从源代码的目录结构入手:从k ...
- Linux内核配置机制(make menuconfig 、Kconfig、Makefile)讲解【转】
本文转载自:http://www.codexiu.cn/linux/blog/34801/ 前面我们介绍模块编程的时候介绍了驱动进入内核有两种方式:模块和直接编译进内核,并介绍了模块的一种编译方式—— ...
- Linux 内核配置和编译
Linux 内核配置和编译 一.配置内核 (1). 为什么要配置内核 1. 硬件需求 2. 软件需求 选出需要的,去掉不要的 (2). 如何配置内核 1. make config 基于文本模式的交互 ...
- Linux 内核配置机制(make menuconfig、Kconfig、makefile)讲解
前面我们介绍模块编程的时候介绍了驱动进入内核有两种方式:模块和直接编译进内核,并介绍了模块的一种编译方式--在一个独立的文件夹通过makefile配合内核源码路径完成 那么如何将驱动直接编译进内核呢? ...
- linux内核配置 kbuild
Linux 内核配置机制 http://blog.csdn.net/dianhuiren/article/details/6917132 linux kbuild文档 http://blog.chin ...
- Linux内核配置编译及基本调试方法
一.Linux内核配置编译 1. 交叉编译设置:make ARCH=arm CROSS_COMPILE=arm-linux- 注:也可以直接修改顶层Makefile ARCH ?= arm CROSS ...
- Tiny4412 Linux 内核配置流程
1.配置交叉编译器 默认情况下,内核构建的是与宿主机相同的体系架构镜像.如果要交叉编译,需要设置两个变量ARCH和CORSS_COMPILE. ①ARCH:指明目标体系架构,如x86.arm.mips ...
- Linux内核配置选项
http://blog.csdn.net/wdsfup/article/details/52302142 http://www.manew.com/blog-166674-12962.html Gen ...
- [国嵌攻略][099][Linux内核配置与编译]
为什么要配置内核 基于硬件和软件的需求选出需要的功能,去掉不要的功能. 内核配置的方法 make config:基于文本交互的配置. make menuconfig:基于图形菜单的配置. make m ...
随机推荐
- 使用Git将本地项目上传到Github操作详解
Git的安装就不说了. 一.建本地仓库 1.第一步:我们需要先创建一个本地的版本库(其实也就是一个文件夹). 你可以直接右击新建文件夹,也可以右击打开Git bash命令行窗口通过命令来创建. 反正就 ...
- Discuz常见大问题-如何允许用户插入视频-如何自己在页面中插入视频
从视频的下面分享中获取html代码 然后粘贴到你创建页面的指定位置(注意从优酷复制的视频宽度和高度可能比较小,你可以自己调整,或者占据100%) 最终的实现效果
- Linux集群监控工具简介:Ganglia和Nagios
11年时候,曾经对 Ganglia 和 Nagios有一定接触,这是两个用于监视数据中心的工具.这两个工具被大量用于高性能计算(HPC)环境中,但是它们对于其他环境也具有很大的吸引力(例如云.呈现集群 ...
- php之快速入门学习-6(字符串变量)
PHP 字符串变量 字符串变量用于存储并处理文本. PHP 中的字符串变量 字符串变量用于包含有字符的值. 在创建字符串之后,我们就可以对它进行操作了.您可以直接在函数中使用字符串,或者把它存储在变量 ...
- linux 目录结构(转)
原文:http://www.centoscn.com/CentOS/2014/1222/4347.html linux 目录结构 /: 根目录,一般根目录下只存放目录,不要存放文件,/etc./bin ...
- An application icon
The application icon is a small image which is usually displayed in the top left corner of the title ...
- Linux下Tar压缩使用
具体的可以在linux环境下 用tar --help查看详细说明格式:tar [option] file -c create create a new archive -x extract extra ...
- eclipse svn插件
eclipse svn插件 CreateTime--2018年4月22日23:09:42 Author:Marydon 下载地址:eclipse svn插件 将svn插件目录直接拷贝到eclips ...
- js 面向对象式编程
1.声明一个函数,在函数内进行初始化操作,,函数不能有返回值2.把需要的参数传递进去,参数最好以对象形式传入,如果有默认的设置默认参数3.把传入的参数都保存到对象的属性上面4.把初始化操作中需要用到的 ...
- CAS 5.1.x 的搭建和使用(一)—— 通过Overlay搭建服务端
CAS单点登录系列: CAS 5.1.x 的搭建和使用(一)—— 通过Overlay搭建服务端 CAS5.1.x 的搭建和使用(二)—— 通过Overlay搭建服务端-其它配置说明 CAS5.1.x ...