FreeBSD 9.1内核文件编译分析

论坛 期权论坛     
选择匿名的用户   2021-6-2 17:48   271   0
<span style="font-size:14px"><span style="font-family:Microsoft YaHei"></span></span>
<p><span style="font-family:Tahoma">本文不是叫大家怎么做FreeBSD内核,做内核太简单了,不管是Linux和Unix。</span></p>
<p><span style="font-family:Tahoma">在网上找了好久,一点可用的文章都没有找到,FreeBSD的官网的文章也没有给出说法,只能自己在/usr/src和/usr/src/sys和/usr/src/sys/conf下面疯狂的grep,找文件,找引用,才有了自己的一些理解。</span></p>
<p><span style="font-family:Tahoma">先说说Linux的内核文件的编译关联吧,Linux的每个文件的编译和是kconfig配置关联在一起的,kconfig在经过make menuconfig之后,得到一个.config文件,然后每个文件夹下面的Makefile,会check这个全局的.config文件,来决定哪些文件该编译,哪些不用编译。多说无益,参考代码即可。</span></p>
<p><span style="font-family:Tahoma">FreeBSD的做法有些不一样了,Linux把哪些文件要编译分散到了每个文件夹,然后check Makefile。FreeBSD是做两个总的文件,决定哪些文件该编译哪些不该,这两个文件分别是这个路径下:<br> </span><a href="mailto:ztz0223&"><span style="font-family:Tahoma">ztz0223&#64;BTazuo:/usr/src/sys/conf</span></a><span style="font-family:Tahoma"> % pwd<br> /usr/src/sys/conf<br> 的两个文件:files,files.i386<br> files是与架构无关的,也就是不管代码在什么平台上面编译,i386或者power pc上面都靠这个文件控制编译。对应的files.i386,就是特定平台的编译控制。</span></p>
<p><span style="font-family:Tahoma">我们来看一下,这两个文件里面是什么吧,首先是files:<br> 2082 dev/xe/if_xe.c          optional xe<br> 2083 dev/xe/if_xe_pccard.c       optional xe pccard<br> 2084 dev/xl/if_xl.c          optional xl pci<br> 2085 dev/xl/xlphy.c          optional xl pci<br> 2086 fs/coda/coda_fbsd.c     optional vcoda<br> 2087 fs/coda/coda_psdev.c        optional vcoda<br> 2088 fs/coda/coda_subr.c     optional vcoda<br> 2089 fs/coda/coda_venus.c        optional vcoda<br> 2090 fs/coda/coda_vfsops.c       optional vcoda<br> 2091 fs/coda/coda_vnops.c        optional vcoda<br> 2092 fs/deadfs/dead_vnops.c      standard<br> 2093 fs/devfs/devfs_devs.c       standard<br> 2094 fs/devfs/devfs_dir.c        standard<br> 2095 fs/devfs/devfs_rule.c       standard<br> 2096 fs/devfs/devfs_vfsops.c     standard<br> 2097 fs/devfs/devfs_vnops.c      standard<br> 2098 fs/fdescfs/fdesc_vfsops.c   optional fdescfs<br> 2099 fs/fdescfs/fdesc_vnops.c    optional fdescfs<br> 2100 fs/fifofs/fifo_vnops.c      standard<br> 2101 fs/hpfs/hpfs_alsubr.c       optional hpfs<br> 2102 fs/hpfs/hpfs_lookup.c       optional hpfs<br> &#34;files&#34; [readonly] 3544 lines --57%--      </span></p>
<p><span style="font-family:Tahoma">再看files.i386:<br> 417 i386/i386/minidump_machdep.c    standard<br> 418 i386/i386/mp_clock.c        optional smp<br> 419 i386/i386/mp_machdep.c      optional native smp<br> 420 i386/xen/mp_machdep.c       optional xen smp<br> 421 i386/i386/mp_watchdog.c     optional mp_watchdog smp<br> 422 i386/i386/mpboot.s      optional smp native<br> 423 i386/xen/mptable.c      optional apic xen<br> 424 i386/i386/perfmon.c     optional perfmon<br> 425 i386/i386/pmap.c        optional native<br> 426 i386/xen/pmap.c         optional xen<br> 427 i386/i386/ptrace_machdep.c  standard<br> 428 i386/i386/stack_machdep.c   optional ddb | stack<br> 429 i386/i386/support.s     standard<br> 430 i386/i386/swtch.s       standard<br> 431 i386/i386/sys_machdep.c     standard<br> 432 i386/i386/trap.c        standard<br> 433 i386/i386/uio_machdep.c     standard<br> 434 i386/i386/vm86.c        standard<br> 435 i386/i386/vm_machdep.c      standard<br> 436 i386/ibcs2/ibcs2_errno.c    optional ibcs2<br> 437 i386/ibcs2/ibcs2_fcntl.c    optional ibcs2<br> 438 i386/ibcs2/ibcs2_ioctl.c    optional ibcs2<br> 439 i386/ibcs2/ibcs2_ipc.c      optional ibcs2<br> 440 i386/ibcs2/ibcs2_isc.c      optional ibcs2<br> &#34;files.i386&#34; [readonly] 537 lines --71%--                       </span></p>
<p><span style="font-family:Tahoma">对于上面的files,我要说的就是,后面带有standard的表明该文件一定会编译,不管是快速编译指定模块,还是全部完全编译。 二 optional xxx标识当xxx选项开启的时候,才会编译对应的文件。如果内核里指定了options,就会编译到内核文件里,而不是以模块方式可以动态加载的了,一般都会建议采用模块方式。<br> 上面files.i386可以看出:<br> 436 i386/ibcs2/ibcs2_errno.c    optional ibcs2  只有在ibcs2选项开启的时候才会编译<br> 而:<br> 432 i386/i386/trap.c        standard                 在i386架构平台下编译的话,一定要编译的。</span></p>
<p><span style="font-family:Tahoma">OK,说到这里,已经知道文件如何编译的了,那么在指定快速编译的时候,就是在make.conf里面指定编译的模块,就如官网文档所示:</span></p>
<p><span style="font-family:Tahoma">    ----------&#x
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP