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

[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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PWM-GPIO驱动程序是Linux内核中的一个驱动模块,用于控制嵌入式系统中的GPIO引脚产生PWM信号。该驱动程序允许开发人员通过编程的方式来控制GPIO引脚的电平变化,从而产生不同占空比的PWM信号。 在Linux内核中,PWM-GPIO驱动程序通过向用户空间提供了相应的接口来实现PWM信号的控制。开发人员可以通过打开相应的设备节点,并使用相应的系统调用函数来设置PWM的频率、占空比等参数,从而实现对GPIO引脚的PWM信号的控制。 驱动程序的核心部分是一个PWM子系统,它与GPIO子系统紧密集成。PWM子系统负责管理PWM信号的生成和控制,而GPIO子系统负责管理GPIO引脚的配置和操作。PWM-GPIO驱动程序在这两个子系统之间起着桥梁的作用。 PWM-GPIO驱动程序的实现方式与硬件平台相关,每个平台可能有不同的具体实现。在驱动程序的初始化过程中,必须先配置GPIO引脚的功能为PWM模式,并将相应的寄存器映射到内核中,以便能够通过对寄存器的操作来控制GPIO引脚。驱动程序还需要初始化PWM子系统,为每个GPIO引脚分配相应的PWM通道,并根据需求设置PWM的频率、占空比等参数。 通过PWM-GPIO驱动程序,开发人员可以方便地利用Linux内核的功能来实现对嵌入式系统中GPIO引脚产生PWM信号的控制。这为开发PWM驱动、控制舵机、LED等应用提供了便捷的方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值