Gọi ứng dụng người dùng và script shell từ không gian nhân Linux

Trong môi trường Linux, việc khởi chạy ứng dụng ở không gian người dùng trực tiếp từ mã nhân là khả thi nhờ vào cơ chế usermode-helper. Cơ chế này cung cấp một cầu nối an toàn để nhân thực thi các chương trình bên ngoài mà không vi phạm nguyên tắc phân tách quyền. 1. Gọi ứng dụng người dùng từ nhân Hàm call_usermodehelper() là API chính được ...

Đăng vào ngày 26 tháng 9 lúc 12:13

Đồng bộ cấu hình Kernel Linux cho board phát triển bằng file .config

Tại sao chỉ cần thay thế .config mà không cần biên dịch lại toàn bộ Kernel? Việc sử dụng file cấu hình trực tiếp từ thiết bị đang chạy mang lại nhiều lợi ích quan trọng trong quá trình phát triển driver: 1. Tối ưu hóa thời gian phát triển Biên dịch toàn bộ (Full Compilation): Quá trình build kernel cho các dòng chip như RK3588 có thể mất ...

Đăng vào ngày 25 tháng 9 lúc 19:05

Cơ chế và quản lý module nhân Linux

Lập trình module nhân Linux đòi hỏi sự cẩn trọng cao độ, vì lỗi trong module có thể dẫn đến hệ thống treo hoàn toàn, khác với lập trình ứng dụng người dùng nơi lỗi segment fault chỉ ảnh hưởng cục bộ. Bảng ký hiệu nhân Bảng ký hiệu nhân lưu trữ các ký hiệu mà mọi module đều có thể truy cập cùng địa chỉ tương ứng. Module khi được nạp sẽ chèn các ...

Đăng vào ngày 25 tháng 9 lúc 08:32

Triển khai danh sách liên kết kép vòng tròn theo phong cách nhân kernel Linux

Thay vì thiết kế danh sách liên kết gắn liền với dữ liệu cụ thể, nhân Linux sử dụng mô hình danh sách liên kết thuần túy — một cấu trúc chỉ chứa hai con trỏ next và prev, hoàn toàn tách biệt khỏi dữ liệu người dùng. Cách tiếp cận này đảm bảo tính linh hoạt và tái sử dụng cao. Cấu trúc cơ sở struct list_node { struct list_node *next; s ...

Đăng vào ngày 15 tháng 9 lúc 13:37

Phân Tích Luồng Xử Lý Của Hệ Thống Gọi listen Trong Nhân Linux

1. Tổng quan và môi trường phân tích Quá trình phân tích dựa trên mã nguồn nhân Linux phiên bản 3.10. Tài liệu tham khảo chính được lấy từ kho lưu trữ mã nguồn chính thức, cho phép tra cứu chéo các hàm và cấu trúc dữ liệu mạng. 2. Tầng ứng dụng và điểm vào kernel Tại không gian người dùng, lập trình viên gọi hàm chuẩn POSIX để chuyển socket sa ...

Đăng vào ngày 25 tháng 8 lúc 07:27

Xử lý sự cố CPU hệ thống tăng cao nhưng không tìm thấy tiến trình chiếm dụng

Thông thường, khi gặp tình trạng hệ thống chậm chạp do CPU quá tải, chúng ta thường sử dụng các công cụ như top hoặc pidstat để xác định ngay tiến trình "ngốn" tài nguyên nhất. Tuy nhiên, có những kịch bản mà các công cụ này báo cáo chỉ số CPU hệ thống rất cao (User hoặc System CPU lên tới 80-90%), nhưng danh sách các tiến trình bên dưới lại hi ...

Đăng vào ngày 27 tháng 7 lúc 17:09

Phân tích kỹ thuật và khắc phục hiệu ứng Thundering Herd trong Nginx

Bản chất của hiệu ứng Thundering Herd trong hệ thống High-Load Hiệu ứng Thundering Herd (tạm dịch: hiệu ứng bầy đàn) là một bài toán kinh điển trong lập trình hệ thống mạng song song, đặc biệt nghiêm trọng trong kiến trúc Nginx hiện nay. Vấn đề phát sinh khi nhiều tiến trình worker cùng lúc chuyển sang trạng thái chờ (block) trên cùng một liste ...

Đăng vào ngày 12 tháng 7 lúc 22:12

Tìm Hiểu Cơ Bản Về eBPF Trong Linux Kernel

eBPF: Cơ Chế Lập Trình Nội Kernel Động eBPF (Extended Berkeley Packet Filter) là công nghệ cho phép chạy mã tùy chỉnh trong không gian nhân Linux mà không cần thay đổi mã nguồn nhân hay nạp module. Khởi nguồn từ BPF truyền thống (cBPF) ra đời năm 1992 cho bộ lọc gói tin, eBPF đã phát triển thành nền tảng đa dụng xử lý theo dõi hiệu năng, bảo mậ ...

Đăng vào ngày 23 tháng 6 lúc 09:18

Cài đặt kernel PREEMPT-RT trên Ubuntu 22.04 LTS

Giới thiệu các phương pháp cài đặt PREEMPT-RT trên Ubuntu 22.04 LTS Ubuntu 22.04 LTS hỗ trợ nhiều cách để triển khai nhân (kernel) thời gian thực PREEMPT-RT, phù hợp với nhu cầu sử dụng từ cơ bản đến nâng cao. Dưới đây là ba phương án phổ biến. Phương pháp 1: Kích hoạt realtime-kernel thông qua Ubuntu Pro (khuyên dùng) Ubuntu Pro cung cấp phiê ...

Đăng vào ngày 20 tháng 6 lúc 08:36

Hệ thống con pinctrl và gpio

1. Hệ thống con pinctrl 1.1 Hệ thống con pinctrl là gì? Trước hết, hãy xem lại cách khởi tạo GPIO dùng cho LED: ① Sửa đổi device tree, thêm node tương ứng, trong đó trọng tâm là đặt thuộc tính reg, reg bao gồm các thanh ghi liên quan đến GPIO. ② Lấy địa chỉ của các thanh ghi GPIOI_MODER, GPIOI_OTYPER, GPIOI_OSPEEDR, GPIOI_PUPDR và GPIOI_BSRR từ ...

Đăng vào ngày 18 tháng 6 lúc 03:44