Liên hệ với chúng tôi

Đề cương khóa học

Giới thiệu

  • lịch sử ngắn gọn về GNU/Linux
  • giấy phép
  • phiên bản hạt nhân
  • chu kỳ phát hành
  • cây mã nguồn hạt nhân (kernel trees)
  • mainline (đường chính)
  • hạt nhân so với không gian người dùng
  • cơ chế so với chính sách
  • phương án thay thế cho trình điều khiển hạt nhân
  • RTOS so với Linux

Quản lý bộ nhớ

  • Bộ nhớ ảo so với bộ nhớ vật lý
  • phân bổ bộ nhớ trong hạt nhân
  • trang (pages)
  • vùng (zones)
  • API
  • slab

Vệt sửa hạt nhân (Kernel Patch)

  • vòng đời
  • git
  • mã nguồn hạt nhân
  • tạo vệt sửa
  • kiểm tra vệt sửa
  • sửa lỗi vệt sửa
  • phân phối vệt sửa
  • mã nguồn đã kiểm toán

Mô-đun hạt nhân

  • tải mã nguồn hạt nhân
  • cấu hình/xây dựng/cài đặt
  • trình điều khiển thiết bị (được liên kết tĩnh, tải khi chạy)
  • khởi tạo/hủy
  • giấy phép
  • EXPORT SYMBOL GPL
  • makefile ngoài cây mã nguồn
  • module-init-tools
  • mô-đun trong cây mã nguồn hạt nhân
  • Kconfig
  • truyền tham số
  • sparse

Trình điều khiển ký tự (Char Drivers)

  • kiến trúc
  • giao diện người dùng/hạt nhân
  • hệ thống con I/O
  • VFS
  • sysfs (thiết bị, bus, trình điều khiển, lớp),
  • kobject/ktype/kset
  • mô hình trình điều khiển hạt nhân Linux
  • tệp thiết bị
  • trình điều khiển ký tự

    • khởi tạo
    • đăng ký
    • mở, đóng
    • cdev, cdev add, cdev del,...
    • số major/minor
    • udev, udevmonitor, udevadm

Hoạt động nâng cao của trình điều khiển ký tự

  • ioctl
  • unlocked ioctl
  • compat ioctl
  • API không gian người dùng
  • API không gian hạt nhân
  • vòng đời tiến trình
  • ngủ/chặn
  • ngủ/thức
  • hàng đợi chờ (wait queue)
  • bầy ong (thundering herd)
  • poll/select

Gỡ lỗi hạt nhân

  • gỡ lỗi
  • gỡ lỗi hạt nhân

    • tìm kiếm nhị phân bằng git
    • hỗ trợ gỡ lỗi từ hạt nhân
    • printk syslogd, klogd, mức log, giới hạn tốc độ, mức gỡ lỗi, hệ thống con gỡ lỗi
    • gỡ lỗi bằng cách truy vấn debugfs
    • gỡ lỗi lỗi, gây ra lỗi (oops)
    • Phím Magic SysRq
    • kgdb/kdb
    • JTAG

Theo dõi (Tracing)

  • gcov
  • lcov
  • oprofile
  • ftrace

    • tracer nop
    • tracer hàm
    • tracer chuyển lịch trình (sched switch)
    • tracer đồ thị hàm
    • tracer động
  • trace-cmd/kernelshark
  • perf
  • LTTng

Ngắt

  • ngắt so với quét (polling)
  • ngắt
  • phần đoạn chương trình
  • khả năng tái nhập
  • sự kiện
  • trình xử lý ngắt
  • trình xử lý ngắt chia sẻ
  • dòng ngắt
  • kiểm soát ngắt

Hoãn công việc

  • phần đầu/phần cuối
  • softirqs
  • tasklets
  • dãy công việc (work queues)
  • ngắt luồng (threaded interrupts)

Đồng thời

  • vùng/phần đoạn quan trọng
  • nguyên tử (atomic)
  • trạng thái tranh chấp (race condition)
  • đồng bộ hóa
  • khóa
  • giải pháp khóa
  • deadlock (chết khóa)
  • độ tranh chấp
  • nên khóa gì?
  • có thể sử dụng gì?

    • phép toán nguyên tử
    • spin locks
    • spin locks đọc/ghi
    • semaphore
    • binary semaphore
    • mutex
    • semaphore đọc/ghi
    • biến hoàn thành
    • sequential locks
    • vô hiệu hóa tiền chế
    • trật tự và hàng rào (barriers)

Thời gian

  • HZ
  • Jiffies
  • độ trễ lớn/nhỏ
  • hẹn giờ hạt nhân

I/O phần cứng

  • Cổng I/O
  • Bộ nhớ I/O
  • Xử lý các tác dụng phụ khi truy cập thanh ghi như thế nào?

Giao tiếp Người dùng - Hạt nhân

  • put(get)_user()
  • copy to(from)_user()
  • I/O hạt nhân
  • ánh xạ bộ nhớ
  • procfs
  • sysfs
  • debugfs
  • relayfs
  • netlink
  • ioctl

Tính di động

  • kích thước từ
  • kiểu không rõ ràng (opaque types)
  • ký / không ký char
  • sự căn chỉnh dữ liệu
  • phép tăng cường nguyên (integral promotion)
  • tái sử dụng mã
  • endianess
  • nhịp hệ thống (system tick)
  • kích thước trang
  • trật tự hướng dẫn
  • SMP/tiền chế/bộ nhớ cao

Ngoại trừ khi có ghi chú khác, nội dung và chương trình khóa học này được cấp phép theo Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0).

Yêu cầu

  • Hiểu biết cơ bản về việc sử dụng hệ thống GNU/Linux như một người dùng cuối
  • Hiểu biết cơ bản về dòng lệnh (command line shell)
  • Hiểu biết cơ bản về phát triển không gian người dùng (user space) / ứng dụng
  • Hiểu biết trung cấp về lập trình C
  • Đã tham gia Kiến trúc hệ thống GNU/Linux nhúng trước đó (khuyên dùng!) và/hoặc có sự hiểu biết tốt về các chủ đề được nêu ra ở đó
 35 Giờ

Số người tham gia


Giá cho mỗi học viên

Đánh giá (3)

Các khóa học sắp tới

Các danh mục liên quan