Chinaunix首页 | 论坛 | 博客
  • 博客访问: 240334
  • 博文数量: 37
  • 博客积分: 719
  • 博客等级: 上士
  • 技术积分: 325
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-04 10:04
文章分类

全部博文(37)

文章存档

2014年(2)

2013年(5)

2012年(11)

2011年(13)

2010年(3)

2009年(3)

分类: LINUX

2012-09-20 17:20:22

学习第三章发现对应scull源码太多内容和书本第三章内容不一致,所以根据内容修改了scull:

1)去掉pipe、access相关文件内容

2)去掉sem信号相关代码

3)去掉proc相关代码

4)增加scull0-3设备节点自动创建,使用自动创建节点需要root权限,没有就需要修改节点权限

第三章重点是:

1)scull的设备注册和设备节点自动创建

相关函数:

a)创建class

   scull_class = class_create(THIS_MODULE,"scull");

b)创建设备节点

   device_create(scull_class,NULL,devno,NULL,"scull""%d",index);

c)删除设备节点

  device_destroy(scull_class,MKDEV(scull_major,scull_minor + i));

d)删除class

  class_destroy(scull_class);

2)注意宏container_of,很重要

        dev=container_of(inode->i_cdev,struct scull_dev ,cdev);
        filp->private_data = dev;

   在scull_open中,填充filp->private_data,给scull_read和scull_write用

3)scull设备的内存结构

   以前念书的时候c不好,看这个图总以为链表长度是1000,看不明白write,read函数的逻辑:

测试:

insmod scull.ko

查看/dev下是否有scull0,scull1,scull2,scull3 4个设备,4个设备只有root有读写权限

然后按书上的读写方式:

ls /dev>scull0

cat scull0

读写设备设备正常工作.

代码在附件中,在linux3.0中测试通过

 scull精简(自动设备节点创建).rar   

 

阅读(1892) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~