linux字符驱动insmod出现错误

birdthree 2012-07-05 06:59:28
linux字符驱动insmod出现如下错误:

BUG: unable to handle kernel NULL pointer dereference at 00000014

关键代码:

struct mem_dev

{

char *data;

unsigned long size;

};



/*include semaphore ,cdev

*/

struct scull_dev //我自己定义的一种字符设备,问题出自在各个?
但LDD上面写的可以将cdev结构嵌入到自己的设备特定结构中啊

{

struct mem_dev *mem_devp;

struct semaphore sem;

struct cdev cdev;

};

struct scull_dev *dev;


/*setup cdev*/
printk("1111\n"); //执行完这一行后出错

cdev_init(&dev->cdev, &scull_fops); //问题就出现在这一行
printk("2222\n");

dev->cdev.owner = THIS_MODULE;
printk("3333\n");

dev->cdev.ops = &scull_fops; //relate file_operations
printk("4444\n");

if ((ret = cdev_add(&dev->cdev, devt, 1))) //acknowledge kernel

{

printk(KERN_NOTICE "Error %d adding scull.\n", ret);

return -1;

}

else

printk("scull register success.\n");




dmesg调试结果:

[ 210.151746] alloc register successfully.
[ 210.160767] 1111
[ 210.161425] BUG: unable to handle kernel NULL pointer dereference at 00000014
[ 210.161655] IP: [<c020d503>] cdev_init+0x23/0x50


其他信息:

...全文
129 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
nevil 2012-07-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

引用 2 楼 的回复:

struct scull_dev *dev这行错了,应该是声明个结构struct scull_dev dev;


如果只改这行,->这样的引用方式也是错的

这有什么区别呢
[/Quote]

因为你没有为struct scull_dev *dev分配空间,要么你就用kmalloc分配

struct scull_dev *dev = kmalloc(sizeof(struct scull_dev ), GFP_KERNEL)
cdev_init(&dev->cdev, &scull_fops);
birdthree 2012-07-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

struct scull_dev *dev这行错了,应该是声明个结构struct scull_dev dev;
[/Quote]

如果只改这行,->这样的引用方式也是错的

这有什么区别呢
nevil 2012-07-05
  • 打赏
  • 举报
回复
struct scull_dev *dev这行错了,应该是声明个结构struct scull_dev dev;
birdthree 2012-07-05
  • 打赏
  • 举报
回复
独立的cdev结构我是能成功的,所用系统为ubuntu10.04

4,441

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧