블록 디바이스 드라이버 소스 수정 요청
글쓴이: 손정수 / 작성시간: 월, 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:
댓글 달기