トレーニング > Linuxカーネル開発 > Linuxカーネルの内部と開発(LFD420)
インストラクター主導のコース

Linuxカーネルの内部と開発(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ディストリビューションの経験は役に立ちますが、厳密には必要ありません。

レビュー
2020年5月
このコースは本当に最新です。
2020年5月
ライブデモが好きで、詳細に触れながらカバーされる資料の量。
2020年5月
教材が好きで、講師はLinuxカーネル開発についての良い知識を共有しました。
2020年6月
ジョンの知識がとても好きだった。コースマニュアルは本当に素晴らしいです、そして私はラボのソリューションを調べることが本当に好きです。
2020年6月
ホワイトボードの議論は、主要な概念を理解するのに非常に役立ちました。インストラクターは、詳細な回答とともにフォローアップのすべての質問に辛抱強く答えました。
2020年6月
ホワイトボードの絵は役に立ちました。インストラクターは、質問に答えるのに時間をかけながら、クラスを順調に進め、何とかスケジュールを守ることができました。
2020年6月
講師は常にどんな質問にも喜んで答えてくれました。ホワイトボードの絵は、いくつかのトピックをよりよく理解するのに役立ちました。
2020年6月
ラボはよく考えられており、実際に学習を実施します。私たちのインストラクターは素晴らしかった。
2020年6月
私は間違いなくこのコースを他の人に勧めます。始めたときよりもずっと良い知識を身につけました。
2020年8月
John'の図と説明は素晴らしく、質問に答えるのに時間をかけながら、クラスを順調に進めることができました。素材はとても良いです。