ソースの学習に役立つ、興味深い、小さなLinuxカーネルプロジェクトは何ですか?

StackOverflow https://stackoverflow.com/questions/135637

質問

カーネルの初心者にはどんな小さなプロジェクトを提案しますか。しかし、システムと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ソースコードをダウンロードしてみてください  遊んで、ロジックを理解してみてください。間違いなく時間がかかりますが、それに固執すれば、いつかエキスパートになることができます

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top