Embedded GNU/Linux Kernel Internals and Device Drivers ( ldd | 35 hours )

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

描述

這個為期 5 天的培訓課程使用動手練習和指導來說明 GNU/Linux 內核內部和設備驅動程序開發的概念。它旨在讓您快速上手。我們通過理論和在職培訓相結合的方式,描述了編寫 GNU/Linux 設備驅動程式所需的過程、概念和命令。

不要重新發明輪子,而是向經驗豐富的培訓師學習,並將應用知識帶回家,並在您自己的嵌入式開發專案中有效使用它。

誰應該參加?

對開發 GNU/Linux 設備驅動程式感興趣或負責開發或評估的人,如軟體工程師、現場工程師、(專案)經理、硬體工程師。

Course Outline:

介紹

  • 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) 獲得許可。

Sites Published:

United Arab Emirates - Embedded GNU/Linux Kernel Internals and Device Drivers

Qatar - Embedded GNU/Linux Kernel Internals and Device Drivers

Egypt - Embedded GNU/Linux Kernel Internals and Device Drivers

Saudi Arabia - Embedded GNU/Linux Kernel Internals and Device Drivers

South Africa - Embedded GNU/Linux Kernel Internals and Device Drivers

Brasil - Embedded GNU/Linux Kernel Internals and Device Drivers

Canada - Embedded GNU/Linux Kernel Internals and Device Drivers

中国 - Embedded GNU/Linux Kernel Internals and Device Drivers

香港 - Embedded GNU/Linux Kernel Internals and Device Drivers

澳門 - Embedded GNU/Linux Kernel Internals and Device Drivers

台灣 - Embedded GNU/Linux Kernel Internals and Device Drivers

USA - Embedded GNU/Linux Kernel Internals and Device Drivers

Österreich - Embedded GNU/Linux Kernel Internals and Device Drivers

Schweiz - Embedded GNU/Linux Kernel Internals and Device Drivers

Deutschland - Embedded GNU/Linux Kernel Internals and Device Drivers

Czech Republic - Embedded GNU/Linux Kernel Internals and Device Drivers

Denmark - Embedded GNU/Linux Kernel Internals and Device Drivers

Estonia - Embedded GNU/Linux Kernel Internals and Device Drivers

Finland - Embedded GNU/Linux Kernel Internals and Device Drivers

Greece - Embedded GNU/Linux Kernel Internals and Device Drivers

Magyarország - Embedded GNU/Linux Kernel Internals and Device Drivers

Ireland - Embedded GNU/Linux Kernel Internals and Device Drivers

Israel - Embedded GNU/Linux Kernel Internals and Device Drivers

Luxembourg - Embedded GNU/Linux Kernel Internals and Device Drivers

Latvia - Embedded GNU/Linux Kernel Internals and Device Drivers

España - Embedded GNU/Linux Kernel Internals and Device Drivers

Italia - Embedded GNU/Linux Kernel Internals and Device Drivers

Lithuania - Embedded GNU/Linux Kernel Internals and Device Drivers

Nederland - Embedded GNU/Linux Kernel Internals and Device Drivers

Norway - Embedded GNU/Linux Kernel Internals and Device Drivers

Portugal - Embedded GNU/Linux Kernel Internals and Device Drivers

România - Embedded GNU/Linux Kernel Internals and Device Drivers

Sverige - Embedded GNU/Linux Kernel Internals and Device Drivers

Türkiye - Embedded GNU/Linux Kernel Internals and Device Drivers

Malta - Embedded GNU/Linux Kernel Internals and Device Drivers

Belgique - Embedded GNU/Linux Kernel Internals and Device Drivers

France - Embedded GNU/Linux Kernel Internals and Device Drivers

日本 - Embedded GNU/Linux Kernel Internals and Device Drivers

Australia - Embedded GNU/Linux Kernel Internals and Device Drivers

Malaysia - Embedded GNU/Linux Kernel Internals and Device Drivers

New Zealand - Embedded GNU/Linux Kernel Internals and Device Drivers

Philippines - Embedded GNU/Linux Kernel Internals and Device Drivers

Singapore - Embedded GNU/Linux Kernel Internals and Device Drivers

Thailand - Embedded GNU/Linux Kernel Internals and Device Drivers

Vietnam - Embedded GNU/Linux Kernel Internals and Device Drivers

India - Embedded GNU/Linux Kernel Internals and Device Drivers

Argentina - Embedded GNU/Linux Kernel Internals and Device Drivers

Chile - Embedded GNU/Linux Kernel Internals and Device Drivers

Costa Rica - Embedded GNU/Linux Kernel Internals and Device Drivers

Ecuador - Embedded GNU/Linux Kernel Internals and Device Drivers

Guatemala - Embedded GNU/Linux Kernel Internals and Device Drivers

Colombia - Embedded GNU/Linux Kernel Internals and Device Drivers

México - Embedded GNU/Linux Kernel Internals and Device Drivers

Panama - Embedded GNU/Linux Kernel Internals and Device Drivers

Peru - Embedded GNU/Linux Kernel Internals and Device Drivers

Uruguay - Embedded GNU/Linux Kernel Internals and Device Drivers

Venezuela - Embedded GNU/Linux Kernel Internals and Device Drivers

Polska - Embedded GNU/Linux Kernel Internals and Device Drivers

United Kingdom - Embedded GNU/Linux Kernel Internals and Device Drivers

South Korea - Embedded GNU/Linux Kernel Internals and Device Drivers

Pakistan - Embedded GNU/Linux Kernel Internals and Device Drivers

Sri Lanka - Embedded GNU/Linux Kernel Internals and Device Drivers

Bulgaria - Embedded GNU/Linux Kernel Internals and Device Drivers

Bolivia - Embedded GNU/Linux Kernel Internals and Device Drivers

Indonesia - Embedded GNU/Linux Kernel Internals and Device Drivers

Kazakhstan - Embedded GNU/Linux Kernel Internals and Device Drivers

Moldova - Embedded GNU/Linux Kernel Internals and Device Drivers

Morocco - Embedded GNU/Linux Kernel Internals and Device Drivers

Tunisia - Embedded GNU/Linux Kernel Internals and Device Drivers

Kuwait - Embedded GNU/Linux Kernel Internals and Device Drivers

Oman - Embedded GNU/Linux Kernel Internals and Device Drivers

Slovakia - Embedded GNU/Linux Kernel Internals and Device Drivers

Kenya - Embedded GNU/Linux Kernel Internals and Device Drivers

Nigeria - Embedded GNU/Linux Kernel Internals and Device Drivers

Botswana - Embedded GNU/Linux Kernel Internals and Device Drivers

Slovenia - Embedded GNU/Linux Kernel Internals and Device Drivers

Croatia - Embedded GNU/Linux Kernel Internals and Device Drivers

Serbia - Embedded GNU/Linux Kernel Internals and Device Drivers

Bhutan - Embedded GNU/Linux Kernel Internals and Device Drivers

Nepal - Embedded GNU/Linux Kernel Internals and Device Drivers