36

私は常にカーネル ハッキングと組み込みシステムの世界に惹かれていました。
そのようなものをいじり始めるための優れたチュートリアル(+簡単に入手できるハードウェア)を持っている人はいますか?
適切なドキュメントが付属し、手頃な価格のドライバなどを作成するためのキットのようなものはありますか?

ありがとう!

4

6 に答える 6

33

カーネル開発にまったく慣れていない場合は、ハードウェア開発から始めず、 proc file / sysfs などの「ソフトウェアのみ」のカーネル モジュールに進むことをお勧めします。より複雑な例では、 filesystem / network development 、uml/vmware/ で開発することをお勧めします。 virtualbox/...マシンなので、マシンをクラッシュさせてもそれほど害はありません:)組み込み開発の場合、小さなARM開発キットまたは小さなVia C3 / C4マシン、または自作で焼くことができる古いPCを使用できますUSB / PCI / あらゆるデバイス。

Kernelnewbies.orgから始めることをお勧めします。ここには、カーネル開発者向けの多くのリンクと有用な情報があり、初心者が取り組むための簡単に実装できるタスクのリストも備えています。

読むべき本:

Understanding the Linux Kernel - カーネル サブシステムの設計を詳述した非常に優れたリファレンス

Linux Device Drivers - 多くのサンプル コードを含むチュートリアルのように書かれており、Linux カーネルの主要な側面を理解して説明することに焦点を当てています。ビルド プロセスとカーネル モジュールの基本を紹介します。

Linux カーネル モジュール プログラミング ガイド- その他の入門資料

前述のように、特に Linux カーネル API は頻繁に変更される傾向があるため、Linux コードを確認することは常に良い考えです

カーネル ビルド プロセスを理解するには、次のリンクが役立つ場合があります。

Linux カーネル Makefile (kbuild)

最後になりましたが、カーネル ソース ディストリビューションのドキュメント ディレクトリを参照してください。

以下は、カーネル開発クラスから横柄に盗まれたいくつかの興味深い演習です。

  • 読み取りアクセスごとに現在時刻を jiffy 単位で報告するファイル /proc/jiffies を作成するカーネル モジュールを作成します。
  • proc ファイル /proc/sleep を提供するカーネル モジュールを作成します。アプリケーションが秒数を ASCII テキストとしてこのファイルに書き込む場合 ("echo 3 > /proc/sleep")、指定された秒数の間ブロックする必要があります。書き込みアクセスは、ファイルの内容に副作用があってはなりません。つまり、読み取りアクセスでは、ファイルは空に見えるはずです (LDD3、ch. 6/7 を参照)。
  • 一部のテキストを一時的に保存できる proc ファイルを作成し (echo "blah" > /proc/pipe を使用)、再度取り出して (cat /proc/pipe)、ファイルをクリアします。同期の問題に注意してください。
  • パイプ サンプル モジュールを変更して、キャラクター デバイス /dev/pipe として登録し、書き込み要求用の動的メモリ割り当てを追加します。
  • 本当に単純なファイル システムを作成します。
于 2008-10-06T14:38:26.727 に答える
5

絶対に必要なのは、ルビーニによるこの本です。(ハードコピーまたは無料のソフトコピーの両方で入手可能)

彼は、PC 以外のハードウェアを必要としない、いくつかのダミー ドライバの実装を提供しています。したがって、カーネル開発を始めるには、これが最も簡単な方法です。

組み込み作業に関しては、数多く出回っている SBC (シングル ボード コンピューター) のいずれかを購入することをお勧めします。これらの多くは x86 プロセッサに基づいており、通常は PC/104 インターフェイスを備えています (電気的には PC/104 は ISA バス標準と同じですが、エッジ コネクタではなくスタッカブル コネクタに基づいているため、カスタム ハードウェアとのインターフェイスが非常に簡単です)。

通常、デバッグを容易にするVGAコネクタがあります。

于 2008-09-30T08:06:17.313 に答える
3

手始めに、最善の方法は多くのコードを読むことです。Linux はオープン ソースであるため、多数のドライバーが見つかります。あなたが書きたいことのように、いくつかの方法で機能するものを見つけてください。適切で比較的理解しやすいコード (ループバック デバイス、ROM fs など) がいくつか見つかります。

Linux コード相互参照であるlxr.linux.noを使用することもできます。何かがどのように機能するかを調べる必要があり、コードを調べる必要がある場合、これは適切で簡単な方法です。

O'Reilly の本 (Understanding the Linux Kernel、第 3 版は 2.6 カーネルに関するもの) もあります。または、無料で何かが必要な場合は、高度な Linux プログラミングの本 ( http://www.advancedlinuxprogramming.com/ )を使用できます。 . ファイルシステム、ネットワークなどに関する特定のドキュメントも多数あります。

于 2008-09-15T18:28:35.107 に答える
3

組み込み Linux ハッキングの場合、どこでも購入できるシンプルな Linksys WRT54G ルーターは、独自の開発プラットフォームですhttp://en.wikipedia.org/wiki/Linksys_WRT54G_series :

WRT54G は、GNU GPL の義務を満たすためにファームウェア ソース コードがリリースされた最初の消費者レベルのネットワーク デバイスであることで注目に値します。これにより、プログラマはファームウェアを変更して、デバイスの機能を変更または追加できます。いくつかのサードパーティ ファームウェア プロジェクトが、WRT54G 用の強化されたファームウェアを一般に提供しています。

OpenWrtDD-WRTファームウェアをインストールしてみました。低コストのプラットフォームでのハッキングの出発点として、それらを確認できます。

于 2008-09-13T20:04:50.650 に答える
1

私は完全にカーネルハッキングの初心者です:)「Linuxプログラム開発:演習付きガイド」と「Linuxデバイスドライバーの作成:演習付きガイド」の2冊の本を購入することにしました。これらは非常に明確に書かれており、さらなる学習の良い基盤を提供します。

于 2010-08-31T10:31:56.870 に答える
1

準備が必要なもの:

  • クロスコンパイルします。組み込みデバイスは MIPS、PowerPC、または ARM CPU を使用しますが、適切な時間内に独自のカーネルをコンパイルするのに十分な CPU パワー、メモリ、またはストレージがありません。
  • 組込みシステムはコンソールとしてシリアル ポートを使用することが多く、コストを下げるために、通常、製品ボードにはんだ付けされたコネクタはありません。カーネル パニックのデバッグは、シリアル ポート コネクタをはんだ付けできない限り非常に難しく、何が問題なのかについて多くの情報を得ることができません。

Linksys NSLU2は、実際の組み込みシステムを動作させるための低コストの方法であり、周辺機器を追加するための USB ポートを備えています。OpenWrt 互換性ページを参照してください。店舗にある Linksys WRT54G の現在のモデルは、Linux では使用できなくなっていることに注意してください。コストを削減するために、RAM とフラッシュが少なくなっています。Cisco/Linksys は現在、WRT54G で vxWorks を使用しており、メモリ フットプリントが小さくなっています。

本当に使いたい場合は、組み込み CPU の評価キットが数百ドルから始まります。仕事やコンサルティング契約のために専門的に必要でない限り、これらにお金をかけないことをお勧めします.

于 2008-09-14T04:12:51.663 に答える