Scull驱动

这里先完成作业,下一篇记录我遇到的问题和解决的方法。

1.什么是字符设备?

LDD3是这么说的:字符设备 能够像字节流一样被访问的对象,由字符设备驱动程序来实现这种特性,通常至少要实现open, close, read, write系统调用。

我是这样理解的,与块设备的区别是一次性操作的数据更小,适合与少量的数据操作。

2. 次设备号,通过什么途径传递给驱动模块代码使用的?

关于主设备号与次设备号:

主设备号标识设备对应的驱动程序 ,次设备号由内核使用,用于正确确定设备文件所所指的设备。我的理解是,主设备对应了哪一种设备,这种设备决定只能用那个驱动程序。而次设备就是对应的哪一个设备,决定内核通过驱动程序使用哪个确定的设备。

怎么实现的呢?

我是这么理解的,cdev_add (struct cdev *dev, dev_t num, 1);把整个设备编号告诉了内核,确定要使用哪个设备。(我暂时是这么理解的,可能有错误,我也是新手  呵呵 )

3. mknod 建立设备节点的使用方法?

当insmod  scull.ko后,/proc/devices会有一个scull的字符设备,可以看到这个scull的主设备号,然后mknod  /dev/scull c 250 0就可以在/dev目录下建立scull ,这个设备应该就是第二章的inode结构,记录了设备编号和字符设备的内核的内部结构。

4.驱动中是怎么注册字符设备的?

差不多就是insmod作了哪些工作吧,实际上它依赖于定一起在kernel/module.c中的一个系统调用。函数sys_init_module给模块分配内核内存,然后系统调用将模块正文复制到内核区域,并通过内核符号表分析模块中的内核引用,最后调用模块的初始化函数。其余的交给模块驱动程序了。

5. 字符设备的file_operations包括那些成员函数指针?

书上有,最好还是看看内核源码。(介绍一个我经常用的网站,从一牛人那儿学的   呵呵  http://lxr.linux.no)

6.第六点以作业形式交给应公。

 

 


你可能感兴趣的:(Scull驱动)