Skip to content

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

userspace-kernelspace

Linux overview
  • 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), /proc và /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/dmesg và Dynamic Debug.
  • FTrace để trace hoạt động của kernel.
  • /proc và /sys để xem trạng thái và cấu hình.

Tài liệu tham khảo