【ソース解析】linuxカーネルソースを読む 先人の苦労

Linux カーネルの開発者は高齢化が進んでおり、若い開発を惹きつけていない

更新日: 2020年07月26日

25 お気に入り 72702 view
お気に入り追加

Xperia Pのカーネルソースが来ましたね Open source archive for build 6.1.B.0.544, 6.1.B.0.550, and 6.1.B.0.559. bit.ly/PO5kCC

FreeBSDのカーネルソースのコンフィグを見ると、どうやら8.3以降なら目的の蟹NICのドライバが入ってるくさい。まだベータ版だけど、それをベースにしてるFreeNAS8.3の方を試してみるか。

この時間に読むカーネルソース、格別ですね(ねむい)

アナログスティックのデータが上手く取得できない。特殊なパケットを送る必用があるのかな。でもこれはLinuxのカーネルソース読んだり、パケットキャプチャしないとわからん。

カーネルはスケジューラから読むのが一番、楽だと僕は思ってる。動作が特徴的で小さくまとまっているから。

http://www.memememo.com/u/xargs/c40287.html

Linuxの内部構造をより深く知るには、ときには、Linuxカーネルのソースコードを読むことも必要です。とはいえ、膨大なソースコードの全体像を把握するのは簡単ではありません。ここでは、発想の転換を行い、「文学作品を楽しむ」ようにソースコードを読み進めながら、ソースコードの世界観をつかみます。実際に動作するカーネルをビルドする手順を紹介した後に、そのソースコードを読み進めていきます。ソースコードに手を加えて、オリジナル・カーネルを作成する簡単な例も紹介します。

通常、Linuxカーネルのソースコードは通常、http://kernel.org/から入手できるが、tar.bz2で固められていて、いちいちダウンロード・解凍しなくちゃいけない。
これはちょっと面倒なので、別の環境でもすぐに見られる方法はないかと探していたところ、LXRという、LinuxカーネルのソースコードをWeb上で見られるサービスを発見。

このサービスの良いところは、表示されているソースコードをカーネルのバージョン単位で変更できたり、ソースコード内の単語を簡単に検索できるところにある。

OSのカーネルの心臓と言う部分では、
Linuxが出来る前後かそれより前に教育用に作られた、
Minixから入るのもいいかと思います。

OSカーネルにはLinuxを採用。オープンソースとして提供されたAndroid 1.0は、カーネル2.6.25を採用する。これをベースに電源管理用モジュール、プロセス間通信用モジュール、メモリー量が不足したときにAndroid関連のプロセスを自動的に落とすモジュールなど、Android用のカーネル・モジュールが加えられている。

Linuxカーネル上には、Android独自のアプリケーション実行環境(ランタイム)を実装している。基盤となるコアライブラリ上に、「Dalvik(ダルビック)」と呼ぶ独自のJavaの仮想マシンを搭載したものだ。Dalvikは、JavaVMの実行形式を独自形式に変えて高速化を図っている。Androidのアプリケーションはすべて、Dalvik上で動作するJavaアプリケーションとなる(写真1)。

プログラムが動作する時、システム上では2つの処理空間で処理が行われます。1つはユーザ空間(User space)、もう1つがカーネル空間(Kernel space)です。この2つの空間を行き来して処理を進めます。といっても、プログラムが動作する際、どちらの空間で処理されているかといったことをユーザが意識する必要はありません。

ユーザ空間は、ユーザに割り当てられる計算リソースで、実行しているプログラムが直接アクセス可能なリソースです。 一方、カーネル空間はユーザが直接アクセスできない空間です。システムコール(UNIXのカーネルAPI) を呼ぶことや、 あるいは/sys/以下のファイルのようにファイルの形でカーネルへのインタフェースを介してカーネルの機能を利用できる形にしています。ユーザからは直接カーネル空間を操作することはできません。Kernel(核)という言葉は元々は堅い殻に守られた種の意味ですが、この意味のようにユーザ側から見ると、カーネル空間は堅い殻に守られたオペレーティングシステム内部というように見えます。

@sakuramilk GNのカーネルソースってどこからもって来ました?opensource.samsung.comにあります?

@kamiya344 未だにln -s ~ /etc/make.profile でプロファイル設定しようとするし、USE=symlink emerge gentoo-sourcesでカーネルソースを指定しようとする。最近eselect使った方がいいよとかいわれて…