간단한 문자 디바이스 드라이버 프로그래밍 중...
처음으로 간단한 문자 디바이스 드라이버 프로그래밍을 하고 있습니다.
init_module(), cleanup_module(), device_open(), device()release(), device_read(), device_write() 등을 만들었고,
file_operations 구조체에 등록도 시켰습니다.
insmod 로 모듈을 올리고, mknod 로 디바이스를 생성했습니다.
그래서,
cat > /dev/device
해주니까, device_open(), device_write(), device_release() 가 차례로 호출이 되었습니다. 만족
cat /dev/device
해주니까, 이번엔 device_read() 도 호출이 되고...
역시 만족
그런데, 따로 응용프로그램을 만들어서
char str[80]={"test"};
char buffer[80];
int fd = open("/dev/device", O_RDWR); <-- device_open() 호출 성공
write(fd, str, 4); <-- 모듈의 device_write() 가 호출되지 않음
read(fd, buffer, 4); <-- 역시 device_read() 가 호출되지 않음
close(fd); <-- device_release() 호출 성공
open, release 는 잘 되고, write 와 read 는 모듈과 연결이 되지 않는 것 같습니다.
cat /dev/device
할 때는 문제없이 호출되었는데...
참 난감한 상황.... 어떤 증상인가요?
리턴값 체크..
어떤 문제인지 잘은 모르겠지만
각 함수들의 리턴값을 체크해 보심이 어떠실지..
소스 올려 주세요.
소스 올려 주세요.
리턴값을 체크해볼 필요도 없는게....read, write() 를
리턴값을 체크해볼 필요도 없는게....
read, write() 를 하면, 문자 디바이스에서 작동이 되야 하는데, 그냥 콘솔창에서 작동이 됩니다....
open, close() 는 링크가 됐는데, 유독 read, write() 만 링크가 안되는지....
흑
댓글 달기