私はドライバー ライターではなく、ユーザー ランドから write(2)/read(2) を実行するときに bsg ドライバー内で実際に呼び出される関数について質問があります。私の CentOS システムは Linux 2.6.32 を使用しています。驚いたことに、この CentOS システムで使用されるビルドのソースはインストールされていますが、bsg.c ファイルがありません(え?)。そこで、kernel.org から 2.6.32 のソースをダウンロードしました。
.../linux-2.6.32.61/block/bsg.cを見ています。そのソース バージョンについて、私の質問ですが、この関数 (661 行目) は、ユーザー ランドから write(2) を呼び出したときに呼び出されますか?
static ssize_t
bsg_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos)
SCSI Log Sense データを取得しようとしたときに write(2) を呼び出したときに EINVAL が返される場合とそうでない場合がある理由を突き止めようとしています。ドライバーソースで正しい軌道に乗っている場合、sizeof(sg_io_v4)
呼び出し元に EINVAL が返されるのは、記述子に書き込まれるデータのサイズが(/usr/include/linux/bsg で定義されている) で割り切れない場合のみです。 .h)。
アンディ