간단한 문자 디바이스 드라이버 프로그래밍 중...

beeswing의 이미지

처음으로 간단한 문자 디바이스 드라이버 프로그래밍을 하고 있습니다.
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
할 때는 문제없이 호출되었는데...
참 난감한 상황.... 어떤 증상인가요?

pastime의 이미지

어떤 문제인지 잘은 모르겠지만

각 함수들의 리턴값을 체크해 보심이 어떠실지..

익명 사용자의 이미지

소스 올려 주세요.

익명 사용자의 이미지

리턴값을 체크해볼 필요도 없는게....

read, write() 를 하면, 문자 디바이스에서 작동이 되야 하는데, 그냥 콘솔창에서 작동이 됩니다....

open, close() 는 링크가 됐는데, 유독 read, write() 만 링크가 안되는지....