FreeBSD内核配置文件详解 (转)

来源:互联网 发布:debug python脚本 编辑:程序博客网 时间:2024/06/02 13:40
FreeBSD内核配置文件GENERIC的格式很简单,每行包括一个关键词和若干参数。而与平台相关的选项和设备的详细列表可以在相同目录下的NOTES文件中找到,平台无关的选项在/usr/src/sys/conf/NOTES中可以得到。

下面以i386下的配置文件为例详细介绍各行参数含义。

machine        i386        # 机器构架,只能是alpha, amd64, i386, ia64, pc98, powerpc或sparc64中的一种
cpu        I486_CPU    # CPU类型,最好只指定所使用的那种CPU
cpu        I586_CPU
cpu        I686_CPU
ident        GENERIC        # 内核名称,会在启动时显示
#hint        "GENERIC.hints"    # 将用于配置设备驱动的选项静态编译进内核
makeoptions    DEBUG=-g    # 保留调试信息
#options    SCHED_ULE    # 调度器,ULE专为SMP设计,4BSD是传统调度器
options        SCHED_4BSD
options        PREEMPTION    # 可抢占式调度
options        PAE        # 支持超过4GB的虚拟地址
options        INET        # IPv4支持
options        INET6        # IPv6支持
options        FFS        # 最基本的硬盘文件系统
options        SOFTUPDATES    # 启用内核中Soft Updates支持,会提高磁盘写入速度,需要在每个磁盘上启用
options        UFS_ACL        # 启用内核中的访问控制列表
options        UFS_DIRHASH    # 通过使用额外的内存加速在大目录上的磁盘操作
options        MD_ROOT        # 打开以基于内存的虚拟磁盘作为根设备的支持
options        NFSCLIENT    # 网络文件系统
options        NFSSERVER
options        NFS_ROOT
options        MSDOSFS        # MS-DOS文件系统
options        CD9660        # 用于CD-ROM的ISO 9660文件系统
options        PROCFS        # 进程文件系统,高版本中一般都不再需要
options        PSEUDOFS    # 用于支持进程文件系统
options        GEMO_GPT    # 提供在磁盘上使用大量分区的能力
options        COMPAT_43    # 使系统兼容4.3BSD,建议保留
options        COMPAT_FREEBSD4    # 支持在旧版本FreeBSD下编译的程序
options        COMPAT_FREEBSD5
options        SCSI_DELAY=5000    # 在探测SCSI设备前等待的时间(毫秒)
options        KTRACE        # 打开内核进程跟踪,主要用于调试
options        SYSVSHM        # 提供System V共享内存(SHM)支持
options        SYSVMSG        # 支持System V消息
options        SYSVSEM        # 支持System V信号量
options        _KPOSIX_PRIORITY_SCHEDULING
                # POSIX的实时扩展,Ports中某些应用需要
options        KBD_INSTALL_CDEV
                # 与键盘有关,在/dev中安装一个CDEV
options        AHC_REG_PRETTY_PRINT
                # 给出容易阅读的寄存器值,用于帮助调试
options        AHD_REG_PRETTY_PRINT
options        ADAPTIVE_GIANT    # 内核全局锁(Giant)
device        apic        # 启用使用I/O APIC作为中断发送设备的能力
device        eisa        # 支持EISA总线
device        pci        # 支持PCI总线
device        fdc        # 支持软驱
device        ata        # 支持PCI ATA/ATAPI设备
device        atadisk        # ATAPI磁盘驱动器
device        ataraid        # ATA RAID驱动
device        atapicd        # ATAPI COROM驱动器
device        atapifd        # ATAPI磁盘驱动器
device        atapist        # ATAPI磁带机驱动器
options        ATA_STATIC_ID    # 对控制器使用其静态的编号
device        ahb        # SCSI控制器
device        ahc
device        ahd
device        amd
device        isp
device        ispfw
device        mpt
#device        ncr
device        sym
device        trm
device        adv
device        adw
device        aha
device        aic
device        bt
device        ncv
device        nsp
device        stg
device        scbus        # SCSI外设
device        ch
device        da
device        sa
device        cd
device        pass
device        ses
device        amr        # RAID控制器
device        arcmsr
device        asr
device        ciss
device        dpt
device        hptmv
device        iir
device        ips
device        mly
device        twa
device        aac
device        aacp
device        ida
device        mlx
device        pst
device        twe
device        atkbdc        # AT键盘输入和PS/2指针设备的I/O服务
device        atcbd        # AT键盘访问服务
device        psm        # PS/2鼠标驱动
device        vga        # VGA显卡驱动
device        splash        # 启动时显示splash画面,也用于屏保
device        sc        # 默认控制台驱动程序
#device        vt        # 兼容VT220的控制台驱动
#options    XSERVER
#options    FAT_CURSOR
device        agp        # AGP显卡驱动
device        npx        # 浮点运算单元接口,必须保留
#device        apm        # 高级电源管理支持
device        pmtimer        # 电源管理事件
device        cbb        # PCMCIA支持
device        pccard
device        cardbus
device        sio        # 串口支持
device        ppc        # ISA-bus并口支持
device        ppbus        # 并行总线支持
device        lpt        # 并口打印机支持
device        plip        # 并行网络接口的驱动器
device        ppi        # 普通用途的I/O和IEEE 1284 I/O
#device        vpo        # Iomega Zip驱动支持
#device        puc        # PUC支持的“哑”串行或并行PCI卡
device        de        # DEC/Intel DC21x4x网卡
device        em        # Intel PRO/1000 adapter Gigabit以太网卡
device        ixgb        # Intel PRO/10GbE Ethernet Card
device        txp        # 3Com 3cR990
device        vx        # 3Com 3c590, 3c595
device        mmibus        # MII总线支持(一般用于PCI 10/100以太网卡)
device        bfe        # 使用MII总线控制器的驱动器
device        bge
device        dc
device        fxp
device        lge
device        nge
device        nve
device        pcn
device        re
device        rl
device        sf
device        sis
device        sk
device        ste
device        ti
device        tl
device        tx
device        vge
device        vr
device        wb
device        xl
device        cs        # ISA以太网卡驱动
device        ed
device        ex
device        ep
device        fe
device        ie
device        lnc
device        sn
device        xe
device        le
device        wlan        # 无线网卡支持
device        an
device        awi
device        ral
device        wi
#device        wl
device        loop        # 启用TCP/IP环回程序
device        mem        # 存储设备
device        io        # 允许进程获得I/O特权
device        random        # 启用随机数发生器
device        ether        # 支持以太网协议
device        sl        # SLIP支持
device        ppp        # 内核级PPP支持
device        tun        # 用户模式的PPP使用
device        pty        # 模拟登入端口
device        md        # 内存盘伪设备
device        gif        # IP隧道能力
device        faith        # 捕捉数据包并转发给IP翻译服务程序
device        bpf        # 包过滤器,允许网卡置于混杂模式
device        ubci        # USB设备支持
device        ohci
device        ehci
device        usb
device        udbp
device        ugen
device        uhid
device        ukbd
device        ulpt
device        umass
device        ums
device        ural
device        urio
device        uscanner
device        aue
device        axe
device        cdce
device        cue
device        kue
device        rue
device        firewire    # FireWare设备支持
device        sbp
device        fwe

最后补充一点,/var/run/dmesg.boot文件中包含有硬件信息。

参考资料:The FreeBSD Documentation Project
操作系统最主要的部分是内核,负责进程管理、内存管理和I/O操作等众多核心事务。FreeBSD系统也不例外。

尽管目前FreeBSD可以动态修改的东西已经很多了,但要想获得一个真正属于自己的操作系统,为自己的需要建立一个特殊的系统,也是必须要重新配置和编译内核的。并且,建立定制的内核也是每个FreeBSD用户必须经历的考验,通过这个考验会给用户带来大量的好处。

FreeBSD的所有源代码都安装在目录/usr/src/sys中,该目录下包含了众多的子目录,其中包含了内核的不同部分。其中,对自定义内核而言最重要的文件是arch/conf(arch表示alpha、amd64、i386、ia64、pc98、powerpc和sparc64)目录下的GENERIC文件。这些目录下包含的都是和特定平台相关的代码,而其他目录下的代码都是和机器无关的。

注意,编译内核只能用root进行,并且最好对配置文件进行备份,以免误操作或在更新代码后重新配置。FreeBSD提供了两种方法编译内核。

方法1:
cd /sys/i386/conf                     ; 进入配置文件所在的目录,也可以是其他配置文件所在的目录
/usr/sbin/config GENERIC    ; 产生内核源代码
cd ../compile/GENERIC         ; 进入编译内核源代码的目录
make depend                          ; 编译内核
make
make install                             ; 安装新内核

方法2(需要完整的源代码):
cd /usr/src                                                             ; 进入源代码目录
make buildkernel KERNCONF=GENERIC    ; 编译内核
make installkernel KERNCONF=GENERIC  ; 安装新内核

除非打算把重新构建内核作为make buildworld过程的一部分来进行,否则都应该使用方法1来重新编译内核。并且在默认情况下,全部内核模块会同时联编,如果只需要联编部分需要的模块,应该在联编前编辑/etc/make.conf文件中的MODULES_OVERRIDE变量,其内容为所希望构建的模块列表。

新的内核将会被复制到/boot/kernel/kernel文件中,而老的内核则被移动到文件/boot/kernel.old/kernel中,重启就会用新的内核引导系统了。

在深入了解配置文件(下次再写,有点长......)前,有必要看看对错误的处理方法。定制内核一共可能出现5种问题,分别是:

config失败,这表示内核描述错误,config程序会显示出出错的行号,可以通过和其他资料进行对比来解决错误。

make失败,也是内核描述错误,一般也能通过GENERIC和其他资料的比较来解决。如果确实无法找出错误,可以将配置文件发送给FreeBSD一般问题邮件列表。

内核安装失败,很可能是发生了深层次的问题,建议向FreeBSD官方了解情况。

内核无法启动,或者不能识别设备,可以恢复老的内核。在FreeBSD启动加载器倒计时时按除Enter外的任意键,unload,boot /bootkernel.old/kernel就可以了。

内核工作,但ps不工作,这很可能是安装了一个和系统内建工具版本不同的内核,应该重新编译一个和内核版本一致的系统。

参考资料:The FreeBSD Documentation Project
发表于 @ 2006年06月18日 9:27 PM | 评论 (0)

Windows操作系统族谱
1981年8月12日
IBM推出内含Microsoft的16位元作业系统 MS-DOS 1.0的个人电脑,这是MS问世的第一款操作系统,主要通过命令行的方式来进行交互。MS-DOS是我第一个接触的操作系统,那时还小,依稀记得是3.0左右。


1985年11月
微软推出Windows 1.0,售价100美元,这是微软发布的第一款GUI的操作系统,不过评价不高:-(


1987年12月9日
微软发布Windows 2.0,售价仍然为100美元。尽管其借鉴了不少Mac OS的东西,但依然没有得到人们的肯定。


1990年5月22日
微软推出Windows 3.0,在界面、人性化和内存管理等诸多方面做出了较大的改动,终于得到了用户的认同!并且,MS在91年底发布了多语言的Windows 3.0版本,为Windows在非英语国家的推动起到了极大的推动作用。


1992年3月18日
微软发布Windows 3.1版,其销量在2个月内就突破百万大关!这个版本添加了不少对多媒体等的支持。


1993年
微软发布Windows NT 3.1,宣布进入企业服务器操作系统的市场。这个版本是和IBM在OS/2的基础上联合研制的。

1994年
Windows 3.2的中文版发布。国内不少人从这个版本开始接触Windows,我就是其中之一:-)


1995年8月24日
这是微软走向霸主地位的一刻,这个月里,MS推出了让世界为之惊叹的Windows 95!在MS的强大促销攻势之下,Win 95在4天之内就突破了百万大关!从这款操作系统开始,Windows彻底抛弃了对DOS的完全依赖,并从此开始了世人皆知的“Wintel”垄断时代!

1996年8月
NT4.0推出,这是MS服务器OS走向成熟的一步,直到目前都有不少企业仍在使用。同年11月,Windows CE 1.0发布,这是一款面向嵌入式系统的OS,至此,微软的帝国之势已然清晰。


1998年6月25日
(就在我14岁生日的前3天)Windows 98,一款至今尚有不少用户使用的操作系统面世,这款在95基础上研制的OS改良了硬件标准的支持,例如MMX和AGP。其它特性包括对FAT32文件系统的支持、多显示器、Web TV的支持和整合到Windows图形用户界面的Internet Explorer,称为活动桌面(Active Desktop)。
。加上在99年6月10日面世的98 SE,微软的个人桌面垄断已经形成!

P.S. 这款OS在很长一段时间内被认为是玩游戏的最佳平台,直到XP的推出:)我也曾在这里堕落过很长时间......


2000年9月14日
这一天,微软推出了Window ME,这可以认为是9X系列的终结版,但是非常的不稳定,受到很多的批评,我也没用过:P

2000年12月19日
主要面向商业用户的Window 2000面世,包含新的NTFS文件系统、EFS文件加密、增强硬件支持等新特性,向一直被unix系统垄断的服务器市场发起了强有力的冲击,硬生生地从ibm、hp、sun公司口中抢下一大块地盘。Win 2K包含4个版本:
(1)Windows 2000 Professional 即专业版,用于工作站及笔记本电脑。它的原名就是Windows NT 5.0 Workstation。最高可以支持双处理器,最低支持64MB内存,最高支持2GB内存。
(2)Windows 2000 Server 即服务器版,面向小型企业的服务器领域。它的原名就是Windows NT 5.0 Server。最高可以支持4处理器,最低支持128MB内存,最高支持4GB内存。
(3)Windows 2000 Advanced Server 即高级服务器版,面向大中型企业的服务器领域。它的原名就是Windows NT 5.0 Server Enterprise Edition。最高可以支持8处理器,最低支持128MB内存,最高支持8GB内存。
(4)Windows 2000 Datacenter Server 即数据中心服务器版,面向最高级别的可伸缩性,可用性与可靠性的大型企业或国家机构的服务器领域。最高可以支持32处理器,最低支持256MB内存,最高支持64GB内存。

2001年10月25日
Windows XP发布。Windows XP是微软把所有用户要求合成一个操作系统的尝试,和以前的windows桌面系统相比稳定性有所提高,而为此付出的代价是丧失了对基于DOS程序的支 持。由于微软把很多以前是由第三方提供的软件整合到操作系统中,XP受到了猛烈的批评。这些软件包括防火墙、媒体播放器(Windows Media Player),即时通讯软件(Windows Messenger),以及它与Microsoft Pasport网络服务的紧密结合,这都被很多计算机专家认为是安全风险以及对个人隐私的潜在威胁。这些特性的增加被认为是微软继续其传统的垄断行为的持 续。
    Windows XP,或视窗XP是微软公司最新发布的一款视窗操作系统。Windows XP于2001年8月24日正式发布(RTM,Release to Manufacturing)。它的零售版于2001年10月25日上市。Windows XP原来的代号是Whistler。字母XP表示英文单词的“体验”(experience)。Windows XP的外部版本是2002,内部版本是5.1(即Windows NT 5.1),正式版的Build是5.1.2600。 微软最初发行了两个版本:专业版(Windows XP Professional)和家庭版(Windows XP Home Edition),后来又发行了媒体中心版(Media Center Edition)和平板电脑版(Tablet PC Editon)等。
    Windows XP Professional
    专业版除了包含家庭版的一切功能,还添加了新的为面向商业用户的设计的网络认证、双处理器支持等特性,最高支持2GB的内存。主要用于工作站、高端个人电脑以及笔记本电脑。
    Windows XP Home Edition
    家庭版的消费对象是家庭用户,用于一般个人电脑以及笔记本电脑。只支持单处理器;最低支持64MB的内存(在64MB的内存条件下会丧失某些功能),最高支持1GB的内存。


2003年4月
Windows Server 2003发布;对活动目录、组策略操作和管理、磁盘管理等面向服务器的功能作了较大改进,对.net技术的完善支持进一步扩展了服务器的应用范围。
Windows Server 2003有四个版本:Windows Server 2003 Web服务器版本(Web Edition)、 Windows Server 2003标准版(Standard Edition)、 Windows Server 2003企业版(Enterprise Edition)以及Windows Server 2003数据中心版(Datacenter Edition)。Web Edition主要是为网页服务器(web hosting)设计的,而Datacenter是一个为极高端系统使用的。标准和企业版本则介于两者中间。
    Windows Server 2003是目前微软最新的服务器操作系统。
     一开始,该产品叫作“Windows .NET Server”,改成“Windows .NET Server 2003”,后最终被改成“Windows Server 2003”,于2003年3月28日发布,并在同年四月底上市。
Windows Server 2003有Web版 、标准版 、企业版和数据中心版等多个版本。



200X年Y月Z日
微软将发布最新款的操作系统Vista,现在已有Beta2测试版可以下载,不过对硬件要求较高,我这老掉牙的本本就只能对它说886......
不过网上倒是口水一片啊!
尽管FreeBSD为用户提供了不少的工具,但要想完成任务,经常还需要安装更多的应用软件。为此,FreeBSD提供了从源代码开始安装的ports技术和直接安装二进制代码的packages技术。目前已经有超过一万个第三方的应用程序供大家使用。

先来看看ports安装。默认的,所有的ports都位于/usr/ports目录下,由Makefile(指出程序应该如何编译及安装在系统的哪些地方)、distinfo(用于文件校验)、pkg-descr(描述该软件的功能等)、pkg-plist(即将被安装的所有文件的列表)、pkg-message,和一个files目录(包含编译和安装需要用到的补丁)。

需要注意,port里仅仅包含如何编译源代码的指令,而不包含真正的源代码。源代码需要从网上或cd上获取,并可能被开发者发布成任何格式(通常是tar或gzip压缩格式)。并且,只有root才能安装ports,而在安装前最好去vuxml.freebsd.org看看是否存在与该port相关的安全问题。

在进入相关目录后,使用make命令就可以开始安装port了。ports会首先在/usr/ports/distfiles下查找是否存在相应源代码,否则会按照Makefile中的指示在网上下载源代码。最后,系统将开始编译源代码。

在编译结束后将返回命令行,此时就可以使用make install命令安装port了。在安装结束后最好使用make clean删除临时工作目录,释放磁盘空间,并避免在升级port时出错。(也可以使用make install clean命令一次性完成上述3个分开的步骤,portslean -D用来清理整个的临时文件空间)

安装好的port可用“pkg_delete port名”来删除,pkg_version -v则可列出提供更新版本的ports信息。portupgrade用来升级port,-a参数表示升级所有安装的port,-i表示在升级前先确认,-R则可指定要升级的port,-P则表示用已编译好的package来升级。

再来看看package的安装。可以使用“pkg_add -r package名”的命令来进行安装,其中参数-r是用来自动从远程主机获得package,若有本地安装包则可省略该参数。

注:所有package都可以通过ftp从ftp://ftp.freebsd.org/pub/freebsd/ports/packages/下载

此外,可以使用pkg_info来列出已安装的所有软件包列表和描述,pkg_version来比较本地package版本与ports目录中的版本是否一致,pkg_delete pkg名 来删除一个安装好的软件。顺便说一句,所有已安装的package信息都保存在/var/db/pkg目录下。

参考资料:The FreeBSD Documentation Project
FreeBSD是一个多任务的操作系统,也就是说同时可以执行多个程序。一个执行中的程序就是进程。

每个进程都有一个由系统临时分配的唯一标识,称为进程ID(可从1分配到99999),或PID。绝大多数的进程都有一个父进程,即用来启动该进程的进程。但是,在系统中有一个叫做init的进程,其PID始终为1,该进程在FreeBSD启动时由内核自动启动。

例如,用户在shell中执行指令ls,则ls对应的进程就是shell的子进程,shell是ls的父进程。

在FreeBSD中,可以使用ps和top两个指令来察看当前系统中进程的状态。其中,ps会显示当前运行的拥有控制终端的进程的状态,包括PID、运行其的终端、状态、占用的CPU时间和启动其的命令等。ps常用的参数包括:a显示所有运行的进程,u显示进程所属的用户和占用的内存,x显示出后台进程,ww显示完整的命令行。

附:在进程中,有一部分是有终端的,需要和用户进行交互来完成其功能。而另一部分是不需要和用户进行交互的,称为守护进程deamon(通常在名称后加上d表示)。

而top则显示所有的运行进程,包括PID、运行该进程的用户、运行的线程数、优先级、最大内存需求、当前占用内存、进程状态、占用CPU时间和百分比,以及运行该进程的命令等。并且,该进程会默认每2秒刷新一次状态,该参数可以用选项s修改。而在该命令的开始部分,则显示当前总进程数、进程状态统计、CPU状态、内存信息和交换分区的信息等。

在进程间进行通讯可以采用信号的机制。不同的信号根据不同的数字编号有着不同的含义,其中一些有特殊含义,另一些则可被应用程序进行解释。通常,用户只能给自己拥有的进程发送信息,而给其他人发送的信息则可能被kill拒绝。但root可以将各种信号发送给每个进程。

在某些情况下,FreeBSD可以向应用程序发送信号,例如段式违规信号(SIGSEGV)和闹钟信号(SIGALRM)等。可用来终结进程的信号有SIGTERM和SIGKILL,前者可以被进程自行决定是否终结,而接收到后者的进程则必须立刻被终结。

在FreeBSD中可以使用/bin/kill指令来发送信号,其语法是:
kill -s 信号 PID

其中常用的信号包括HUP、INT、QUIT、ABRT、KILL、ALRM、TERM等。

再来看看shell。shell就是命令行界面,其主要功能是从输入取得命令然后去执行之。FreeBSD内含了若干shell,如sh、tcsh等,可以自行选择使用何种shell(默认为csh)。shell的一大特点是能够自动补齐文件名(输入命令或文件名前几个字母后按tab键即可,若不能自动不全则发出响铃)。

shell的另一特点是利用环境变量运行,主要包括USER(当前用户名)、PATH(默认路径名)、DISPLAY(X11显示器的网络名称)、SHELL(当前使用的shell名)、TERM(用户终端的名字)、TERMCAP(各种终端功能所用终端分离编码的基本数据项目)、OSTYPE(操作系统类型)、MACHTYPE(CPU体系结构)、EDITOR(首选的文本编辑器)、PAGER(首选的文本页面调度程序)和MANPATH(联机手册路径)等。在csh下设置变量的指令为:
setenv 变量名 值

显示环境变量值的指令为:
echo $变量名

参考资料:The FreeBSD Documentation Project
原创粉丝点击