LinuxカーネルのユーザスペースからI2Cデバイスドライバノードにアクセスしたい3.10.14。 カーネル構成でi2c-devを追加し、/ dev/i2c- *デバイスノードを取得しました。しかし、彼らは私がコールバックにドライバコードからのデバイス許可の設定に失敗しました
static char *i2c_dev_devnode(struct device *dev, umode_t *mode)
{
if (!mode)
return NULL;
if (MAJOR(dev->devt) == I2C_MAJOR)
*mode = 0666;
return NULL;
}
と同じファイル内に追加の許可ドライバ/ I2C/I2C-dev.cで
$ ls -l /dev/i2c-*
crw------- root root 89, 1 2014-08-21 20:00 i2c-1
を持っている私は、デバイスのクラス構造体へのコールバックを追加しました:
デバイスノードのアクセス権が残っしかしstatic int __init i2c_dev_init(void)
{
...
i2c_dev_class = class_create(THIS_MODULE, "i2c-dev");
...
/* set access rights */
i2c_dev_class->devnode = i2c_dev_devnode;
...
}
crw------- root root 89, 1 2014-08-21 20:00 i2c-1
/lib/udev/rules.dや/etc/udev/rules.dはありません
ここで間違っているかもしれない何か提案がありましたら幸いです。
私はこのアイデアをテストする方法にも興味があります。
これは、デバイスファイルのアクセス許可を変更しませんでした。ドライバ/ I2C/I2C-dev.cにおいて – keepitintheground
Iはまた、デバイスを定義するためのヘルパーマクロDEVICE_ATTR属性が見つかりました: それは次のように使用されている: 静的DEVICE_ATTR(FOO、S_IRUGO、show_foo、store_foo)。 したがって、/ dev/i2c- *のパーミッションはcr-r-r-- でなければなりません。 – keepitintheground
私はあなたのためにこれをテストしました。これは完全に機能します。パッチ&テストの下に置く。 – rk1825