トレーニング > Linuxカーネル開発 > Linuxデバイスドライバーの開発(LFD430)
インストラクター主導のコース

Developing Linux Device Drivers (LFD430)

このインストラクター主導のLinuxデバイスドライバーコースでは、さまざまなタイプのLinuxデバイスドライバーと、デバイスがカーネルとインターフェイスするための適切なAPIとメソッドについて説明します。

対象者

このコースは、Linuxシステム用のデバイスドライバーを開発する方法を学びたい経験豊富な開発者を対象としています。
少なく読む 続きを読む
学習内容

このコースでは、Linuxで使用されるさまざまな種類のデバイスドライバー、デバイス(ハードウェアとソフトウェアの両方)がカーネルとインターフェイスするための適切なAPI、Linuxドライバーの開発とデバッグに必要なモジュールとテクニックなどについて説明します。
少なく読む 続きを読む
身につく知識

このオンラインLinuxデバイスドライバーコースを修了すると、基盤となるLinuxカーネルの基本的な知識と理解に基づいて、Linuxシステム用のデバイスドライバーを開発できるようになります。
少なく読む 続きを読む
おもなテーマ
すべて展開
すべて折りたたむ
前書き
-目的
-あなたは誰ですか
-Linux Foundation
-LinuxFoundationトレーニング
-認証プログラムとデジタルバッジ
-Linuxディストリビューション
-プラットフォーム
-システムの準備
-仮想マシンの使用とダウンロード
-Linuxでは状況が変わります
-ドキュメントとリンク
予選
-手順
-カーネルバージョン
-カーネルソースとgitの使用
-独自のカーネルのローリング
-ハードウェア
-ステージングツリー
OSSプロジェクトでの作業方法**
-適切に貢献する方法の概要
-セキュリティと品質のためにメインラインの近くにとどまる
-プロジェクトのDNAを研究して理解する
-スクラッチしたいかゆみを把握する
-メンテナとそのワークフローおよび方法を特定する
-早期の入力を取得し、オープンで作業する
-大きなコードダンプではなく、インクリメンタルビットを提供する
-あなたの自我をドアに残してください:痩せてはいけません
-辛抱強く、長期的な関係を築き、助けになりましょう
デバイスドライバ
-デバイスの種類
-メカニズムとポリシー
-バイナリブロブの回避
- パワー管理
-アプリケーションがデバイスドライバーを使用する方法
-デバイスにアクセスするシステムコールをウォークスルーする
-エラー番号
--printk()
-devres:管理対象デバイスリソース
-ラボ
モジュールとデバイスドライバー
-モジュールdriver()マクロ
-モジュールとホットプラグ
-ラボ
メモリ管理と割り当て
-仮想メモリと物理メモリ
-メモリゾーン
-ページテーブル
--kmalloc()
-無料のページを取得()
--vmalloc()
-スラブとキャッシュの割り当て
-ラボ
キャラクターデバイス
-デバイスノード
-メジャー番号とマイナー番号
-メジャー/マイナー番号の予約
-デバイスノードへのアクセス
-デバイスの登録
--udev
-dev printk()およびAssociates
-ファイル操作の構造
-ドライバーエントリポイント
-ファイルとiノードの構造
-その他のキャラクタードライバー
-ラボ
カーネル機能
-カーネルのコンポーネント
-ユーザースペースとカーネルスペース
-システムコールとは何ですか?
-利用可能なシステムコール
-スケジューリングアルゴリズムとタスク構造
-プロセスコンテキスト
-ラボ
ユーザー空間とカーネル空間の間の転送
-スペース間の転送
--put(get)user()およびcopy to(from)user()
-直接転送:カーネルI / Oとメモリマッピング
-カーネルI / O
-ユーザーページのマッピング
-メモリマッピング
--mmap()のユーザースペース関数
-mmap()のドライバーエントリポイント
-カーネルからファイルにアクセスする
-ラボ
割り込みと例外
-割り込みと例外とは何ですか?
-例外
-非同期割り込み
-MSI
-割り込みの有効化/無効化
-割り込み時にできないこと
-IRQデータ構造
-割り込みハンドラのインストール
-ラボ
タイミング測定
-タイミング測定の種類
-ジフィー
-現在の時刻を取得する
-クロックソース
- リアルタイムクロック
-プログラム可能なインターバルタイマー
-タイムスタンプカウンター
-HPET
-ティックレスになる
-ラボ
カーネルタイマー
-遅延の挿入
-カーネルタイマーとは何ですか?
-低解像度タイマー機能
-低解像度タイマーの実装
-高解像度タイマー
-高解像度タイマーの使用
-ラボ
ioctl
-ioctlとは何ですか?
-ioctlのドライバーエントリポイント
-ioctlの定義
-ラボ
統合デバイスモデルとsysfs
-統合デバイスモデル
-基本構造
-実際のデバイス
-sysfs
-ksetとkobjectの例
-ラボ
ファームウェア
-ファームウェアとは何ですか?
-ファームウェアのロード
-ラボ
スリープおよび待機キュー
-待機キューとは何ですか?
-眠りにつくと目を覚ます
-スリープの詳細に移動
-排他的な睡眠
-ウェイクアップの詳細
-ポーリング
-ラボ
割り込み処理:遅延可能関数とユーザードライバー
-上半分と下半分
-Softirqs
-タスクレット
-作業キュー
-新しいワークキューAPI
-カーネルスレッドの作成
-スレッド化された割り込みハンドラ
-ユーザースペースでの割り込み処理
-ラボ
ハードウェアI / O
-バスと港
-メモリバリア
-I / Oポートの登録
-I / Oレジスタからのデータの読み取りと書き込み
-I / Oメモリの割り当てとマッピング
-I / Oメモリへのアクセス
-ユーザーによるアクセス-ioperm()、iopl()、/ dev / port
-ラボ
PCI
-PCIとは何ですか?
-PCIデバイスドライバー
-PCIデバイスの検索
-構成スペースへのアクセス
-I / Oおよびメモリスペースへのアクセス
-PCI Express
-ラボ
プラットフォームドライバー**
-プラットフォームドライバーとは何ですか?
-主なデータ構造
-プラットフォームデバイスの登録
- 例
-ハードコードされたプラットフォームデータ
-新しい方法:デバイスツリー
-ラボ
ダイレクトメモリアクセス(DMA)
-DMAとは何ですか?
-DMAをユーザーに直接送信
-DMAと割り込み
-DMAメモリの制約
-DMAマスク
-DMA API
-DMAプール
-スキャッター/ギャザーマッピング
-ラボ
ネットワークドライバーI:基本
-ネットワークレイヤーとデータカプセル化
-データリンク層
-ネットワークデバイスドライバー
-ロード/アンロード
-開閉
-ラボ
ネットワークドライバーII:データ構造
-ネットデバイスの構造
-ネットデバイスops構造
-skバフ構造
-ソケットバッファ機能
--netdev printk()およびAssociates
-ラボ
ネットワークドライバーIII:送受信
-データの送信とタイムアウト
- データ受信中
- 統計
-ラボ
ネットワークドライバーIV:選択したトピック
-マルチキャスト**
-リンク状態の変化
-ioctls
-NAPIと割り込みの軽減
-NAPIの詳細
-TSOとTOE
-MIIとethtool **
USBドライバー
-USBとは?
-USBトポロジ
-用語
-エンドポイント
-記述子
-USBデバイスクラス
-LinuxでのUSBサポート
-USBデバイスドライバーの登録
-データの移動
-USBドライバーの例
-ラボ
パワー管理
- パワー管理
-ACPIとAPM
-システムの電源状態
-コールバック関数
-ラボ
ブロックドライバー
-ブロックドライバーとは何ですか?
-バッファリング
-ブロックドライバーの登録
-gendiskの構造
-リクエスト処理
-ラボ
Closing and Evaluation Survey
-評価調査
カーネルアーキテクチャI
-UNIXおよびLinux **
-モノリシックカーネルとマイクロカーネル
-オブジェクト指向メソッド
-メインカーネルタスク
-ユーザースペースとカーネルスペース
カーネルプログラミングプレビュー
-タスク構造
-メモリ割り当て
-ユーザースペースとカーネルスペース間でのデータの転送
-リンクリスト
-ジフィー
-ラボ
モジュール
-モジュールとは何ですか?
-ささいな例
-モジュールのコンパイル
-モジュールと組み込み
-モジュールユーティリティ
-自動モジュールロード
-モジュール使用回数
-モジュールライセンス
-シンボルのエクスポート
-シンボルの解決**
-ラボ
カーネルアーキテクチャII
-プロセス、スレッド、およびタスク
-カーネルプリエンプション
-リアルタイムプリエンプションパッチ
-ラボ
カーネルの構成とコンパイル
-カーネルソースのインストールとレイアウト
-カーネルブラウザ
-カーネル構成ファイル
-カーネル構築とMakefiles
--initrdおよびinitramfs
-ラボ
カーネルスタイルと一般的な考慮事項
-コーディングスタイル
-一般的なカーネルルーチンとメソッドの使用
-カーネルパッチの作成
-まばら
-possible()とlikely()の使用
-ポータブルコードの記述、CPU、32/64ビット、エンディアン
-SMPの作成
-ハイメモリシステム向けの書き込み
- パワー管理
-セキュリティを念頭に置いて
-ラボ
競合状態と同期方法
-並行性と同期の方法
-不可分操作
-ビット演算
-スピンロック
-Seqlocks
-プリエンプションの無効化
-ミューテックス
-セマフォ
-完了関数
-リードコピーアップデート(RCU)
-参照カウント
-ラボ
メモリアドレッシング
-仮想メモリ管理
-MMUとTLBがあるシステムとないシステム
-メモリアドレス
-高メモリと低メモリ
-メモリゾーン
-特別なデバイスノード
-NUMA
-ページング
-ページテーブル
-ページ構造
-ラボ
メモリ割り当て
-ページのリクエストとリリース
- バディシステム
-スラブとキャッシュの割り当て
-メモリプール
--kmalloc()
--vmalloc()
-早期割り当てとbootmem()
-メモリの最適化
-ラボ

**
これらのセクションは、一部または
オプションとして全体として。背景の参照が含まれています
資料、専門トピック、または高度な主題。の
インストラクターは、それらに応じてカバーするかしないかを選択できます
教室での経験と時間の制約。
前提条件
このコースを最大限に活用するには、以下が必要です。

モジュールの作成、コンパイル、ロード、アンロード、同期プリミティブの使用、メモリの割り当てと管理の基本など、基本的なカーネルインターフェイスとメソッドの知識。 LFD420 Linuxカーネルの内部と開発。クラスの前に、クラス前の準備資料が提供されます。

レビュー
2021年10月
インストラクターと彼のスライドデッキは両方とも非常に役に立ちました。特にインストラクターは、彼の指導に非常に精通していて明確だったからです。
2021年8月
本とサンプルコードは、このクラスからの本当の永続的な持ち帰りでした。
2021年8月
存在するすべての概要が非常によくわかります。また、ラボの助けを借りて、いくつかの変更を加えた後、本番環境でドライバーが実際にどのように見えるかを知ることができます。
2021年8月
インストラクターの知識!
2021年8月
どうもありがとう!これは素晴らしいクラスでした。
2021年8月
コースに提供された資料はうまく設計されており、上級レベルのトピックは私の期待に応えました。ズーム会議の配信品質も十分でした。
2021年8月
それは私が私の誤解を発見した場所だったので、ラボは私にもっと教えてくれました。
2021年8月
経験豊富なインストラクターに、メモの重要な部分(「落とし穴」と「必ず覚えておいてください」..)を指摘してもらうのが好きでした。間違った道を進む前に、問題と制限が何であるかを理解することは本当に役立ちます。
2021年8月
資料はうまくレイアウトされているようで、ラボは便利だと思いました。
2021年8月
インストラクターの親しみやすさと質問への対応。
2021年7月
ジョン(インストラクター)がトレーニングにもたらした専門知識が気に入りました。私は彼の図が好きでした。これはいくつかの概念を理解するのに大いに役立ちました。実際、これはコードフローにも拡張でき、より視覚的な抽象化を示すことができます。
2021年7月
ラボは私たちが物事を理解するのに役立つように非常にうまく設計されていると思います。
2020年10月
資料は徹底していて、インストラクターはとても整理されているようでした。
2020年9月
基本的な知識をクリアして構築するのに役立つ、最初のレッスンの詳細な説明が好きでした。
2020年9月
素材の広がりが良かったです。