Các tham số được truyền trên dòng lệnh kernel không phải có ý nghĩa đối với kernel: tài liệu tham số kernel nói
Nhân phân tích cú pháp các tham số từ dòng lệnh kernel lên đến - -; nếu nó không nhận ra một tham số và nó không chứa '.', tham số được truyền cho init: tham số với '=' đi vào môi trường init, các tham số khác được truyền dưới dạng đối số dòng lệnh cho init. Tất cả mọi thứ sau khi - - được thông qua như là một đối số cho init.
Điều này không áp dụng cho init
và root
đó thực sự là các tham số kernel và được xử lý bởi kernel. Chúng cũng có thể được tác động bởi không gian người dùng, vì chúng xuất hiện trong /proc/cmdline
. (Vì vậy, ví dụ systemd đưa quiet
tham số kernel vào tài khoản để giảm đầu ra của nó.)
Khi kernel được khởi động với initramfs, root
tham số không được kernel sử dụng trực tiếp và init
tham số chỉ được sử dụng nếu rdinit
thất bại. init
khởi động được xử lý kernel_init
, hoạt động như sau:
- nếu có một lệnh ramdisk của người Viking thực hiện lệnh (hoặc giá trị được đưa ra
rdinit
trên dòng lệnh kernel hoặc /init
) có thể truy cập được, thì kernel sẽ cố chạy nó;
- nếu điều đó không thành công và có một lệnh thực thi của người Viking, (giá trị được đưa ra
init
trên dòng lệnh kernel), kernel cố gắng chạy nó và hoảng loạn nếu không thể;
- như một phương sách cuối cùng, hạt nhân cố gắng chạy
/sbin/init
, /etc/init
, /bin/init
, và /bin/sh
; nếu không ai trong số họ có thể chạy, nó hoảng loạn .
Khi có initramfs, tất cả điều này xảy ra ở đó và âm lượng đích không được gắn bởi kernel. Điều gì xảy ra sau khi kernel chạy init
chương trình đầu tiên (thông thường, /init
tập lệnh trong initramfs) tùy thuộc vào chương trình, không phải kernel. Các đối số không được chuyển đến init
vẫn khả dụng /proc/cmdline
nếu /proc
hệ thống tệp được gắn kết.
ld-linux.so
ELF hoặc tập lệnh quá sâu hoặc bất cứ điều gì không thể được thực thi?