Developing Linux Device Drivers (LFD430)

Linuxシステム用のデバイスドライバーを開発する方法を学びます。このコースでは、さまざまなタイプのLinuxデバイスドライバーと、デバイスがカーネルとインターフェイスするための適切なAPIとメソッドについて説明します。

$3250 申し込む 見積もりを取得

コースの概要

このコースでは、基礎となるLinuxカーネルの基本的な知識と理解に基づいて、Linuxシステム用のデバイスドライバーを開発する方法を学びます。

もっと見る

あなたが学びます:

  • Linuxで使用されるさまざまな種類のデバイスドライバー
  • デバイス(ハードウェアとソフトウェアの両方)がカーネルとインターフェースする適切なAPI。
  • Linuxドライバーの開発とデバッグに必要なモジュールとテクニック
  • もっと。

このコースの情報は、主要なLinuxディストリビューションで機能します。

スケジュール

インストラクター主導
5/4/2020 - 5/7/2020
バーチャル
保証付きこのコースは最小クラスサイズに達し、予定日に実行されることが保証されています。
$3250 カートに追加 見積もりを作成する
インストラクター主導
6/29/2020 - 7/2/2020
バーチャル
$3250 カートに追加 見積もりを作成する
インストラクター主導
8/3/2020 - 8/6/2020
バーチャル
$3250 カートに追加 見積もりを作成する
インストラクター主導
9/14/2020 - 9/17/2020
バーチャル
$3250 カートに追加 見積もりを作成する
あなたのスケジュールに合うコースがない場合は、こちらを参照してください。 パートナーが提供するコース>

おもなテーマ

  1. 前書き
    • 目的
    • あなたは誰ですか
    • The Linux Foundation
    • Linux Foundationのトレーニング
    • 認定プログラムとデジタルバッジ
    • Linuxディストリビューション
    • プラットフォーム
    • システムの準備
    • 仮想マシンの使用とダウンロード
    • Linuxで物事が変わる
    • ドキュメントとリンク
    • コース登録
  2. 予選
    • 手続き
    • カーネルバージョン
    • カーネルソースと使用 ギット
    • 独自のカーネルのローリング
    • ハードウェア
    • ステージングツリー
  3. OSSプロジェクトでの作業方法**
    • 適切に貢献する方法の概要
    • セキュリティと品質のためにメインラインの近くにとどまる
    • プロジェクトDNAの研究と理解
    • スクラッチしたいものを把握する
    • メンテナーとそのワークフローと方法を特定する
    • 初期の入力を取得し、オープンで作業する
    • 大きなコードダンプではなく、増分ビットを提供する
    • あなたのエゴをドアに置いてください:薄くなるな
    • 忍耐強く、長期的な関係を築き、助けになる
  4. デバイスドライバ
    • デバイスの種類
    • メカニズムとポリシー
    • バイナリブロブの回避
    • パワー管理
    • アプリケーションがデバイスドライバーを使用する方法
    • デバイスにアクセスするシステムコールを歩く
    • エラー番号
    • printk()
    • デブレス:管理対象デバイスのリソース
    • ラボ
  5. モジュールとデバイスドライバー
    • module_driver() マクロ
    • モジュールとホットプラグ
    • ラボ
  6. メモリ管理と割り当て
    • 仮想メモリと物理メモリ
    • メモリゾーン
    • ページテーブル
    • kmalloc()
    • __get_free_pages()
    • vmalloc()
    • スラブとキャッシュの割り当て
    • ラボ
  7. キャラクターデバイス
    • デバイスノード
    • メジャー番号とマイナー番号
    • メジャー/マイナー番号の予約
    • デバイスノードへのアクセス
    • デバイスの登録
    • udev
    • dev_printk() およびアソシエイツ
    • file_operations 構造
    • ドライバーエントリポイント
    • ファイル および iノード 構造
    • その他のキャラクタードライバー
    • ラボ
  8. カーネル機能
    • カーネルのコンポーネント
    • ユーザースペースとカーネルスペース
    • システムコールとは何ですか?
    • 利用可能なシステムコール
    • スケジューリングアルゴリズムとタスク構造
    • プロセスコンテキスト
    • ラボ
  9. ユーザー空間とカーネル空間の間の転送
    • スペース間の移動
    • put(get)_user() および copy_to(from)_user()
    • 直接転送:カーネルI / Oおよびメモリマッピング
    • カーネルI / O
    • ユーザーページのマッピング
    • メモリマッピング
    • のユーザースペース関数 mmap()
    • のドライバーエントリポイント mmap()
    • カーネルからファイルにアクセスする
    • ラボ
  10. 割り込みと例外
    • 割り込みと例外とは何ですか?
    • 例外
    • 非同期割り込み
    • MSI
    • 割り込みの有効化/無効化
    • 割り込み時にできないこと
    • IRQデータ構造
    • 割り込みハンドラーのインストール
    • ラボ
  11. タイミング測定
    • タイミング測定の種類
    • ジフィー
    • 現在の時刻を取得する
    • クロックソース
    • リアルタイムクロック
    • プログラム可能なインターバルタイマー
    • タイムスタンプカウンター
    • HPET
    • ティックレスへ
    • ラボ
  12. カーネルタイマー
    • 遅延の挿入
    • カーネルタイマーとは何ですか?
    • 低解像度タイマー機能
    • 低解像度タイマーの実装
    • 高解像度タイマー
    • 高解像度タイマーの使用
    • ラボ
  13. ioctls
    • なに ioctls?
    • のドライバーエントリポイント ioctls
    • 定義する ioctls
    • ラボ
  14. 統合デバイスモデルと sysfs
    • 統合デバイスモデル
    • 基本構造
    • 実デバイス
    • sysfs
    • ksetおよびkobjectの例
    • ラボ
  15. ファームウェア
    • ファームウェアとは何ですか?
    • ファームウェアのロード
    • ラボ
  16. スリープおよび待機キュー
    • 待機キューとは何ですか?
    • 寝て目覚める
    • スリープ状態に移行する
    • 排他的な睡眠
    • ウェイクアップの詳細
    • ポーリング
    • ラボ
  17. 割り込み処理:遅延可能関数とユーザードライバー
    • 上半分と下半分
    • Softirqs
    • タスクレット
    • 作業キュー
    • 新しいワークキューAPI
    • カーネルスレッドの作成
    • スレッド割り込みハンドラー
    • ユーザー空間での割り込み処理
    • ラボ
  18. ハードウェアI / O
    • バスと港
    • メモリーバリア
    • I / Oポートの登録
    • I / Oレジスタからのデータの読み取りと書き込み
    • I / Oメモリの割り当てとマッピング
    • I / Oメモリへのアクセス
    • ユーザーによるアクセス- ioperm()、iopl()、/ dev / port
    • ラボ
  19. PCI
    • PCIとは何ですか?
    • PCIデバイスドライバー
    • PCIデバイスの特定
    • 構成スペースへのアクセス
    • I / Oおよびメモリ空間へのアクセス
    • PCI Express
    • ラボ
  20. プラットフォームドライバー**
    • プラットフォームドライバーとは何ですか?
    • 主なデータ構造
    • プラットフォームデバイスの登録
    • ハードコードされたプラットフォームデータ
    • 新しい方法:デバイスツリー
    • ラボ
  21. ダイレクトメモリアクセス(DMA)
    • DMAとは何ですか?
    • ユーザーに直接DMA
    • DMAと割り込み
    • DMAメモリの制約
    • DMAマスク
    • DMA API
    • DMAプール
    • 散布/収集マッピング
    • ラボ
  22. ネットワークドライバーI:基本
    • ネットワーク層とデータのカプセル化
    • データリンク層
    • ネットワークデバイスドライバー
    • ロード/アンロード
    • 開閉
    • ラボ
  23. ネットワークドライバーII:データ構造
    • net_device 構造
    • net_device_ops 構造
    • sk_buff 構造
    • ソケットバッファ関数
    • netdev_printk() およびアソシエイツ
    • ラボ
  24. ネットワークドライバーIII:送受信
    • データとタイムアウトの送信
    • データ受信中
    • 統計
    • ラボ
  25. ネットワークドライバーIV:選択したトピック
    • マルチキャスト**
    • リンク状態の変化
    • ioctls
    • NAPIと割り込みの軽減
    • NAPIの詳細
    • TSOおよびTOE
    • MIIおよびethtool **
  26. USBドライバー
    • USBとは何ですか?
    • USBトポロジー
    • 用語
    • エンドポイント
    • 記述子
    • USBデバイスクラス
    • LinuxでのUSBサポート
    • USBデバイスドライバーの登録
    • データの移動
    • USBドライバーの例
    • ラボ
  27. パワー管理
    • パワー管理
    • ACPI および APM
    • システム電源状態
    • コールバック関数
    • ラボ
  28. ブロックドライバー
    • ブロックドライバーとは
    • バッファリング
    • ブロックドライバーの登録
    • gendisk 構造
    • リクエスト処理
    • ラボ
  29. Closing and Evaluation Survey
    • 評価調査

付録

  1. カーネルアーキテクチャI
    • UNIXおよびLinux **
    • モノリシックカーネルとマイクロカーネル
    • オブジェクト指向メソッド
    • メインカーネルタスク
    • ユーザースペースとカーネルスペース
  2. カーネルプログラミングプレビュー
    • タスク構造
    • メモリ割り当て
    • ユーザー空間とカーネル空間の間でデータを転送する
    • リンクリスト
    • ジフィー
    • ラボ
  3. モジュール
    • モジュールとは何ですか?
    • 些細な例
    • モジュールのコンパイル
    • モジュールと組み込み
    • モジュールユーティリティ
    • モジュールの自動ロード/アンロード
    • モジュール使用数
    • モジュールのライセンス
    • シンボルのエクスポート
    • シンボルの解決**
    • {C.11Labs
  4. カーネルアーキテクチャII
    • プロセス、スレッド、およびタスク
    • カーネルプリエンプション
    • リアルタイムプリエンプションパッチ
    • ラボ
  5. カーネルの構成とコンパイル
    • カーネルソースのインストールとレイアウト
    • カーネルブラウザ
    • カーネル構成ファイル
    • カーネルの構築とメイクファイル
    • initrdおよびinitramfs
    • ラボ
  6. カーネルスタイルと一般的な考慮事項
    • コーディングスタイル
    • 汎用カーネルルーチンとメソッドの使用
    • カーネルパッチの作成
    • まばらな
    • を使用して ありそうな() および ありそうもない()
    • ポータブルコード、CPU、32/64ビット、エンディアンネスの記述
    • SMPの作成
    • ハイメモリシステム用の書き込み
    • パワー管理
    • セキュリティを念頭に置く
    • {F.11Labs
  7. 競合状態と同期方法
    • 並行性と同期の方法
    • 原子操作
    • ビット操作
    • スピンロック
    • シークロックス
    • プリエンプションを無効にする
    • ミューテックス
    • セマフォ
    • 完了関数
    • 読み取りコピー更新(RCU)
    • {G.11参照カウント
    • {G.12Labs
  8. メモリアドレッシング
    • 仮想メモリ管理
    • MMUおよびTLBを使用するシステムと使用しないシステム
    • メモリアドレス
    • ハイメモリとローメモリ
    • メモリゾーン
    • 特別なデバイスノード
    • NUMA
    • ページング
    • ページテーブル
    • ページ 構造
    • {H.11Labs
  9. メモリ割り当て
    • ページのリクエストとリリース
    • バディシステム
    • スラブとキャッシュの割り当て
    • メモリプール
    • kmalloc()
    • vmalloc()
    • 早期配分と bootmem()
    • メモリの最適化
    • ラボ

**これらのセクションは、一部または全体をオプションと見なすことができます。これらには、背景の参考資料、専門的なトピック、または高度な主題が含まれています。インストラクターは、教室での経験と時間の制約に応じて、それらをカバーするかしないかを選択できます。

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

コメント

Technical depth, presentation and teaching。」 2020年3月

 

Comprehensive overview of all relevant interfaces, methods and components。」 2020年3月

 

The instructor was very well prepared。」 2020年3月

 

Hands-on labs – I feel more confident working directly with the kernel code。」 2020年3月

構成

実施方法

ライブオンライン(仮想)

実施方法

ライブ(教室)

含まれているもの

  • インストラクター主導の4日間の授業時間
  • 演習と課題
  • リソースとコースマニュアル
  • 修了証
  • デジタルバッジ
  • 無料のChromebook

経験レベル

   中級

コースの評価

   

アドバイス

5人以上でトレーニングを受けるなら?
企業向けの団体割引を受ける>

Chromebook
$3250 申し込む 見積もりを取得