• 网站刚刚上线,难免有不足的地方,敬请谅解!欢迎提出宝贵意见!

  •    3年前 (2015-08-14)  专业技术 内核驱动 |   1 条评论  294 
    文章评分 0 次,平均分 0.0

    上一篇中介绍了阻塞IO等的一些用法,本来这一篇准备介绍一下poll/select等的一些高级IO操作,后来想想,在实际工作中开发驱动的时候很少会使用到poll/select这些操作,就不再介绍,有兴趣的可以自己查找资料学习一下。这一篇会介绍下相对比较实用的设备文件的存取控制的一些内容。

    存取控制主要用于设备的使用控制,只有授权的用户才能访问设备或者同时只有一个进程访问设备。这也是存取控制使用最广的地方。下面分别简单说明。

    单open设备

    单open设备就是同时只有一个进程允许打开一次所要访问的设备。此种方法是最简单方便的访问控制策略,可以防止多进程的竞争问题,但是这样也造成了其局限性。不能同时被多个进程多个用户访问。下面是一个单open设备的简单实现:

    这段代码维护一个 atiomic_t 变量,称为 scull_s_available;这个变量被初始化为值 1,表示设备确实可用。open 调用递减并测试 scull_s_available 并拒绝存取如果其他人已经使设备打开。

    release调用,标识设备不再忙。

    单用户多进程使用设备

    这种方式更高级一些,可以允许单个用户的多个进程同时使用设备。这种方式在第一次打开设备是会记住设备拥有着,当下一次同一个用户打开设备时也会得到允许。在上面介绍的open实现中需要加入类似下面的代码:

    这里有几个注意点,scull_u_owner 和 scull_u_count来控制对设备的存取,并且可被多个进程并发地存取,为了使这俩个变量安全,使用自旋锁来控制。

    返回-EBUSY而不是-EPERM,我们这种情况虽然看着是在检查权限,但如果返回-EPERM,用户一般会去检查设备节点的文件mode已经拥有着,这是一个错误的方向。所以返回设备忙更合理。

    相应的release方法如下:

    以上就是设备存取控制最常用方法,还有一些不常用的点没有仔细介绍。有兴趣的可以自行了解,也欢迎随时交流。

     

    之前系列文章如下,欢迎阅读关注:

    Linux设备驱动第一篇:设备驱动程序简介

    Linux设备驱动第二篇:构造和运行模块

    Linux设备驱动第三篇:写一个简单的字符设备驱动

    Linux设备驱动第四篇:以Oops信息定位代码行为例谈驱动调试方法

    Linux设备驱动第五篇:驱动中的并发与竟态

    Linux设备驱动第六篇:高级字符驱动操作之Iotcl

    Linux设备驱动第七篇:高级字符驱动操作之阻塞IO

    本文属原创,转载请注明出处,违者必究

    关注微信公众平台:程序员互动联盟(coder_online),你可以第一时间获取原创技术文章,和(java/C/C++/Android/Windows/Linux)技术大牛做朋友,在线交流编程经验,获取编程基础知识,解决编程问题。程序员互动联盟,开发人员自己的家。

    Linux设备驱动第八篇:高级字符驱动操作之设备存取控制

     

    本文原始地址:http://www.coderonline.net/linux-device-driver-the-eighth-article-equipment-of-advanced-character-driven-operations-access-control.html

    本站所有文章,除特别注明外,均为本站原创,转载请注明出处来自http://www.coderonline.net/

    否则保留追究法律责任的权利!

    发表评论

    表情 格式
    1. 不甘地看了看柜台上的那张五十,那人“哼”了一声,被同伴拉了拉,提过东西就往门口走,走时还想找根称手的东西反击一下,砸不了人砸一下店子也好,没想一转身脚就踢在一个货架上,踩着人字拖的脚趾被撞得生疼,恨不得骂一声娘,刚准备骂一句以宣泄下自己的愤怒和憋屈,就听到身后传来两声狗叫。

      澳门威尼斯人9778官网 评论达人 LV.1 7个月前 (04-08) [0] [0]
    切换注册

    登录

    忘记密码 ?

    切换登录

    注册