1

ALSA API を使用する PCI サウンド カード用の単純なドライバを作成しようとしています。ドライバーを実行するために、元の snd_intel8x0 サウンド カード ドライバーをブラックリストに登録しました。この時点で、プローブ機能が呼び出され、PCI IO ポートが割り当てられ、PCI デバイスが有効になります。

残念ながら、ALSA API を使用しようとすると、次のエラーが発生します。

[...] alsa: 未知のシンボル snd_card_register (err 0)

[...] alsa: 不明なシンボル snd_card_create (err 0)

[...] alsa: 不明なシンボル snd_card_free (err 0)

[...] alsa: 不明なシンボル snd_device_new (err 0)

また、ファイル /proc/kallsyms には snd* シンボルがありません (元のドライバー snd_intel8x0 が上記のすべての snd* 関数を実行している場合、/proc/kallsyms で利用できます)。

また、元のドライバーがブラックリストに登録されている場合、フォルダー /proc/asound はなくなります (snd_intel8x0 が実行されている場合、sound フォルダーが存在します)。

インターネットで検索したり、ここや他のフォーラムで質問したりすると、ドライバーで ALSA を構築する必要があることがわかりました。どうすればいいですか?ガイドライン、チュートリアルのリンクは大歓迎です。

よろしくお願いします。有益な回答が得られることを願っています。私はこの問題を長い間修正しようとしていますが、成功していません。

こんにちは、ネデリン。

4

2 に答える 2

1

さて、私がこれまでに行ったことを可能な限り詳細に説明しようと思います。

これが私が使用するmakefileです

obj-m:= alsa.o

KERNELDIR?= / lib / modules / $(shell uname -r)/ build

PWD:= $(shell pwd)

すべて:$(MAKE)-C $(KERNELDIR)M = $(PWD)

クリーン:rm -rf * .o〜core.depend。.cmd * .ko * .mod.c .tmp_versions

sudoinsmod.koを使用して読み込みを行います

ここで、最初はALSAを使いたくなかったと言います。その時点で、1つのベアボーンPCIドライバーを作成しました。これは、PCIデバイスを初期化し、プローブ機能にIOポートとIOメモリを登録するだけでした。そして、このモジュールのロードに成功しました(プローブが実行され、IO領域が予約されました)。このPCIドライバーを構築するために、私は上記のMakefileを使用しました。後で私はALSAが必要だと判断し、それ以来 [...] alsa:不明なシンボルsnd_card_register(err 0)エラーが発生します

また、あなたが送ってくれたリンクで説明されているように、ALSAツリーにドライバーを含めようとしました。/ sound / pciのMakfileファイルとKconfigファイルを変更した方法は次のとおりです(実際のコードを指すリンクを/sound/pci/Nedelin_ALSA_PCI.oに作成しました。これについては、コメントを避けるために説明します。ファイルの名前):

Makefile

..。

snd-nedelinxalsaxpci-objs:= Nedelin_ALSA_PCI.o

..。

obj-$(CONFIG_SND_NEDELINXALSAXPCI)+ = snd-nedelinxalsaxpc

Kconfig

構成SND_NEDELINXALSAXPCI

トライステート「Intel/SiS / nVidia/SND_NEDELINXALSAXPCIドライバー」

SND_AC97_CODECを選択します

ヘルプこれは私のドライバーです...

これは成功したようです。ドライバーをmakemenuconfigに配置し、モジュールとしてロードしました。カーネルを再コンパイルしました。これもOKです。そして、/ lib / modules // kernel / sound/pciに私のドライバーがあります。modprobeでロードしようとすると、ロードされているように見えますが(module_init()が実行されます)、プローブ関数が実行されません。

私は完全に混乱しています。

于 2012-11-08T20:43:15.813 に答える
1

モジュールをコンパイルまたはロードするときに何か問題がありましたが、それをどのように実行しようとしたかについて言及していないため、これ以上具体的なことは言えません。

モジュールをコンパイルしてロードする方法については、Linux Device Driversの第 2 章を参照してください。
ALSA ドライバーについては、Writing an ALSA Driverを参照してください。

于 2012-11-08T08:30:28.597 に答える