- 具備基本的GNU/Linux系統終端用戶使用經驗
- 熟悉命令行操作
- 具備用戶空間/應用開發的基礎知識
- 具備中級C語言編程能力
- 建議先參加嵌入式GNU/Linux系統架構課程,或對其中涉及的主題有深入理解
課程描述
本課程爲期5天,結合實踐操作與理論講解,深入探討GNU/Linux內核內部機制與設備驅動開發。課程旨在幫助學員快速掌握相關知識。我們通過理論與實踐相結合的方式,詳細講解編寫GNU/Linux設備驅動所需的過程、概念與命令。
無需重複造輪子,從經驗豐富的講師那裏學習,掌握實用的知識,並能在自己的嵌入式開發項目中有效應用。
適合人羣
對GNU/Linux設備驅動開發感興趣或負責相關開發與評估的人員,如軟件工程師、現場工程師、(項目)經理、硬件工程師等。
引言
- GNU/Linux的簡要歷史
- 許可協議
- 內核版本管理
- 發佈週期
- 內核樹
- 主線內核
- 內核空間與用戶空間
- 機制與策略
- 內核驅動替代方案
- RTOS與Linux對比
內存管理
- 虛擬內存與物理內存
- 內核中的內存分配
- 頁
- 區域
- API
- slab分配器
內核補丁
- 生命週期
- git
- 內核源代碼
- 創建補丁
- 檢查補丁
- 修復補丁
- 提交補丁
- 代碼審計
內核模塊
- 獲取內核源代碼
- 配置/編譯/安裝
- 設備驅動(靜態鏈接,運行時加載)
- init/exit
- 許可協議
- EXPORT SYMBOL GPL
- 外部模塊的Makefile
- module-init-tools
- 內核樹中的模塊
- Kconfig
- 參數傳遞
- sparse
字符驅動
- 架構
- 用戶/內核接口
- I/O子系統
- VFS
- sysfs(設備、總線、驅動、類)
- kobject/ktype/kset
- Linux內核驅動模型
- 設備文件
-
字符驅動
- 初始化
- 註冊
- open、release
- cdev、cdev_add、cdev_del等
- 主/次設備號
- udev、udevmonitor、udevadm
高級字符驅動操作
- ioctl
- 非鎖定ioctl
- 兼容ioctl
- 用戶空間API
- 內核空間API
- 進程生命週期
- 睡眠/阻塞
- 睡眠/喚醒
- 等待隊列
- 驚羣效應
- poll/select
內核調試
- 調試
-
內核調試
- 使用git進行二分查找
- 內核的調試支持
- printk、syslogd、klogd、日誌級別、速率限制、調試級別、選擇子系統調試
- 通過debugfs查詢進行調試
- oops調試、觸發oops
- Magic SysRq鍵
- kgdb/kdb
- JTAG
追蹤
- gcov
- lcov
- oprofile
-
ftrace
- nop追蹤器
- 函數追蹤器
- 調度切換追蹤器
- 函數圖追蹤器
- 動態追蹤器
- trace-cmd/kernelshark
- perf
- LTTng
中斷
- 中斷與輪詢
- 中斷
- 程序段
- 可重入性
- 事件
- 中斷處理程序
- 共享中斷處理程序
- 中斷流程
- 中斷控制
延遲工作
- 上半部與下半部
- 軟中斷
- 任務隊列
- 工作隊列
- 線程化中斷
併發
- 臨界區/段
- 原子操作
- 競態條件
- 同步
- 鎖
- 鎖的解決方案
- 死鎖
- 競爭
- 鎖什麼?
-
可以使用什麼?
- 原子操作
- 自旋鎖
- 讀寫自旋鎖
- 信號量
- 二進制信號量
- 互斥鎖
- 讀寫信號量
- 完成變量
- 順序鎖
- 禁用搶佔
- 順序與屏障
時間
- HZ
- Jiffies
- 長/短延遲
- 內核定時器
硬件I/O
- I/O端口
- I/O內存
- 如何處理訪問寄存器時的副作用?
用戶-內核通信
- put(get)_user()
- copy to(from)_user()
- 內核I/O
- 內存映射
- procfs
- sysfs
- debugfs
- relayfs
- netlink
- ioctl
可移植性
- 字長
- 不透明類型
- 有符號/無符號字符
- 數據對齊
- 整型提升
- 代碼複用
- 字節序
- 系統時鐘
- 頁大小
- 指令順序
- SMP/搶佔/高內存
除非另有說明,本課程內容及大綱均遵循署名-非商業性使用-相同方式共享 4.0 國際 (CC BY-NC-SA 4.0) 許可協議。
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
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
Uzbekistan - Embedded GNU/Linux Kernel Internals and Device Drivers
US Government - Embedded GNU/Linux Kernel Internals and Device Drivers