カーネルプログラミングを開始する最良の方法は何ですか?

カーネルプログラミングを開始する最良の方法は何ですか?

どのような本を尋ねるのではなく(有用なガイド/チュートリアルを知っている場合)、カーネルのプログラミングを始めるための最良の方法と、学習に最適な特定のディストリビューションがあるかどうかを尋ねるのはどうですか?

私はデバイスドライバの部分に最も興味がありますが、カーネルがどのように設定されるか(モジュールなど)も理解したいと思います。 C/C++で4~5年程度の経験がありますが、ほとんど大学の知識です。 4~5年の職場キャリアではありません。何を言っているのか分かりますが)

答え1

最初:

最初のステップでは、「hello world」モジュールと仮想ハードウェアドライバのバリエーションを作成するのが最善の方法です。

「Linux Device Drivers」は素晴らしい本で、購入する価値があります。http://lwn.net/Kernel/LDD3/

LDD(少なくとも過去には)は、RAMディスクや仮想ネットワークデバイスなどの仮想ドライバを作成する練習をしてきました。

第二:

応募https://lkml.org/または、ハッキングしたいサブシステムのメーリングリストに移動します。あなたの周りを見て、スレッドをスキャンし、コードレビュー(パッチへの答え)を読んで、人々が偶然に見つけたかどうかを見つけてください。

まだサポートされていないデバイスまたは適切にサポートされていないデバイス用の(安価な)ハードウェアを購入できることを確認してください。安価なUSB NICまたは同様の安価なUSB周辺機器を選択することをお勧めします。古いドライバまたはツリーの外部ドライバ(おそらくベンダーによって作成され、おそらく2.4.xを対象としている)を使用するのが理想的です。なぜなら、ある程度動作することから始めてから徐々に調整/再作業して作成してテストできるからです。私の最初のドライバの試みはDavicom DM9601 USB NIC用でした。 2.4シリーズベンダーが作成したカーネルドライバがあり、ゆっくりと2.6に慣れています。 (注:メインラインのドライバはいいえ私のドライバーはついに他の人が最初から書きました。)

もう一つの良いヒントは、Kernel Newbiesのウェブサイト、特に「Kernel Gatekeeper」のバックログをチェックすることです。http://kernelnewbies.org/KernelJanitors/Todo 初心者が処理できる必要があるタスクのリストは次のとおりです。

答え2

多くのコアが存在します。

Linux唯一のゲームではありませんが、最も広く使用されているゲームです。一部の人々は、minixオペレーティングシステムの概念を理解するためにカーネルをお勧めします。私は最も一般的で(ほとんど)誰も使用しないことに無駄にする必要がないLinux 2.6.xシリーズを選択します。 Solaris、XNU(Mac)、FreeBSD、Dragonflyはよく知られています。1

非常に簡単なもの(シリアルポート、USBなど)を見つけて、他の作業を実行してください。さらに挑戦したい場合は、まだカーネルモジュールがないもののカーネルモジュールを作成してみてください。 (まずsudo lspci -nnPCIおよび/またはUSB IDで容疑者を検索してくださいsudo lsusb。)

修正する:これをメインシステムで直接実行するのではなく、上記のように仮想マシン(VM)(コンピュータ内のコンピュータ)を使用してください。 仮想ボックスこれは利用可能で無料です。また、これはあまりにも面倒に見えたくありませんが、仮想マシン自体に問題がある場合に戻ることができるように、仮想マシンのスナップショットを使用してみてください。

アップデート2:Git(DVCSes inc. mercurial、fossil、bazaar、darcs)の説明は、主にコードと小さな重要なファイルの良いアイデアです。それが何を意味するのかわからない限り、Gitを使って音楽、ビデオなどをバックアップしないでください。 ;)

答え3

変更したいモジュールやドライバを探すか、null/hello world型モジュールから始めてそこからビルドします。モジュールは、実行中のカーネルにコードをロード、アンロード、再コンパイル、および再ロードできるようにするために特に使用されます。後で重要な部分を見ることができますが、基本的にモジュールにはさまざまなコンテンツが含まれており、必要なほとんどすべての作業を実行できます。

第二に、仮想マシンを使用してください。 VirtualBoxまたは一部のVMにゲストマシンを設定し、しばらくの間そこでカーネルテストを実行します。これにより、問題が発生してもメインシステムがシャットダウンせず、再起動、動作中のスナップショットへのロールバックなどが非常に簡単になります。

第三に、学ぶgit

答え4

誰かがすでに「Linux Device Drivers」という本に言及しました。この本は素晴らしい資料であり、私も強くお勧めします。

質問には、イニシエータが特に本を求めたものではないと言われていますが、最新版の本「Linuxカーネルについて」(http://oreilly.com/catalog/9780596005658/) は一般的な Linux カーネルを理解するのに便利で、Linux デバイスドライバのセクションも含まれています。

関連情報