리눅스 디바이스드라이버를 공부하고 있습니다 .
static struct file_operations fops = {
.owner = THIS_MODULE,
.read = sk_read,
.write = sk_write,
.open = sk_open,
.release = sk_release,
};
제가모듈에 file_operation을 저렇게 작성하고 각 함수들을 정의한후 모듈을 insmod 했습니다.
이제 정의한 함수를 커널안에서 호출하고 싶은데
(정확하게는 vfs_write 함수에서 sk_write를 호출하고 싶습니다)
그러기 위해선 어떤 방법으로 가능한지 알고 싶습니다
.
일단 kernel 전문가 들이 하는 말로는 vfs_write 였는지 하여튼 구조체의 아래단에 있는 함수던가?..
그걸 사용하면 된다고 합니다. 그런데 어느곳에서도 그런 방식을 추천하지 않죠...
kernel 의 전체적인 구조에서 어긋난다고 할까요?...
뭐 이래저래 어려운 말 말고.. vfs_write와 같은 함수를 kernel 단에서 호출하게 되었을 때 한두번 해서 잘되면 그냥 그렇게 컴파일 해서 사용을 하겠죠. 하지만 만약 한번이라도 예외 적인 경우가 발생을 한다면, 이때부터 정말 피말리는 작업을 하실 지도 모릅니다. 즉 문제 발생시 debugging 하기가 뭐같다는 거죠...
참고로, kernel 내부에서 device 에 접근 하고자 할 때....
register 접근이나 복잡한 처리를 하는 경우라면 그냥 함수 만들어서 처리하게 하고 EXPORT_SYMBOL 로 다른 파일에서 호출하도록 하는 것이 나을 듯 싶습니다.
실은 저도 Device Driver 를 Kernel 단에서 접근해야 하는 경우가 있었죠.
그때는 별방법이 없어서 그냥 APP 쪽에서 하라고 했었는데, 생각해보면 kernel 소스의 여러 stack 처럼 중간에 middle ware 로 처리하는 방법도 있지 않을 가 싶네요.
그럼 고생하세요....^^;;