このインストラクター主導のLinuxデバイスドライバーコースでは、さまざまなタイプのLinuxデバイスドライバーと、デバイスがカーネルとインターフェイスするための適切なAPIとメソッドについて説明します。
Developing Linux Device Drivers (LFD430)
- 対象受講者
- Linux Foundation
-著作権および機密情報なし
- Linux Foundationが提供するトレーニング
- 認定プログラムおよびデジタルバッジ
- Linuxディストリビューション
- プラットフォーム
- システムの準備
-仮想マシンの使用とダウンロード
- Linux とオープン ソース プロジェクトの進化の影響
- ドキュメントとリンク
-カーネルバージョン
-カーネルソースとgitの使用
-独自のカーネルのローリング
-ハードウェア
-ステージングツリー
- 演習
-コードがどこから来ているかを知る:DCOとCLA
- メインラインの近くでセキュリティと品質を保つ
- プロジェクトのDNAを研究して理解する
- スクラッチするべき部分を見つけ出す
- メンテナーおよび彼らのワークフローやメソッドを特定する
- 早い段階で意見を訊き、オープンに作業する
- 大きなコード ダンプではなく、差分のコードをコントリビュートする
- エゴはドアに置いておいてください。
- 忍耐強く、長期的な関係を築き、助けの手を差し伸べよう
-メカニズムとポリシー
-バイナリブロブの回避
- パワー管理
-アプリケーションがデバイスドライバーを使用する方法
-デバイスにアクセスするシステムコールをウォークスルーする
-エラー番号
--printk()
-devres:管理対象デバイスリソース
- 演習
-モジュールとホットプラグ
- 演習
-メモリゾーン
-ページテーブル
--kmalloc()
- __get_free_pages()
--vmalloc()
-スラブとキャッシュの割り当て
- 演習
-メジャー番号とマイナー番号
-メジャー/マイナー番号の予約
-デバイスノードへのアクセス
-デバイスの登録
--udev
- texttt {dev_printk() とアソシエイツ
- file_operations 構造体
-ドライバーエントリポイント
-ファイルとiノードの構造
-その他のキャラクタードライバー
- 演習
-ユーザースペースとカーネルスペース
-システムコールとは何ですか?
-利用可能なシステムコール
-スケジューリングアルゴリズムとタスク構造
-プロセスコンテキスト
- 演習
- copy_to(from)_user()
-直接転送:カーネルI / Oとメモリマッピング
-カーネルI / O
-ユーザーページのマッピング
-メモリマッピング
--mmap()のユーザースペース関数
-mmap()のドライバーエントリポイント
-カーネルからファイルにアクセスする
- 演習
-例外
-非同期割り込み
-MSI
-割り込みの有効化/無効化
-割り込み時にできないこと
-IRQデータ構造
-割り込みハンドラのインストール
- 演習
-ジフィー
-現在の時刻を取得する
-クロックソース
- リアルタイムクロック
-プログラム可能なインターバルタイマー
-タイムスタンプカウンター
-HPET
-ティックレスになる
- 演習
-カーネルタイマーとは何ですか?
-低解像度タイマー機能
-低解像度タイマーの実装
-高解像度タイマー
-高解像度タイマーの使用
- 演習
-ioctlのドライバーエントリポイント
-ioctlの定義
- 演習
-基本構造
-実際のデバイス
-sysfs
-ksetとkobjectの例
- 演習
-ファームウェアのロード
- 演習
-眠りにつくと目を覚ます
-スリープの詳細に移動
-排他的な睡眠
-ウェイクアップの詳細
-ポーリング
- 演習
-Softirqs
-タスクレット
-作業キュー
-新しいワークキューAPI
-カーネルスレッドの作成
-スレッド化された割り込みハンドラ
-ユーザースペースでの割り込み処理
- 演習
-メモリバリア
-I / Oポートの登録
-I / Oレジスタからのデータの読み取りと書き込み
-I / Oメモリの割り当てとマッピング
-I / Oメモリへのアクセス
-ユーザーによるアクセス-ioperm()、iopl()、/ dev / port
- 演習
-PCIデバイスドライバー
-PCIデバイスの検索
-構成スペースへのアクセス
-I / Oおよびメモリスペースへのアクセス
-PCI Express
- 演習
-主なデータ構造
-プラットフォームデバイスの登録
- 例
-ハードコードされたプラットフォームデータ
-新しい方法:デバイスツリー
- 演習
-DMAをユーザーに直接送信
-DMAと割り込み
-DMAメモリの制約
-DMAマスク
-DMA API
- 演習
-データリンク層
-ネットワークデバイスドライバー
-ロード/アンロード
-開閉
- 演習
- net_device_ops 構造体
- sk_buff構造体
-ソケットバッファ機能
- texttt {netdev_printk() とアソシエイツ
- 演習
- データ受信中
- 統計
- 演習
-リンク状態の変化
-ioctls
-NAPIと割り込みの軽減
-NAPIの詳細
-TSOとTOE
-MIIとethtool **
-USBトポロジ
- 用語解説
-エンドポイント
-記述子
-USBデバイスクラス
-LinuxでのUSBサポート
-USBデバイスドライバーの登録
-データの移動
-USBドライバーの例
- 演習
-ACPIとAPM
-システムの電源状態
-コールバック関数
- 演習
-バッファリング
-ブロックドライバーの登録
-gendiskの構造
-リクエスト処理
- 演習
-モノリシックカーネルとマイクロカーネル
-オブジェクト指向メソッド
-メインカーネルコンポーネント
-ユーザースペースとカーネルスペース
-メモリ割り当て
-ユーザースペースとカーネルスペース間でのデータの転送
-オブジェクト指向の継承-一種の
-リンクリスト
-ジフィー
- 演習
-ささいな例
-モジュールのコンパイル
-モジュールと組み込み
-モジュール ユーティリティ
-自動モジュールロード
-モジュール使用回数
-モジュールライセンス
-シンボルのエクスポート
-シンボルの解決**
- 演習
-カーネルプリエンプション
-リアルタイムプリエンプションパッチ
- 演習
-カーネルブラウザ
-カーネル構成ファイル
-カーネル構築とMakefiles
--initrdおよびinitramfs
- 演習
-一般的なカーネルルーチンとメソッドの使用
-カーネルパッチの作成
-まばら
-possible()とlikely()の使用
-ポータブルコードの記述、CPU、32/64ビット、エンディアン
-SMPの作成
-ハイメモリシステム向けの書き込み
- パワー管理
-セキュリティを念頭に置いて
- 演習
-不可分操作
-ビット演算
-スピンロック
-Seqlocks
-プリエンプションの無効化
-ミューテックス
-セマフォ
-完了関数
-リードコピーアップデート(RCU)
-参照カウント
- 演習
-MMUとTLBがあるシステムとないシステム
-メモリアドレス
-高メモリと低メモリ
-メモリゾーン
-特別なデバイスノード
-NUMA
-ページング
-ページテーブル
-ページ構造
- 演習
- バディシステム
-スラブとキャッシュの割り当て
-メモリプール
--kmalloc()
--vmalloc()
-早期割り当てとbootmem()
-メモリの最適化
- 演習
これらのセクションは、部分的にまたは全体を
オプションとして考えることができます。これらのセクションには、
背景となる参考資料、専門的なトピック、または高度なテーマが含まれています。
講師は、教室での経験や時間の制約に応じて、
これらをカバーするかしないかを選択することができます。
モジュールの作成、コンパイル、ロード、アンロード、同期プリミティブの使用、メモリの割り当てと管理の基本など、基本的なカーネルインターフェイスとメソッドの知識(これらは LFD420 Linux Kernel Internals and Developmentで学べます)。クラスの前に、クラス前の準備資料が提供されます。