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 ...
随机推荐
- layer和3D仿射变换
1.视图的显示基于图层,通过控制图层同样能控制显示效果,获取当前的视图的layer,并为其增加圆角边框. //设置layer边框的宽度为2 view.layer.borderWidth=; //如果需 ...
- ItemsControl
<ItemsControl Grid.Row=" ItemsSource="{Binding Content.patientInfoList}" Width=&qu ...
- 我对REST的理解
1:rest的由来 REST即表述性状态传递(英文:Representational State Transfer,简称REST) 通俗点说:资源在网络中以某种表现形式进行状态转移. 源于REST之父 ...
- Angular路由与Nodejs路由的区别
转自:http://www.imooc.com/qadetail/114683?t=148182 觉得angualr.js的路由是针对于单页面的路由,每次路由发生变化,只是页面的状态发生变化,页面本身 ...
- [Functional Programming] mapReduce over Async operations and fanout results in Pair(rejected, resolved) (fanout, flip, mapReduce)
This post is similar to previous post. The difference is in this post, we are going to see how to ha ...
- 使用Git下载Hadoop的到本地Eclipse开发环境
使用Git下载Hadoop的到本地Eclipse开发环境 博客分类: Hadoop *n*x MacBook Air hadoopgitmaveneclipsejava 问题场景 按照官网http: ...
- VMWare虚拟机“锁定文件失败“怎么办?
虚拟机突然蓝屏了,然后就启动不了了,提示"锁定文件失败,打不开磁盘或快照所依赖的磁盘"的解决方法: 如果使用VMWare虚拟机的时候突然系统崩溃蓝屏,有一定几率会导致无法启动,会提 ...
- 【React Native开发】React Native控件之ListView组件解说以及最齐全实例(19)
),React Native技术交流4群(458982758).请不要反复加群!欢迎各位大牛,React Native技术爱好者加入交流!同一时候博客左側欢迎微信扫描关注订阅号,移动技术干货,精彩文章 ...
- selenium 加载jquery
packagecom.example.tests; import staticorg.junit.Assert.*; importjava.util.*; importorg.junit.*; imp ...
- photoshop 切片工具进行切图
1.使用切片工具切图 2.存储为web所用格式 3.选择图片格式 4.只保存切片(选择所有用户切片) 5.查看: