跳转至内容

内核参数

来自 ArchWiki

有三种方法可以将选项传递给内核,从而控制其行为。

  1. 在编译内核时—在内核的 config 文件中。详情请参阅 Kernel#Compilation
  2. 在启动内核时—使用命令行参数(通常通过 boot loader,或在 unified kernel image 中)。
  3. 在运行时—通过 /proc/sys/ (参见 sysctl) 和 /sys/ 中的文件。
注意 可加载模块的选项可以通过 /etc/modprobe.d/ 中的 .conf 文件设置。详情请参阅 Kernel module#Using modprobe.d

在这三种方法中,可配置选项的可用性、名称和指定方式各不相同。本页仅解释第二种方法(内核命令行参数),并列出了 Arch Linux 中最常用的内核参数。

大多数参数与子系统相关,并且只有在内核配置了这些子系统内置时才起作用。它们还取决于其关联硬件的存在。

内核命令行参数的格式要么是 parameter,要么是 parameter=value,要么是 module.parameter=value

  • 您可以通过运行 cat /proc/cmdline 来检查您的系统启动时使用的参数,并查看是否包含您的更改。
  • 所有内核参数都区分大小写。

引导加载器配置

注意 Arch Linux 的 安装介质 对于 UEFI 系统使用 systemd-boot,对于 BIOS 系统使用 Syslinux

内核参数可以在引导加载器的启动选择菜单中编辑启动项来临时设置,也可以通过修改引导加载器配置文件来永久设置。

以下示例将 quietsplash 参数添加到 CloverGRUBGRUB LegacyLILOLiminerEFIndSyslinuxsystemd-boot 引导加载器。

Clover

  • 将它们添加到 esp/EFI/CLOVER/config.plist
<string>initrd=\initramfs-linux.img root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw quiet splash</string>

GRUB

  • 菜单出现时按 e,并在 linux 行添加它们
linux /boot/vmlinuz-linux root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw quiet splash
Ctrl+x 使用这些参数启动。
编辑 /etc/default/grub,并将您的内核选项添加到 GRUB_CMDLINE_LINUX_DEFAULT 行的引号之间
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
然后使用以下命令自动重新生成 grub.cfg 文件
# grub-mkconfig -o /boot/grub/grub.cfg

GRUB Legacy

  • 菜单出现时按 e,并在 kernel 行添加它们
kernel /boot/vmlinuz-linux root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw quiet splash
b 使用这些参数启动。
  • 要使更改在重启后持久生效,请编辑 /boot/grub/menu.lst 并将它们添加到 kernel 行,与上面完全相同。

LILO

  • 使用 appendaddappend 将它们添加到 /etc/lilo.conf
image=/boot/vmlinuz-linux
        ...
        append="quiet splash"

Limine

  • 要临时添加内核参数,请在启动项选择屏幕出现时按 e 并修改 cmdline
cmdline: root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw quiet splash
  • 要永久应用更改,请编辑 Limine 配置文件中的 kernel_cmdline
/+Arch Linux
    ...
    kernel_cmdline: root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw quiet splash
kernel_cmdlinecmdline 的别名

rEFInd

  • 在所需菜单项上按 InsertF2Tab+,然后在子菜单项上再次按下。在字符串末尾添加内核参数
root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw initrd=\boot\initramfs-linux.img quiet splash
Enter 使用这些参数启动。
  • 要使更改在重启后持久生效,请编辑 /boot/refind_linux.conf,并将它们添加到所有必需行的引号之间,例如
"Boot using default options"   "root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw quiet splash"
  • 如果您已禁用 rEFInd 中操作系统的自动检测,而是将操作系统定义在 esp/EFI/refind/refind.conf 中加载您的操作系统,您可以像这样编辑它
menuentry "Arch Linux" {
    ...
    options  "root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw quiet splash"
    ...
}

Syslinux

  • 菜单出现时按 Tab,并在字符串末尾添加它们
linux /boot/vmlinuz-linux root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw initrd=/boot/initramfs-linux.img quiet splash
Enter 使用这些参数启动。
  • 要使更改在重启后持久生效,请编辑 /boot/syslinux/syslinux.cfg 并将它们添加到 APPEND
APPEND root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw quiet splash

systemd-boot

  • 菜单出现时按 e,并在字符串末尾添加参数
initrd=\initramfs-linux.img root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw quiet splash
Enter 使用这些参数启动。
  • 如果您未设置菜单超时值,则在启动时需要按住 Space 才能显示 systemd-boot 菜单。
  • 如果您无法从引导菜单编辑参数,您可能需要编辑 /boot/loader/loader.conf 并添加 editor 1 来启用编辑。
  • 要使更改在重启后持久生效,请编辑 /boot/loader/entries/arch.conf(假设您已设置好 EFI 系统分区)并将它们添加到 options
options root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 rw quiet splash

dracut

dracut 能够将内核参数嵌入到 initramfs 中,从而允许在引导加载器配置中省略它们。详情请参阅 dracut#Kernel command line options。请注意,这只适用于 dracut 理解的参数,例如 root=rd.*。它们不会成为真正的内核参数。

EFI 引导存根

请参阅 EFI boot stub#Using UEFI directly

劫持 cmdline

即使无法访问您的引导加载器,也有可能更改您的内核参数以启用调试(如果您有 root 访问权限)。这可以通过覆盖存储内核参数的 /proc/cmdline 来实现。然而,即使是 root 用户也无法写入 /proc/cmdline,因此这个技巧是通过使用 bind mount 来屏蔽该路径实现的。

注意 此技巧仅劫持读取 /proc/cmdline 的用户空间进程。它不适用于内核本身读取的参数。例如,通过这种方式添加 debug 不会启用内核调试。

首先创建一个包含所需内核参数的文件

/root/cmdline
root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3 ro console=tty1 logo.nologo debug

然后使用 bind mount 覆盖参数

# mount --bind -o ro /root/cmdline /proc/cmdline

您可以 cat /proc/cmdline 来确认您的更改是否成功。

参数列表

此列表并非详尽无遗。除了内核本身,其他程序也可以从 /proc/cmdline 读取参数并改变它们的行为。

parameter 描述
init 运行指定的二进制文件作为 init 进程,而不是 /sbin/initsystemd-sysvcompat 包会将 /sbin/init 链接到 /usr/lib/systemd/systemd 以使用 systemd。将其设置为 /bin/sh 可以引导到 shell。
initrd 指定初始 ramdisk 的位置。对于 UEFI boot managersEFI boot stub,路径必须使用反斜杠 (\) 作为路径分隔符。
cryptdevice 指定一个 dm-crypt 加密分区的位置以及一个 device mapper 名称。
debug 启用内核调试(事件日志级别)。
lsm 设置 Linux 安全模块的初始化顺序,用于启用 AppArmorSELinuxTOMOYO
maxcpus SMP 内核在启动过程中最多可以启动的处理器数量。
mem 强制使用特定数量的内存。
netdev 网络设备参数。
nomodeset 禁用 Kernel mode setting
panic 内核恐慌后自动重启前的等待时间。
resume 指定一个用于从 hibernation 唤醒时使用的 swap 设备。
ro 启动时以只读方式挂载根设备。这是 mkinitcpio 的默认值1
root Root 文件系统。有关内核支持的设备名称格式,请参阅 init/do_mounts.c。请注意,带有 udevinitramfs 支持 更多名称格式。与 systemd#GPT partition automounting 兼容的设置允许省略该参数,或者选择使用 root=dissect
rootflags 根文件系统挂载选项。适用于设置无法通过 remount 应用的选项(即通过 systemd-remount-fs.service(8))。例如,XFS 根卷的 discard 选项,或 Btrfs 使用子卷作为根时subvol= 选项。
rw 启动时以读写方式挂载根设备。这是内核的默认值1
systemd.unit 引导到 指定的 target
video 覆盖帧缓冲视频默认设置。
  1. 如果内核命令行上未明确设置 rorw(参见 bootparam(7) § General non-device-specific boot arguments),则内核使用 rw。然而,mkinitcpio 使用 ro 作为默认值,覆盖了内核的默认值(参见 mkinitcpio(8) § EARLY INIT ENVIRONMENT)。引导加载器也可能有自己的配置默认值,例如,grub-mkconfig 使用 rw(参见 FS#36275 作为参考)。
    注意 如果使用 mkinitcpio 的 fsck hook(参见 [1])或 将 F2FS 用作根文件系统时,则需要 rw

参见