ソースの学習に役立つ、興味深い、小さなLinuxカーネルプロジェクトは何ですか?
-
02-07-2019 - |
質問
カーネルの初心者にはどんな小さなプロジェクトを提案しますか。しかし、システムとCの経験が豊富な人はいますか?目的は、カーネルのソースコードに精通し、クレイジーなアイデアを試すための機能を開発することです。
いくつかの管理可能な小さなタスク(たとえば、syscallの追加)を考えていますが、何を提案しますか?ターゲットオーディエンスの場合、少なくとも学部OSコースを履修している人を考えてください。
解決
前述の学部OSコースを受講したとき、私たちのタスクの1つは、いくつかのシステムコールを追加することでした。それらは非常にシンプルで、他のシステムコールが呼び出された回数をカウントするカウンターの読み取りとリセットに他なりませんでした。ただし、syscallを追加するには、かなりの数のファイルを調べて変更する必要があります。多くのファイルは、カーネルソースの同じ比較的小さなサブツリーにありますが、少なくともコーディング規約に慣れるには十分です。
次のことも検討してください:
-
別の(非常に単純な)モードをスケジューラに追加して、興味のあるポリシーを実装します。 「すべてを支配する1つの実装」は非常に難しい(さらに同意するのはさらに難しい)が、単純なO(N)スケジューラー、初歩的なO(1)スケジューラーを行うことは、アルゴリズム的に言えば比較的簡単に行うことができます。それでも、多くのコードを突く必要があります。
-
シリアル経由で通信する8ビットマイクロコントローラーなど、非常に単純な外部ハードウェア用のデバイスドライバーの作成、または自分で作成したもの。ハードウェアの経験がある場合は、NESコントローラーをエミュレートできるデバイスドライバーを作成してみてください(シリアルポートとシリアルパラレルシフトレジスタを使用して、数本のワイヤをビットバンする)。本当にシンプルな7セグメントLEDディスプレイ(目覚まし時計のように)を運転したり、それらの小さなコレクションを運転したりすることもできます。
他のヒント
Kernel Janitorsプロジェクトには素晴らしいプロジェクトがいくつかあります。
フレーム戦争を開始するリスクがある:Linuxカーネルコードから離れることをお勧めします。カーネルプログラミングに手を染めたい場合は、たとえば、FreeBSD、NetBSD、またはOpenSolarisを使用してください。コードは非常に簡潔で構造が良く(もちろん主観的な意見です)、実際に設計され、文書化されています。さらに、カーネルデバッガーがあります(Linusは、カーネルデバッガーと安定したカーネルAPIの両方に対応しているため、すべてのカーネルが作業のターゲットになります)。これらのOS-esにはそれぞれのWebサイトにプロジェクトのリストがあり、私は個人的にOpenSolarisフォーラムやNetBSDメーリングリストの人々と非常に良い経験をしています。
Cの経験があると言います。LinuxおよびOpenSolarisまたはBSDのWebソースコードリポジトリを見て、コードを比較し、自分の意見を述べてください。私が言っていることは、オープンソースのUNIXにはLinuxよりも多くのものがあり、少なくともLinuxに行く前にそれらを見る必要があると思います。
開始するのに最適な場所は、Unix v6に基づくプロジェクトです。 。 " Xv6、Unixに似たシンプルな教育用オペレーティングシステム"
cynix 、シンプルなIA-32モノリシックunixライクカーネル(メンテナンスなし)もあります。
優れたチュートリアルは" 独自のおもちゃUNIXクローンOSをロールすることです"。
MINIXソースコードをダウンロードしてみてください 遊んで、ロジックを理解してみてください。間違いなく時間がかかりますが、それに固執すれば、いつかエキスパートになることができます