Skip to content

Kernel Command Line (Boot Arguments)

Kernel command line là một chuỗi tham số bootloader truyền cho kernel lúc khởi động, dùng để cấu hình kernel và các driver mà không cần build lại. Xem vị trí của nó trong quá trình boot tại Linux Kernel Boot Process.

Nguồn của command line

Chuỗi này có thể đến từ:

  • Bootloader: ví dụ U-Boot đặt biến bootargs, GRUB dùng dòng linux ....
  • Device-tree: thuộc tính bootargs trong node /chosen.
  • Kernel config: CONFIG_CMDLINE (dùng làm giá trị mặc định hoặc nối thêm, tùy CONFIG_CMDLINE_FROM_BOOTLOADER, CONFIG_CMDLINE_EXTEND, CONFIG_CMDLINE_FORCE).

Xem command line mà kernel đang sử dụng:

cat /proc/cmdline

Cú pháp

console=ttyPS0,115200 earlycon root=/dev/mmcblk0p2 rw rootwait loglevel=7
  • Các tham số cách nhau bằng khoảng trắng; dạng key=value hoặc chỉ key.
  • Giá trị có khoảng trắng đặt trong dấu nháy kép.
  • Tham số của module: <module>.<param>=<value>, ví dụ usbcore.autosuspend=-1. Áp dụng cho cả module built-in và module nạp sau (modprobe đọc /proc/cmdline).
  • --: các tham số sau -- không dành cho kernel mà truyền cho init. Tham số kernel không nhận ra cũng được chuyển cho init dưới dạng tham số hoặc biến môi trường.

Ví dụ một dòng bootargs thực tế trên Zedboard: ZedBoard.

Các tham số thường dùng

Nhóm Tham số Ý nghĩa
Console console=ttyPS0,115200 Thiết bị và baudrate của console (có thể lặp nhiều lần)
earlycon Console sớm, in log trước khi driver UART được khởi tạo
quiet, loglevel=N Mức log in ra console
printk.time=1 Hiện timestamp trong log
Root fs root=/dev/mmcblk0p2 Thiết bị chứa root filesystem
rootfstype=ext4 Loại file system của root
rootwait Chờ thiết bị root xuất hiện (SD/MMC, USB)
ro / rw Mount root chỉ đọc / đọc ghi
init=/sbin/init Chương trình init
nfsroot=, ip= Root qua NFS
Bộ nhớ mem= Giới hạn dung lượng RAM kernel dùng
memmap= Khai báo/loại trừ vùng nhớ (x86)
cma=64M Kích thước vùng Contiguous Memory Allocator
CPU maxcpus=N Số CPU được bật
isolcpus= Cô lập CPU khỏi scheduler thường
Debug dyndbg="..." Bật pr_debug, xem Dynamic Debug
initcall_debug In thời gian từng initcall
ignore_loglevel In mọi log bất kể loglevel

Danh sách đầy đủ: Documentation/admin-guide/kernel-parameters.txt trong kernel source hoặc docs.kernel.org.

Đặt command line trên từng nền tảng

U-Boot

setenv bootargs "console=ttyPS0,115200 earlycon root=/dev/mmcblk0p2 rw rootwait"
saveenv
boot

Device-tree

chosen {
    bootargs = "console=ttyPS0,115200 root=/dev/mmcblk0p2 rw rootwait";
};

Lưu ý: nếu bootloader đã tự đặt bootargs (ví dụ U-Boot sửa node /chosen trước khi boot), giá trị của bootloader có thể ghi đè giá trị trong DTB.

GRUB (x86): sửa GRUB_CMDLINE_LINUX trong /etc/default/grub rồi chạy update-grub.

Yocto / PetaLinux: cấu hình trong recipe, device-tree của project hoặc CONFIG_CMDLINE của kernel; xem phần Yocto và Petalinux.

Kernel xử lý tham số thế nào

  • Tham số lõi được đăng ký bằng macro __setup("name=", handler) (hoặc early_param() cho tham số cần xử lý rất sớm, trước khi bộ nhớ sẵn sàng).
  • Tham số của driver/module khai báo bằng module_param(); cùng tham số đó khi nạp bằng modprobe là modprobe foo param=value, và có thể xem/chỉnh tại /sys/module/<module>/parameters/.