Quá trình khởi động Linux nhìn từ Linux kernel vmlinuz tự giải nén thành vmlinux

Kỹ thuật chiết cành mít

Chiết cành

Nội dung Linux kernel này cũng nằm trong môn học hệ điều hành được dạy cho sinh viên các ngành công nghệ thông tin, điện tử viễn thông ở các trường đại học, cao đẳng, trung cấp.

Chúng tôi không đi vào kiến thức hệ điều hành ở dạng lý thuyết mà nhảy vào làm luôn để thấy được có nhiều thứ thực tế có nhưng sách vở lý thuyết hệ điều hành, nguyên lí hệ điều hành không có nói.

Tiếp tục loạt bài viết kĩ thuật về Linux kernel cho các bạn muốn hiểu rõ hệ điều hành Linux hoặc học lập trình nhúng trên Linux.

Như đã nói lập trình nhúng trên Linux đòi hỏi bạn phải biết rõ về Linux kernel là thành phần cốt lõi của hệ điều hành Linux chạy trên các hệ thống nhúng.

vmlinuz là dạng file nén bzImage, khi khởi động nó được đưa lên RAM và tự giải nén thành vmlinux.

vmlinuz là viết tắt của vmlinux gzip, sau này vmlinuz nó thể nén bằng các thuật toàn nén khác như Bzip2, LZMA, XZ, LZ0, LZ4, ZSTD.

Linux kernel được giải nén bằng công cụ gì?

Linux kernel được nén kiểu gì? Phần 1

Linux kernel được nén kiểu gì? Phần 2

vmlinux là viết tắt của chữ virtual memory linux. Nó cung cấp cơ chế và quản lí địa chỉ nhớ ảo được hệ điều hành Linux quản lí.

vmlinux có định dạng ELF và là file tự chạy được (executable).

/boot/vmlinuz-5.14.0-362.8.1.el9_3.x86_64: Linux kernel x86 boot executable bzImage
 version 5.14.0-362.8.1.el9_3.x86_64 (mockbuild@x64-builder02.almalinux.org) #1 SMP PREEMPT_DYNAMIC Tue Nov 7 14:54:22 EST 2023
 RO-rootFS
 swap_dev 0xC
 Normal VGA

/boot/vmlinux-5.14.0-362.8.1.el9_3.x86_64: ELF 64-bit LSB executable
 x86-64
 version 1 (SYSV)
 statically linked
 BuildID[sha1]=b7ab4e240374fdcebb1385f201dcaa8672ed06fc
 stripped

LAB Compile Linux kernel mới để biết quá trình khởi động Linux thấy Linux kernel là vmlinuz tự giải nén thành vmlinux.

early console in extract_kernel
input_data: 0x0000000001aab2b9 
input_len: 0x00000000002bc3b3
output: 0x0000000001000000
output_len: 0x0000000000039dc0
kernel_total_size: 0x0000000000c30000
needed_size: 0x0000000000e00000
tramponline_32bit: 0x0000000000000000
Physical KASLR using RDRAND RDTSC...
Virtual KASLR using RDRAND RDTSC...

Decompressing Linux... Parsing ELF... Performing relocations... done.
Booting the kernel (entry_offset: 0x0000000000000000)