error: unknownfield ‘ioctl’ specified in initializer

error: unknownfield ‘ioctl’ specified in initializer
 
비동기식 알림은 디바이스가 준비되면 애플리케이션에 사전 통지하므로 디바이스 상태를 조회할 필요가 없습니다.
이 점은 하드웨어의 "중단"개념과 매우 유사하며, 비교적 정확한 명칭은 "신호 구동의 비동기식 I/O"이다.신호는 소프트웨어 차원에서 인터럽트 메커니즘에 대한 시뮬레이션으로 원리적으로 하나의 프로세스가 하나의 신호를 수신하는 것은 프로세서가 인터럽트 요청을 수신하는 것과 같다.
1) 드라이브를 2.6.32에서 2.6.36으로 이식하는 중 오류
/home/kernel_test/globalfifo/globalfifo.c:240:2:error: unknown field 'ioctl' specified in initializer
2.6.36의 파일을 발견했습니다_운영 구조에 중대한 변화가 생겼다.(그러나 기본적인 사상은 변하지 않는다)
기존 ioctl 구성원을 취소하고 새 구성원으로 추가
long(*unlocked_ioctl) (struct file *, unsigned int, unsigned long);

long(*compat_ioctl) (struct file *, unsigned int, unsigned long);

2)/home/kernel_test/globalfifo/globalfifo.c:245:2:warning: initialization from incompatible pointer type
이 Warnning이 나타나는 이유 "호환되지 않는 바늘 형식 초기화"는 당신이 정의한 함수 형식과 인터페이스 함수의 형식이 다르기 때문입니다.
다음을 수행합니다.
ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);

ssize_t(*write) (struct file *, const char __user *, size_t, loff_t *);

콘스트를 적게 쓰면 warning을 일으킬 수 있습니다. 왜냐하면 여기서 콘스트가 하는 역할은 함수가 바늘로 들어오는 값을 바꾸는 것을 피하는 것입니다.
 
237
238 /* */
239 static const struct file_operations globalfifo_fops = {
240     .owner = THIS_MODULE,
241     .read = globalfifo_read,
242     .write = globalfifo_write,
243     //.ioctl = globalfifo_ioctl,
244     .unlocked_ioctl = globalfifo_ioctl,
245     .poll = globalfifo_poll,
246     .fasync = globalfifo_fasync, /*   */
247     .open = globalfifo_open,
248     .release = globalfifo_release,
249 };
250
251

좋은 웹페이지 즐겨찾기