⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 043_fs_filesystem_c.html

📁 重读linux 2.4.2o所写的笔记
💻 HTML
字号:
  <html lang="zh-CN" xmlns:gdoc="">  <head> <meta content="text/html; charset=utf-8" http-equiv="Content-Type"> <style type="text/css">/* default css */table {  font-size: 1em;  line-height: inherit;}div, address, ol, ul, li, option, select {   margin-top: 0px;  margin-bottom: 0px;}p {  margin: 0px;}body {        margin: 0px;          padding: 0px;    font-family: Verdana, sans-serif;  font-size: 10pt;  background-color: #ffffff;}h6 { font-size: 10pt }h5 { font-size: 11pt }h4 { font-size: 12pt }h3 { font-size: 13pt }h2 { font-size: 14pt }h1 { font-size: 16pt }blockquote {padding: 10px; border: 1px #DDD dashed }a img {border: 0}div.google_header, div.google_footer {  position: relative;  margin-top: 1em;  margin-bottom: 1em;}/* end default css */  /* default print css */    @media print {    body {       padding: 0;       margin: 0;     }    div.google_header, div.google_footer {      display: block;      min-height: 0;      border: none;    }    div.google_header {      flow: static(header);    }    /* used to insert page numbers */    div.google_header::before, div.google_footer::before {      position: absolute;      top: 0;    }    div.google_footer {      flow: static(footer);    }    /* always consider this element at the start of the doc */    div#google_footer {      flow: static(footer, start);    }    span.google_pagenumber {      content: counter(page);    }    span.google_pagecount {      content: counter(pages);    }  }  @page {    @top {      content: flow(header);    }    @bottom {      content: flow(footer);    }  }  /* end default print css */ /* custom css *//* end custom css */  /* ui edited css */    body {    font-family: Verdana;        font-size: 10.0pt;    line-height: normal;    background-color: #ffffff;  }    .documentBG {    background-color: #ffffff;  }  /* end ui edited css */</style>   </head>  <body  revision="dcbsxfpf_31dmwct2dn:40">      <table align=center cellpadding=0 cellspacing=0 height=5716 width=802>
  <tbody>
  <tr>
    <td height=5716 valign=top width=802>
      <pre>2007-3-6   <br><span style=COLOR:#3333ff>自己看吧,就这几行代码. filesytem 的精华并不在这个同名文件中.</span><br><br>#ifdef CONFIG_DEVPTS_FS<br>extern int <span style=COLOR:#000099>init_devpts_fs</span>(void);<br>#endif<br><br>void <span style=COLOR:#000099>__init filesystem_setup</span>(void)<br>{<br>	<span style=COLOR:#006600>init_devfs_fs</span>();  /*  Header file may make this empty  */<br><br>#ifdef CONFIG_NFS_FS<br>	<span style=COLOR:#009900>init_nfs_fs</span>();<br>#endif<br><br>#ifdef CONFIG_DEVPTS_FS<br>	<span style=COLOR:#009900>init_devpts_fs</span>();<br>#endif<br>}<br><br>#if defined(CONFIG_NFSD_MODULE)<br>struct nfsd_linkage *nfsd_linkage = NULL;<br><br>long<br><span style=COLOR:#cc0000>asmlinkage</span> <span style=COLOR:#000099>sys_nfsservctl</span>(int cmd, void *argp, void *resp)<br>{<br>	int ret = -ENOSYS;<br>	<br>	lock_kernel();<br><br>	if (nfsd_linkage ||<br>	    (request_module ("nfsd") == 0 &amp;&amp; nfsd_linkage))<br>		ret = <span style=COLOR:#009900>nfsd_linkage-&gt;do_nfsservctl</span>(cmd, argp, resp);<br><br>	unlock_kernel();<br>	return ret;<br>}<br>EXPORT_SYMBOL(nfsd_linkage);<br><br>#elif ! defined (CONFIG_NFSD)<br>asmlinkage int <span style=COLOR:#000099>sys_nfsservctl</span>(int cmd, void *argp, void *resp)<br>{<br>	return -ENOSYS;<br>}<br>#endif /* CONFIG_NFSD */<br><br><br>倒是吧fs type列到这里吧,就像人走过的时候顺笔写上, xxx到此一游.<br>struct <font color=#000099><b>file_system_type</b></font> {<br>	const char *<font color=#000099><b>name</b></font>;<br>	int <font color=#000099><b>fs_flags</b></font>;<br>	struct <font color=#006600>super_block</font> *(*<font color=#006600><b>read_super</b></font>) (struct super_block *, void *, int);<br>	struct <font color=#006600>module </font>*<b>owner</b>;<br>	struct <font color=#006600>vfsmount </font>*<b>kern_mnt</b>; /* For kernel mount, if it's FS_SINGLE fs */<br>	struct <font color=#006600>file_system_type</font> * <b>next</b>;<br>};<br><br>#define <font color=#000099><b>DECLARE_FSTYPE</b></font>(var,type,read,flags) \<br>struct <font color=#006600>file_system_type</font> var = { \<br>	name:		type, \<br>	read_super:	read, \<br>	fs_flags:	flags, \<br>	owner:		<font color=#cc0000>THIS_MODULE</font>, \<br>}<br><br>#define <font color=#000099><b>DECLARE_FSTYPE_DEV</b></font>(var,type,read) \<br>	DECLARE_FSTYPE(var,type,read,<font color=#cc0000>FS_REQUIRES_DEV</font>)<br><br>read_super,是一个文件系统的开始.里边有这个文件系统的根,s_root. mount的时候,才需要做这个动作. do_mount(kern_mount)<br>+read_super构建一颗由vfsmount链接起来的dentry-&gt;mnt-&gt;dentry(root)混合树...<br><br>   由vfsmount, dentry 组成的这棵数, 加上file-&gt;dentry&lt;--&gt;inode&lt;--&gt;super&lt;fs_system_type 所形成的复杂的"网状"结构, 是整个<br>VFS的"组织结构".而组织结构最大的作用,就是互相方便的引用,查找. 同时也提供给user一个以字符串为媒介的接口"path".<br>   光是这庞大的组织,就占去了vfsmount,dentry,inode,super不少的"经费"(空间).然后依附于每个个体,都有一组feature:功能性<br>featrue+底层接口虚拟化.<br>   VFS在这个组织之上,依赖于这些feature,构筑整个VFS的实现,向上提供给user文件系统的统一操作,向下,有一组"标准"接口,可以方便<br>的实现具体的文件系统.<br>struct <font color=#000099><b>file_system_type</b></font> {<br>	const char *<font color=#000099><b>name</b></font>;   <font color=#ff0000><b>/*feature*/</b></font><br>	int <font color=#000099><b>fs_flags</b></font>;       <font color=#cc0000><b>/*feature*/	</b></font><br>        struct <font color=#006600>super_block</font> *(*<font color=#006600><b>read_super</b></font>) (struct super_block *, void *, int); <font color=#ff0000><b>/*featue虚拟化接口*/</b></font><br>	struct <font color=#006600>module </font>*<b>owner</b>;  <font color=#cc0000><b>/*组织*/</b></font><br>	struct <font color=#006600>vfsmount </font>*<b>kern_mnt</b>; <font color=#cc0000><b>/*组织*/	</b></font><br>        struct <font color=#006600>file_system_type</font> * <b>next</b>; <font color=#cc0000><b>/*组织*/</b></font><br>};<br><br>    <br><br><br></pre>
    </td>
  </tr>
  </tbody>
</table></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -