2013-02-05 3 views
6

에 struct cdev를 등록해야하는 이유 이것은 초보자 용 질문 일 수는 있지만 이해해 주시기 바랍니다.드라이버 코드

왜 문자 드라이버에 struct cdev를 정확히 등록해야합니까?

답변

8

귀하의 질문에 대한 답변을 통해, 귀하는 struct cdev의 중요성에 대해 질문하는 것 같습니다. struct cdevinode 구조의 요소 중 하나입니다. 이미 알 수 있듯이 inode 구조체가 커널에서 내부적으로 파일을 나타내는 데 사용됩니다. struct cdev은 char 디바이스를 나타내는 커널의 내부 구조입니다. 따라서 cdev* i_cdev 필드는 struct inode은 cdev 구조체에 대한 포인터이고 inode은 char 장치 파일을 참조합니다. 따라서 커널이 문자 장치를 호출해야하는 경우 cdev 유형의 구조를 등록해야합니다.

13

struct cdev은 커널 내의 문자 장치를 나타냅니다.

모든 스트리밍 장치 (예 : UART, 키보드)는 문자 장치 범주에 해당하고 디바이스 노드 파일 (예 :는/dev/ttyS0에)와 같은 사용자 공간에서 사용할 수 있습니다. 사용자 응용 프로그램은 표준 파일 I/O 작업을 사용하여 장치에 액세스합니다. 커널 내부

enter image description here

는 문자 드라이버는 장치 파일과 스트리밍 장치 사이에서오고,이 드라이버 층은 장치 운영 및 그 반대로 파일 I/O 작업을 번역을 담당한다.

문자 장치 드라이버 개발에서 struct file_operations은 사용되는 가장 중요한 데이터 구조입니다. 이 구조체는 장치에 대한 기본 기능인 open(), read(), write(), close(), ioctl() 등 ... 기능을 구현하는 데 사용됩니다.

struct cdev 구조는 file_operations 구조와 다른 중요한 드라이버 정보 (주/보조 번호 없음)를 캡슐화합니다. 문자 드라이버를 커널에 등록하는 새로운 방법입니다.

cdev 구조는 다음과 같은 API를 통해 커널에 액세스 : cdev_add()를 호출 한 후

cdev_init() - used to initialize struct cdev with the defined file_operations 
cdev_add() - used to add a character device to the system. 
cdev_del() - used to remove a character device from the system 

는 장치가 바로 살아있다. 정의한 모든 함수 (file_operations 구조체를 통해)를 호출 할 수 있습니다.

+0

이 질문은 관련성이 있으며, 전체 그림이 실제로 나왔는지 확실하지 않습니다. http://free-electrons.com/doc/books/ldd3.pdf에서 scull.c 드라이버는 cdev를 정의하고 통과합니다 fops 구조체뿐만 아니라 파일 설명자 (struct 파일에도 fops가 있습니다). struct fops를 파일 설명자에 전달해야한다는 것을 이해합니다 (사용자가 파일을 읽거나 쓸 때 메서드가 호출되도록).하지만 왜 동일한 fops 정보로 cdev strcuture가 필요합니까? – user1159290

관련 문제