免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 810 | 回复: 0
打印 上一主题 下一主题

《基于linux的C编程与内核导读》连载(31) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-07 19:10 |只看该作者 |倒序浏览

6.1.3 Linux设备驱动程序
1、设备驱动程序概述
linux设备驱动程序是处理或操作硬件控制器的软件,被集成在内核中,是常驻内存的低级硬件处理程序的共享库,设备驱动程序就是对设备的抽象处理。Linux允许设备驱动程序作为内核可加载模块实现,这样除了可以在系统启动是进行注册外,还可以在启动后进行加载注册。
设备驱动程序软件封装了如何控制这些设备的技术细节,并通过特定的接口导出一个规范的操作集合:内核使用规范的设备接口,通过文件系统把设备操作导出到用户程序中,这样内核就可以用相同的方式对待不同的设备了。

2、设备驱动程序的功能
(1)对设备进行初始化
(2)使设备投入运行和退出服务。
(3)从设备接收数据并将它们送回内核。
(4)将数据从内核送到设备。
(5)检测和处理设备出现的错误。

3、设备驱动程序的代码
根据功能进行划分,可以把设备驱动程序的代码分为如下几个部分:
(1)驱动程序的注册与注销
系统引导时或系统引导后在需要装载模块时,对设备进行初始化过程中要通过register_chrdev()或register_blkdev()向内核注册。在不需要此设备时,要通过unregister_chrdev()或unregister_blkdev()从内核中注销此设备。
(2)设备的打开与释放
要使用设备就要打开该设备,通过open()来完成;在使用设备后需要释放该设备,一般用release()完成。
(3)设备的读写操作
字符设备的读写是通过read()和write()来实现的。而块设备的读写操作是通过调用函数block_read()和block_write()来完成对缓冲区的数据操作。对于块设备真正的读写是通过request_fn()来完成的。
(4)设备的控制操作
设备的控制操作可以通过驱动程序中的ioctl()来完成,与读写操作不同,ioctl()的用法与具体设备密切相关。除了ioctl()函数,设备驱动程序还有其它控制函数,如lseek()、mmap()、lock、fsync等。

4、设备驱动的加载
LINUX下的驱动加载有两种形式:
(1)使用模块的方式动态加载驱动,我们测试用建议都用这种形式的,因为它调试就和普通应用程序一样,可以通过NFS mount的方式来调试,非常方便。具体加载方法可以详见本书第八章的内核模块专题。
    (2)将驱动静态编译到内核里面,具体我也没有实践过,这里不作叙述,大家可以参考其它相关资料。

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/26619/showart_336026.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP