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ònglinux .... - Device-tree: thuộc tính
bootargstrong node/chosen. - Kernel config:
CONFIG_CMDLINE(dùng làm giá trị mặc định hoặc nối thêm, tùyCONFIG_CMDLINE_FROM_BOOTLOADER,CONFIG_CMDLINE_EXTEND,CONFIG_CMDLINE_FORCE).
Xem command line mà kernel đang sử dụng:
Cú pháp¶
- Các tham số cách nhau bằng khoảng trắng; dạng
key=valuehoặ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 choinit. Tham số kernel không nhận ra cũng được chuyển choinitdướ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
Device-tree
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ặcearly_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/.