도와주세요!!
글 수 15,339
2008.11.07 18:12:09 (*.100.85.10)
9120
2008.11.10 12:12:51 (*.100.85.10)
위와 같은 경우에 드라이버 등록시에 Major 번호와 함께 Minor 번호를 함께 등록해야 하나요?
제가 사용하는 커널 버전이 2.6.16버전인데 드라이버 파일 소스를 열어보면
result = register_chrdev( UART_MAJOR, DEVICE_NAME, &serial_fops );
와 같이 드라이버를 등록하고 있습니다.
여기에서는 드라이버 등록시 별도로 Minor 번호를 관리하고 있지 않은 것 같은데요
이런 경우에는 어떻게 하나요?
현재 상태에서 mknod로 말씀하신 것과 같이 노드 파일을 생성하고 각 드라이버를 오픈하면 에러가 나더군요.
드라이버 등록함수를 register_chrdev가 아닌 다른 함수를 사용해서 처리해야하나요?
제가 사용하는 커널 버전이 2.6.16버전인데 드라이버 파일 소스를 열어보면
result = register_chrdev( UART_MAJOR, DEVICE_NAME, &serial_fops );
와 같이 드라이버를 등록하고 있습니다.
여기에서는 드라이버 등록시 별도로 Minor 번호를 관리하고 있지 않은 것 같은데요
이런 경우에는 어떻게 하나요?
현재 상태에서 mknod로 말씀하신 것과 같이 노드 파일을 생성하고 각 드라이버를 오픈하면 에러가 나더군요.
드라이버 등록함수를 register_chrdev가 아닌 다른 함수를 사용해서 처리해야하나요?
2008.11.13 17:38:19 (*.138.143.22)
마이너 번호로 관리하는 것은 작성된 드라이버의 영역입니다.
커널과는 관계가 없습니다.
마이너 번호는 드라이버가 알아서 관리하는 것이니 마이너 번호 1,2,3 등을 열어서
열리지 않는다면 아마도 ioctl 함수를 사용하여 각각의 하드웨어를 관리하리라 예상됩니다.
드라이버 소스를 좀더 면밀히 살펴보신 후 사용하세요
커널과는 관계가 없습니다.
마이너 번호는 드라이버가 알아서 관리하는 것이니 마이너 번호 1,2,3 등을 열어서
열리지 않는다면 아마도 ioctl 함수를 사용하여 각각의 하드웨어를 관리하리라 예상됩니다.
드라이버 소스를 좀더 면밀히 살펴보신 후 사용하세요
/dev/mem 같은 종류의 파일을 노드파일이라고 합니다.
ls -al /dev/mem 을 하시면 정보가 아래와 같이 나옵니다.
crw-r----- 1 root kmem 1, 1 May 8 2007 /dev/mem
char 형 드라이버 이며 major=1. minor=1 이라고 나오네요
만드신 드라이버가 minor 번호를 관리하고 있다면 다음과 같이 노드 파일을 만들어 각각 제어하실 수 있습니다
mknod /dev/my_dev0 c 200 0
mknod /dev/my_dev1 c 200 1
mknod /dev/my_dev2 c 200 2
mknod /dev/my_dev3 c 200 3
위와 같이 노드파일을 만든 후 open("/dev/my_dev0", ) open("/dev/my_dev1", ) ....
4개를 열면 되겠군요