1

ドライバーの静的ロードに問題があり、混乱を招いています。ドライバーを静的にロードするには、プロセス 1) とプロセス 2) の 2 つの方法に従いました。以前私は従った:

プロセス 1: 手順は次のとおりです。

  1. demochardrv.ko という名前の char ドライバーを作成しました。
  2. /lib/modules/2.6.34.12/kernel/drivers/char/ にドライバーをコピーしました。
  3. /etc/modules にエントリを作成しました。
  4. リブート。

しかし、これらの 4 つの手順は以前は機能せず、lsmod に自分のドライバーが表示されませんでした。

したがって、上記の手順とは別に、別の方法に従いました: プロセス 2: 手順は次のとおりです。

  1. ファイル「/lib/modules/2.6.34.12/build/drivers/char/Kconfig」にドライバーの詳細を追加しました: config DEMOCHARDRV tristate "TEST DEMO DRIVER' default n help TEST STATIC INSTALL DRIVER

  2. 「/lib/modules/2.6.34.12/build/drivers/char/Makefile」にドライバーの詳細を追加しました: obj-$(CONFIG_DEMOCHARDRV) += demochardrv.o

  3. /lib/modules/2.6.34.12/build/drivers/char/ にドライバー ファイルをコピーしました。

  4. .config ファイルを編集し、CONFIG_DEMOCHARDRV=y を追加しました。
  5. make menuconfig を起動し、(* / M のいずれかで) ドライバーを選択しました。
  6. make を行い、モジュールを作成し、modules_install を作成し、install を作成しました。
  7. リブート

menuconfig でドライバーを選択していなくても、起動時にドライバーが読み込まれるようになりました。

プロセス 2 の問題を解決するために、/etc/modules に作成されたエントリを削除しました。しかし今、ドライバーはまったくロードされていませんでした。そのため、プロセス 2 の手順を削除し、再びプロセス 1 の手順に従いました。現在、起動時にドライバーがロードされています。現在、プロセス 1 が機能しています。ただし、プロセス 2 は単独では機能せず、プロセス 1 の追加の手順が必要です。

そのため、どのプロセスが正しいかについて混乱しています。誰でもいくつかの入力を提供できますか?

4

1 に答える 1

1

Linuxドライバーを「静的に」ロードしている場合、モジュールをコンパイルすることはできません。カーネルバイナリにビルドする必要があります。したがって、モジュールとしてまったく扱わず、"*" (組み込み) として構成するか、まったく含めないでください。

カーネルの makefile docによると、2 番目のプロセスが適しているはずです。ただし、モジュールは常に動的にロードされるため、モジュールを作成するという考えはあきらめてください。

于 2012-07-06T08:03:18.957 に答える