Course Code: ldd
Duration: 35 hours
Prerequisites:
- GNU/Linux システムのエンドユーザーとしての基本的な利用経験
- コマンドラインシェルの基本的な利用経験
- ユーザー空間/アプリケーション開発に関する基礎知識
- C言語の中級レベルのプログラミング知識
- 事前に埋め込み GNU/Linux システムアーキテクチャの研修を受講していること(強く推奨)、またはそこで概説されるトピックを十分に理解していること
Overview:
概要
この5日間のトレーニングコースは、実践的な演習と講義を組み合わせて、GNU/Linux カーネルの内部構造とデバイスドライバ開発の概念を理解することを目的としています。短時間で習得できるよう設計されています。理論と現場での訓練を組み合わせることで、GNU/Linux デバイスドライバを作成するために必要なプロセス、概念、コマンドを解説します。
車輪の再発明をせず、経験豊富な講師から学び、ご自身の埋め込み開発プロジェクトで効果的に活用できる実践的な知識とスキルを取得しましょう。
対象者
GNU/Linux デバイスドライバの開発や評価に従事している、またはその関心のあるソフトウェアエンジニア、フィールドエンジニア、(プロジェクト)マネージャー、ハードウェアエンジニアなど。
Course Outline:
イントロダクション
- GNU/Linux の歴史概要
- ライセンス
- カーネルのバージョン管理
- リリースサイクル
- カーネルツリー
- メインライン
- カーネル空間とユーザー空間
- 仕組みとポリシー
- カーネルドライバの代替手段
- RTOS と Linux
メモリ管理
- 仮想メモリと物理メモリ
- カーネル内のメモリ割り当て
- ページ
- ゾーン
- API
- スlab (Slab)
カーネルパッチ
- ライフサイクル
- Git
- カーネルソース
- パッチの作成
- パッチのチェック
- パッチの修正
- パッチの提出
- 監査済みコード
カーネルモジュール
- カーネルソースの取得
- 設定/ビルド/インストール
- デバイスドライバ(静的リンク、ランタイムロード)
- init/exit
- ライセンス
- EXPORT_SYMBOL(GPL)
- 外部ツリーの Makefile
- module-init-tools
- カーネルツリー内のモジュール
- Kconfig
- パラメータの受け渡し
- Sparse
キャラクタデバイスドライバ
- アーキテクチャ
- ユーザー/カーネルインターフェース
- I/O サブシステム
- VFS (Virtual File System)
- sysfs (デバイス、バス、ドライバ、クラス)、
- kobject/ktype/kset
- Linux カーネルドライバモデル
- デバイスファイル
-
キャラクタドライバー
- 初期化
- 登録
- open, release
- cdev, cdev_add, cdev_del,...
- メジャー番号/マイナー番号
- udev, udevmonitor, udevadm
キャラクタデバイスドライバの応用操作
- ioctl
- unlocked ioctl
- compat ioctl
- ユーザー空間 API
- カーネル空間 API
- プロセスのライフサイクル
- スリーピング/ブロック
- スリーピングとウェイクアップ
- ウェイトキュー
- 轟音群問題 (Thundering herd)
- poll/select
カーネルデバッグ
- デバッグ
-
カーネルのデバッグ方法
- Git を使った二分探索によるデバッグ
- カーネルによるデバッグサポート
- printk, syslogd, klogd, ロギングレベル, レートリミット, デバッグレベル, 選択的なサブシステムのデバッグ
- debugfs からのクエリによるデバッグ
- Oops のデバッグ、Oops の発生強制
- Magic SysRq キー
- kgdb/kdb
- JTAG
トレース
- gcov
- lcov
- oprofile
-
ftrace
- nop tracer
- function tracer
- sched switch tracer
- function graph tracer
- dynamic tracer
- trace-cmd/kernelshark
- perf
- LTTng
割り込み (Interrupts)
- 割り込みとポーリング
- 割り込み
- プログラムのセクション
- 再入可能性
- イベント
- 割り込みハンドラ
- 共有割り込みハンドラ
- 割り込みフロー
- 割り込み制御
作業のDeferred (Deferring Work)
- トップハーフ/ボトムハーフ
- ソフトウェア割り込み (Softirqs)
- タスクレット (Tasklets)
- ワークキュー (Work queues)
- スレッド化された割り込み
並行処理
- クリティカルリージョン/セクション
- アトミック演算
- レースコンディション
- 同期
- ロッキング
- ロッキングの解決策
- デッドロック
- コンテンション
- 何をロックすべきか?
-
何を利用できるか?
- アトミック操作
- スピンロック
- リーダーライタースピンロック
- セマフォ
- バイナリセマフォ
- ミューテックス
- リーダーライターセマフォ
- 完了変数 (Completion variables)
- シーケンシャルロック
- プリエンプションの無効化
- 順序保証とバリアー
時間
- HZ
- ジフリーズ (Jiffies)
- 長時間/短時間のディレイ
- カーネルタイマー
ハードウェア I/O
- I/O ポート
- I/O メモリ
- レジスタへのアクセス時の副作用への対応方法
ユーザーとカーネル間の通信
- put/get_user()
- copy_to_user()/copy_from_user()
- カーネル I/O
- メモリマップ
- procfs
- sysfs
- debugfs
- relayfs
- Netlink
- ioctl
ポータビリティ
- ワードサイズ
- オpaqueな型
- 符号付き/符号なし文字
- データのアラインメント
- 整数拡張
- コードの再利用
- エンディアン
- システムティック
- ページサイズ
- 命令の順序付け
- SMP/プリエンプション/ハイメモリ
特に注釈がない限り、本コンテンツおよびコースアウトラインはCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International (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