Programming¶
Topic này trình bày phần mềm ở góc độ người viết code: ngôn ngữ, công cụ build, giao diện lập trình của Linux ở user space, cách kiểm thử và đo hiệu năng, cách thiết kế và tổ chức quy trình phát triển. Trang này giới thiệu lộ trình đọc, sau đó liệt kê các nhóm nội dung cùng mức độ hoàn thiện hiện tại, và cuối cùng là các phần chưa viết.
Lộ trình đọc¶
Các nhóm được sắp theo thứ tự từ nền tảng tới chuyên sâu. Ngôn ngữ C và toolchain là nền cho mọi nhóm phía sau. Công cụ build, quản lý mã nguồn và coding convention cần có trước khi làm project nhiều file. Lập trình hệ thống trên Linux dựa trên hai nhóm đầu. Kiểm thử, hiệu năng, thiết kế và quy trình là các lớp áp dụng lên toàn bộ phần còn lại.
flowchart LR
A[Ngôn ngữ C] --> B[C toolchain]
B --> C[Build & Dev Tools]
C --> D[Coding Convention]
C --> E[Linux System Programming]
E --> F[Testing & Performance]
C --> G[Design & Software Engineering]
Nội dung¶
| Nhóm | Câu hỏi trả lời | Nội dung | Trạng thái |
|---|---|---|---|
| C | C là gì, và từ file .c tới process đang chạy trên target qua những bước nào? |
C introduction (chuẩn C, libc và glibc), C language (kiểu dữ liệu và biểu thức), C toolchain (build pipeline, ELF, linking, loader, build nhiều file, cross compile, debug) | Toolchain đầy đủ; C language đang viết |
| Build & Dev Tools | Build, quản lý phiên bản và kiểm tra mã nguồn bằng công cụ nào? | Makefile, CMake, Git, phân tích tĩnh | Đầy đủ |
| Coding Convention | Code được trình bày và đặt tên theo quy ước nào? | Các bộ convention cho C, Linux kernel coding style | Đầy đủ |
| Linux System Programming | Chương trình user space dùng dịch vụ của kernel, chạy nhiều thread và đạt độ trễ xác định ra sao? | Linux Programming Interfaces, Multi-threading, Ứng dụng real-time trên Linux | Real-time đầy đủ; LPI và multi-threading WIP |
| Testing & Performance | Chương trình chạy đúng không, và tốn thời gian ở đâu? | Perf (perf top, perf record, perf trace) |
Sơ lược |
| Design | Tổ chức code và mô tả thiết kế bằng cách nào? | Design pattern cho embedded, UML | Đầy đủ phần embedded |
| DSA | Cấu trúc dữ liệu và thuật toán nào thường dùng trong code embedded? | Linked list, queue | WIP |
| Scripting | Tự động hóa công việc bằng script ra sao? | Shell script, Python | Shell sơ lược, Python WIP |
| SQL | Lưu và truy vấn dữ liệu có cấu trúc thế nào? | MySQL | WIP |
| Software Engineering | Dự án phần mềm được tổ chức và phát hành theo quy trình nào? | Development Process, CI/CD | Đầy đủ |
Các trang Makefile, CMake và Git nằm trong thư mục lnx_es/ vì có từ trước khi chia tab, nhưng thuộc tab này theo nav:.
Nội dung chưa viết¶
Ngôn ngữ C
Series C language đi theo khung của K&R, chỉ viết phần sách không có: thực nghiệm trên binary, tính năng từ C99 trở đi và các bẫy trong code embedded. Kế hoạch gồm sáu trang, đã có trang 1:
- Kiểu dữ liệu và biểu thức (K&R chương 2).
- Hàm và tổ chức chương trình (K&R chương 4): storage duration và section trong binary,
inline, preprocessor. - Pointer và array (K&R chương 5): array decay, string literal,
restrict, cấp phát động. - Struct, union và bit-field (K&R chương 6): padding và alignment,
packed, layout của bit-field. - Undefined behavior.
- C cho embedded:
volatile, thanh ghi memory-mapped, thao tác bit, endianness, unaligned access.
Các nhóm khác
- Linux system programming: file I/O và process (
fork,exec,wait), signal và IPC (pipe, shared memory, message queue),mmap,epollvà timer, socket API. - Multi-threading: pthread, mutex và condition variable, atomic và memory model của C11, deadlock và priority inversion, concurrency pattern (Reactor, Proactor, Active Object, thread pool).
- Testing: unit test cho C (Unity, CMocka, GoogleTest), mock phần cứng, đo coverage bằng gcov/lcov, fuzzing.
- Performance: phương pháp profiling,
perf stat, flame graph, Valgrind. - DSA: độ phức tạp, ring buffer, hash table, cây, sắp xếp và tìm kiếm.
- C++ và Rust, gồm cả hướng dùng cho embedded.
- Python cho embedded: venv, pyserial, pytest, tự động hóa test.
Liên quan¶
- Dùng và quản trị Linux ở user space (command line, init system, rootfs): Linux System.
- Debug ứng dụng user space trên board (gdbserver, core dump, strace): Debug ứng dụng user space.
- Giao tiếp giữa kernel và user space nhìn từ phía kernel (system call, device file,
mmap): Kernel & User Space. - Công cụ SAST dùng để tìm lỗ hổng bảo mật: SAST.
- Quy trình phát triển phía phần cứng (EVT, DVT, PVT): Product Development.