블록 디바이스 드라이버 소스 수정 요청
글쓴이: 손정수 / 작성시간: 월, 2003/03/24 - 4:59오후
블록 디바이스 드라이버를 만들어 보려고 하는데요....자꾸만 커널 버그가 뜹니다...
코드는 다음과 같습니다.
struct buffer_head *bh;
...........슬램 할당자를 통해 버퍼 헤더 할당 받음......
switch(rw) {
case WRITE:
mark_buffer_dirty(bh);
ll_rw_block(WRITE,1,&bh);
wait_on_buffer(bh); //input buf to queue
break;
case READ:
mark_buffer_uptodate(bh, 0); //set BH_Uptodate into 0.
if(buffer_uptodate(bh)){ //is buffer contains valid data????
return 0;
}
ll_rw_block(READA,1,&bh); //not exe --> error
wait_on_buffer(bh);
break;
default :
BUG();
}
다음은 버퍼 헤더의 필드값입니다.
dev = MKDEV(3,65);
bh->b_dev = dev;
bh->b_rdev = dev;
bh->b_blocknr = 0; //position in sector, 0
bh->b_rsector = 0; //pysical sector number!
bh->b_size = 512; //block size
bh->b_data = (char *)__get_dma_pages(GFP_KERNEL, get_order(size));
bh->b_state = 0;
이렇게 하면 커널 버그가 뚜르루 뜹니다. 파티션은 /dev/hdb1 에다 썼습니다.
무슨 다른 설정을 해줘야 하나요.. .고수님들 제발 좀 도와 주세요...
Forums:


댓글 달기