レガシーガジェット研究所

気になったことのあれこれ。

Linux Kernelへのパッチ作成及び送信手順

1. 変更を行う

2. コミットをrebaseし纏める

git rebase -i [commit id]

3. パッチの作成

git format-patch [commit id]

4. パッチの確認

./scripts/checkpatch.pl [patch file]

ここで何らかのエラーが出力される場合には修正を行う。

  • 変数宣言の空白行の有無

空白行を追加する。

WARNING: Missing a blank line after declarations
#21: FILE: kernel/sched/core.c:6706:
+       u64 quota, period;
+       if (cfs_percent < 0)
  • Signed-off-byの有無

コミット(git commit)時に-sのオプションを追加することでコミットに付加することが可能。git commit --amend -sなどコミット後の変更も可能。

ERROR: Missing Signed-off-by: line(s)

5. パッチを送信するメンテナの確認

./scripts/get_maintainer.pl [patch file]

出力例:

$ ./scripts/get_maintainer.pl 0001-feat-CFS-Bandwidth-add-an-interface-for-CFS-Bandwidt.patch
Ingo Molnar <mingo@redhat.com> (maintainer:SCHEDULER)
Peter Zijlstra <peterz@infradead.org> (maintainer:SCHEDULER)
linux-kernel@vger.kernel.org (open list:SCHEDULER)

6. パッチの送信

送信者以外にもメーリングリストや自身へのCCは推奨されている。

コマンド例:

$ git send-email \
--to='mingo@redhat.com'
--cc-cmd='./scripts/get_maintainer.pl --norolestats 0001-feat-CFS-Bandwidth-add-an-interface-for-CFS-Bandwidt.patch' \
--cc='peterz@infradead.org' \
--cc='linux-kernel@vger.kernel.org' \
--cc='princeontrojanhorse@gmail.com' \
0001-feat-CFS-Bandwidth-add-an-interface-for-CFS-Bandwidt.patch

参考

Linux Kernel ~ メモリ管理 ~

概要

「詳解Linux Kernel」を参考にVersion 2.6.11のコードリーディングをしていく。CPUのアーキテクチャは書籍に沿ってIntelx86とする。

今回はメモリ管理について見ていく。

メモリ管理

x86ではセグメンテーションとページングによって物理メモリが管理され、RAMの一部はカーネルコードや静的なカーネルデータによって永続的に使用される。残りのRAMは動的に確保及び解放が行われる。

参考: https://www.amazon.co.jp/dp/487311313X

続きを読む

Linux Kernel~ プロセススケジューリングにおけるロードバラシング ~

概要

「詳解Linux Kernel」を参考にVersion 2.6.11のコードリーディングをしていく。CPUのアーキテクチャは書籍に沿ってIntelx86とする。

今回はプロセススケジューリングにおけるロードバラシングについて見ていく。

マルチプロセッサ環境でのランキューにおけるロードバランシング

Linuxでは対称型マルチプロセッサ(SMP)モデルを採用しており、基本的には全てのCPUが平等である。しかしマルチプロセッサと一口に言ってもハードウェアによって異なる性質を持っておりスケジューラはその違いに合わせて処理方式を変更する。

続きを読む

Linux Kernel ~ プロセススケジューリング ~

概要

「詳解Linux Kernel」を参考にVersion 2.6.11のコードリーディングをしていく。CPUのアーキテクチャは書籍に沿ってIntelx86とする。

今回はプロセススケジューリングについて見ていく。

概要

Linuxでは複数のプロセス間を非常に短いインターバルで切り替えることで、複数のプロセスを同時に実行しているように見せる(マルチプロセス)。いつどのプロセスに切り替えるのか、プロセススケジューリングと呼ばれる処理を見ていく。

参考: https://www.adamh.cz/blog/2016/07/context-switch-on-the-arm-cortex-m0/

続きを読む

Linux Kernel ~ ソフトウェアタイマと遅延処理 ~

概要

「詳解Linux Kernel」を参考にVersion 2.6.11のコードリーディングをしていく。CPUのアーキテクチャは書籍に沿ってIntelx86とする。

今回はソフトウェアタイマと遅延処理について見ていく。

続きを読む