トレーニング > 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プロジェクトでの作業方法**
適切に貢献する方法の概要
セキュリティと品質のためにメインラインの近くにとどまる
プロジェクトDNAの研究と理解
スクラッチしたいものを把握する
メンテナーとそのワークフローと方法を特定する
初期の入力を取得し、オープンで作業する
大きなコードダンプではなく、増分ビットを提供する
ドアにあなたのエゴを残してください:薄皮にしないでください
忍耐強く、長期的な関係を築き、助けになる
カーネルアーキテクチャI
UNIXおよびLinux **
モノリシックカーネルとマイクロカーネル
オブジェクト指向メソッド
メインカーネルタスク
ユーザースペースとカーネルスペース
カーネルモードLinux **
カーネルプログラミングプレビュー
エラー番号とカーネル出力の取得
タスク構造
メモリ割り当て
ユーザー空間とカーネル空間の間でデータを転送する
リンクリスト
文字列から数値への変換
ジフィー
ラボ
モジュール
モジュールとは何ですか?
些細な例
モジュールのコンパイル
モジュールと組み込み
モジュールユーティリティ
モジュールの自動ロード/アンロード
モジュール使用数
モジュール構造体
モジュールのライセンス
シンボルのエクスポート
シンボルの解決**
ラボ
カーネルアーキテクチャII
プロセス、スレッド、およびタスク
プロセスコンテキスト
カーネルプリエンプション
リアルタイムプリエンプションパッチ
動的カーネルパッチ
実行時の代替手段**
新しいプラットフォームへの移植**
ラボ
カーネルの初期化
システム初期化の概要
システム起動
組み込みシステム向けDas U-Boot **
カーネルの構成とコンパイル
カーネルソースのインストールとレイアウト
カーネルブラウザ
カーネル構成ファイル
カーネルの構築とメイクファイル
initrdおよびinitramfs
ラボ
システムコール
システムコールとは何ですか?
利用可能なシステムコール
システムコールの実装方法
新しいシステムコールを追加する
ラボ
カーネルスタイルと一般的な考慮事項
コーディングスタイル
kernel-doc **
汎用カーネルルーチンとメソッドの使用
カーネルパッチの作成
まばらな
Like()およびLikely()の使用
ポータブルコード、CPU、32/64ビット、エンディアンネスの記述
SMPの作成
ハイメモリシステム用の書き込み
パワー管理
セキュリティを念頭に置く
ユーザーヘッダーとカーネルスペースヘッダーの混在**
ラボ
競合状態と同期方法
並行性と同期の方法
原子操作
ビット操作
スピンロック
シークロックス
プリエンプションを無効にする
ミューテックス
セマフォ
完了関数
読み取りコピー更新(RCU)
参照カウント
ラボ
SMPとスレッド
SMPカーネルとモジュール
プロセッサアフィニティ
CPUSETS
SMPアルゴリズム–スケジューリング、ロックなど
CPUごとの変数**
ラボ
プロセス
プロセスとは何ですか?
task_struct
ユーザープロセスとスレッドの作成
カーネルスレッドの作成
プロセスとスレッドの破棄
カーネル内からのユーザー空間プロセスの実行
ラボ
プロセスの制限と機能**
プロセス制限
能力
ラボ
監視とデバッグ
Debuginfoパッケージ
トレースとプロファイリング
sysctl
SysRqキー
oopsメッセージ
カーネルデバッガー
debugfs
ラボ
スケジューリング
主なスケジューリングタスク
SMP
スケジューリングの優先順位
システムコールのスケジューリング
2.4のschedule()関数
O(1)スケジューラー
タイムスライスと優先順位
負荷分散
優先度の逆転と優先度の継承**
CFSスケジューラー
優先順位とフェアタイムの計算
スケジューリングクラス
CFSスケジューラの詳細
ラボ
メモリアドレッシング
仮想メモリ管理
MMUおよびTLBを使用するシステムと使用しないシステム
メモリアドレス
ハイメモリとローメモリ
メモリゾーン
特別なデバイスノード
NUMA
ページング
ページテーブル
ページ構造
カーネル同一ページ結合(KSM)**
ラボ
巨大なページ
巨大なページのサポート
libhugetlbfs
透明な巨大ページ
ラボ
メモリ割り当て
ページのリクエストとリリース
バディシステム
スラブとキャッシュの割り当て
メモリプール
kmalloc()
vmalloc()
早期割り当てとbootmem()
メモリの最適化
ラボ
プロセスのアドレス空間
ユーザーメモリとアドレススペースの割り当て
ページのロック
メモリ記述子と領域
アクセス権
メモリ領域の割り当てと解放
ページ違反
ラボ
ディスクキャッシュとスワッピング
キャッシュ
ページキャッシュの基本
スワッピングとは何ですか?
スワップ領域
ページの入れ替え
Swappinessの制御
スワップキャッシュ
逆マッピング**
OOMキラー
ラボ
デバイスドライバ**
デバイスの種類
デバイスノード
キャラクタードライバー

ラボ
信号
シグナルとは何ですか?
利用可能な信号
シグナルのシステムコール
シグアクション
シグナルとスレッド
カーネルがシグナルハンドラをインストールする方法
カーネルが信号を送信する方法
カーネルがシグナルハンドラを呼び出す方法
リアルタイム信号
ラボ
Closing and Evaluation Survey
評価調査

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

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

レビュー
Jan 2021
I learned lots of new things, and got insight into things where I had only scratched the surface so far.
2020年12月
トレーニング資料は最新の状態に保たれています。
2020年12月
ラボとラボソリューション。
2020年12月
インストラクターはこの分野の専門家であり、私はそれから多くのことを学びました。
2020年12月
最も関連性のあるカーネルの側面に関する優れた概要。与えられたコースと資料は、より深い自習のための良い出発点です。
2020年12月
私はすでにいくつかのドライバーを書いていますが、カーネル内部のいくつかは私にとって曖昧でした。このコースは、カーネル内部のいくつかを本当によく理解するのに役立ちました。
2020年12月
私はたくさんの新しいことを学び、テクノロジーにもっと自信を持っています。
2020年12月
一般的なオーバーホール、質問への優れた回答、有能なインストラクター、そして冷静なコース。
2020年12月
このコースでは、Linuxカーネルの内部を幅広くカバーし、実践的なラボ演習を行います。
2020年12月
トレーナーはとても親切で親切でした。