課程簡介

介紹

  • GNU 簡史/Linux
  • 發 牌
  • 內核版本控制
  • 發佈週期
  • 內核樹
  • 主線
  • 內核 vs. 用戶空間
  • 機制與策略
  • 內核驅動程式替代方案
  • RTOS 與 Linux

記憶體 Management

  • 虛擬記憶體與物理記憶體
  • 內核中的記憶體分配
  • 頁面
  • 應用程式介面

內核補丁

  • 生命週期
  • git
  • 內核源
  • 創建補丁
  • 檢查補丁
  • 修復補丁
  • 船舶補丁
  • 經審核的代碼

內核模組

  • 獲取內核源
  • 配置/構建/安裝
  • 裝置驅動程式(靜態連結,在運行時載入)
  • 初始化/退出
  • 發 牌
  • 匯出元件 GPL
  • 樹外makefile
  • 模組初始化工具
  • 內核樹中的模組
  • K配置
  • 參數傳遞
  • 稀疏

Char 驅動程式

  • 建築
  • 使用者/內核介面
  • I/O 子系統
  • VFS
  • sysfs (設備、總線、驅動程式、類)、
  • kobject/ktype/kset
  • Linux 內核驅動程式模型
  • 設備檔
  • char 驅動程式
    • 初始化
    • 註冊
    • 打開、釋放
    • cdev, cdev add, cdev del,...
    • 主/輔編號
    • udev、udevmonitor、udevadm

高級 Charachter 驅動程式操作

  • ioctl
  • 解鎖的ioctl
  • Compat ioctl
  • 用戶空間 API
  • 內核空間 API
  • 流程生命週期
  • 休眠/阻塞
  • 睡覺/醒來
  • 等待佇列
  • 雷霆群
  • 輪詢/選擇

內核調試

  • 錯誤
  • 調試
  • 調試內核
    • 使用 Git 進行二進位搜索
    • 內核的調試支援
    • printk syslogd, klogd, loglevels, 速率限制, debug levels, 調試級別, debug selective subsystems 調試選擇性子系統
    • 通過查詢 debugFS 進行調試
    • OOPS 調試, 斷言 OOPS
    • Magic SysRq 金鑰
    • KGDB/KDB 資料庫
    • JTAG

描圖

  • 全球科夫
  • LCOV
  • oprofile
  • ftrace
    • 不,追蹤者
    • 函數跟蹤器
    • sched 開關跟蹤器
    • 函數 Graph Tracer
    • 動態示蹤劑
  • 跟蹤 cmd/內核鯊魚
  • 性能
  • LTTng

中斷

  • 中斷與輪詢
  • 中斷
  • 程式部分
  • 可重入性
  • 事件
  • 中斷處理程式
  • 共用中斷處理程式
  • 中斷流
  • 中斷控制

推遲工作

  • 上半部分/下半部分
  • SoftIRQ
  • 微線程
  • 工作佇列
  • 螺紋交互

併發

  • 關鍵區域/區域
  • 原子
  • 爭用條件
  • 同步
  • 鎖定
  • 鎖定解決方案
  • 僵局
  • 衝突
  • 要鎖定什麼?
  • 可以使用什麼?
    • 原子操作
    • 旋轉鎖
    • 讀寫器自旋鎖
    • 信號
    • 二進位信號量
    • 互斥鎖
    • reader-writer 信號量
    • 完成變數
    • 順序鎖
    • 禁用搶佔
    • Orderig 和 Barriers

時間

  • 赫茲
  • 吉菲斯
  • 大/小延遲
  • 內核計時器

硬體 I/O

  • I/O 埠
  • I/O 記憶體
  • 如何處理訪問寄存器的副作用?

使用者-內核 Communication

  • put(get)_user()
  • 複製到(從)_user()
  • 內核 I/O
  • 記憶體映射
  • procfs
  • sysfs
  • 調試
  • 繼電器FS
  • 網聯
  • ioctl

可移植性

  • 字長
  • 不透明類型
  • 已簽名/未簽名的字元
  • 數據對齊
  • 整體推廣
  • 代碼重用
  • 內臟
  • 系統刻度
  • 頁面大小
  • 指令排序
  • SMP/搶佔/記憶體增強型

除非另有說明,否則內容和本課程大綱根據署名-非商業性使用-相同方式共用 4.0 國際 (CC BY-NC-SA 4.0) 獲得許可。

最低要求

  • 基本熟悉最終使用者使用 GNU/Linux 系統
  • 基本熟悉命令行shell
  • 用戶空間 / 應用程式開發的基本知識
  • 中級 C 語言程式設計知識
  • 應該以前參加 過嵌入式 GNU/Linux Systems Architecture 並且/或對那裡概述的主題有很好的理解
 35 時間:

客戶評論 (5)

課程分類