에 struct cdev를 등록해야하는 이유 이것은 초보자 용 질문 일 수는 있지만 이해해 주시기 바랍니다.드라이버 코드
왜 문자 드라이버에 struct cdev를 정확히 등록해야합니까?
에 struct cdev를 등록해야하는 이유 이것은 초보자 용 질문 일 수는 있지만 이해해 주시기 바랍니다.드라이버 코드
왜 문자 드라이버에 struct cdev를 정확히 등록해야합니까?
귀하의 질문에 대한 답변을 통해, 귀하는 struct cdev
의 중요성에 대해 질문하는 것 같습니다. struct cdev
은 inode
구조의 요소 중 하나입니다. 이미 알 수 있듯이 inode
구조체가 커널에서 내부적으로 파일을 나타내는 데 사용됩니다. struct cdev
은 char 디바이스를 나타내는 커널의 내부 구조입니다. 따라서 cdev* i_cdev
필드는 struct inode
은 cdev 구조체에 대한 포인터이고 inode
은 char 장치 파일을 참조합니다. 따라서 커널이 문자 장치를 호출해야하는 경우 cdev
유형의 구조를 등록해야합니다.
struct cdev
은 커널 내의 문자 장치를 나타냅니다.
모든 스트리밍 장치 (예 : UART, 키보드)는 문자 장치 범주에 해당하고 디바이스 노드 파일 (예 :는/dev/ttyS0에)와 같은 사용자 공간에서 사용할 수 있습니다. 사용자 응용 프로그램은 표준 파일 I/O 작업을 사용하여 장치에 액세스합니다. 커널 내부
는 문자 드라이버는 장치 파일과 스트리밍 장치 사이에서오고,이 드라이버 층은 장치 운영 및 그 반대로 파일 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 구조체를 통해)를 호출 할 수 있습니다.
이 질문은 관련성이 있으며, 전체 그림이 실제로 나왔는지 확실하지 않습니다. http://free-electrons.com/doc/books/ldd3.pdf에서 scull.c 드라이버는 cdev를 정의하고 통과합니다 fops 구조체뿐만 아니라 파일 설명자 (struct 파일에도 fops가 있습니다). struct fops를 파일 설명자에 전달해야한다는 것을 이해합니다 (사용자가 파일을 읽거나 쓸 때 메서드가 호출되도록).하지만 왜 동일한 fops 정보로 cdev strcuture가 필요합니까? – user1159290