21

最近、Linuxを実行している組み込みデバイスのドライバーの開発を始めました。

今まで私はLinuxの内部についてしか読んでいませんでした。
ドライバー開発の経験がないので、最初の一歩を踏み出すのは少し難しいと感じています。

  • カーネルのソースコード(v2.6.32)をダウンロードしました。
  • Linuxデバイスドライバー(3e)を読んだ(読み飛ばした)
  • StackOverflowで関連する投稿をいくつか読みました。
  • Linuxには「モノリシック」アプローチがあることを理解しています。
  • カーネルを構築しました(menuconfigなどに既存のドライバーが含まれています)
  • kconfigファイルとmakefileファイルの基本を知っているので、問題はないはずです。


誰かがカーネルソースコードのさまざまなディレクトリの構造(つまり、相互リンク)を説明できますか?

言い換えると、ソースコードファイルが与えられた
場合、関連するコードについて他のどのファイルが参照するか

(「#include」-sは部分的なアイデアを提供します)

誰かが私がより良いアイデアを得るのを手伝ってくれませんか?
どんな助けでも大歓迎です

ありがとうございました。

4

2 に答える 2

18

Cファイルの場合、特定のファイルについて心配するのではなく、Cファイルが呼び出す関数と使用するデータ構造を確認する必要があります。

独自のデバイスドライバーを開発するには、2つの基本的なルートがあります。

  • あなたと同じようなドライバーを連れて行ってください。デバイスに適用できないコードを取り除き、デバイスの新しいコードを入力します。
  • デバイスドライバーの非常に基本的な部分から始めて、デバイスが機能し始めるまで少しずつ追加します。

このプロセスを完了すると、ドライバーを構成するファイルの意味がわかりやすくなります。各ファイルに何が含まれるかを考慮してください。ただし、ある程度、ドライバーをファイル間で分割することは、科学というよりも芸術です。小さいドライバーは、多くの場合、1つまたは2つのファイルに収まります。

ちょっとしたデザインもいいかもしれません。デバイスが何をするか、そしてドライバーが何をする必要があるかを考えてください。これに基づいて、デバイスドライバーに必要な機能を計画できるはずです。

また、Linuxデバイスドライバー、第3版 は、ドライバー開発に取り掛かるのに役立つと思います。

Linuxファイル自体には、ファイルの機能、ファイルが含まれるレイヤー、およびコールスタックにアクセスするレイヤーに基づくファイルが含まれます。全体像は、各ファイルが次のファイルとどのように関連しているかを真に示しています。

于 2010-04-21T14:30:37.393 に答える
7

カーネルドライバを一度修正する必要がありました。私の最大のヒント(vimを使用する場合)は、ctagsを設定して、理解できない関数が表示されるたびにctrl-]を使用してカーネルソースをジャンプできるようにすることです。

于 2010-04-21T15:22:41.190 に答える