[완료] char device driver 올리는데 잘 안되네요...
캐릭터 디바이스를 올리려고 하는데 잘 안되네요
제가 생각하기에 insmod를 하면 /dev/밑에 원하는 게 생길거라고 생각했는데 생기지 않습니다.
mkmod로 올리고도 해보았는데, 안되는군요.. 뭐가 문제인지..
아래 테스트로 사용한 코드를 보내드립니다.
#include
#include
#include
#include
#include
#include
//MODULE_LICENSE("GPL");
//MODULE_AUTHOR("Peter Jay Salzman");
#define DEVICE_NAME "bit"
#define SUCCESS 0
static int device_open(struct inode *, struct file *);
static int device_release(struct inode *, struct file *);
static ssize_t device_read(struct file *, char *, size_t, loff_t *);
static ssize_t device_write(struct file *, const char *, size_t, loff_t *);
static dev_t dev;
static int Major;
static struct file_operations fops = {
.read = device_read,
.write = device_write,
.open = device_open,
.release = device_release
};
static int __init initBIT(void)
{
dev = MKDEV(251,0);
printk(KERN_INFO "BIT TEST START\n");
printk(KERN_INFO "Major : %d Minor : %d \n", MAJOR(dev), MINOR(dev));
register_chrdev_region(dev, 1, DEVICE_NAME);
//Major = register_chrdev(0, DEVICE_NAME, &fops);
return 0;
}
static void __exit exitBIT(void)
{
//unregister_chrdev(Major, DEVICE_NAME);
unregister_chrdev_region(dev, 1);
printk(KERN_INFO "BIT TEST STOP\n");
}
static int device_open(struct inode *inode, struct file *file)
{
printk(KERN_INFO "OPEN DEVICE \n");
try_module_get(THIS_MODULE);
return SUCCESS;
}
static int device_release(struct inode *inode, struct file *file)
{
return SUCCESS;
}
static ssize_t device_read(struct file *flip,
char *buffer,
size_t length,
loff_t *offset)
{
int bytes_read = 0;
printk(KERN_INFO "READ DEVICE \n");
return bytes_read;
}
static ssize_t device_write(struct file *flip,
const char *buffer,
size_t length,
loff_t *offset)
{
printk(KERN_INFO "WRITE DEVICE \n");
return -EINVAL;
}
module_init(initBIT);
module_exit(exitBIT);
하수이지만...확인 한번 해보세요...
mknod로 드라이버파일이 생성되었는지 /dev/xxx 확인 해보세요...
그리고 insmod로 컴파일된 xxx.o 또는 커널 2.6이라면 xxx.ko를 로드 하시구
lsmod로 모듈이 올라 가 있는지 확인해보시면 어떨까요?? ^^ 답이 없어서 허접 답변 달아 봅니다.
============================
Stay Hungry, Stay Foolish
============================
Stay Hungry, Stay Foolish
네 답변 감사합니다.
네 먼저 답변 감사드리구요.
제가 드라이버쪽은 그리 많이 해보지 않아서 그러는데 ....
현재 저 코드를 컴파일해서 insmod로 로드했구요.
그러면 /dev/ 밑에 드라이버가 생성되는게 아닌가요?
먼저 mknod로 드라이버 파일 생성하고 난 다음에 모듈 올려야 하나요?
참고로 insmod하고 lsmod로 하면 잘 올라가 있습니다.
---------------------------------
http://blog.naver.com/munhoney
---------------------------------
register_chrdev 가 remark 되어서 fops 가 등록이 안되었네요.
디바이스 드라이버와 /dev/xxx 가 생성되는 것은 별개입니다.
순서는 상관이 없고 mknod 를 실행해서 device node 를 생성하시면 되구요.
소스를 보니깐 register_chrdev() 가 remark 되어 있어서 fops 가 등록이 안되었으므로
/dev/xxx 장치를 열어도 error 가 난것 같네요.
네 감사합니다.
말씀하신데로 하니 되더군요.
감사합니다. ^^
---------------------------------
http://blog.naver.com/munhoney
---------------------------------
댓글 달기