2016-05-25 5 views
0

私はLinuxのドライバを書く方法を学び、私が置いていたUSBスティックを選びます。しばらくの間、私はそれを差し込んだときにプローブ関数を呼び出すように苦労していました。既存のドライバを使ってカスタムドライバを使う

プローブは、プラグを抜いたときに呼び出されるか、それまでprintkが呼び出されていません。次に、切断関数が呼び出されます。/sys/bus/usb/driversのドライバにbindとunbindを使うことも同じことです。私はrmmod uasrmmod usb-storageを行う場合

May 24 21:09:12 localhost.localdomain kernel: probed 
May 24 21:09:12 localhost.localdomain kernel: usb 1-2: USB disconnect, device number 16 
May 24 21:09:12 localhost.localdomain kernel: discconect usb 

その後、期待どおりに動作します親指ドライブに接続します。私はこれらの2つの既存モジュールが何らかの問題を引き起こしていると推測しています。ドライブに私のドライバをUSBストレージ経由で使用させる方法はありますか?モジュールのuasとusb-storageも自分たちで戻ってくるようです。

+0

可能な複製http://stackoverflow.com/questions/31052993/ – 0andriy

+0

同様の問題は、これらの2つのモジュールは、私はUSBドライブを挿入したときにかかわらず、帰ってきます。それらをオフにする方法はありますか、できれば、USBストレージドライバを最初に起動させることはありませんか? – Matthew

+0

ブラックリストはそのためです。 – 0andriy

答えて

2

このデバイスにはすでに1台のドライバが登録されています。したがって、現在のドライバの登録を解除する必要があります。そうしないと、デバイスはレジスタドライバを使用します。

Step 1 : run 'lsmode' command will display all modules that are currently loaded in the Linux kernel. 
step 2 : run 'modprobe -r <current register driver>' - Remove the currently loaded module. 
setp 3 : run 'insmod <your driver *.ko> - will register your driver. 

ここでデバイスを接続します。カーネルはあなたのデバイスIDと一致し、あなたのドライバが同じIDを持っている場合。それはあなたのドライバーのプローブを呼び出すでしょう。

ドライバを使用して、以前のカーネルドライバを再度ロードしたい場合。

step 1 : run 'rmmod <your driver module>' - will remove your driver. 
step 2 : run 'modprobe < privous driver module>' - Will load previous module. 

すべてのドライバに適用されます。あなたがルートにいない場合は、 'sudo'ですべてのコマンドを使用してください。

関連する問題