📄 udev文件系统的使用和基本工作原理分析 - colorant的专栏 - csdn博客.htm
字号:
<DIV>在udevd中,对inotify和udev的netlink
socket文件描述符都进行了select的等待操作。有事件发生以后再进一步处理。</DIV>
<DIV> </DIV>
<DIV><STRONG><FONT size=5><SPAN>4.3<SPAN
style="FONT: 7pt 'Times New Roman'">
</SPAN></SPAN>Udevtrigger的工作机制?</FONT></STRONG></DIV>
<DIV>运行udevd以后,使用udevtrigger的时候,会把内核中已经存在的设备的节点创建出来,那么他是怎么做到这一点的?
分析udevtrigger的代码可以看出:</DIV>
<DIV> </DIV>
<DIV>udevtrigger通过向/sysfs
文件系统下现有设备的uevent节点写"add"字符串,从而触发uevent事件,使得udevd能够接收到这些事件,并创建buildin的设备驱动的设备节点以及所有已经insmod的模块的设备节点。</DIV>
<DIV> </DIV>
<DIV>所以,我们也可以手工用命令行来模拟这一过程:</DIV>
<DIV> </DIV>
<DIV>/ # echo "add" > /sys/block/mtdblock2/uevent</DIV>
<DIV>/ # </DIV>
<DIV>/ # UEVENT[178.415520] add<SPAN>
/block/mtdblock2 (block)</SPAN></DIV>
<DIV> </DIV>
<DIV>但是,进一步看代码,你会发现,实际上,不管你往uevent里面写什么,都会触发add事件,这个从kernel内部对uevent属性的实现函数可以看出来,默认的实现是:</DIV>
<DIV>static ssize_t store_uevent(struct device *dev, struct device_attribute
*attr,</DIV>
<DIV><SPAN>
const char *buf, size_t count)</SPAN></DIV>
<DIV>{</DIV>
<DIV><SPAN>
kobject_uevent(&dev->kobj, KOBJ_ADD);</SPAN></DIV>
<DIV><SPAN> return count;</SPAN></DIV>
<DIV>}</DIV>
<DIV>所以不管写的内容是什么,都是触发add操作,真遗憾,我还想通过这个属性实验remove的操作。 不知道这样限制的原因是什么。</DIV>
<DIV> </DIV>
<DIV>而udevstart的实现方式和udevtrigger就不同了,它基本上是重复实现了udevd里面的机制,通过遍历sysfs,自己完成设备节点的创建,不通过udevd来完成。</DIV>
<DIV> </DIV>
<DIV><STRONG><FONT size=5><SPAN>4.4<SPAN
style="FONT: 7pt 'Times New Roman'">
</SPAN></SPAN>其它</FONT></STRONG></DIV>
<DIV><SPAN>Ø<SPAN
style="FONT: 7pt 'Times New Roman'">
</SPAN></SPAN>udevd创建每一个节点的时候,都会fork出一个新的进程来单独完成这个节点的创建工作。</DIV>
<DIV> </DIV>
<DIV><SPAN>Ø<SPAN
style="FONT: 7pt 'Times New Roman'">
</SPAN></SPAN>Uevent_seqnum
用来标识当前的uevent事件的序号(已经产生了多少uevent事件),你可以通过如下操作来查看:</DIV>
<DIV> </DIV>
<DIV>$ cat /sys/kernel/uevent_seqnum</DIV>
<DIV>2673</DIV>
<DIV> </DIV></DIV>
<P class="right articalinfo">发表于 @ <A title=permalink
href="http://blog.csdn.net/colorant/archive/2008/01/09/2031721.aspx">2008年01月09日
13:05:00</A>|<A title=评论
href="http://blog.csdn.net/colorant/archive/2008/01/09/2031721.aspx#FeedBack">评论(<SPAN
id=FeedbackCount_2031721>loading...</SPAN>
<SCRIPT type=text/javascript>AddFeedbackCountStack("2031721")</SCRIPT>
)</A>|<A title=编辑
href="http://writeblog.csdn.net/PostEdit.aspx?entryId=2031721">编辑</A></P><SPAN
id=Post.ascx_ViewPost_PreviousAndNextEntriesDown>
<H3 class=pagego><A
href="http://blog.csdn.net/colorant/archive/2008/02/27/2124992.aspx">新一篇: Android
Kernel Porting 的简单总结文档</A> | <A
href="http://blog.csdn.net/colorant/archive/2007/12/04/1916611.aspx">旧一篇: c语言核心技术
二</A></H3></SPAN></DIV></DIV>
<DIV class=commentslist>
<SCRIPT type=text/javascript>
var CurrentEntryId = '2031721';
var CurrentUserName = 'colorant';
</SCRIPT>
<SCRIPT src="udev文件系统的使用和基本工作原理分析 - colorant的专栏 - CSDN博客.files/feedback.js"
type=text/javascript></SCRIPT>
<DIV id=commentslist></DIV></DIV>
<DIV class=spacecommment></DIV>
<SCRIPT type=text/javascript>
LoadFeedbackCount();
document.write("<img src='http://counter.csdn.net/pv.aspx?id=24' border=0 width=0 height=0>");// 计数器
</SCRIPT>
</DIV></DIV></DIV>
<DIV id=csdnblog_sidebar>
<DIV class=gutter>
<DIV class=aboutauthor>
<DL>
<DT>用户操作
<DD class=middle><A href="http://webim.csdn.net/Messages/colorant.ashx"
target=_blank>[即时聊天]</A> <A
href="http://hi.csdn.net/Admin/WriteMessage.aspx?Receiver=colorant"
target=_blank>[发私信]</A> <A
href="http://webim.csdn.net/AddFriends/colorant.ashx" target=_blank>[加为好友]</A>
<DT><A href="http://hi.csdn.net/colorant">彩色蚂蚁</A><SPAN>ID:<A
href="http://hi.csdn.net/colorant">colorant</A></SPAN>
<DD class=middle><A href="http://hi.csdn.net/colorant"><IMG alt=""
src="udev文件系统的使用和基本工作原理分析 - colorant的专栏 - CSDN博客.files/1_colorant.jpg"></A>
<DD class=middle><A href="http://profile.csdn.net/8/E4/edit.html"></A>
<DD>共<EM>41310</EM>次访问,排名<EM>3261</EM>,<A
href="http://hi.csdn.net/colorant/profile/contactlist/1.html">好友</A><EM>31</EM>人,<A
href="http://hi.csdn.net/colorant/profile/concernedlist/1.html">关注者</A><EM>35</EM>人。<BR>从事Linux驱动开发,BlueZ协议栈开发,喜爱摄影。
<DD>
<DT>colorant的文章
<DD>原创 40 篇
<DD>翻译 0 篇
<DD>转载 0 篇
<DD>评论 26 篇
<DT>彩色蚂蚁的公告
<DD>希望和各位Linux开发者多多交流 8)
<DT>文章分类
<DD>
<DIV class=publiclist_sidebar>
<UL>
<LI><A href="http://blog.csdn.net/colorant/category/292888.aspx/rss"><IMG
alt=(RSS)
src="udev文件系统的使用和基本工作原理分析 - colorant的专栏 - CSDN博客.files/rss.gif"></A><A
href="http://blog.csdn.net/colorant/category/292888.aspx">10.Linux内核模块分析</A>
<LI><A href="http://blog.csdn.net/colorant/category/351743.aspx/rss"><IMG
alt=(RSS)
src="udev文件系统的使用和基本工作原理分析 - colorant的专栏 - CSDN博客.files/rss.gif"></A><A
href="http://blog.csdn.net/colorant/category/351743.aspx">15.驱动编程</A>
<LI><A href="http://blog.csdn.net/colorant/category/293198.aspx/rss"><IMG
alt=(RSS)
src="udev文件系统的使用和基本工作原理分析 - colorant的专栏 - CSDN博客.files/rss.gif"></A><A
href="http://blog.csdn.net/colorant/category/293198.aspx">20.内核杂项</A>
<LI><A href="http://blog.csdn.net/colorant/category/297036.aspx/rss"><IMG
alt=(RSS)
src="udev文件系统的使用和基本工作原理分析 - colorant的专栏 - CSDN博客.files/rss.gif"></A><A
href="http://blog.csdn.net/colorant/category/297036.aspx">21.内核ARM体系结构相关</A>
<LI><A href="http://blog.csdn.net/colorant/category/292873.aspx/rss"><IMG
alt=(RSS)
src="udev文件系统的使用和基本工作原理分析 - colorant的专栏 - CSDN博客.files/rss.gif"></A><A
href="http://blog.csdn.net/colorant/category/292873.aspx">30.调试工具和方法论</A>
<LI><A href="http://blog.csdn.net/colorant/category/441721.aspx/rss"><IMG
alt=(RSS)
src="udev文件系统的使用和基本工作原理分析 - colorant的专栏 - CSDN博客.files/rss.gif"></A><A
href="http://blog.csdn.net/colorant/category/441721.aspx">35.调试记录和分析</A>
<LI><A href="http://blog.csdn.net/colorant/category/358448.aspx/rss"><IMG
alt=(RSS)
src="udev文件系统的使用和基本工作原理分析 - colorant的专栏 - CSDN博客.files/rss.gif"></A><A
href="http://blog.csdn.net/colorant/category/358448.aspx">40.系统集成相关</A>
<LI><A href="http://blog.csdn.net/colorant/category/516900.aspx/rss"><IMG
alt=(RSS)
src="udev文件系统的使用和基本工作原理分析 - colorant的专栏 - CSDN博客.files/rss.gif"></A><A
href="http://blog.csdn.net/colorant/category/516900.aspx">50.输入法</A>
<LI><A href="http://blog.csdn.net/colorant/category/528235.aspx/rss"><IMG
alt=(RSS)
src="udev文件系统的使用和基本工作原理分析 - colorant的专栏 - CSDN博客.files/rss.gif"></A><A
href="http://blog.csdn.net/colorant/category/528235.aspx">60.应用开发</A>
<LI><A href="http://blog.csdn.net/colorant/category/351135.aspx/rss"><IMG
alt=(RSS)
src="udev文件系统的使用和基本工作原理分析 - colorant的专栏 - CSDN博客.files/rss.gif"></A><A
href="http://blog.csdn.net/colorant/category/351135.aspx">80.读书笔记</A>
<LI><A href="http://blog.csdn.net/colorant/category/293357.aspx/rss"><IMG
alt=(RSS)
src="udev文件系统的使用和基本工作原理分析 - colorant的专栏 - CSDN博客.files/rss.gif"></A><A
href="http://blog.csdn.net/colorant/category/293357.aspx">90.其它</A>
<LI><A href="http://blog.csdn.net/colorant/category/468688.aspx/rss"><IMG
alt=(RSS)
src="udev文件系统的使用和基本工作原理分析 - colorant的专栏 - CSDN博客.files/rss.gif"></A><A
href="http://blog.csdn.net/colorant/category/468688.aspx">T10.旅行</A></LI></UL></DIV>
<DT>收藏
<DD>
<DIV class=publiclist_sidebar>
<UL></UL></DIV>
<DT>我的其它主页空间
<DD><A href="http://colorant.yupoo.com/" target=_self>我的摄影相册</A><A
href="http://www.yupoo.com/services/feeds/photos?user_id=ff80808113090b90011327be59de425c"
target=_blank>(RSS)</A>
<DD><A href="http://colorant.blogcn.com/index.shtml"
target=_self>我的旅行摄影博客</A><A href="http://colorant.blogcn.com/rss.xml"
target=_blank>(RSS)</A>
<DT>存档
<DD>
<DIV class=publiclist_sidebar>
<UL>
<LI><A
href="http://blog.csdn.net/colorant/archive/2009/03.aspx">2009年03月(1)</A>
<LI><A
href="http://blog.csdn.net/colorant/archive/2009/02.aspx">2009年02月(2)</A>
<LI><A
href="http://blog.csdn.net/colorant/archive/2009/01.aspx">2009年01月(1)</A>
<LI><A
href="http://blog.csdn.net/colorant/archive/2008/10.aspx">2008年10月(1)</A>
<LI><A
href="http://blog.csdn.net/colorant/archive/2008/09.aspx">2008年09月(2)</A>
<LI><A
href="http://blog.csdn.net/colorant/archive/2008/08.aspx">2008年08月(8)</A>
<LI><A
href="http://blog.csdn.net/colorant/archive/2008/07.aspx">2008年07月(6)</A>
<LI><A
href="http://blog.csdn.net/colorant/archive/2008/06.aspx">2008年06月(2)</A>
<LI><A
href="http://blog.csdn.net/colorant/archive/2008/02.aspx">2008年02月(1)</A>
<LI><A
href="http://blog.csdn.net/colorant/archive/2008/01.aspx">2008年01月(1)</A>
<LI><A
href="http://blog.csdn.net/colorant/archive/2007/12.aspx">2007年12月(8)</A>
<LI><A
href="http://blog.csdn.net/colorant/archive/2007/04.aspx">2007年04月(7)</A></LI></UL></DIV><SPAN
id=RecentVisitors></SPAN><SPAN id=SubscriptionList>
<DT>订阅我的博客
<DD><A href="http://feeds.feedsky.com/csdn.net/colorant"><IMG alt=XML聚合
src="udev文件系统的使用和基本工作原理分析 - colorant的专栏 - CSDN博客.files/gif.gif"
border=0></A> <A href="http://feeds.feedsky.com/csdn.net/colorant"
target=_blank><IMG alt=FeedSky
src="udev文件系统的使用和基本工作原理分析 - colorant的专栏 - CSDN博客.files/feedsky.gif"
border=0></A></SPAN> </DD></DL></DIV></DIV></DIV>
<DIV id=pubfooter>
<DL>
<DT>
<DD>Csdn Blog version 3.1a
<DD>Copyright © 彩色蚂蚁 </DD></DL></DIV></DIV></FORM>
<SCRIPT src="udev文件系统的使用和基本工作原理分析 - colorant的专栏 - CSDN博客.files/counter.js"
type=text/javascript></SCRIPT>
<SCRIPT src="udev文件系统的使用和基本工作原理分析 - colorant的专栏 - CSDN博客.files/ga.js"
type=text/javascript>
</SCRIPT>
<SCRIPT type=text/javascript>
try {
var pageTracker = _gat._getTracker("UA-2688088-9");
pageTracker._trackPageview();
} catch(err) {}</SCRIPT>
</DIV></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -