トレーニング > Linuxカーネル開発 > Linux Kernel Internals and Development (LFD420)
インストラクター主導のコース

Linux Kernel Internals and Development (LFD420)

Linuxカーネルの開発方法を学びます。このインストラクター主導のコースでは、Linuxの設計方法、カーネルを開発するための基本的な方法、およびLinux開発者コミュニティと効率的に連携する方法について学びます。 Linuxカーネルについて学ぶことに興味がある場合は、これがこのテーマの最も確実なコースです。

対象者

このコースは、経験豊富なプログラマーがLinuxカーネルをしっかりと理解できるように作られています。学生は、Cプログラミング言語、ls、grep、tarなどの基本的なLinux(UNIX)ユーティリティに習熟し、利用可能なテキストエディタ(emacs、viなど)に慣れている必要があります。
少なく読む 続きを読む
学習内容

このコースでは、Linuxの構築方法、カーネルアルゴリズムの仕組み、ハードウェアとメモリの管理、モジュール化手法とデバッグ、カーネル開発者コミュニティの操作方法、およびLinuxを効率的に使用する方法などについて学びます。
少なく読む 続きを読む
身につく知識

Linuxカーネルの背後にある理論と哲学、およびLinuxカーネルコードを開発してデバッグする能力について詳細に理解することで、このコースを終了します。
少なく読む 続きを読む
おもなテーマ
すべて展開
すべて折りたたむ
はじめに
- 目的
- あなたについて
- The Linux Foundation
-著作権および機密情報なし
- Linux Foundationトレーニング
- 認証プログラムとデジタル バッジ
- Linuxディストリビューション
- プラットフォーム
- システムの準備
-仮想マシンの使用とダウンロード
- Linux とオープン ソース プロジェクトの変化
- ドキュメントとリンク
準備
- プロシージャ
-カーネルバージョン
-カーネルソースとgitの使用
- 演習
OSSプロジェクトでの作業方法**
- 適切に貢献するには
-コードがどこから来ているかを知る:DCOとCLA
- メインラインの近くでセキュリティと品質を保つ
- プロジェクトのDNAを研究して理解する
- スクラッチするべき部分を見つけ出す
- メンテナーおよび彼らのワークフローやメソッドを特定する
- 早い段階で意見を訊き、オープンに作業する
- 大きなコード ダンプではなく、差分のコードをコントリビュートする
- エゴを捨てよう。敏感にならないように。
- 忍耐強く、長期的な関係を築き、助けの手を差し伸べよう
カーネルアーキテクチャI
-UNIXおよびLinux **
-モノリシックカーネルとマイクロカーネル
-オブジェクト指向メソッド
-メインカーネルコンポーネント
-ユーザースペースとカーネルスペース
カーネルプログラミングプレビュー
-エラー番号とカーネル出力の取得
-タスク構造
-メモリ割り当て
-ユーザースペースとカーネルスペース間でのデータの転送
-オブジェクト指向の継承-一種の
-リンクリスト
-文字列から数値への変換
-ジフィー
- 演習
モジュール
-モジュールとは何ですか?
-ささいな例
-モジュールのコンパイル
-モジュールと組み込み
-モジュールユーティリティ
-自動モジュールロード
-モジュール使用回数
-モジュール構造
-モジュールライセンス
-シンボルのエクスポート
-シンボルの解決**
- 演習
カーネルアーキテクチャII
-プロセス、スレッド、およびタスク
-プロセスコンテキスト
-カーネルプリエンプション
-リアルタイムプリエンプションパッチ
-動的カーネルパッチ
-実行時の代替案**
-新しいプラットフォームへの移植**
- 演習
カーネルの初期化
-システム初期化の概要
-システムブート
-組み込みシステム用のDasU-Boot **
-カーネルの起動
カーネルの構成とコンパイル
-カーネルソースのインストールとレイアウト
-カーネルブラウザ
-カーネル構成ファイル
-カーネル構築とMakefiles
--initrdおよびinitramfs
- 演習
システムコール
-システムコールとは何ですか?
-利用可能なシステムコール
-システムコールの実装方法
-新しいシステムコールの追加
- 演習
カーネルスタイルと一般的な考慮事項
-コーディングスタイル
--kernel-doc **
-一般的なカーネルルーチンとメソッドの使用
-カーネルパッチの作成
-まばら
-possible()とlikely()の使用
-ポータブルコードの記述、CPU、32/64ビット、エンディアン
-SMPの作成
-ハイメモリシステム向けの書き込み
- パワー管理
-セキュリティを念頭に置いて
-ユーザースペースヘッダーとカーネルスペースヘッダーの混合**
- 演習
競合状態と同期方法
-並行性と同期の方法
-不可分操作
-ビット演算
-スピンロック
-Seqlocks
-プリエンプションの無効化
-ミューテックス
-セマフォ
-完了関数
-リードコピーアップデート(RCU)
-参照カウント
- 演習
SMPとスレッド
-SMPカーネルとモジュール
-プロセッサ親和性
-CPUSETS
-SMPアルゴリズム-スケジューリング、ロックなど
-CPUごとの変数**
- 演習
プロセス
-プロセスとは何ですか?
-タスク構造体
-ユーザープロセスとスレッドの作成
-カーネルスレッドの作成
-プロセスとスレッドの破棄
-カーネル内からユーザースペースプロセスを実行する
- 演習
プロセスの制限と機能**
-プロセス制限
-機能
- 演習
監視とデバッグ
-Debuginfoパッケージ
-トレースとプロファイリング
-sysctl
-SysRqキー
--oopsメッセージ
-カーネルデバッガー
--debugfs
- 演習
スケジューリング
-主なスケジューリングタスク
-SMP
-スケジューリングの優先順位
-システムコールのスケジューリング
-2.4のschedule()関数**
-O(1)スケジューラ**
-タイムスライスと優先順位
-負荷分散
-優先順位の逆転と優先度継承**
-CFSスケジューラ
-優先順位とフェアタイムの計算
-クラスのスケジューリング
-スケジューラの詳細
- 演習
メモリアドレッシング
-仮想メモリ管理
-MMUとTLBがあるシステムとないシステム
-メモリアドレス
-高メモリと低メモリ
-メモリゾーン
-特別なデバイスノード
-NUMA
-ページング
-ページテーブル
-ページ構造
-カーネル同じページのマージ(KSM)**
- 演習
巨大なページ
-巨大なページのサポート
-透明な巨大なページ
--libhugetlbfs
- 演習
メモリ割り当て
-ページのリクエストとリリース
- バディシステム
-スラブとキャッシュの割り当て
-メモリプール
--kmalloc()
--vmalloc()
-早期割り当てとbootmem()
-メモリの最適化
- 演習
プロセスのアドレス空間
-ユーザーメモリとアドレススペースの割り当て
-ページのロック
-メモリ記述子とリージョン
- アクセス権
-メモリ領域の割り当てと解放
-ページフォールト
- 演習
ディスクキャッシュとスワッピング
-キャッシュ
-ページキャッシュの基本
-スワッピングとは何ですか?
-スワップエリア
-ページのインとスワッピング
-Swappinessの制御
-スワップキャッシュ
-リバースマッピング**
-OOMキラー
- 演習
デバイスドライバ**
-デバイスの種類
-デバイスノード
-キャラクタードライバー
- 例
- 演習
シグナル
-シグナルとは何ですか?
-利用可能な信号
-信号のシステムコール
-シグアクション
-シグナルとスレッド
-カーネルがシグナルハンドラをインストールする方法
-カーネルがシグナルを送信する方法
-カーネルがシグナルハンドラーを呼び出す方法
-リアルタイム信号
- 演習
まとめと評価サーベイ
- 評価サーベイ

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

Cプログラミング言語、ls、grep、tarなどの基本的なLinux(UNIX)ユーティリティに習熟し、利用可能なテキストエディタ(emacs、viなど)に慣れていること。主要なLinuxディストリビューションの経験は役に立ちますが、厳密には必要ありません。

レビュー
2022年8月
インストラクターは、素材を生き生きとさせる多くの物語を持っています。ユーモアもまた、記憶を大きく助けます。コースを進むにつれて、カーネルがどのように分割され、元に戻されるかが気に入っています。
2022年8月
非常に知識豊富なインストラクター。フランクは聞くのが楽しくて、本当に彼のことをよく知っていました!彼は、複雑なトピックについて議論しながら、明るく楽しい雰囲気を維持する素晴らしい方法を持っています.機会があれば、間違いなく彼と一緒に別のクラスを受講します。
2022年8月
Linux カーネルと開発の基礎を教えてくれました。それを面白くした教授がいることに対するボーナス。
2022年8月
カーネル開発の包括的な鳥瞰図は驚くべきものでした。
2022年7月
フランクは素晴らしく、退屈さを打ち破る物語を語るのが好きで、彼の配信をリスナーにとってより興味深いものにします。彼にもっと時間を与えてください!
2022年7月
フランクはすごかった!
2022年7月
4日間のコースにしては、盛りだくさんの内容でした。すべてを覚えているわけではありませんが、少なくとも利用可能なリソースと実装がわかっているので、簡単に本に戻ったり、ドキュメントを参照したりできます。インストラクターはさまざまなトピックについて非常に精通しており、内部/カーネル開発の経験があまりない人でも簡単に理解できるようにすべてを説明しました.
2022年7月
収録されている資料のレベルは予想を超えています。フランクは知識が豊富で、トピックを提供することに非常に熱心です。
2022年7月
フランクがコースにもたらしたエネルギーと、カーネルに取り組んだ経験から得たカーネルの内部に関する広範な知識を楽しみました。この資料は、後で取り組む予定のプロジェクトに非常に関連しており、後で Linux カーネル コードを作成する際に何を学ぶべきかについての基礎知識を提供してくれます。