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

Developing Linux Device Drivers (LFD430)

Linux デバイス ドライバーの開発方法を学び、イノベーションの世界に足を踏み入れましょう。このコースでは、需要の高い専門知識を身につけ、ハードウェアとソフトウェアの統合や高度なシステム開発におけるやりがいのあるキャリアにつなげることができます。

対象者

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

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

このオンラインLinuxデバイスドライバーコースを修了すると、基盤となるLinuxカーネルの基本的な知識と理解に基づいて、Linuxシステム用のデバイスドライバーを開発できるようになります。
折りたたむ 続きを読む
おもなテーマ
すべて展開
すべて折りたたむ
はじめに
- 目的
- 対象受講者
- Linux Foundation
-著作権および機密情報なし
- Linux Foundationが提供するトレーニング
- 認定プログラムおよびデジタルバッジ
- Linuxディストリビューション
- プラットフォーム
- システムの準備
-仮想マシンの使用とダウンロード
- Linux とオープン ソース プロジェクトの進化の影響
- ドキュメントとリンク
準備
- プロシージャ
-カーネルバージョン
-カーネルソースとgitの使用
-独自のカーネルのローリング
-ハードウェア
-ステージングツリー
- 演習
OSSプロジェクトでの作業方法**
- 適切に貢献するには
-コードがどこから来ているかを知る:DCOとCLA
- メインラインの近くでセキュリティと品質を保つ
- プロジェクトのDNAを研究して理解する
- スクラッチするべき部分を見つけ出す
- メンテナーおよび彼らのワークフローやメソッドを特定する
- 早い段階で意見を訊き、オープンに作業する
- 大きなコード ダンプではなく、差分のコードをコントリビュートする
- エゴはドアに置いておいてください。
- 忍耐強く、長期的な関係を築き、助けの手を差し伸べよう
デバイスドライバー
-デバイスの種類
-メカニズムとポリシー
-バイナリブロブの回避
- パワー管理
-アプリケーションがデバイスドライバーを使用する方法
-デバイスにアクセスするシステムコールをウォークスルーする
-エラー番号
--printk()
-devres:管理対象デバイスリソース
- 演習
モジュールとデバイスドライバー
- texttt {module_driver() マクロ
-モジュールとホットプラグ
- 演習
メモリ管理と割り当て
-仮想メモリと物理メモリ
-メモリゾーン
-ページテーブル
--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とは何ですか?
-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
- 演習
ネットワークドライバーI:基本
-ネットワークレイヤーとデータカプセル化
-データリンク層
-ネットワークデバイスドライバー
-ロード/アンロード
-開閉
- 演習
ネットワークドライバーII:データ構造
- net_device 構造体
- net_device_ops 構造体
- sk_buff構造体
-ソケットバッファ機能
- texttt {netdev_printk() とアソシエイツ
- 演習
ネットワークドライバーIII:送受信
-データの送信とタイムアウト
- データ受信中
- 統計
- 演習
ネットワークドライバーIV:選択したトピック
-マルチキャスト**
-リンク状態の変化
-ioctls
-NAPIと割り込みの軽減
-NAPIの詳細
-TSOとTOE
-MIIとethtool **
USBドライバー
-USBとは?
-USBトポロジ
- 用語解説
-エンドポイント
-記述子
-USBデバイスクラス
-LinuxでのUSBサポート
-USBデバイスドライバーの登録
-データの移動
-USBドライバーの例
- 演習
パワー管理
- パワー管理
-ACPIとAPM
-システムの電源状態
-コールバック関数
- 演習
ブロックドライバー
-ブロックドライバーとは何ですか?
-バッファリング
-ブロックドライバーの登録
-gendiskの構造
-リクエスト処理
- 演習
最後に
- 評価サーベイ
カーネルアーキテクチャI
-UNIXおよびLinux **
-モノリシックカーネルとマイクロカーネル
-オブジェクト指向メソッド
-メインカーネルコンポーネント
-ユーザースペースとカーネルスペース
カーネルプログラミングプレビュー
-タスク構造
-メモリ割り当て
-ユーザースペースとカーネルスペース間でのデータの転送
-オブジェクト指向の継承-一種の
-リンクリスト
-ジフィー
- 演習
モジュール
-モジュールとは何ですか?
-ささいな例
-モジュールのコンパイル
-モジュールと組み込み
-モジュール ユーティリティ
-自動モジュールロード
-モジュール使用回数
-モジュールライセンス
-シンボルのエクスポート
-シンボルの解決**
- 演習
カーネルアーキテクチャII
-プロセス、スレッド、およびタスク
-カーネルプリエンプション
-リアルタイムプリエンプションパッチ
- 演習
カーネルの構成とコンパイル
-カーネルソースのインストールとレイアウト
-カーネルブラウザ
-カーネル構成ファイル
-カーネル構築とMakefiles
--initrdおよびinitramfs
- 演習
カーネルスタイルと一般的な考慮事項
-コーディングスタイル
-一般的なカーネルルーチンとメソッドの使用
-カーネルパッチの作成
-まばら
-possible()とlikely()の使用
-ポータブルコードの記述、CPU、32/64ビット、エンディアン
-SMPの作成
-ハイメモリシステム向けの書き込み
- パワー管理
-セキュリティを念頭に置いて
- 演習
競合状態と同期方法
-並行性と同期の方法
-不可分操作
-ビット演算
-スピンロック
-Seqlocks
-プリエンプションの無効化
-ミューテックス
-セマフォ
-完了関数
-リードコピーアップデート(RCU)
-参照カウント
- 演習
メモリアドレッシング
-仮想メモリ管理
-MMUとTLBがあるシステムとないシステム
-メモリアドレス
-高メモリと低メモリ
-メモリゾーン
-特別なデバイスノード
-NUMA
-ページング
-ページテーブル
-ページ構造
- 演習
メモリ割り当て
-ページのリクエストとリリース
- バディシステム
-スラブとキャッシュの割り当て
-メモリプール
--kmalloc()
--vmalloc()
-早期割り当てとbootmem()
-メモリの最適化
- 演習

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

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

レビュー
2024年12月
図は本当に役に立ちましたし、実験もとても気に入りました。
2024年12月
ラボは本当に気に入りました。Linux コードを実際に体験でき、Linux 全般に関する知識をテストできました。
2024年12月
このクラスでは、私がこれまでに見た中で最も詳細にネットワーク ドライバーについて説明しています。
2024年12月
ネットワーク ドライバーのセクションは本当に興味深いものでした。
2024年9月
研究室で過ごす時間が長かったのがよかったです。
2024年5月
インストラクターは素晴らしく、知識が豊富で、経験豊富で、機知に富んでいます。
2024年5月
コースを開始するために提供されるツール (genmake など)、ラボで作業できるさまざまなフォーム、VM、講演者の明瞭さなど。
2024年5月
講師が描いた図と説明は役立ち、いくつかのトピックを理解するのに役立ちました。
2024 年 3 月
ポールは明らかにこの分野の専門家です。彼の頭脳を選び、洞察を聞くことができたのは非常に貴重でした。
2024 年 3 月
これにより、短期間で高度に技術的なトピックが大量に取り上げられ、オフラインで時間をかけてコース終了後に自分のペースで学習するためのすべてのツールが提供されました。残念ながら、研究室はまだ表面をかろうじて触っているだけで、十分な長さのスイートスポットにいます。