这两天都在看ldd3的第三章《字符设备驱动程序》
这一章应该说是对于初学者来说要实现自己的第一个驱动程序scull。
个人感觉,要深刻理解和掌握这一章,一定要理解scull到底是什么样一个设备。于是从网上下载到ldd3的源代码(我的资源中有),准备先编译和运行其中的scull驱动模块,看看到底是个什么东西。
打开scull目录,发现里面的内容如下:
access.c
main.c 主程序,scull设备的初始化、卸载、open、write等实现都在这里面
Makefile
pipe.c 第六章《高级字符驱动程序操作》会用到,用来讲解阻塞型设备
scull.h 头文件
scull.init
scull_load 加载scull模块的脚本
scull_unload 卸载scull模块的脚本
//直接运行make命令会有问题,需要做如下修改:
1) 将main.c中的<linux/config.h>更改为<linux/sched.h>,并将<linux/sched.h>也增加到pipe.c和access.c中。因为从2.6.19版本以后config.h文件被取消了.所以以后有config.h的地方都会报错。
2)Makefile修改:将Makefile中的全部CFLAGS用EXTRA_CFLAGS替换
3)access.c修改:替换所有current->uid 和 current->euid为 current->cred->uid和current->cred->euid。
/*终于将ldd3的第三章结束了。
2008年12月25日,今天圣诞节,西安很冷。办公室暖气很好。大家都在忙碌,我的工作已完成,可以静下心来看些东西真好,喜欢这个感觉。
开始第四章。*/
通过运行make命令生成scull.ko之后,我们就可以对该模块进行操作了。
执行scull_load脚本装载模块并创建设备节点
执行scull_unload脚本卸载模块并删除设备节点
装载好了之后可以向该节点中存储信息,然后使用cat查看该设备内的信息。
在操作设备的时候可以查看/var/log/messages文件查看内核的printk输出信息。
可执行操作举例如下:
1)ls -l > /dev/scull #将/dev目录下的文件信息存储到scull设备中
cat /dev/scull #通过cat命令查看设备内的内容进行验证
2)dd if=/dev/scull of=temp #从/dev/scull中读取数据,保存到当前目录下的temp文件
参考文章:http://blog.csdn.net/wooin/archive/2007/08/28/1762818.aspx