linux-kernel-architecture について
Linux カーネルのソースを調べる開発者向けのアーキテクチャガイドです。起動フロー、主要サブシステム、initcall の順序、ソースの場所を示し、ドライバーやシステムコール、割り込みの追跡に役立ちます。
主な機能
- 01カーネル起動フローの概要
- 02サブシステムのパスと主要構造体
- 03initcall 順序の参照
- 04ソースと設定の検索
活用シーン
- 01カーネル機能の実装箇所の特定
- 02起動から init やドライバープローブまでの追跡
- 03システムコールや割り込み経路の追跡
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mohitmishra786/ low-level-dev-skills --skill linux-kernel-architectureインストール後、Claude Code で/linux-kernel-architectureを入力して読み込まれたか確認します。
詳細
Linux カーネルアーキテクチャ
目的
Linux カーネルの全体像を把握するための見取り図を提供します。起動シーケンス、主要なサブシステム、重要なデータ構造、ソースコード内で確認すべき場所を解説し、skills/kernel/kernel-internals を補完する、ドライバーやサブシステムの作業向けのアーキテクチャレベルのナビゲーションを提供します。
使用するタイミング
- 機能やバグの調査で、初めて
linux.gitを確認するとき - 起動処理がどのように
initやドライバーのprobeに到達するかを理解するとき - サブシステムを経由するシステムコールや割り込みを追跡するとき
skills/kernel-dev/platform-device-modelやドライバー関連スキルに取り組む前のオンボーディング
ワークフロー
1. 起動フロー(x86/ARM64 の簡略版)
firmware/UEFI
├── arch/*/boot — decompress kernel, early setup
├── start_kernel() — mm, scheduler, timers, IRQ subsys
├── rest_init() → kernel_init → run_init_process
└── userspace init (systemd)
ドライバーの module_init/device_initcall は、start_kernel の実行中に init より前に動作します。
2. 主要なサブシステム
| サブシステム | パス(代表例) | 主な構造体 |
|---|---|---|
| スケジューラー | kernel/sched/ | task_struct、sched_entity |
| メモリ | mm/ | struct page、mm_struct、vm_area_struct |
| VFS | fs/ | inode、dentry、file、super_block |
| ブロック | block/ | request_queue、gendisk |
| ネットワーク | net/ | sk_buff、net_device |
| ドライバー | drivers/ | device、device_driver |
| システムコール | kernel/、fs/、mm/ | SYSCALL_DEFINE* |
3. Initcall レベル
/* include/linux/init.h — order matters */
early_initcall → core_initcall → postcore_initcall
→ arch_initcall → subsys_initcall → fs_initcall
→ device_initcall → late_initcall
プラットフォームドライバーは、通常 subsys_initcall または module_init を介して登録されます。
4. コードの探し方
# Locate symbol
grep -rn "platform_driver_register" drivers/
# Trace config
./scripts/config --state CONFIG_FOO
# File hierarchy docs
ls Documentation/admin-guide/
5. エージェントの活用
/linux-kernel-architecture Where does page fault handling live and what calls it?
よくある問題
| 症状 | 原因 | 解決策 |
|---|---|---|
| ドライバーの probe が早すぎる | Initcall と DT の順序 | deferred_probe で遅延させます |
| シンボルが見つからない | モジュールとしてビルドされている | modprobe を実行するか、組み込み用の CONFIG_* を指定します |
| サブシステムが違う | drivers/ に似た名前がある | struct bus_type をたどります |
| 起動時にハングする | early printk が無効 | earlyprintk、initcall_debug |
関連スキル
skills/kernel/kernel-internals— スケジューラー、SLUB、VFS の詳細skills/kernel-dev/kernel-memory-management— mm/ の詳細skills/kernel-dev/platform-device-model— ドライバーモデルskills/kernel-dev/device-tree— ハードウェアの記述skills/low-level-programming/linux-kernel-modules— LKM の基礎
コメント
Markdown 対応