分类: 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中测试通过