このインストラクター主導のコースは、経験豊富なプログラマーに組み込みLinuxシステム用のデバイスドライバーを開発する方法を示し、Linuxカーネルの基本的な理解と知識を与えることを目的としています。 RISC-Vベースのエミュレートされた開発ターゲットを備えたハンズオンラボにより、学生はクラスで学んだことを実践できます。
Developing Embedded Linux Device Drivers (LFD435)

対象者
このコースは、組み込みLinuxシステム用のデバイスドライバーを開発する必要がある経験豊富な開発者を対象としています。
少なく読む
続きを読む

学習内容
この資料を習得すると、Linuxで使用されるさまざまな種類のデバイスドライバーに慣れ、デバイスドライバーを作成するときに使用される適切なAPIの多くが紹介されます。これらの概念を説明するためのラボはすべて、ARMハードウェアで実行され、組み込みターゲット用のドライバーのクロスコンパイルと開発に慣れ親しむことができます。
少なく読む
続きを読む

身につく知識
このコースでは、組み込みLinuxシステム用のデバイスドライバーを開発する準備を行います。
少なく読む
続きを読む

- あなたについて
- The Linux Foundation
-著作権および機密情報なし
- Linux Foundationトレーニング
- 認証プログラムとデジタル バッジ
- Linuxディストリビューション
- システムの準備
- Linuxにおける変化
- ドキュメントとリンク

-カーネルバージョン
-カーネルソースとgitの使用
-ハードウェア
-ステージングツリー
- 演習

-コードがどこから来ているかを知る:DCOとCLA
- メインラインの近くでセキュリティと品質を保つ
- プロジェクトのDNAを研究して理解する
- スクラッチするべき部分を見つけ出す
- メンテナーおよび彼らのワークフローやメソッドを特定する
- 早い段階で意見を訊き、オープンに作業する
- 大きなコード ダンプではなく、差分のコードをコントリビュートする
- エゴを捨てよう。敏感にならないように。
- 忍耐強く、長期的な関係を築き、助けの手を差し伸べよう

-組み込みのLinuxディストリビューションクロスコンパイラ
-リナロ
-CodeSourcery
--crosstool-ng
-ビルドルート
-OpenEmbedded
-Yocto Project
- 演習

-なぜQEMUを使用するのですか?
-エミュレートされたアーキテクチャ
-画像フォーマット
- 演習

-SWをuSDカードに取り込む
-フラッシュからの起動
-なぜuSDカードを使用するのは悪い考えですか?
- 演習

-開発するためのより簡単な方法
-TFTPおよびNFSrootを使用したブートシーケンス
-ラボの目的
- 演習

- 演習

-メカニズムとポリシー
-バイナリブロブの回避
- パワー管理
-アプリケーションがデバイスドライバーを使用する方法
-デバイスにアクセスするシステムコールをウォークスルーする
-エラー番号
--printk()
-devres:管理対象デバイスリソース
- 演習

-モジュールとホットプラグ
- 演習

-メモリゾーン
-ページテーブル
--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の定義
- 演習

-基本構造
-実際のデバイス
-sysfs
-ksetとkobjectの例
- 演習

-ファームウェアのロード
- 演習

-眠りにつくと目を覚ます
-スリープの詳細に移動
-排他的な睡眠
-ウェイクアップの詳細
-ポーリング
- 演習

-Softirqs
-タスクレット
-作業キュー
-新しいワークキューAPI
-カーネルスレッドの作成
-スレッド化された割り込みハンドラ
-ユーザースペースでの割り込み処理
- 演習

-I / Oメモリの割り当てとマッピング
-I / Oメモリへのアクセス

-DMAをユーザーに直接送信
-DMAと割り込み
-DMAメモリの制約
-DMAマスク
-DMA API
-DMAプール
-スキャッター/ギャザーマッピング
- 演習

-NAND vs. NOR vs. eMMC
-ドライバーおよびユーザーモジュール
-フラッシュファイルシステム

-USBトポロジ
-用語
-エンドポイント
-記述子
-USBデバイスクラス
-LinuxでのUSBサポート
-USBデバイスドライバーの登録
-データの移動
-USBドライバーの例
- 演習


-モノリシックカーネルとマイクロカーネル
-オブジェクト指向メソッド
-メインカーネルコンポーネント
-ユーザースペースとカーネルスペース

-メモリ割り当て
-ユーザースペースとカーネルスペース間でのデータの転送
-オブジェクト指向の継承-一種の
-リンクリスト
-ジフィー
- 演習

-ささいな例
-モジュールのコンパイル
-モジュールと組み込み
-モジュールユーティリティ
-自動モジュールロード
-モジュール使用回数
-モジュールライセンス
-シンボルのエクスポート
-シンボルの解決**
- 演習

-カーネルプリエンプション
-リアルタイムプリエンプションパッチ
- 演習

-カーネルブラウザ
-カーネル構成ファイル
-カーネル構築とMakefiles
--initrdおよびinitramfs
- 演習

-一般的なカーネルルーチンとメソッドの使用
-カーネルパッチの作成
-まばら
-possible()とlikely()の使用
-ポータブルコードの記述、CPU、32/64ビット、エンディアン
-SMPの作成
-ハイメモリシステム向けの書き込み
- パワー管理
-セキュリティを念頭に置いて
- 演習

-不可分操作
-ビット演算
-スピンロック
-Seqlocks
-プリエンプションの無効化
-ミューテックス
-セマフォ
-完了関数
-リードコピーアップデート(RCU)
-参照カウント
- 演習

-MMUとTLBがあるシステムとないシステム
-メモリアドレス
-高メモリと低メモリ
-メモリゾーン
-特別なデバイスノード
-NUMA
-ページング
-ページテーブル
-ページ構造
- 演習

- バディシステム
-スラブとキャッシュの割り当て
-メモリプール
--kmalloc()
--vmalloc()
-早期割り当てとbootmem()
-メモリの最適化
- 演習
これらのセクションは、部分的にまたは全体を
オプションとして考えることができます。これらのセクションには、
背景となる参考資料、専門的なトピック、または高度なテーマが含まれています。
講師は、教室での経験や時間の制約に応じて、
これらをカバーするかしないかを選択することができます。
前提条件
モジュールの作成、コンパイル、ロード、アンロード、同期プリミティブの使用方法、LFD420(Kernel Internals and Development)が提供するメモリの割り当てと管理の基本など、基本的なカーネルインターフェイスとメソッドの知識。クラスの前に、クラス前の準備資料が提供されます。
2022年12月
全体的にコースは素晴らしく、最新の教材でいっぱいで、インストラクターは自分が話していることをよく知っていて、教材は非常によく書かれていました.私はそれに非常に満足しています。ジョンは各レッスンの初めにジョークを言い続けるはずです。彼らは素晴らしいです!
2022年12月
John Bonesio は、テンポの良い、詳細で、非常に知識豊富な資料のプレゼンテーションを提供しました。頻繁に行われるラボと組み合わせて、このコースを十分に楽しみました。コースは、毎日の開始時に John' のジョークで締めくくられました。
2022年12月
ヘルパー スクリプトと環境には非常に感銘を受けました。 Makefile、インクルード パス、およびコンパイラ環境変数との摩擦は、単純に取り除かれました。 John' のさまざまなシステム部分のアナロジーが好きでした。
2022年12月
セットアップが簡単で、関連資料が利用できるハンズオン演習。
2022年12月
資料は最新のもので、現在の環境を反映しています。実際にどのように機能するかを見ることができたので、ラボは完璧でした。インストラクターは、エラーが発生したときに多くのことを助け、非常に知識が豊富で、すべての質問に答え、すべての複雑なトピックを簡単な言葉で説明しました。
2022年12月
ジョンは非常に知識が豊富で、ラボで参加者をチェックし続け、問題に対する適切な解決策を提供してくれました。彼は環境をとても簡単でフレンドリーに保ち、とても親しみやすいです。
2022年12月
コースは非常によく構成されており、図は概念を明確にするのに大いに役立ちました.
2022年10月
仕事で必要だったので、デバイス ツリーの章に多くの時間を割いてくれたことをとてもうれしく思います。
2022年10月
インストラクターは、現在の Linux カーネル開発者に関する多くの関連する有用な逸話と、Linux の一部が現在のようになっている理由の歴史を持っていました。
2022年10月
インストラクターは非常に知識が豊富で、私の質問に完全に答えてくれ、とても役に立ちました。
2022年10月
研究室が一番楽しかったです。彼らは私が多くのことを学ぶのを助けてくれました。実際、初めてだったことを考えると、いくつかの概念をよく理解できました.私はそれらを通して働くことを楽しみました。
2022年10月
インストラクターは親切で有益で、とても上手に話しました。
2022年10月
専用の時間ですべてを機能させたので、ラボを行っています。