本記事の信頼性
- リアルタイムシステムの研究歴12年.
- 東大教員の時に,英語でOSの授業.
- 2012年9月~2013年8月にアメリカのノースカロライナ大学チャペルヒル校コンピュータサイエンス学部(2021年の世界大学学術ランキングで20位)で客員研究員として勤務.C言語でリアルタイムLinuxの研究開発.
- プログラミング歴15年以上,習得している言語: C/C++,Solidity/Vyper,Java,Python,Ruby,HTML/CSS/JS/PHP,MATLAB,Assembler (x64,ARM).
- 東大教員の時に,C++言語で開発した「LLVMコンパイラの拡張」,C言語で開発した独自のリアルタイムOS「Mcube Kernel」をGitHubにオープンソースとして公開.
こういった私から学べます.
Linuxカーネルとは,C言語で開発されたオープンソースのOSです.
Linuxカーネルは主に以下のコンピュータで広く利用されています.
目次
事前に必要な基礎知識
ChishiroのC言語で紹介している事前に必要な基礎知識を一通り習得しているとします.
-
-
ChishiroのC言語
こういった私から学べます. Windows,MacOS,Linux/UNIX,FreeBSD等のOS開発に利用されるプログラミング言語「C言語」に関する記事を紹介します. C言語を習得してコンピュータ ...
続きを見る
本記事ではLinuxカーネルのバージョン5.15,ディストリビューションはUbuntu 22.04 LTSを利用します.
VMWareにLinux(Ubuntu 22.04 LTS)をインストールする方法を知りたいあなたはこちらからどうぞ.
-
-
VMwareでLinux(Ubuntu 22.04 LTS)のインストール【Sambaでファイル共有】
こういった悩みにお答えします. 目次1 VMwareでLinux(Ubuntu 22.04 LTS)のインストール2 Sambaでファイル共有3 まとめ VMwareでLinux(Ubuntu 22. ...
続きを見る
LinuxカーネルはC言語で書かれています.
私にC言語の無料相談をしたいあなたは,公式LINE「ChishiroのC言語」の友だち追加をお願い致します.
私のキャパシティもあり,一定数に達したら終了しますので,今すぐ追加しましょう!
参考資料
Linux Kernel Programming
Linux Kernel Programmingは,2021年3月19日に発売したLinuxカーネルの本です.
対応しているLinuxカーネルのバージョンは5.4(LTS)です.
Part 1とPart 2があり,Linuxカーネルの中身が深く理解できます.(その分,難しいです.)
動かしながらゼロから学ぶ Linuxカーネルの教科書
動かしながらゼロから学ぶ Linuxカーネルの教科書は,2020年9月10日に発売した本です.
Linuxカーネルの基礎がわかります.
超例解Linuxカーネルプログラミング
超例解Linuxカーネルプログラミングは,2019年7月18日に発売した本です.
Linuxカーネルの修正方法がわかります.
対応しているLinuxカーネルのバージョンは4.16~5.0です.
Linuxデバイスドライバの開発
Linuxデバイスドライバの開発は,2021年8月26日に発売した本です.
Linuxのデバイスドライバの開発やデバッグ方法がわかります.
OSやLinuxカーネルのWeb資料
- Operating Systems: Three Easy Pieces
- Documentation Directory
- The Linux Kernel documentation
- Linux Weekly News
- Linux Inside
- Kernel Recipes
- Kernel Planet
ハードウェアのマニュアル
Linuxカーネルを理解するためには,ハードウェアのマニュアルを参照する必要があります.
そこで,ハードウェアのアーキテクチャ共通のマニュアル,Intel/AMD64 CPUのマニュアル,iPhone/Androidのスマートフォンに搭載されているARM CPUのマニュアルを紹介します.
アーキテクチャ共通のマニュアル
アーキテクチャ共通のマニュアルは以下になります.
Intel/AMD64 CPUのマニュアル
Intel CPUのレジスタ長が32ビット(x86)と64ビット(x64)とAMD64のマニュアルです.
- Intel 64 and IA-32 Architectures Software Developer's Manual
- Intel 64 and IA-32 Architectures Optimization Reference Manual
- AMD64 Architecture Programmer’s Manual: Volumes 1-5
- 82093AA I/O ADVANCED PROGRAMMABLE INTERRUPT CONTROLLER (IOAPIC)
- IA-PC HPET (High Precision Event Timers) Specification
- The microarchitecture of Intel, AMD, and VIA CPUs
- Instruction tables
ARM CPUのマニュアル
ARM CPUのレジスタ長が32ビット(ARM)と64ビット(ARM64/AARCH64)のマニュアルです.
Linuxカーネル
-
-
【第1回】元東大教員から学ぶLinuxカーネル「Linuxカーネルとは」
こういった私から学べます. Linuxカーネルの記事一覧はこちらからどうぞ. 目次1 Linuxカーネルとは2 Linuxの歴史3 Linuxのオープンソースモデル4 Linuxカーネルのリリースサイ ...
続きを見る
-
-
【第2回】元東大教員から学ぶLinuxカーネル「開発ツールとカーネルプログラミング vs. ユーザプログラミング」
こういった私から学べます. 前回を読んでいない方はこちらからどうぞ. Linuxカーネルの記事一覧はこちらからどうぞ. 今回は,Linuxカーネルの開発ツールとカーネル vs. ユーザプログラミングを ...
続きを見る
-
-
【第3回】元東大教員から学ぶLinuxカーネル「アイソレーションとシステムコール」
こういった私から学べます. 前回を読んでいない方はこちらからどうぞ. Linuxカーネルの記事一覧はこちらからどうぞ. 今回のテーマは,「アイソレーションとシステムコール」です. アイソレーションとシ ...
続きを見る
-
-
【第4回】元東大教員から学ぶLinuxカーネル「カーネルのデータ構造」
こういった私から学べます. 前回を読んでいない方はこちらからどうぞ. Linuxカーネルの記事一覧はこちらからどうぞ. 今回のテーマは,「カーネルのデータ構造」です. 以下のデータ構造を理解しているこ ...
続きを見る
-
-
【第5回】元東大教員から学ぶLinuxカーネル「プロセス管理」
こういった私から学べます. 前回を読んでいない方はこちらからどうぞ. Linuxカーネルの記事一覧はこちらからどうぞ. 今回のテーマはプロセス管理です. プロセス管理により,プロセスのライフサイクルが ...
続きを見る
-
-
【第6回】元東大教員から学ぶLinuxカーネル「プロセススケジューリング」
こういった私から学べます. 前回を読んでいない方はこちらからどうぞ. Linuxカーネルの記事一覧はこちらからどうぞ. 今回のテーマはプロセススケジューリングです. Linuxカーネルがどのようにタス ...
続きを見る
-
-
【第7回】元東大教員から学ぶLinuxカーネル「割り込み」
こういった私から学べます. 前回を読んでいない方はこちらからどうぞ. Linuxカーネルの記事一覧はこちらからどうぞ. 今回のテーマは割り込みです. 割り込みを理解すると,ハードウェアとOSがどのよう ...
続きを見る
-
-
【第8回】元東大教員から学ぶLinuxカーネル「同期」
こういった私から学べます. 前回を読んでいない方はこちらからどうぞ. Linuxカーネルの記事一覧はこちらからどうぞ. 今回のテーマは同期です. 同期を理解すると,カーネルの本質的な課題が深く理解でき ...
続きを見る
-
-
【第9回】元東大教員から学ぶLinuxカーネル「タイマと時間管理」
こういった私から学べます. 前回を読んでいない方はこちらからどうぞ. Linuxカーネルの記事一覧はこちらからどうぞ. 今回のテーマはタイマと時間管理です. Linuxカーネルの時間の概念がわかります ...
続きを見る
-
-
【第10回】元東大教員から学ぶLinuxカーネル「メモリ管理」
こういった私から学べます. 前回を読んでいない方はこちらからどうぞ. Linuxカーネルの記事一覧はこちらからどうぞ. 今回のテーマはメモリ管理です. メモリ管理を理解することで,カーネルレベルのメモ ...
続きを見る
-
-
【第11回】元東大教員から学ぶLinuxカーネル「プロセスアドレス空間」
こういった私から学べます. 前回を読んでいない方はこちらからどうぞ. Linuxカーネルの記事一覧はこちらからどうぞ. 今回のテーマはプロセスアドレス空間です. プロセスアドレス空間を学ぶとページテー ...
続きを見る
-
-
【第12回】元東大教員から学ぶLinuxカーネル「仮想ファイルシステム」
こういった私から学べます. 前回を読んでいない方はこちらからどうぞ. Linuxカーネルの記事一覧はこちらからどうぞ. 今回のテーマは仮想ファイルシステム(VFS:Virtual File Syste ...
続きを見る
-
-
【第13回】元東大教員から学ぶLinuxカーネル「ページキャッシュとページフォールト」
こういった私から学べます. 前回を読んでいない方はこちらからどうぞ. Linuxカーネルの記事一覧はこちらからどうぞ. 今回のテーマはページキャッシュとページフォールトです. 本記事を読むとページ,キ ...
続きを見る
-
-
【第14回】元東大教員から学ぶLinuxカーネル「ファイルシステムとクラッシュ整合性」
こういった私から学べます. 前回を読んでいない方はこちらからどうぞ. Linuxカーネルの記事一覧はこちらからどうぞ. 今回のテーマはファイルシステムとクラッシュ整合性です. 特に,Linuxカーネル ...
続きを見る
-
-
【第15回】元東大教員から学ぶLinuxカーネル「ブロックレイヤ」
こういった私から学べます. 前回を読んでいない方はこちらからどうぞ. Linuxカーネルの記事一覧はこちらからどうぞ. 今回のテーマはブロックレイヤです. ブロックレイヤでは,HDD/SDD等のデバイ ...
続きを見る
-
-
【第16回】元東大教員から学ぶLinuxカーネル「ソケット通信(TCP/UDP/IP)」
こういった私から学べます. 前回を読んでいない方はこちらからどうぞ. Linuxカーネルの記事一覧はこちらからどうぞ. 今回のテーマはソケット通信(TCP/UDP/IP)です. 本記事では,以下を習得 ...
続きを見る
C言語でLinuxカーネルのカーネルレベルプログラミング
-
-
【C言語】Linuxカーネルのビルド方法と新しいシステムコールの実装方法
こういった悩みにお答えします. こういった私から学べます. 目次1 Linuxカーネルのビルド方法1.1 GRUBを編集して起動するLinuxカーネルを指定1.2 Linuxカーネルのビルド環境の構築 ...
続きを見る
-
-
【C言語】Linuxのカーネルモジュールの作り方
こういった悩みにお答えします. こういった私から学べます. 目次1 【C言語】Linuxのカーネルモジュール2 カーネルモジュールで「Hello World!」を表示2.1 カーネルモジュールのビルド ...
続きを見る
-
-
【C言語】Linuxカーネルの同期プログラミング
こういった悩みにお答えします. こういった私から学べます. 本記事では,以下のLinuxカーネル「同期」を理解していることを前提としています. 目次1 【C言語】Linuxカーネルの同期プログラミング ...
続きを見る
-
-
【C言語】Linuxカーネルのデバッグ方法【printk,BUG_ON,WARN_ON,QEMU,GDB】
こういった悩みにお答えします. こういった私から学べます. 本記事は以下の記事を理解していることを前提とします. 目次1 【C言語】Linuxカーネルのデバッグ方法2 printk関数2.1 prin ...
続きを見る
-
-
【C言語】LinuxカーネルのPREEMPT_RTパッチでリアルタイムプログラミング
こういった悩みにお答えします. こういった私から学べます. 目次1 【C言語】LinuxカーネルのPREEMPT_RTパッチでリアルタイムプログラミング2 LinuxカーネルのPREEMPT_RTパッ ...
続きを見る