Linux Kernel Overview¶
Tài liệu này giới thiệu nhanh về Linux kernel: vai trò, các thành phần bên trong và các subsystem. Mỗi mục chỉ ở mức tổng quan, nội dung chi tiết nằm trong các page được link kèm theo.
Linux Kernel là gì¶
Linux kernel là phần lõi của hệ điều hành, đóng vai trò lớp trung gian giữa phần cứng và các ứng dụng: quản lý CPU, bộ nhớ, thiết bị ngoại vi và cung cấp một giao diện thống nhất để ứng dụng sử dụng các tài nguyên đó.
Một số đặc điểm chính:
- Monolithic kernel: các thành phần chính (scheduler, memory management, file system, network, driver) chạy chung trong kernel space. Khác với microkernel, nhưng kernel vẫn có thể mở rộng động bằng loadable module.
- Mã nguồn mở, hỗ trợ nhiều kiến trúc (x86, ARM/ARM64, RISC-V...).
- Cấu hình được thông qua Kconfig/defconfig: chỉ build những tính năng cần thiết, phù hợp từ hệ nhúng nhỏ đến server.
Kernel Space và User Space¶
- User space: nơi chạy ứng dụng và thư viện (glibc...). Ứng dụng không truy cập trực tiếp phần cứng.
- Kernel space: chạy ở mức đặc quyền cao của CPU, truy cập được toàn bộ phần cứng và bộ nhớ.
- System call là cửa ngõ để ứng dụng yêu cầu dịch vụ từ kernel (
open,read,write,mmap,ioctl...). - Ngoài system call, kernel còn trao đổi với user space qua các file đặc biệt:
/dev(device file),/procvà/sys(thông tin và cấu hình kernel).
Xem thêm: Kernel Space, User Space Interfaces.
Các thành phần chính trong kernel¶
| Thành phần | Nhiệm vụ | Thư mục trong source |
|---|---|---|
| Process Scheduler | Quản lý process/thread, phân chia thời gian CPU | kernel/sched/ |
| Memory Management | Bộ nhớ ảo, page, cấp phát (slab, buddy), mmap |
mm/ |
| Virtual File System (VFS) | Giao diện file thống nhất trên nhiều file system | fs/ |
| Networking | Network stack (socket, TCP/IP, ...) | net/ |
| IPC | Giao tiếp giữa các process (pipe, signal, shared memory...) | ipc/, kernel/ |
| Device Drivers | Điều khiển phần cứng, chiếm phần lớn source | drivers/ |
| Architecture code | Mã phụ thuộc kiến trúc (boot, interrupt, MMU...) | arch/ |
Các cấu trúc dữ liệu dùng chung trong kernel (list, rbtree, kfifo...) xem tại Kernel Data Structure.
Các subsystem¶
Subsystem là một framework chung do kernel cung cấp cho một nhóm thiết bị hoặc chức năng. Driver của từng phần cứng cụ thể chỉ cần đăng ký vào framework này thay vì tự làm lại phần chung. Dưới đây là các subsystem chính, chia theo nhóm (cột cuối để trống nếu tài liệu chưa có page tương ứng).
Core kernel¶
| Subsystem | Chức năng | Page liên quan |
|---|---|---|
| Scheduler | Lập lịch process/thread | |
| Memory Management | Bộ nhớ ảo, cấp phát, mmap, DMA mapping |
|
| VFS và file system | ext4, tmpfs, procfs, sysfs, debugfs... | |
| IRQ (interrupt) | Quản lý ngắt, irqchip, threaded IRQ | |
| Timer / Time | hrtimer, clocksource, clockevent, RTC | |
| Workqueue, tasklet, kthread | Hoãn xử lý, chạy ngữ cảnh process | |
| Locking / Synchronization | spinlock, mutex, RCU, atomic | |
| Security | LSM, SELinux, AppArmor, seccomp, capabilities | |
| Tracing / Debug | ftrace, perf, kprobe, eBPF, dynamic debug | FTrace, Dynamic Debug |
Device model và bus¶
| Subsystem | Chức năng | Page liên quan |
|---|---|---|
| Driver core / Device model | bus, device, driver, kobject, sysfs | Overview LDD |
| Platform bus | Thiết bị gắn trực tiếp vào system bus của CPU | Platform Device |
| Device Tree / OF | Mô tả phần cứng cho kernel | |
| I2C | Bus I2C/SMBus | I2C Subsystem |
| SPI | Bus SPI | SPI Device |
| PCI / PCIe | Bus PCI Express | PCIe |
| USB | Host, gadget, các class driver | |
| MMC / SD / SDIO | Thẻ nhớ, eMMC | |
| MTD / NAND / NOR | Flash memory | |
| Virtio | Thiết bị ảo hóa |
Framework phần cứng dùng chung¶
| Subsystem | Chức năng | Page liên quan |
|---|---|---|
| Clock (CCF) | Quản lý clock tree | Common Clock Framework |
| Pinctrl | Cấu hình pin mux, pin config | |
| GPIO | GPIO controller, gpiolib | GPIO |
| Regulator | Quản lý nguồn cấp | |
| Power management | runtime PM, suspend/resume, cpufreq, cpuidle, devfreq | |
| Reset | Reset controller | |
| DMA Engine | DMA controller, dmaengine API | |
| Thermal | Cảm biến và điều khiển nhiệt | |
| Hwmon | Giám sát phần cứng (nhiệt độ, điện áp, quạt) | |
| Watchdog | Watchdog timer | |
| PWM | Điều chế độ rộng xung | |
| Mailbox / Remoteproc / RPMsg | Giao tiếp với core/processor khác |
Giao tiếp, I/O và media¶
| Subsystem | Chức năng | Page liên quan |
|---|---|---|
| TTY / Serial | UART, console | UART |
| Input | Bàn phím, chuột, touch, nút nhấn | |
| IIO | ADC, DAC, cảm biến | JESD (liên quan) |
| Sound (ALSA / ASoC) | Audio | Audio |
| V4L2 / Media | Camera, video capture, codec | |
| DRM / KMS / fbdev | Đồ họa và hiển thị | |
| LED, Backlight | Điều khiển đèn LED, đèn nền | |
| Bluetooth, Wireless (cfg80211/mac80211) | Kết nối không dây | |
| CAN | Bus CAN |
Mạng và lưu trữ¶
| Subsystem | Chức năng | Page liên quan |
|---|---|---|
| Networking | Socket, TCP/IP, netfilter, netdev, phylib | |
| Block layer | Block device, I/O scheduler, device-mapper, NBD |
Danh sách trên mang tính tổng quan, không phải đầy đủ tuyệt đối; xem danh sách
đầy đủ trong Documentation/ của kernel source hoặc tại
docs.kernel.org.
Device Model và Device Tree¶
Linux xem mọi thiết bị theo mô hình bus – device – driver: device được khai
báo (thường qua device-tree trên hệ nhúng), driver được đăng ký, và kernel
ghép (match) hai bên rồi gọi probe(). Thông tin này được phơi ra user space
qua sysfs (/sys).
Xem thêm: Overview about Linux Device Driver.
Kernel Module¶
Kernel hỗ trợ hai dạng: built-in (nằm trong kernel image, khởi tạo lúc
boot) và loadable module (nạp/gỡ lúc chạy bằng insmod/modprobe).
Device driver thường được viết dưới dạng kernel module.
Xem thêm: Kernel Module.
Source tree và build¶
- Các thư mục cấp cao:
arch/,drivers/,fs/,kernel/,mm/,net/,include/,Documentation/. - Cấu hình bằng Kconfig (
make menuconfig,defconfig) và build bằng Kbuild/Makefile. - Kết quả build gồm kernel image (
Image/zImage/bzImage), device-tree blob (.dtb) và các module (.ko).
Debug và quan sát¶
printk/dmesgvà Dynamic Debug.- FTrace để trace hoạt động của kernel.
/procvà/sysđể xem trạng thái và cấu hình.
Tài liệu tham khảo¶
- The Linux Kernel documentation
- Linux Device Drivers (LDD3) - Corbet, Rubini, Kroah-Hartman
- Understanding the Linux Kernel - Bovet, Cesati
- Linux Kernel Labs
