查看: 941|回复: 1

[经验] Linux设备驱动程序简介

[复制链接]
  • TA的每日心情
    郁闷
    2021-10-6 14:33
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2021-9-27 15:16:17 | 显示全部楼层 |阅读模式
    分享到:
    Linux是Unix操作系统的一种变种,在 Linux下编写驱动程序的原理和思想完全类似于其他的Unix系统,但它dos或window环境下的驱动程序有很大的区别。在Linux环境下设计驱 动程序,思想简洁,操作方便,功能也很强大,但是支持函数少,只能依赖kernel中的函数,有些常用的操作要自己来编写,而且调试也不方便。




    系统调用是操作系统内核和应用程序之间的接口,设备驱动程序是操作系统内核和机器硬件之间的接口.设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用 程序看来,硬件设备只是一个设备文件, 应用程序可以象操作普通文件一样对硬件设备进行操作.设备驱动程序是内核的一部分,它完成以下的功能:




    1.对设备初始化和释放.

    2.把数据从内核传送到硬件和从硬件读取数据.

    3.读取应用程序传送给设备文件的数据和回送应用程序请求的数据.

    4.检测和处理设备出现的错误.




    在Linux操作系统下有两类主要的设备文件类型,一种是字符设备,另一种是块设备.字符设备和块设备的主要区别是:在对字符设备发出读/写请求时,实 际的硬件I/O一般就紧接着发生了,块设备则不然,它利用一块系统内存作缓冲区,当用户进程对设备请求能满足用户的要求,就返回请求的数据,如果不能,就 调用请求函数来进行实际的I/O操作.块设备是主要针对磁盘等慢速设备设计的,以免耗费过多的CPU时间来等待.




    已经提到,用户进程 是通过设备文件来与实际的硬件打交道.每个设备文件都有其文件属性(c/b),表示是字符设备还是?另外每个文件都有两个设备号,第一个是主设备 号,标识驱动程序,第二个是从设备号,标识使用同一个设备驱动程序的不同的硬件设备,比如有两个软盘,就可以用从设备号来区分他们.设备文件的的主设备号 必须与设备驱动程序在登记时申请的主设备号一致,否则用户进程将无法访问到驱动程序.

    最后必须提到的是,在用户进程调用驱动程序时,系统进入核心态,这时不再是抢先式调度.也就是说,系统必须在你的驱动程序的子函数返回后才能进行其他的工作.如果你的驱动程序陷入死循环,不幸的是你只有重新启动机器了,然后就是漫长的fsck.


    回复

    使用道具 举报

  • TA的每日心情

    2021-10-11 17:39
  • 签到天数: 43 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2021-9-28 13:59:04 | 显示全部楼层
    学习学习 看看
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-26 03:49 , Processed in 0.116322 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.