Usb ドライバーを作成していますが、問題があります。デバイスを事前にプラグインした状態でドライバを insmod すると、プローブ関数が呼び出されません。デバイスを取り外して再度接続した後にのみ呼び出されます。デバイスが既に接続されている状態でPCを起動したときに機能するようにしたい.
誰か助けてくれませんか?
Usb ドライバーを作成していますが、問題があります。デバイスを事前にプラグインした状態でドライバを insmod すると、プローブ関数が呼び出されません。デバイスを取り外して再度接続した後にのみ呼び出されます。デバイスが既に接続されている状態でPCを起動したときに機能するようにしたい.
誰か助けてくれませんか?
Documentation / driver-model / binding.txtから:
新しいデバイスが追加されると、バスのドライバーのリストが繰り返され、それをサポートするデバイスが検索されます。これを判別するには、デバイスのデバイスIDが、ドライバーがサポートするデバイスIDの1つと一致する必要があります。IDを比較するための形式とセマンティクスは、バス固有です。
同じソースから:
新しいドライバーが追加された場合のプロセスはほぼ同じです。バスのデバイスのリストは、一致するものを見つけるために繰り返されます。すでにドライバーを持っているデバイスはスキップされます。できるだけ多くのデバイスをドライバーにバインドするために、すべてのデバイスが繰り返されます。
したがって、IDマッチングに問題があるようです。つまり、USBバスに固有の場合は、drivers / usb / core/driver.cのusb_device_match関数を参照してください。
または、デバイスがプラグを抜かれたときにアンロードされたデバイスにすでにバインドされている可能性があります(対応する/ sys / bus / usb / xxxxxディレクトリにドライバーへのシンボリックリンクがあるかどうかを制御することで確認できます)
「または、デバイスがプラグを抜いたときにアンロードされたデバイスに既にバインドされている可能性があります (対応する /sys/bus/usb/xxxxx ディレクトリにドライバーへのシンボリックリンクがあるかどうかを制御することで確認できます) "
そして、シンボリックリンクがある場合は?
これは、デバイスに適切な udev ルールを作成することで解決できます。/etc/udev/rules.d/ で例を探します