2

/ dev / pcan0を作成し、/ dev / pcan1をnetdevドライバーとしてコンパイルするドライバー(PCカード用のPCANドライバー、rtdmを使用)を受け取りました。

このドライバーには多くの機能が付属していますが、それらはすべて、CANメッセージを読み取るユーザーレベルのプログラムを対象としています。ただし、必要なのは、カーネルモジュールからこれらのメッセージを読み取ることです。PCANドライバーは変数/関数をエクスポートしません。つまり、使用するカーネルレベルのAPIを提供しません。

copy_from_userコードを簡単に見て、/ devデバイスから読み取って、またはを使用せずに書き込みますcopy_to_user。したがって、カーネルモジュールから/ dev / pcan0を開いて、そこから読み取るのは安全だと思いました。

今私の質問は、カーネルモジュールから/ devデバイスを開く/読み取るにはどうすればよいですか?

PS RTAIリアルタイムスレッドからCANバスから読み取りたいのですが、それが問題を引き起こすと思いますか(たとえば、すべての読み取りがLinuxカーネルを通過し、リアルタイム条件を壊しますか?)

4

2 に答える 2

3

カーネルスペースから直接syscallを使用できます:sys_open()、sys_read()、sys_close()。それについてのLinuxjournalの記事があります。

P / S:copy_from_user()は、カーネル空間アドレスで完全に機能します。

于 2011-11-18T11:42:03.697 に答える
0

Given that I was using RTDM, there were two options:

  • Using RTDM direct functions, such rt_dev_open, rt_dev_read etc
    • This is not implemented in the current version of pcan driver
  • Using RTDM ioctl
    • This was the solution and it worked
于 2011-11-22T16:03:49.913 に答える