Linux 커널 3.10.14의 사용자 공간에서 I2C 장치 드라이버 노드에 액세스하려고합니다. 커널 설정에서 i2c-dev를 추가했고/dev/i2c- * 디바이스 노드를 얻었다. 그러나 자신이 갖고있는 권한 드라이버/I2C/I2C-dev.c에서 나는 콜백 드라이버 코드에서 장치 권한 설정에 실패했습니다.
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;
}
과 동일한 파일에 내가 디바이스 클래스 구조체에 콜백 추가
추가$ 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가 없습니다.
여기에 무엇이 잘못 될지 제안 해 주시면 감사하겠습니다.
이 문제를 테스트하는 방법에 대한 아이디어도 있습니다.
이렇게해도 장치 파일의 사용 권한은 변경되지 않았습니다. 그것은로서 사용된다 : – keepitintheground
드라이버/I2C/I2C-dev.c에서 I는 디바이스를 형성하기위한 헬퍼 매크로 DEVICE_ATTR 특성 발견 정적 DEVICE_ATTR (foo에, S_IRUGO, show_foo, store_foo); 이므로/dev/i2c- *의 사용 권한은 cr - r - r-- 이어야합니다. – keepitintheground
나는 이것을 테스트했다. 이것은 완벽하게 작동합니다. 패치 및 테스트 입술 아래 퍼팅. – rk1825