61 FreeBSD连载:其他内核设置选项( 二 )


# cd /usr/src/sys/ufs/ffs# ln -s /usr/src/contrib/sys/softupdates/*.[ch] .当建立了上述连接之后,带有SOFTUPDATES选项的内核才能被正确编译,然而即使内核支持这个选项,还需要在文件系统中设置softupdate选项,相应文件系统才能真正使用这个功能,这需要对相应的文件系统使用tunefs命令:
# tunefs -n enable /dev/rda0s1d这个命令只需执行一次就行了,为了避免出现问题,请在系统的单用户模式下执行这个命令 。同样可以使用tunefs -n disable可以屏蔽这个功能 。
此外,对于多处理器的服务器系统,还可以使用SMP选项和APIC_IO选项以支持多处理器 。
可以在编译内核时打开更多的优化选项,缺省情况的只能提供十分基本的优化,而且是使用标准版本的gcc 2.7.2.1来编译系统的 。可以安装egcc,并指定更高的优化选项,如-O6和-mPentium,来获得更高级别的优化和利用Pentium芯片专用指令 。由于egcc仅仅支持ELF格式的执行文件,因此不能用于3.0之前(包括3.0-REKLEASE)使用a.out格式内核的系统 。
当使用egcc编译内核时,需要更改执行config后产生的内核目录下的Makefile,需要重新定义CC选项为/usr/local/bin/egcc,并更改优化选项-O为-O -mpentium,但是由于egcc不支持gcc的编译选项-fformat_externsion,因此还需要更改Makefile引用的/usr/src/share/mk/bsd.kern.mk文件,删除这个文件中这个编译选项的定义 。
虽然理论上编译器优化不影响编译结果,但是编译器本身也会存在问题,使得在某些情况下发生错误 。尤其对于系统内核,它决定系统的稳定性 。因而在编译时采用过高的优化时就要特别小心,极其偶然的情况下会过高优化的内核会造成系统崩溃 。因此在正式使用一个优化内核之前,应该保留一个原有的、使用普通优化选项的内核 。新内核经过一定时间实际运行的考验,确认没有问题之后才能放心用于正式使用 。
声卡设备
通常对于SoundBlaster兼容的声卡,可以使用的以下配置选项:
controllerpnp0controllersnd0device sb0 at isa? port 0x220 irq 7 conflicts drq 1 vector sbintroptionsSBC_IRQ=5devicesbxvi0at isa? drq 5devicesbmidi0at isa? port 0x330deviceopl0at isa? port 0x38a其中pnp0控制器是帮助设置ISA接口的PNP声卡的资源,这主要用于使用BIOS为ISA PNP设备分配资源的情况下 。但如果不是ISA PNP的声卡,就不需要这个设置,而且如果ISA PNP声卡能设置为非PNP类型,最好将其设置为非PNP类型,ISA总线下的PNP声卡比较难以设置 。
如果系统中安装有Dos的话,可以启动到DOS下,使用该卡的设置程序或一些系统硬件分析软件寻找BIOS分配给ISA PNP卡的资源 。
snd0提供最基本的声卡支持代码,sb0为SoundBlaster兼容声卡驱动程序,要根据声卡的配置参数更改sb0驱动程序的IRQ、DMA以及port数值 。改变IRQ值的时候,不仅应该在sb0的配置行中改变,还应该使用SBC_IRQ配置选项 。
sbvxi0也是SoundBlaster 16所需的代码,大部分声称与SoundBlaster兼容的声卡并不能做到完全兼容SoundBlaster 16,最多兼容SoundBlaster或SoundBlasterPro,因此就不能支持这个设备,只有真正的SoundBlaster 16才能使它发挥作用 。sbmidi0为SoundBlaster声卡的MIDI接口的驱动程序,很多兼容声卡也不支持这个设备 。opl0为SoundBlaster兼容声卡使用的Yamaha OPL-2和OPL-3芯片使用的驱动 。
使用上面的配置选项,设置正确的资源参数,就可以支持soundblaster兼容声卡 。但是不同声卡对Soundblaster的兼容性不同,因此系统检测时就不能检测到所有的设备,如midi设备或sbvxio0设备,但一般都可以检测到sb0设备,这就能提供基本的声卡设备支持 。
声卡设备还需要相应设备文件snd0的支持:
# cd /dev# ./MAKEDEV snd0当使用这些选项重新编译好内核,并启动之后,就可以查看声卡系统是否工作正常 。首先应使用dmesg命令查看系统是否侦测出了声卡设备,如果没有侦测出,就可能是硬件参数配置的问题,需要使用UserConfig更改配置 。

推荐阅读