📄 linux设备驱动程序学习(6)-高级字符驱动程序操作[(3)设备文件的访问控制] - linux设备驱动程序 - tekkaman ninja.htm
字号:
<STRONG><FONT color=#0000ff
size=4>独享设备</FONT></STRONG></DIV>
<P>最生硬的访问控制方式是只允许一个设备一次被一个进程打开(独享),这是一个设备驱动最简单的访问控制。实现十分简单,具体的代码看实验源码吧!</P>
<P><FONT face=新宋体>模块程序链接:<A
href="http://blogimg.chinaunix.net/blog/upfile2/071107144934.gz"
target=_blank><STRONG><FONT
face="Courier New">scullsingle.tar.gz</FONT></STRONG></A></FONT></P>
<P><FONT size=3>模块测试程序<FONT color=#ff0000><FONT
face=新宋体><FONT
color=#000000>链接</FONT></FONT></FONT>:<A
href="http://blogimg.chinaunix.net/blog/upfile2/071109103414.gz"
target=_blank><STRONG><FONT
size=2>scullsingle-test.tar.gz</FONT></STRONG></A></FONT></P>
<P><FONT size=4><SPAN
style="COLOR: rgb(0,1,255)">ARM9实验板的实验现象是:</SPAN></FONT></P>
<TABLE style="BORDER-COLLAPSE: collapse"
borderColor=#999999 cellSpacing=0 cellPadding=0
width="95%" bgColor=#f1f1f1 border=1>
<TBODY>
<TR>
<TD>
<P
style="MARGIN: 5px; LINE-HEIGHT: 150%"><CODE><SPAN
style="COLOR: #000000"><SPAN
style="COLOR: #0000cc">[</SPAN>Tekkaman2440@SBC2440V4<SPAN
style="COLOR: #0000cc">]</SPAN><SPAN
style="COLOR: #0000cc">#</SPAN>cd <SPAN
style="COLOR: #0000cc">/</SPAN>lib<SPAN
style="COLOR: #0000cc">/</SPAN>modules<SPAN
style="COLOR: #0000cc">/</SPAN><BR><SPAN
style="COLOR: #0000cc">[</SPAN>Tekkaman2440@SBC2440V4<SPAN
style="COLOR: #0000cc">]</SPAN><SPAN
style="COLOR: #0000cc">#</SPAN>insmod
scullsingle<SPAN
style="COLOR: #0000cc">.</SPAN>ko<BR><SPAN
style="COLOR: #0000cc">[</SPAN>Tekkaman2440@SBC2440V4<SPAN
style="COLOR: #0000cc">]</SPAN><SPAN
style="COLOR: #0000cc">#</SPAN>cat <SPAN
style="COLOR: #0000cc">/</SPAN>proc<SPAN
style="COLOR: #0000cc">/</SPAN>devices<BR>Character
devices<SPAN
style="COLOR: #0000cc">:</SPAN><BR> 1
mem<BR> 2 pty<BR> 3
ttyp<BR> 4 <SPAN
style="COLOR: #0000cc">/</SPAN>dev<SPAN
style="COLOR: #0000cc">/</SPAN>vc<SPAN
style="COLOR: #0000cc">/</SPAN>0<BR> 4
tty<BR> 4 ttyS<BR> 5 <SPAN
style="COLOR: #0000cc">/</SPAN>dev<SPAN
style="COLOR: #0000cc">/</SPAN>tty<BR> 5
<SPAN style="COLOR: #0000cc">/</SPAN>dev<SPAN
style="COLOR: #0000cc">/</SPAN>console<BR> 5
<SPAN style="COLOR: #0000cc">/</SPAN>dev<SPAN
style="COLOR: #0000cc">/</SPAN>ptmx<BR> 7
vcs<BR> 10 misc<BR> 13
input<BR> 14 sound<BR> 81
video4linux<BR> 89 i2c<BR> 90
mtd<BR>116 alsa<BR>128 ptm<BR>136 pts<BR>180
usb<BR>189 usb_device<BR>204
s3c2410_serial<BR><FONT color=#ff0000>252
scullsingle</FONT><BR>253 usb_endpoint<BR>254
rtc<BR><BR>Block devices<SPAN
style="COLOR: #0000cc">:</SPAN><BR> 1
ramdisk<BR>256 rfd<BR> 7
loop<BR> 31 mtdblock<BR> 93
nftl<BR> 96 inftl<BR>179 mmc<BR><SPAN
style="COLOR: #0000cc">[</SPAN>Tekkaman2440@SBC2440V4<SPAN
style="COLOR: #0000cc">]</SPAN><SPAN
style="COLOR: #0000cc">#</SPAN>mknod <SPAN
style="COLOR: #0000cc">-</SPAN>m 666 scullsingle
c 252 0<BR><SPAN
style="COLOR: #0000cc">[</SPAN>Tekkaman2440@SBC2440V4<SPAN
style="COLOR: #0000cc">]</SPAN><SPAN
style="COLOR: #0000cc">#</SPAN>cd <SPAN
style="COLOR: #0000cc">/</SPAN>tmp<SPAN
style="COLOR: #0000cc">/</SPAN><BR><SPAN
style="COLOR: #0000cc">[</SPAN>Tekkaman2440@SBC2440V4<SPAN
style="COLOR: #0000cc">]</SPAN><SPAN
style="COLOR: #0000cc">#</SPAN><SPAN
style="COLOR: #0000cc">.</SPAN><SPAN
style="COLOR: #0000cc">/</SPAN>scullsingle<SPAN
style="COLOR: #0000cc">-</SPAN><SPAN
style="COLOR: #ff0000">test</SPAN> <SPAN
style="COLOR: #0000cc">&</SPAN><BR><SPAN
style="COLOR: #0000cc">[</SPAN>Tekkaman2440@SBC2440V4<SPAN
style="COLOR: #0000cc">]</SPAN><SPAN
style="COLOR: #0000cc">#</SPAN><SPAN
style="COLOR: #ff0000">open</SPAN> scullsingle
is <SPAN style="COLOR: #ff0000">file</SPAN><SPAN
style="COLOR: #0000cc">=</SPAN>3<BR><SPAN
style="COLOR: #0000cc">[</SPAN>Tekkaman2440@SBC2440V4<SPAN
style="COLOR: #0000cc">]</SPAN><SPAN
style="COLOR: #0000cc">#</SPAN>echo 12345 <SPAN
style="COLOR: #0000cc">></SPAN> <SPAN
style="COLOR: #0000cc">/</SPAN>dev<SPAN
style="COLOR: #0000cc">/</SPAN>scullsingle<BR><SPAN
style="COLOR: #0000cc">-</SPAN>sh<SPAN
style="COLOR: #0000cc">:</SPAN> cannot create
<SPAN style="COLOR: #0000cc">/</SPAN>dev<SPAN
style="COLOR: #0000cc">/</SPAN>scullsingle<SPAN
style="COLOR: #0000cc">:</SPAN> Device <SPAN
style="COLOR: #0000ff">or</SPAN> resource
busy<BR><SPAN
style="COLOR: #0000cc">[</SPAN>Tekkaman2440@SBC2440V4<SPAN
style="COLOR: #0000cc">]</SPAN><SPAN
style="COLOR: #0000cc">#</SPAN>cat <SPAN
style="COLOR: #0000cc">/</SPAN>dev<SPAN
style="COLOR: #0000cc">/</SPAN>scullsingle<BR>cat<SPAN
style="COLOR: #0000cc">:</SPAN> can<SPAN
style="COLOR: #ff00ff">'t open '</SPAN><SPAN
style="COLOR: #0000cc">/</SPAN>dev<SPAN
style="COLOR: #0000cc">/</SPAN>scullsingle</SPAN></CODE></P></TD></TR></TBODY></TABLE>
<P>
<HR id=null>
<FONT color=#0000ff
size=4><STRONG>单用户访问</STRONG></FONT>
<P></P>
<P><FONT size=4><FONT size=3>open
调用在第一次打开记住了设备拥有者,此用户可多次打开设备,并协调多个进程对设备并发操作。同时,没有其他用户可打开它,避免了外部干扰。这个模块我是利用</FONT></FONT><FONT
size=3>completion模块改的,这要既可以实现功能,也方便测试。</FONT></P>
<P><FONT size=4><FONT face=新宋体 size=3>模块程序链接:<A
href="http://blogimg.chinaunix.net/blog/upfile2/071107144823.gz"
target=_blank><STRONG><FONT face="Courier New"
size=2>completion-singleUID.tar.gz</FONT></STRONG></A></FONT></P>
<P><FONT size=3>模块测试程序<FONT color=#ff0000><FONT
face=新宋体><FONT
color=#000000>链接</FONT></FONT></FONT>:<A
href="http://blogimg.chinaunix.net/blog/upfile2/071109103256.gz"
target=_blank><STRONG><FONT
size=2>completion-singleUID-test.tar.gz</FONT></STRONG></A></FONT></P>
<P><FONT size=4><SPAN
style="COLOR: rgb(0,1,255)">ARM9实验板的实验现象是:</SPAN></FONT></P></FONT>
<TABLE style="BORDER-COLLAPSE: collapse"
borderColor=#999999 cellSpacing=0 cellPadding=0
width="95%" bgColor=#f1f1f1 border=1>
<TBODY>
<TR>
<TD>
<P
style="MARGIN: 5px; LINE-HEIGHT: 150%"><CODE><SPAN
style="COLOR: #000000"><SPAN
style="COLOR: #0000cc">[</SPAN>Tekkaman2440@SBC2440V4<SPAN
style="COLOR: #0000cc">]</SPAN><SPAN
style="COLOR: #0000cc">#</SPAN>insmod <SPAN
style="COLOR: #0000cc">/</SPAN>lib<SPAN
style="COLOR: #0000cc">/</SPAN>modules<SPAN
style="COLOR: #0000cc">/</SPAN>singleUID<SPAN
style="COLOR: #0000cc">.</SPAN>ko</SPAN></CODE><CODE><SPAN
style="COLOR: #000000"><FONT face=新宋体><SPAN
style="COLOR: #0000cc">[</SPAN>Tekkaman2440@SBC2440V4<SPAN
style="COLOR: #0000cc">]</SPAN><SPAN
style="COLOR: #0000cc">#</SPAN>cat <SPAN
style="COLOR: #0000cc">/</SPAN>proc<SPAN
style="COLOR: #0000cc">/</SPAN>devices<BR>Character
devices<SPAN
style="COLOR: #0000cc">:</SPAN><BR> 1
mem<BR> 2 pty<BR> 3
ttyp<BR> 4 <SPAN
style="COLOR: #0000cc">/</SPAN>dev<SPAN
style="COLOR: #0000cc">/</SPAN>vc<SPAN
style="COLOR: #0000cc">/</SPAN>0<BR> 4
tty<BR> 4 ttyS<BR> 5 <SPAN
style="COLOR: #0000cc">/</SPAN>dev<SPAN
style="COLOR: #0000cc">/</SPAN>tty<BR> 5
<SPAN style="COLOR: #0000cc">/</SPAN>dev<SPAN
style="COLOR: #0000cc">/</SPAN>console<BR> 5
<SPAN style="COLOR: #0000cc">/</SPAN>dev<SPAN
style="COLOR: #0000cc">/</SPAN>ptmx<BR> 7
vcs<BR> 10 misc<BR> 13
input<BR> 14 sound<BR> 81
video4linux<BR> 89 i2c<BR> 90
mtd<BR>116 alsa<BR>128 ptm<BR>136 pts<BR>180
usb<BR>189 usb_device<BR>204
s3c2410_serial<BR><FONT color=#ff0000>252
singleUID</FONT><BR>253 usb_endpoint<BR>254
rtc<BR><BR>Block devices<SPAN
style="COLOR: #0000cc">:</SPAN><BR> 1
ramdisk<BR>256 rfd<BR> 7
loop<BR> 31 mtdblock<BR> 93
nftl<BR> 96 inftl<BR>179 mmc<BR><SPAN
style="COLOR: #0000cc">[</SPAN>Tekkaman2440@SBC2440V4<SPAN
style="COLOR: #0000cc">]</SPAN><SPAN
style="COLOR: #0000cc">#</SPAN>mknod <SPAN
style="COLOR: #0000cc">-</SPAN>m 666 <SPAN
style="COLOR: #0000cc">/</SPAN>dev<SPAN
style="COLOR: #0000cc">/</SPAN>singleUID c 252
0</FONT><BR><SPAN
style="COLOR: #0000cc">[</SPAN>Tekkaman2440@SBC2440V4<SPAN
style="COLOR: #0000cc">]</SPAN><SPAN
style="COLOR: #0000cc">#</SPAN><SPAN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -