linux设备驱动程式学习资料_第1页
linux设备驱动程式学习资料_第2页
linux设备驱动程式学习资料_第3页
linux设备驱动程式学习资料_第4页
linux设备驱动程式学习资料_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

n更多企业学院: 中小企业管理全能版183套讲座+89700份资料总经理、高层管理49套讲座+16388份资料中层管理学院46套讲座+6020份资料国学智慧、易经46套讲座人力资源学院56套讲座+27123份资料各阶段员工培训学院77套讲座+ 324份资料员工管理企业学院67套讲座+ 8720份资料工厂生产管理学院52套讲座+ 13920份资料财务管理学院53套讲座+ 17945份资料销售经理学院56套讲座+ 14350份资料销售人员培训学院72套讲座+ 4879份资料Linux设备驱动程式学习(6)-高级字符驱动程式操作(3)设备文件的访问控制Linux设备驱动程式学习(6)-高级字符驱动程式操作(3)设备文件的访问控制提供访问控制对于一个设备节点来的可靠性来说有时是至关重要的。这部分的内容只是在open和release方法上做些修改,增加一些检查机制既可。 独享设备最生硬的访问控制方式是只允许一个设备一次被一个进程打开(独享),这是个设备驱动最简单的访问控制。实现十分简单,具体的代码看实验源码吧!模块程式链接:scullsingle.tar.gz模块测试程式链接:scullsingle-test.tar.gzARM9实验板的实验现象是:Tekkaman2440SBC2440V4#cd /lib/modules/Tekkaman2440SBC2440V4#insmod scullsingle.koTekkaman2440SBC2440V4#cat /proc/devicesCharacter devices:1 mem2 pty3 ttyp4 /dev/vc/04 tty4 ttyS5 /dev/tty5 /dev/console5 /dev/ptmx7 vcs10 misc13 input14 sound81 video4linux89 i2c90 mtd116 alsa128 ptm136 pts180 usb189 usb_device204 s3c2410_serial252 scullsingle253 usb_endpoint254 rtcBlock devices:1 ramdisk256 rfd7 loop31 mtdblock93 nftl96 inftl179 mmcTekkaman2440SBC2440V4#mknod -m 666 scullsingle c 252 0Tekkaman2440SBC2440V4#cd /tmp/Tekkaman2440SBC2440V4#./scullsingle-test &Tekkaman2440SBC2440V4#open scullsingle is file=3Tekkaman2440SBC2440V4#echo 12345 /dev/scullsingle-sh: cannot create /dev/scullsingle: Device or resource busyTekkaman2440SBC2440V4#cat /dev/scullsinglecat: cant open /dev/scullsingle单用户访问 open 调用在第一次打开记住了设备拥有者,此用户可多次打开设备,并协调多个进程对设备并发操作。同时,没有其他用户可打开他,避免了外部干扰。这个模块我是利用completion模块改的,这要既能实现功能,也方便测试。模块程式链接:completion-singleUID.tar.gz模块测试程式链接:completion-singleUID-test.tar.gzARM9实验板的实验现象是:Tekkaman2440SBC2440V4#insmod /lib/modules/singleUID.koTekkaman2440SBC2440V4#cat /proc/devicesCharacter devices:1 mem2 pty3 ttyp4 /dev/vc/04 tty4 ttyS5 /dev/tty5 /dev/console5 /dev/ptmx7 vcs10 misc13 input14 sound81 video4linux89 i2c90 mtd116 alsa128 ptm136 pts180 usb189 usb_device204 s3c2410_serial252 singleUID253 usb_endpoint254 rtcBlock devices:1 ramdisk256 rfd7 loop31 mtdblock93 nftl96 inftl179 mmcTekkaman2440SBC2440V4#mknod -m 666 /dev/singleUID c 252 0Tekkaman2440SBC2440V4#/tmp/singleUID_testr&Tekkaman2440SBC2440V4#login tekkamanPassword:Set search library path int /etc/profileSet user path in /etc/profileruning /etc/profile okTekkaman2440SBC2440V4#/tmp/singleUID_testwopen singleUID code=-1Tekkaman2440SBC2440V4#/tmp/singleUID_testropen singleUID code=-1Tekkaman2440SBC2440V4#exitTekkaman2440SBC2440V4#/tmp/singleUID_testwwrite code=0Tekkaman2440SBC2440V4#read code=01 + Done /tmp/singleUID_testr阻塞型单用户访问模块程式链接:completion-singleUIDnb.tar.gz模块测试程式链接:completion-singleUIDnb-test.tar.gzARM9实验板的实验现象是:Tekkaman2440SBC2440V4#insmod /lib/modules/singleUIDnb.koTekkaman2440SBC2440V4#cat /proc/devicesCharacter devices:1 mem2 pty3 ttyp4 /dev/vc/04 tty4 ttyS5 /dev/tty5 /dev/console5 /dev/ptmx7 vcs10 misc13 input14 sound81 video4linux89 i2c90 mtd116 alsa128 ptm136 pts180 usb189 usb_device204 s3c2410_serial252 singleUIDnb253 usb_endpoint254 rtcBlock devices:1 ramdisk256 rfd7 loop31 mtdblock93 nftl96 inftl179 mmcTekkaman2440SBC2440V4#mknod -m 666 /dev/singleUIDnb c 252 0Tekkaman2440SBC2440V4#/tmp/singleUID_testrnb&Tekkaman2440SBC2440V4#login tekkamanPassword:Set search library path int /etc/profileSet user path in /etc/profileruning /etc/profile okTekkaman2440SBC2440V4#/tmp/singleUID_testrnb &Tekkaman2440SBC2440V4#/tmp/singleUID_testwnb &Tekkaman2440SBC2440V4#exitTekkaman2440SBC2440V4#psPID Uid VSZ Stat Command 1 root 1744 S init 2 root SW kthreadd 3 root SWN ksoftirqd/0 4 root SW watchdog/0 5 root SW events/0 6 root SW khelper 59 root SW kblockd/0 60 root SW ksuspend_usbd 63 root SW khubd 65 root SW kseriod 77 root SW pdflush 78 root SW pdflush 79 root SW kswapd0 80 root SW aio/0707 root SW mtdblockd708 root SW nftld709 root SW inftld710 root SW rfdd742 root SW kpsmoused751 root SW kmmcd769 root SW rpciod/0778 root 1752 S -sh779 root 1744 S init781 root 1744 S init782 root 1744 S init783 root 1744 S init814 root 1336 D /tmp/singleUID_testrnb816 tekkaman 1336 S /tmp/singleUID_testrnb817 tekkaman 1336 S /tmp/singleUID_testwnb818 root 1744 R psTekkaman2440SBC2440V4#/tmp/singleUID_testwnb&Tekkaman2440SBC2440V4#read code=0write code=0write code=0read code=02 + Done /tmp/singleUID_testwnb1 + Done /tmp/singleUID_testrnbTekkaman2440SBC2440V4#psPID Uid VSZ Stat Command 1 root 1744 S init 2 root SW kthreadd 3 root SWN ksoftirqd/0 4 root SW watchdog/0 5 root SW events/0 6 root SW khelper 59 root SW kblockd/0 60 root SW ksuspend_usbd 63 root SW khubd 65 root SW kseriod 77 root SW pdflush 78 root SW pdflush 79 root SW kswapd0 80 root SW aio/0707 root SW mtdblockd708 root SW nftld709 root SW inftld710 root SW rfdd742 root SW kpsmoused751 root SW kmmcd769 root SW rpciod/0778 root 1752 S -sh779 root 1744 S init781 root 1744 S init782 root 1744 S init783 root 1744 S init820 root 1744 R ps在 open 时复制设备访问控制的另一个技术是根据打开条件创建不同的设备私有副本。这只有当设备没有绑定到一个硬件实体时才有可能。 /dev/tty 的内部使用类似的技术来给他的进程一个不同的 /dev 入口点所呈现的“景象”。这类访问控制较少见,但这个实现可说明内核代码能轻松改动应用程式的运行环境,类似windows中的虚拟机概念。我将书中的例子作了修改,实现了不同的用户使用scull的不同私有副本,这样方便了在ARM9实验板上做测试。这个实验源码需要一定的linux 链表的知识(在第十一章),下一篇会介绍。模块程式链接:scullcloned.tar.gzARM9实验板的实验现象是:Tekkaman2440SBC2440V4#cd /lib/modules/Tekkaman2440SBC2440V4#insmod scullcloned.koTekkaman2440SBC2440V4#cat /proc/devicesCharacter devices:1 mem2 pty3 ttyp4 /dev/vc/04 tty4 ttyS5 /dev/tty5 /dev/console5 /dev/ptmx7 vcs10 misc13 input14 sound81 video4linux89 i2c90 mtd116 alsa128 ptm136 pts180 usb189 usb_device204 s3c2410_serial252 scullcloned253 usb_endpoint254 rtcBlock devices:1 ramdisk256 rfd7 loop31 mtdblock93 nftl96 inftl179 mmcTekk

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论