Developing Embedded Linux Device Drivers (LFD435)

このコースは、経験豊富なプログラマーに組み込みLinuxシステム用のデバイスドライバーを開発する方法を示し、Linuxカーネルに関する基本的な理解と知識を身に付けるように設計されています。

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

コースの概要

組み込みLinuxデバイスドライバーの開発は、経験豊富なプログラマーにLinuxシステム用のデバイスドライバーの開発方法を示し、Linuxカーネルに関する基本的な理解と知識を与えるように設計されています。

もっと見る

この資料を習得すると、Linuxで使用されるさまざまな種類のデバイスドライバーに精通し、デバイスドライバーを作成するときに使用する適切なAPIの多くを紹介します。これらの概念を説明するためのラボはすべて、開発者が組み込みターゲット用のドライバーのクロスコンパイルと開発に慣れるために、ARMハードウェアで実行されます。付属の開発キット(保持するもの)は、TFTPおよびNFSroot技術を使用したカーネルドライバーのテストを説明するために使用されます。

カーネルの内部とアルゴリズムについて説明しますが、通常はデバイスドライバーで使用される機能のみを詳しく調べます。スケジューリング、メモリ管理などの詳細は、カーネルに焦点を当てた別のコースにより適切に属します。

スケジュール

インストラクター主導
7/20/2020 - 7/23/2020
アトランタ
$3250 カートに追加 見積もりを作成する
あなたのスケジュールに合うコースがない場合は、こちらを参照してください。 パートナーが提供するコース>

おもなテーマ

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

付録

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

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

前提知識

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

コメント

The way the instructor answers student questions. He is very knowledgeable and helpful。」 2020年3月

 

The material, though very difficult was exactly what I needed。」 2020年3月

 

The instructor has expert knowledge。」 2020年3月

 

The instructor is a great communicator。」 2020年3月

 

The content is very well written and difficult to find anywhere else。」 2020年3月

 

A lot of gaps in my Linux understanding were filled. I have a much better appreciation of device drivers and how to build them. Instructor was exceptionally knowledgeable and a real expert。」 2020年3月

構成

実施方法

ライブ(教室)

含まれているもの

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

経験レベル

   中級

コースの評価

   

アドバイス

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

Chromebook

トレーニングと無料のChromebookを入手してください。

Linux Foundationのトレーニングを受けるということは、直接そのソースから最良のオープンソース トレーニングを受けるということです。Linux Foundationインストラクター主導トレーニング コースを今申し込むと、Chromebookが無料で提供されます。トレーニング成果を向上のため最大限に活用してください。

もっと読む