ioctl을 정의에 매핑

ioctl을 정의에 매핑

Linux 드라이버 모듈의 ioctl 프로토타입은 다음과 같습니다.

int ioctl(struct inode *i, struct file *f, unsigned int cmd, unsigned long arg);

또는

long ioctl(struct file *f, unsigned int cmd, unsigned long arg);

하지만 sys/ioctl.h에서는

int ioctl(int fd, int request, void *argp);

첫 번째 매개변수는 다른 유형입니다. ioctl 호출자와 드라이버 사이에 해당 매개변수(파일 설명자에서 파일 구조 포인터로)를 변환하는 모듈이 있습니까?

이 매핑은 어떻게 작동하나요? (파일 설명자에서 파일로).

답변1

(4.13) 에는 ${kernel_root}/fs/ioctl.c다음이 있습니다.

SYSCALL_DEFINE3(ioctl, unsigned int, fd, unsigned int, cmd, unsigned long, arg)

이는 SYSCALL_DEFINE3이러한 인수를 가져와 시스템 호출에 적합한 서명으로 확장하는 매크로입니다. 이 함수는 ioctl사용자 공간에서 시스템 호출을 위한 논리적 진입점입니다. 그러면 함수는 struct fd주어진 파일 설명자에 해당하는 파일 설명자를 찾고 호출은 드라이버에 do_vfs_ioctl도달 하기 전에 VFS 계층을 통과하지만 이를 통해 검색을 시작할 수 있습니다 struct file.struct fd

관련 정보