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

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 - Integridade do Kernel GNU/Linux Embarcado e Drivers de Dispositivo

Canada - Embedded GNU/Linux Kernel Internals and Device Drivers

中国 - 嵌入式GNU/Linux内核与设备驱动

香港 - 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