Course Code: ldd
Duration: 35 hours
Prerequisites:
- 基本熟悉作爲終端用戶使用GNU/Linux系統
- 基本熟悉命令行shell
- 具備用戶空間/應用開發的基礎知識
- 具備中級C語言編程知識
- 建議先參加嵌入式GNU/Linux系統架構課程(強烈推薦!),或對該課程所涵蓋的主題有較好的理解
Overview:
描述
本課程爲期5天,通過動手練習與講解相結合,深入探討GNU/Linux內核與設備驅動開發的概念。課程旨在讓您快速上手,通過理論與實踐相結合的方式,介紹編寫GNU/Linux設備驅動所需的過程、概念和命令。
不要重複造輪子,而是向經驗豐富的培訓師學習,帶回家實際應用的知識,並能夠在自己的嵌入式開發項目中有效運用。
適合人羣?
對開發或評估GNU/Linux設備驅動感興趣或負責相關工作的人員,如軟件工程師、現場工程師、(項目)經理、硬件工程師。
Course Outline:
簡介
- 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
- unlocked ioctl
- compat ioctl
- 用戶空間API
- 內核空間API
- 進程生命週期
- 睡眠/阻塞
- 睡眠/喚醒
- 等待隊列
- 驚羣效應
- poll/select
內核調試
- 調試
- 內核調試
- 使用git進行二分查找
- 內核的調試支持
- printk syslogd, klogd, 日誌級別, 速率限制, 調試級別, 選擇性子系統調試
- 通過debugfs查詢調試
- oops調試, 斷言oops
- Magic SysRq Key
- kgdb/kdb
- JTAG
跟蹤
- gcov
- lcov
- oprofile
- ftrace
- nop tracer
- function tracer
- sched switch tracer
- function graph tracer
- dynamic tracer
- 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 - Integridade do Kernel GNU/Linux Embarcado e Drivers de Dispositivo
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
USA - Embedded GNU/Linux Kernel Internals and Device Drivers
Österreich - Interne Struktur des GNU/Linux-Kernels und Gerätetreiber
Schweiz - Interne Struktur des GNU/Linux-Kernels und Gerätetreiber
Deutschland - Interne Struktur des GNU/Linux-Kernels und Gerätetreiber
Czech Republic - Interní struktura jádra GNU/Linuxu a ovladače zařízení
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 - Εσώτερο Λειτουργικό των Πυρήνων GNU/Linux και Οδηγοί Συσκευών
Magyarország - Beágyazott GNU/Linux Kernel Belső Működése és Eszközmeghajtók
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 - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados
Italia - Interni del kernel GNU/Linux e driver di dispositivo
Lithuania - Embedded GNU/Linux Kernel Internals and Device Drivers
Nederland - Inwendige werking van de GNU/Linux-kernel en apparaatstuurprogramma's
Norway - Inne i Linux-kjernen for innbygde systemer og enhetsdrivere
Portugal - Integridade do Kernel GNU/Linux Embarcado e Drivers de Dispositivo
România - Internele Nucleului GNU/Linux și Driverele de Dispozitive
Sverige - Inbyggd GNU/Linux-kärninterna funktioner och enhetsdrivrutiner
Türkiye - Gömülü GNU/Linux Çekirdek İç Yapıları ve Cihaz Sürücüleri
Malta - Embedded GNU/Linux Kernel Internals and Device Drivers
Belgique - Internalités du noyau GNU/Linux et pilotes de périphériques intégrés
France - Internalités du noyau GNU/Linux et pilotes de périphériques intégrés
日本 - 埋め込み GNU/Linux カーネルの内部構造とデバイスドライバ
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 - Kiến trúc Nhân GNU/Linux Nhúng và Trình điều khiển Thiết bị
India - Embedded GNU/Linux Kernel Internals and Device Drivers
Argentina - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados
Chile - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados
Costa Rica - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados
Ecuador - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados
Guatemala - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados
Colombia - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados
México - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados
Panama - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados
Peru - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados
Uruguay - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados
Venezuela - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados
Polska - Wewnętrzne mechanizmy jądra GNU/Linux i sterowniki urządzeń
United Kingdom - Embedded GNU/Linux Kernel Internals and Device Drivers
South Korea - 임베디드 GNU/리눅스 커널 내부 구조 및 장치 드라이버
Pakistan - Embedded GNU/Linux Kernel Internals and Device Drivers
Sri Lanka - Embedded GNU/Linux Kernel Internals and Device Drivers
Bulgaria - Вградени вътрешни принципи на ядрото GNU/Linux и драйвери на устройства
Bolivia - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados
Indonesia - Embedded GNU/Linux Kernel Internals and Device Drivers
Kazakhstan - Embedded GNU/Linux Kernel Internals and Device Drivers
Moldova - Internele Nucleului GNU/Linux și Driverele de Dispozitive
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