register_chrdev() 과 register_chrdev_region()의 차이(오류발생)
register_chrdev()로 character device 등록과
register_chrdev_region()로 character device 등록의 차이가 있는 것 같습니다.
register_chrdev()로 charactoer device 등록후
>cat /dev/mod_test
를 실행하면, file_operations 로 등록한 open file call되어서
device open이 이루어집니다.
하지만,
register_chrdev_region()으로 등록을 하고,
>cat /dev/mod_test
를 실행하면 cat: /dev/mod_test:그런 장치 혹은 주소가 없음
이라는 메세지가 나오면서 open 이 되지 않습니다.
두 경우 모두
lsmod로 보면 모듈이 등록되어 있고(major, minor 모두 같게),
/dev/ 밑에 mod_test라는 device file로 존재하는데,
왜 이런지 모르겠네요.
혹시, 제가 register_chrdev_region()를 잘못 사용하고 있는 것은 아닌가해서
init_module code를 같이 올립니다.
int __init my_init( void )
{
int result;
int major;
dev_t devicenumber;
major = 250;
devicenumber = MKDEV(major,0);
/* register_chrdev( MAJOR_NUMBER, "mod_test", &vd_fops ); */ // 이경우는 정상
result=register_chrdev_region(devicenumber,1,"mod_test"); // 이 경우는 device open이 되지 않음
/* result=alloc_chrdev_region(&devicenumber,0,1,"mod_test");*/
if(result < 0)
printk("Character device number error \n");
buffer = (char*) kmalloc( BUFF_SIZE, GFP_KERNEL );
memset( buffer, 0, BUFF_SIZE);
printk( "[VB] initialized, Kernel Version=%d\n",kernel_ver);
return 0;
}
댓글 달기