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

[2] ACPI,https://zh.wikipedia.org/zh-cn/%E9%AB%98%E7%BA%A7%E9%85%8D%E7%BD%AE%E4%B8%8E%E7%94%B5%E6%BA%90%E6%8E%A5%E5%8F%A3

[3] SMBIOS/DMI,http://www.dmtf.org/cn/standards/smbios

Linux内核配置解析 - Boot options的更多相关文章

  1. Linux内核配置解析 - 概述(基于ARM64架构)

    1. 前言 对刚接触Linux kernel的同学来说,遇到的第一个问题就是:我该从哪里入手?. 话说Linux kernel的打开方式是多种多样的:从简单的设备驱动入手:从源代码的目录结构入手:从k ...

  2. Linux内核配置机制(make menuconfig 、Kconfig、Makefile)讲解【转】

    本文转载自:http://www.codexiu.cn/linux/blog/34801/ 前面我们介绍模块编程的时候介绍了驱动进入内核有两种方式:模块和直接编译进内核,并介绍了模块的一种编译方式—— ...

  3. Linux 内核配置和编译

    Linux 内核配置和编译 一.配置内核 (1). 为什么要配置内核 1. 硬件需求 2. 软件需求 选出需要的,去掉不要的 (2). 如何配置内核 1. make  config 基于文本模式的交互 ...

  4. Linux 内核配置机制(make menuconfig、Kconfig、makefile)讲解

    前面我们介绍模块编程的时候介绍了驱动进入内核有两种方式:模块和直接编译进内核,并介绍了模块的一种编译方式--在一个独立的文件夹通过makefile配合内核源码路径完成 那么如何将驱动直接编译进内核呢? ...

  5. linux内核配置 kbuild

    Linux 内核配置机制 http://blog.csdn.net/dianhuiren/article/details/6917132 linux kbuild文档 http://blog.chin ...

  6. Linux内核配置编译及基本调试方法

    一.Linux内核配置编译 1. 交叉编译设置:make ARCH=arm CROSS_COMPILE=arm-linux- 注:也可以直接修改顶层Makefile ARCH ?= arm CROSS ...

  7. Tiny4412 Linux 内核配置流程

    1.配置交叉编译器 默认情况下,内核构建的是与宿主机相同的体系架构镜像.如果要交叉编译,需要设置两个变量ARCH和CORSS_COMPILE. ①ARCH:指明目标体系架构,如x86.arm.mips ...

  8. Linux内核配置选项

    http://blog.csdn.net/wdsfup/article/details/52302142 http://www.manew.com/blog-166674-12962.html Gen ...

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

    为什么要配置内核 基于硬件和软件的需求选出需要的功能,去掉不要的功能. 内核配置的方法 make config:基于文本交互的配置. make menuconfig:基于图形菜单的配置. make m ...

随机推荐

  1. iOS开发-CoreMotion框架(加速计和陀螺仪)

    CoreMotion是一个专门处理Motion的框架,其中包含了两个部分加速度计和陀螺仪,在iOS4之前加速度计是由UIAccelerometer类来负责采集数据,现在一般都是用CoreMotion来 ...

  2. 监听视图树 ViewTreeObserver 获取View的宽高

    前奏:在哪里可以获取到View的宽高 我们知道,在onCreate方法执行完毕以后,View才开始被测量,所以我们在onCreate方法里面通过view.getWidth()或view.getMeas ...

  3. ASP.NET 仿腾讯微博提示“还能输入*个字符”的实现

    textbox如果设置TextMode="MultiLine"则 它的MaxLength设置的值就无效:为了能达到像腾讯微薄.新浪微薄那样的提示的效果(腾讯和新浪微薄文本框用到的应 ...

  4. operator++()和operator++(int)的区别

    很久以前(八十年代),没有办法区分++和--操作符的前缀与后缀调用.这个问题遭到程序员的报怨,于是C++语言得到了扩展,允许重载increment 和 decrement操作符的两种形式. 然而有一个 ...

  5. tp 生成静态页

    $this->fetch()返回的是html 可以直接写入到HTML文件内生成静态页

  6. 2.Dynamic Programming on Stolen Values【dp】

    Problem: There are  n houses built in a line, each of which contains some value in it. A thief is go ...

  7. 默认网关和默认路由 —— Cisco CCNA – Default Gateway & Default Routes

    原文:https://www.certificationkits.com/cisco-certification/ccna-articles/cisco-ccna-intro-to-routing-b ...

  8. A5-1和DES两个加密算法的学习

    A5-1加密算法 1.基本原理 A5-1加密算法是一种流password,通过密钥流对明文进行加密.然后用密钥流进行对密文的解密操作. 这样的算法主要用于GSM加密.也就是我们平时打电话的时候.通信数 ...

  9. ArcGIS Pro体验04——菜单栏

    对菜单栏进行熟悉一下: 1.地图菜单 剪切板(Clipboard):剪切(Cut).复制(Copy).粘贴(Paste),这些不用说了,在ArcMap中是放在"编辑"菜单下面的.当 ...

  10. 解决mysql下区分表名大小写的问题

    MySQL在Linux下采用 rpm方式安装后默认是: 数据库名与表名\表的别名\变量名是严格区分大小写 1.用root帐号登录,/etc/ mysql/my.cnf中的[mysqld]后添加lowe ...