모듈에서 파일을 열려면?
모듈 프로그래밍을 공부하다가 궁금한 것이 있는데요.
모듈을 메모리에 로드하고 나서 모듈에서 직접 파일을 열고, 그 안에 있는 내용을 읽거나 쓸 수 있도록 해 주고 싶습니다.
그런데 먼저 파일을 열려고 하는데 잘 안되는군요.
커널 버전 2.4.13이고요.
먼저 간단히 파일을 열고 닫는 것을 테스트해보려고 다음과 같이 프로그래밍했는데
-----------------------------------------------------------------------------
... (생략) ...
void ReadFile(char *Filename, int StartPos)
{
struct file *filp;
char *Buffer;
mm_segment_t oldfs;
int BytesRead;
Buffer = kmalloc(100, GFP_KERNEL);
if(Buffer==NULL)
return;
filp = filp_open(Filename, 00, O_RDONLY);
if(IS_ERR(filp)||(filp==NULL))
return;
if (filp->f_op->read == NULL)
return;
filp->f_pos = StartPos;
oldfs = get_fs();
set_fs(get_ds());
BytesRead = filp->f_op->read(filp, Buffer, 100, &filp->f_pos);
set_fs(oldfs);
fput(filp);
}
int init_module()
{
ReadFile("aaa.txt", 0);
}
void cleanup_module()
{
}
--------------------------------------------------------------------------
모듈은 정상적으로 컴파일되는데
모듈을 로드할 때 화면에 이상한 메시지가 잔뜩 나오면서 모듈이 작동하지 않습니다.
대충 내용을 살펴 보니 메모리 참조가 잘못되었는지 oops 메시지가 떴더군요
지금 여기서 막히고 있습니다. ㅠㅠ
소스에서 뭐가 문제인지 잘 모르겠군요..
모듈에서 파일 처리를 어떻게 할 수 있는지 자세히 알고 싶습니다.
[/code]
fput( filp );이 부분 때문에 에러가 나는것 같습니다.
fput( filp );
이 부분 때문에 에러가 나는것 같습니다. 이유는 저도 커널을 자세히 몰라서
모르겠구, 하여튼 저의 경우는 그 윗부분 까지는 제대로 동작해서
파일을 읽어오더군요. ^^
=========================
CharSyam ^^ --- 고운 하루
=========================
좀 이상하네요. 혹시나 2.4에서 파일 읽는 법이 바뀌었나 확인해 봤는데
좀 이상하네요. 혹시나 2.4에서 파일 읽는 법이 바뀌었나 확인해 봤는데
filp_open 으로 열고, fput 으로 닫는건 동일하더군요.
그런데 이상하게 fput으로 닫는 루틴이 있으니, 모듈이 죽어버리는 군요
그럼 고운 하루되세요.
=========================
CharSyam ^^ --- 고운 하루
=========================
댓글 달기