문제

나는 편집하고 달렸다 Chardev.c 예제 LKMPG 그리고 장치에 글을 쓸 때 예상치 못한 오류가 발생했습니다.

anon@anon:~/lkmpg$ sudo echo "hi" > /dev/chardev
bash: /dev/chardev: Permission denied

모듈 쓰기 기능은 다음과 같습니다.

/*  
 * Called when a process writes to dev file: echo "hi" > /dev/chardev 
 */
static ssize_t
device_write(struct file *filp, const char *buff, size_t len, loff_t * off)
{
    printk(KERN_ALERT "Sorry, this operation isn't supported.\n");
    return -EINVAL;
}

유효하지 않은 작동의 예상 오류와/var/log/메시지에 오류가 인쇄되지 않습니다.

예상 결과를 얻은 문제없이 장치에서 읽을 수 있습니다.

anon@anon:~/lkmpg$ cat /dev/chardev 
I already told you 6 times Hello world!

장치 /dev /chardev는 다음을 사용하여 수동으로 만들어집니다.

sudo mknod /dev/chardev c 252 0

거래는 무엇입니까?

--편집하다--

분명히 장치를 만들려고 할 때 다음과 같은 권한으로 끝납니다.

crw-r--r-- 1 root root 252, 0 2009-10-30 09:27 /dev/chardev. 

내가 한 후 sudo chmod a+w /dev/chardev 운전자는 예상대로 일했습니다.

그러나 사람들은 이것을하는 것이 옳지 않다고 말했습니다.

올바른 행동 과정은 무엇이며 그 이유는 무엇입니까?

도움이 되었습니까?

해결책

캐릭터 드라이버를 구현하는 방법에 대한 정말로, 정말로, 정말 간단하고 간단한 예제에서 찾을 수 있습니다. drivers/watchdog/softdog.c

코드를이 예제와 비교할 수 있으며 다음을 수행하는 방법을 보여줍니다.

  • 장치에서 읽으십시오
  • 장치에 쓰십시오
  • 장치를 통해 IOCTL 인터페이스를 제시하십시오

SoftDog는 매우 유용한 도구이지만 다른 것만 큼 튜토리얼입니다. 앨런 콕스 (Alan Cox)는 그것을 함께 던졌으므로 더 '적절한'구현의 좋은 예입니다.

전체 소스를 모듈에 게시 할 수있는 경우, 귀하의 기능이 예상대로 입력되지 않은 이유를 찾을 수 있습니다.

업데이트:

그것은이다 아주 특권 사용자에 따라 캐릭터 장치에 글을 쓸 수 있도록 허용됩니다! 나는 반복한다 완벽하게 허용됩니다 특권이있는 사용자 하에서 캐릭터 장치에 편지를 쓸 수 있도록! 그렇지 않은 경우 퓨즈, 모뎀, USB 가제트, CD ROM 및 기타 제품과 같은 물건은 루트 액세스가 필요합니다.

당신이 할 수있는 일은 활용하는 것입니다 그룹 멤버십. 즉, 우분투에서 사용자는 퓨즈 (사용자 공간의 파일 시스템)를 사용할 수 있도록 허용하는 사용자는 '퓨즈'그룹에 속해야하며,이 기능은 해당 기능을 사용할 수 있고 사용할 수없는 사람에 대한 세분화 된 액세스를 허용합니다. 마찬가지로, 일부 시스템에서 QRNG (Quantum Random Number Generator)가 사용 중이며 캐릭터 장치입니다. PHP가 해당 장치에 액세스 할 수 있도록해야합니다.

  • QRNG 그룹을 만듭니다
  • PHP가 사용자로 실행되는지 확인하십시오 (익명 시스템 사용자가 아님)
  • 장치에 대한 액세스가 필요한 앱을 QRNG 그룹에 소유하는 사용자 추가

나는 그것이 그것을 정리하기를 바랍니다 :)

다른 팁

실제 문제는 당신이 쓰기 위해 발행 한 명령이 잘못된 것이라고 생각합니다. 노력하다

#sudo sh -c "echo "hi" > /dev/chardev"

Sudo로 여러 명령을 실행하려면 위와 같이 명령을 사용해야합니다. 이를 통해 CHMOD를 수행하고 권한을 변경할 필요가 없습니다. 도움이 되었기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top