配置FreeBSD的内核全.docx
- 文档编号:10189689
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:17
- 大小:30.97KB
配置FreeBSD的内核全.docx
《配置FreeBSD的内核全.docx》由会员分享,可在线阅读,更多相关《配置FreeBSD的内核全.docx(17页珍藏版)》请在冰豆网上搜索。
配置FreeBSD的内核全
< 第9章配置FreeBSD的内核 9.1概要 内核是FreeBSD操作系统的核心。 它用来管理内存,执行安全控制,网络,磁盘访问等等。 虽然现在FreeBSD可以更多地进行动态配置,但有时你还是需要重新配置和编译你的内核。 读完这章,你将了解到: ∙∙ 为什么需要建立一个定制的内核。 ∙∙ 如何写一个内核配置文件,或修改已存在的配置文件。 ∙∙ 如何使用内核配置文件创建和建立一个新的内核。 ∙∙ 如何安装一个新内核。 ∙∙ 如何在/dev中创建设备文件的记录。 ∙∙ 如何解决一些常见的问题。 9.2为什么要定制一个的内核? 通常,FreeBSD有一个叫做“monolithic”(高度集成)的内核。 这意味着内核是一个巨大的程序,支持很多的设备,如果你想要修改内核的行为,必须重新编译一个新的内核,然后用新内核启动系统。 今天,FreeBSD已经将内核的功能分成了很多的模块,可以动态地加载和卸载内核模块。 这样可以快速地调整内核以支持新加入的设备(如在手提计算机中的PCMCIA卡),或加入最初内核编译时没有加入的功能。 通俗地来讲,这种功能叫做KLD。 虽然这样,作一些静态内核的配置也是必需的。 有时,由于有些功能与内核的联系非常紧密,所以它不能被动态地加载。 另外,有些人不太愿意为实现某些功能而写一个动态加载的内核模块,编译一个静态内核可能更简单。 定制内核基本上是每一个UNIX用户必须经历的一关。 这样做将会对你的FreeBSD系统带来很多好处。 不像GENERIC内核,它需要支持很广泛的硬件设备,而定制的内核将只支持你机器的硬件设备,这样会带来很多好处: ∙∙ 快速启动。 既然系统内核只检测你机器上的硬件,那它所花费的启动时间将大大减少。 ∙∙ 较少的内存使用。 一个定制的内核会比GENERIC内核使用较少的内存。 这一点非常重要,因为内核在处理时必须经常使用内存。 所以,一个定制的内核对于内存较少的机器来说是非常有用的。 ∙∙ 额外的硬件支持。 一个定制的内核允许你加入像声卡之类设备的支持,而这恰恰是GENERIC内核所做不到的。 9.3建立并安装一个定制的内核 首先,让我们先来看一下建立内核的目录。 所有提到的目录都在/usr/src/sys中,也可以通过/sys访问。 有许多子目录充当了内核的不同部分。 但最重要的是/arch/conf,你可以在这儿配置内核,然后进行编译。 这里的arch也可能是i386,alpha,pc98。 在一个特殊的架构目录中,所有的东西都是为这个架构服务的,其他部分的代码是与所有平台共享的。 注意一下这个目录的逻辑结构,所有支持的硬件驱动程序、文件系统、参数选项,都放在各自的目录下。 另外,所有放在i386目录下的是只跟PC硬件有关的,而i386目录之外的其他目录,则是FreeBSD可能移植到的平台会共享到的部分。 注意: 如果你的系统没有这个/usr/src/sys目录,那么内核源代码就没有被安装。 最快速的安装方式是以root登陆,然后运行/stand/sysinstall,选择configure,接着是Distributions,下来是src,最后sys。 接下来,切换到arch/conf目录,拷贝GENERIC配置文件,并给这个文件起一个容易辨认的名称,它就是你的内核名称。 例如: #cd/usr/src/sys/i386/conf #cpGENERICMYKERNEL 通常,这个名称是大写的,如果正维护着多台不同硬件的FreeBSD机器,以你机器的域名来命名是非常好的主意。 我们把它命名为MYKERNEL就是这个原因。 注意: 你必须以root帐户登陆再执行下面的命令,否则你会没有权限,而导致错误。 现在,用你喜欢的文本编辑器编辑MYKERNEL。 如果你是初学者,那唯一能用的编辑器可能就是vi,它由于太复杂而不在这儿介绍了,但在参考书目中有许多书会介绍到它。 然而,FreeBSD中最容易的编辑器是ee,如果你是一个工程师,它是一个非常好的选择。 你可以很自由地改变注释行来反映你的配置情况,或你在GERNERIC中已经做的变化。 如果你在Sunos或其他BSD系统下定制过内核,那这个文件中的绝大部分将对你非常熟悉。 如果你使用的是诸如DOS这样的系统,那GENERIC配置文件看起来就非常困难,所以在下面的配置文件章节将慢慢地、仔细地进行介绍。 注意: 要经常检查文件/usr/src/UPDATING,在你执行任何修改之前,记得要用最新发布的源代码来同步你的源代码树。 在这个文件中所有重要的升级都要记下来。 /sur/src/UPDATING总是符合你的FreeBSD源代码版本,而且总是比手册所说的信息更加精确。 你现在必须编译内核的源代码。 你可能需要执行两种方法,这依赖于你如何重新编译内核,和你正使用的FreeBSD的版本。 ∙∙ 如果你只安装内核源代码,使用方法1。 ∙∙ 如果你运行的是FreeBSD4.0以前的版本的话,你不需要升级到FreeBSD4.0或更高版本,只要使用方法1。 ∙∙ 如果你在没有升级源代码的情况下编译一个新内核(也许你只想为内核添加一个新的选项,如IPFIREWALL),可以使用任何一种方法。 ∙∙ 如果你正在重新建立的内核作为“makeworld”进程的一部分,需要使用方法2。 方法1.用“传统方法”建立一个内核 1.运行config来产生内核源代码。 #/usr/sbin/configMYKERNEL 2.进入建立内核的目录。 #cd../../compile/MYKERNEL 3.编译内核。 #makedepend #make 4.安装新的内核。 #makeinstall 方法2.用“新的方法”来建立内核 1.进入/usr/src目录。 #cd/usr/src 2.编译内核。 #makebuildkernelKERNCONF=MYKERNEL 3.安装新内核。 #makeinstallkernelKERNCONF=MYKERNEL 注意: 在FreeBSD4.2和更老的版本中,你必须用KERNEL=替换KERNCONF=。 2001年2月2日以后生成的4.2-STABLE就可以认出KERNCONF=了。 如果你还没有升级源代码树,那你应当按顺序执行: config,makedepend,make,makeinstall 新的内核将会被拷贝到/kernel目录下,而旧的内核将会被移到/kernel.old。 现在,关闭系统,然后重新用内核启动系统。 如果发生错误,在这章结尾会有一些故障的解决办法。 如果新内核不能启动,请务必读一下有关如何恢复的章节。 注意: 如果你已经加入了新的设备(如声卡),你可能在使用之前,要先在你的/dev目录下加入这些设备节点。 9.4配置文件 内核设置的格式是很简单的,每一行包含了一个关键词(keyword)与一个或多个参数,而大多数的设置都只包含一个参数。 #号之后的文字都是注释,会被程序忽略掉。 下面的每个小节,将依次介绍每个列在GENERIC中的参数,虽然各相关主题(如网络)的关键词会放在同一小节,但是这些关键词可能位于GENERIC的很多地方。 详细地列出各个选项(option),而LINT列出了绝大部分的选项(option),比起在同一目录下的GENERIC,有更详细的解释。 如果你不能确定某一行设定的目的是否必要,请先看看LINT。 目前内核在处理各个选项上正转到一个比较好的模式。 一般地,设置文件中的各个选项都转换到内核程序的Makefile中,属于CFLAGS的一个-D参数。 时间一长,就造成了一个选项处理机制的问题,没有人知道在哪个文件中参考使用了那个选项。 在新的机制中,使用#ifdef来参考选项的程序代码是存放在由执行config时所产生的opt_foo.h。 由config所产生的有效的选项清单存储在两个文件里: 独立于系统架构的选项放在/sys/conf/options,与系统架构有关的选项则放在/sys/arch/conf/options.arch,其中arch的一个例子便是i386。 数字的引号方式(Quotingnumbers): 目前所有FreeBSD版本,包括3.x,其内核设置文件中如果有任何属于文字形式的数字(如i386),必须用双引号引起来,不然执行config时会出错。 如果数字是表示数目、个数,如maxuser64这个设置,则不要加双引号。 目前FreeBSD4.x版本已经去掉上述限制,不论是哪种形式的数字都不需要加双引号。 本章的例子,在文字形式的数字前后仍加了双引号(“”),如果你使用FreeBSD4.x版本,请自动去除双引号。 下面是一个带有很多额外注释的GENERIC内核配置文件的例子。 这个例子与/usr/src/sys/i386/conf/GENERIC非常相似。 有关内核配置的最详细的选项,请参看/usr/src/sys/i386/conf/LINT。 # #GENERIC--GenerickernelconfigurationfileforFreeBSD/i386 # #Formoreinformationonthisfile,pleasereadthehandbooksectionon #KernelConfigurationFiles: # #http: //www.FreeBSD.org/handbook/kernelconfig-config.html # #Thehandbookisalsoavailablelocallyin/usr/share/doc/handbook #ifyou'veinstalledthedocdistribution,otherwisealwaysseethe #FreeBSDWorldWideWebserver(http: //www.FreeBSD.ORG/)forthe #latestinformation. # #Anexhaustivelistofoptionsandmoredetailedexplanationsofthe #devicelinesisalsopresentinthe./LINTconfigurationfile.Ifyouare #indoubtastothepurposeornecessityofaline,checkfirstinLINT. # #$FreeBSD: src/sys/i386/conf/GENERIC,v1.2462000/03/0916: 32: 55jlemonExp$ 下面这个选项在每个内核中都要有: machinei386 这是机器的架构。 它可能是i386,alpha或pc98。 cpuI386_CPU cpuI486_CPU cpuI586_CPU cpuI686_CPU 上面的选项指出了在你的系统中所用的CPU类型。 你可以使用多个CPU类型(例如,你不能确定使用的是I586_CPU还是I686_CPU),然而,对于一个定制的内核,最好是只指定你所拥有的CPU类型。 如果你不能确定CPU类型,可以使用dmesg命令来看看你的启动信息。 Alpha结构的机器使用下面的选项: cpuEV4 cpuEV5 如果你正使用一台Alpha机器,应当使用上面的CPU类型。 identGENERIC 这是一个内核的标识符。 你应该自己命名一个容易辨认的名称,以有别于GENERIC的名称——GENERIC。 放在ident后的参数,将在你用这个内核启动时显示在屏幕上。 如果你同时设置了几个内核,采用不同的名称是个不错的主意。 (例如,你想定制一个实验性质的内核)。 maxusers32 这个设置的大小值定义了重要的系统表(systemtables)。 这个数值粗略地假设你的机器同时会有多少用户。 然而,在一般情况下,你最少要设置4个以上,特别是你要执行XWindow或是编译程序。 原因是maxusers值决定了系统同时可有多少个进程(process),其算法是20+16*maxusers。 如果你设置maxusers值是1,则你的系统只能同时存在36个进程,包括18个(或更多)系统启动要占去的进程。 如果你执行了XWindow,则又要用掉15个以上。 甚至阅读一个manpage也会使用九个进程来过滤、解压缩、然后显示文件。 设置maxusers=4,则系统可以同时有84个进程,对任何人应该都是足够的。 当你执行程序时,得到像是“proctablefull”这样的错误信息,或者你要建一个同时会有很多人来访问的网站(如ftp.FreeBSD.org)时,你就要增加这个设置的值,然后重新编译内核。 注意: maxusers这个参数并不限制可以登陆你系统的用户数目。 它只是系统中用户可以最多执行的程序个数。 有一个关键词的值则真的限制了可以同时远程连接(remotelogins)的人数: pseudo-devicepty16。 #Floatingpointsupport-donotdisable. devicenpx0atnexus? portIO_NPXirq13 npx0是连接FreeBSD中浮点运算处理器的一个接口。 不论你用硬件的浮点运算处理器还是使用软件仿真,都需要这个设置。 这个设置并不是可有可无的。 #Pseudodevices-thenumberindicateshowmanyunitstoallocate. pseudo-deviceloop#Networkloopback loop是一个通用的TCP/IP接口。 如果你用telnet或ftp连到localhost(等同于127.0.0.1),则该连接会通过这个虚拟设备连回来。 这是一定要有的设置,请不要去掉。 #makeoptionsDEBUG=-g#Buildkernelwithgdb (1)debugsymbols optionsMATH_EMULATE#Supportforx87emulation 如果你的计算机没有浮点运算处理器(386或486SX),可以加入这行,使得内核提供软件仿真的浮点运算处理器。 如果你用的是486DX或是386SX、486SX(还加装了387、487芯片)或更高的(Pentium、PentiumII等)则不需要这行设置。 注意: 这个仿真的浮点运算处理器并不是很精确。 如果你没有浮点运算器,还需要较高的精度,可以改用GPL_MATH_EMULATE参数,这将会使用GNU的浮点运算仿真器。 至于为什么这个仿真器不是系统默认值,是因为GNU使用许可的关系。 optionsINET#InterNETworking 提供网络支持。 就算你不打算连上网络,还是要留着这个选项。 对于绝大部分的程序,这个选项是一定要有的。 optionsINET6#IPv6communicationsprotocols 这个启用IPv6通信协议。 optionsFFS#BerkeleyFastFilesystem optionsFFS_ROOT#FFSusableasrootdevice[keepthis! ] 最基本的硬盘文件系统。 如果你要从硬盘启动,就留着。 optionsMFS#MemoryFilesystem optionsMD_ROOT#MDisapotentialrootdevice 内存映射(Memory-mapped)文件系统。 提供RAMdisk,以供需要快速访问的资料或是暂存资料用。 如果你分了很大的swap空间,使用这个选项可以给你不少好处。 把/tmp挂到MFS分区是一个相当好的想法,因为不少程序都会在此暂存资料。 要把/tmp挂到MFSRAMdisk,可以修改/etc/fstab,加入以下一行: /dev/ad1s2b/tmpmfsrw00 现在重新启动系统,或是键入mount/tmp命令: optionsNFS#NetworkFilesystem optionsNFS_ROOT#NFSusableasrootdevice,NFSrequired 网络文件系统(NFS),除非你要从网络上的其他机器加载目录,不然可以用#号注释掉这行设置。 optionsMSDOSFS#MSDOSFilesystem MS-DOS文件系统。 除非你要在启动时挂上一个DOS格式的硬盘,不然你可以放心地把这行注释掉。 如前所述,在你第一次挂上一个DOS分区时,内核将会自动加载模块来支持它。 此外,mtools是个相当不错的软件(可在ports里面找到),可以让你在访问DOS磁盘时,不需要挂上或卸载软盘(而且也不需要MSDOSFS的支持)。 optionsCD9660#ISO9660Filesystem optionsCD9660_ROOT#CD-ROMusableasroot,CD9660required CD-ROM使用的ISO9660文件系统。 如果你没有光驱,或是很少用光驱,可以注释掉这一行(内核会在第一次加载时动态加载模块以支持它)。 音乐CD则不会用到这个文件系统。 optionsPROCFS#Processfilesystem 进程文件系统(Processfilesystem)。 这是一个虚拟的文件系统,挂在/proc下,允许一些程序,像ps来读取资料,提供你正在执行的进程的信息。 optionsCOMPAT_43#CompatiblewithBSD4.3[KEEPTHIS! ] 使系统兼容4.3BSD。 不要去掉这一行,不然有些程序将无法正常运行。 optionsSCSI_DELAY=15000#Delay(inms)beforeprobingSCSI 这行设置告诉内核等待15秒钟,以供SCSI控制器扫描你计算机上的SCSI设备。 如果你只有IDE硬盘,你可以不理会这个设置,不然你可能会想要降低这个值,也许会降到五秒,以增加启动的速度。 如果你发现降低后,FreeBSD无法正确辨认你的SCSI设备,那么你应该提高这个值,延长等待时间。 optionsUCONSOLE#Allowuserstograbtheconsole 允许用户找到控制台(console)信息,对XWindow很有用。 举例来说,你可以输入xterm-C来打开一个控制台xterm,这个窗口将显示任何write、talk等命令的信息,以及你发出去的信息。 当然,kernel产生的信息也会在这里出现。 optionsUSERCONFIG#boot-ceditor 这个选项允许你从启动菜单启动配置编辑器。 optionsVISUAL_USERCONFIG#visualboot-ceditor 这个选项允许你从启动菜单启动虚拟配置编辑器。 optionsKTRACE#ktracesupport 这个选项启用内核进程跟踪,在调试时很有用。 optionsSYSVSHM#SYSV-stylesharedmemory 提供SystemV共享内存(SHM)的支持,最常用到SHM的应该是XWindow的XSHM延伸,不少绘图相关程序(像影片播放程序XAnim与LinuxDOOM游戏)会自动使用SHM来提供额外的速度。 如果你要使用XWindow,你最好加入这个选项。 optionsSYSVSEM#SYSV-stylesemaphores 支持SystemVsemaphores,不常用到,只在kernel中占用几百个字节的空间。 optionsSYSVMSG#SYSV-stylemessagequeues 支持SystemVmessages,一样的,只占用kernel几百字节的空间。 注意: ipcs命令可以显示出任何使用到上述三个SystemV功能的进程。 optionsP1003_1B#PosixP1003_1Breal-timeextensions options_KPOSIX_PRIORITY_SCHEDULING 在1993POSIX中添加的实时扩展。 在portscollection中某些应用程序会用到这些(如StarOffice)。 optionsICMP_BANDLIM#Ratelimitbadreplies 这个选项启用ICMP的带宽限制的错误响应。 使用这个选项可以帮助你保护你的机器免受拒绝式服务攻击。 #TomakeanSMPkernel,thenexttwoareneeded #optionsSMP#SymmetricMultiProcessorKernel #optionsAPIC_IO#Symmetric(APIC)I/O 上面两个选项都支持SMP。 deviceisa 所有FreeBSD支持的PC都需要这行设置。 如果你使用IBMPS/2(微信道架构)计算机,则你无法在该机器上执行FreeBSD。 deviceeisa 如果你的主机板上有EISA总线,加入这个设置。 使用这个选项可以自动扫描并设置所有连接在EISA总线上的设备。 devicepci 如果你的主板有PCI总线,就加入这个选项。 使用这个选项可以自动扫描PCI卡,并在PCI到ISA之间建立通路。 #Floppydrives devicefdc0atisa? portIO_FD1irq6drq2 devicefd0atfdc0drive0 devicefd1atfdc0drive1 软盘控制器: fd0是A: 盘,fd1是B: 盘。 deviceata 这个驱动器支持所有ATA和ATAPI设备。 你只要在内核中加入deviceata选项,就可以让内核支持现代计算机上的所有PCIATA/ATAPI设备。 deviceatadisk#ATAdiskdrives 这个是ATAPI磁盘驱动器所必须的。 deviceatapicd#ATAPICDROMdrives 这个是ATAPICDROM驱动器所必须的。 deviceatapifd#ATAPIfloppydrives 这个是ATAPI软盘驱动器所必须的。 deviceatapist#ATAPItapedrives 这个是ATAPI磁带机驱动器所必须的。 optionsATA_STATIC_ID#Staticdevicenumbering 这个可以静态分配控制器的编号,也可以动态分配设备的编号。 #ATA
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 配置 FreeBSD 内核
![提示](https://static.bdocx.com/images/bang_tan.gif)