Kể từ Linux 2.6:
Hạt nhân
Sau khi được tải vào RAM, kernel thực hiện các chức năng sau.
setup()
:
- Xây dựng bảng trong RAM mô tả bố cục của bộ nhớ vật lý.
- Đặt độ trễ và tốc độ lặp lại của bàn phím.
- Khởi tạo thẻ bộ điều hợp video.
- Khởi tạo bộ điều khiển đĩa với các tham số đĩa cứng.
- Kiểm tra xe buýt IBM Micro Channel.
- Kiểm tra các thiết bị trỏ PS / 2 (chuột bus).
- Kiểm tra hỗ trợ Quản lý năng lượng nâng cao (APM).
- Nếu được hỗ trợ, hãy tạo một bảng trong RAM mô tả các đĩa cứng khả dụng.
- Nếu hình ảnh kernel đã được tải thấp RAM, hãy di chuyển nó lên cao.
- Đặt chân A20 (hack tương thích cho bộ vi xử lý 8088 cổ đại).
- Thiết lập Bảng mô tả ngắt tạm thời (IDT) và Bảng mô tả toàn cầu tạm thời (GDT).
- Đặt lại đơn vị dấu phẩy động (FPU).
- Lập trình lại bộ điều khiển ngắt lập trình (PIC).
- Chuyển từ chế độ thực sang chế độ bảo vệ.
startup_32()
:
- Khởi tạo các thanh ghi phân đoạn và một ngăn xếp tạm thời.
- Xóa tất cả các bit trong thanh
eflags
ghi.
- Điền vào vùng dữ liệu chưa được khởi tạo bằng số không.
- Gọi
decompress_kernel()
để giải nén hình ảnh hạt nhân.
startup_32()
(cùng tên, chức năng khác):
- Khởi tạo các thanh ghi phân đoạn cuối cùng.
- Điền vào
bss
đoạn có số không.
- Khởi tạo bảng trang tạm thời.
- Kích hoạt phân trang.
- Thiết lập ngăn xếp chế độ hạt nhân cho quá trình 0.
- Một lần nữa, xóa tất cả các bit trong thanh
eflags
ghi.
- Điền IDT bằng các trình xử lý ngắt null.
- Khởi tạo khung trang đầu tiên với các tham số hệ thống.
- Xác định mô hình của bộ xử lý.
- Khởi tạo các thanh ghi với địa chỉ của GDT và IDT.
start_kernel()
: Gần như mọi thành phần kernel được khởi tạo bởi hàm này, đây chỉ là một số ít.
- Người lập kế hoạch
- Vùng nhớ
- Phân bổ hệ thống Buddy
- IDT
- SoftIRQ
- Ngày và giờ
- Phân bổ phiến
- Tạo quy trình 1 (
/sbin/init
)
"Danh sách" đầy đủ có sẵn trong các nguồn tại linux / init / main.c
Trong đó
Ban đầu bắt đầu tất cả quá trình người dùng cần thiết để đưa hệ thống về trạng thái mong muốn, thói quen này phụ thuộc rất nhiều vào phân phối và runlevel được gọi.
Nhập runlevel
vào bảng điều khiển, điều này cung cấp cho bạn runlevel hiện tại của hệ thống của bạn.
Hãy xem /etc/rcX.d/
(hoặc /etc/rc.d/rcX.d/
), thay thế X bằng runlevel của bạn.
Đây là các liên kết tượng trưng theo thứ tự ưu tiên thực hiện. S01....
có nghĩa là, tập lệnh này được bắt đầu từ rất sớm, trong khi S99....
chạy ở phần cuối của quá trình khởi động. Các KXX....
liên kết tượng trưng làm tương tự nhưng đối với chuỗi tắt máy.
Nói chung, các tập lệnh này xử lý đĩa, mạng, ghi nhật ký, điều khiển thiết bị, trình điều khiển đặc biệt, môi trường và nhiều trình tự cần thiết khác.