Ken.UNC

Good

FreeBSD7.0基础--核心编译

什么是操作系统呢?  
    简单的讲讲吧~
    在计算机上做任何事情,都是由硬件来完成的,例如:计算时要用到CPU、存储时要用硬盘、上网时要用网卡、听歌时要用声卡等等。而计算机上的这些硬件本身 并会主动的去工作,为了让这一堆硬件能够工作,我们就得去控制他们,但要知道的是,我们人怎么才能去控制这一堆东东啊!难道要我们去手里拿着这些硬件对他 们说:“你去干嘛干嘛吗?”,当然是不可能的了。所以,操作系统就派上用场啦~,操作系统就是一个大的软件,一个控制计算机里各个硬件的工具,我们人就是 通过这个工具去控制计算机硬件的,所以,我们买回来计算机后,首先,就要给这家伙外边套上一层软件--操作系统,然后,我们就可以通过控制操作系统--点 点鼠标啦、敲敲键盘啦,让计算机为我们工作了。
    简单的讲,操作系统就是计算机硬件和我们人之间的接口要注意,在计算机很多领域中,都涉及接口的概念,这个概念很常见,很重要。
    当我们下达一些命令给操作系统后,操作系统就会按照我们的命令合理的控制计算机硬件,包括操作系统的基本功能:文件管理、内存管理、存储管理、处理机管理等,合理充分的管理并利用计算机硬件
    我们又知道,操作系统,这个大的软件,简单的讲,可以分成核心套在核心外层的软件,事实上,真正控制计算机硬件的是操作系统的核心,因为核心就已经是一个可以在计算机硬件上运行的系统了,可是只有核心的话,我们无法操作啊,所以要为核心外边套上一层软件--比如shell,这样我们就可以通过shell来操作,从而控制核心,核心再去控制计算机硬件,从而完成任务。
    我们可以看到,如果用接口的概念讲,这里涉及了多少的接口呢!分三层讲,整个操作系统是我们人和计算机硬件之间的接口;分四层讲,shell又是我们人和核心之间的接口。嘿嘿,应该理解了吧!

为什么要重新编译FreeBSD的核心呢?
    在我们安装完FreeBSD后,你可以看到,他跑的很正常嘛!那干嘛还去重新编译核心呢?
    我们知道,任何一个操作系统都有核心,我们用官方发布的FreeBSD安装时,核心是GENERIC,就是通用核心,这个很好理解,因为FreeBSD的 发布,为了让核心能够驱动各种不同的计算机,满足众多不同类型的硬件,通用核心中包含了对很多不同硬件的支持--例如,我们计算机上只有一块儿网卡,只需 要一种驱动就好了,但核心却包含了很多不同网卡的驱动,所以对于具体的一台计算机来说,只需要通用核心中一部分驱动程式,能够满足他就够了,所以通用核心 中有些驱动程式对于一台具体的计算机来说就是多余的,这些多余的驱动程式可能会影响性能啦,稳定性啦等等。因此,为了核心能够充分地发挥他控制硬件的能 力,也为了让系统和硬件达到最完美的配合。我们需要自己定制核心,去除那些不需要的驱动程式。

按照自己的硬件重新编译核心有几点好处:
1,缩短系统启动时间。重新编译核心后,你会发现,系统启动需要的时间明显的短了。因为核心只检测你机器上有的硬件,那么系统启动所需的时间当然就少了。
2,内存的使用量也会减少。对于一个软件来说,如果他能够使用较少的内存,却能够完成强大的功能,那多好啊!系统启动后,核心是一直驻留在内存的,通用核心,这个庞然大雾,如果都在内存中,多浪费资源啊~
    当然现在个人计算机的内存条也不是很贵啊!如果你有钱的话,给FreeBSD装个桌面,拿来像Windows一样使用,感觉感觉,爽一爽,那也可以不用重新编译核心了~
3,硬件支持。如果通用核心不支持你计算机上的某个硬件,就可以重新编译核心,来支持他了。
4,通用核心中有些功能是没有加上的,比如磁盘配额(限制用户磁盘使用量),我们就可以重新编译核心,让核心支持这个功能。

    要重新编译核心,必须有FreeBSD的原始代码,因为我们重新编译核心是将FreeBSD原始代码重新编译生成可执行的二进制文件嘛~,当然需要原始代码了。
    你可以查看下机器上是否安装了原始代码,只需要看看/usr/src/这个目录下有没有东东就行了。
    如果没有的话,就赶快安装吧;插入光盘,挂上,sysinstall->Distributions->src->bash和sys;
安装完后就ok啦!进入/usr/src/sys/i386/conf/这个目录下,我们只需要一个文件,GENERIC。

具体步骤如下:
1,#cd /usr/src/sys/i386/conf
    #cp GENERIC /root/MYKERNEL         //拷贝一个副本,一种好的习惯吧,不在原来的文件上修改
    #ln -s /root/MYKERNEL                  //将副本做个软连接到/usr/src/sys/i386/conf
2,编辑MYKERNEL,#vi MYKERNEL

注意:蓝色的表示FreeBSD7.0中已没有该行,在此只是让大家知道一下,可以不用理会。

                   查看计算机硬件信息,直接输入dmesg:#dmesg  并参考着主板使用手册
       关于确定自己计算机硬件信息,其实,对于新手来说,真的很麻烦,不过,要有耐心,看一遍不懂,就多看几遍,手还得勤快点儿,不懂时,多用 google 查查~

#machine i386                   
//7.0中已经没有这行,现在的计算机很NB,谁还用386地啊,开个玩笑!
                    
                 
#cpu            I486_CPU
#cpu            I586_CPU
cpu             I686_CPU
//CPU类型,可以用dmesg查看,在靠前的位置


ident           MYKERNEL
//核心名称,自己随便起
注意:象machine 与cpu 这两个设置。如果你的内核名称包含数字,请记得用双引号把它括起来。内核名将会使用-D 参数传给编译器,所以不要用像DEBUG或是其它可能干扰编译器的机器、CPU 名称,如vax ,别那么另类嘛!。


#maxusers n     
//简单的讲,他决定着系统进程表能够容纳多少个进程,在做服务器时,这个值一定要大,
7.0中已经没有这行,可能是系统自动完成这项功能吧~,我们不用理会


# To statically compile in device wiring instead of /boot/device.hints
#hints          "GENERIC.hints"         # Default places to look for devices.
//默认该行被注释上了,表示:在系统启动loader阶段,动态的从/boot/device.hints加载设备驱动程序参数;如果拿掉注释“#”,则会静态地将设备驱动程序参数编译进内核。该行保持默认即可。


#makeoptions     DEBUG=-g                # Build kernel with gdb(1) debug symbols
//内核开发与测试时用,将该行注释上


#options MATH_EMULATE #Support for x87 emulation
//早期CPU只有整型运算器,浮点运算器是单独卖的,用户可以选购,现在的CPU都带浮点运算器,这行就是浮点运算模拟器的支持,7.0中已经没有这行,不用理会。
   

options         SCHED_4BSD              # 4BSD scheduler
//SCHED_4BSD是BSD系统默认调度器,也可以说成排成工作,保留。


options         PREEMPTION              # Enable kernel thread preemption
//允许内核根据线程的优先级抢占式调度。 这有助于改善交互性, 并可以让中断的线程更早地执行,保留


options         INET                     # InterNETworking
//对IPv4的支持,即使不接入Internet也要保留,计算机内部循环网络lookback要使用,保留。
#options         INET6                   # IPv6 communications protocols
//对IPv6的支持,拿掉


#options         SCTP                    # Stream Control Transmission Protocol
//流控制传输协议,借鉴 UDP 的优点解决了 TCP 的某些局限。拿掉。


options         FFS                     # Berkeley Fast Filesystem
#options        FFS_ROOT                #FFS usable as root device [keep this!]
//最基本的文件系统,从硬盘启动需要此项,保留。注意: 在FreeBSD 5.X中, FFS_ROOT 已不是必须的了。


options         SOFTUPDATES             # Enable FFS soft updates support
//简单的讲,保持文件系统一致性,这个一致性在数据库中体现的也很明显,比如我们的机器突然掉电,可能内存中有些在数据还没有来得及写入硬盘,这样,文件系统中数据就可能不一致,还有两种保持文件系统一致性的技术,Soft Updates技术不同于这两种技术,保留。
关于Soft Updates:
http://school.21tx.com/2006/04/01/10649.html



options         UFS_ACL                 # Support for access control lists
//启用内核中的访问控制表的支持,访问控制技术是一种主动防护技术保留。
//访问控制技术通过控制与检查进出关键服务器中的访问,保护服务器中的关键数据。它是一种主机防护技术。如果说安全保护就像保护自己的球网不被攻破一样,防火墙是中卫、IDS是后卫,则访问控制就是守门员——随时准备扑出任何非法的进入。-------引自互联网


options         UFS_DIRHASH             # Improve performance on big directories
//通过使用额外的内存,提升对大目录磁盘操作的性能。大型服务器和频繁使用的工作站打开这个选项,在磁盘操作不是很重要的 小型系统上关闭它,比如防火墙。保留吧


options         UFS_GJOURNAL            # Enable gjournal-based UFS journaling
//这个技术不太清楚,打开吧。


#options         MFS                     #Memory Filesyste
#options         MD_ROOT                 # MD is a potential root device
//内存映射文件系统。如果有些数据需要快速的访问,用这个功能挺好的,拿掉。


#options         NFSCLIENT               # Network Filesystem Client
#options         NFSSERVER               # Network Filesystem Server
#options         NFS_ROOT                # NFS usable as /, requires NFSCLIENT
//网络文件系统。通过网络挂接UNIX分区,我们一般用不着,这个通常用在大型服务器上,拿掉。


#options         MSDOSFS                 # MSDOS Filesystem
//对MS-DOS® 文件系统的支持,拿掉。


#options         CD9660                  # ISO 9660 Filesystem
//CD-ROM 使用的ISO 9660文件系统,可以拿掉,需要时,内核会动态加载。拿掉。


options         PROCFS                   # Process filesystem (requires PSEUDOFS)
options         PSEUDOFS                 # Pseudo-filesystem framework
//虚拟的文件系统,挂在/proc下,允许程序(如ps)获取正在执行的进程信息。6.X 内核中, 如果希望使用 PROCFS, 就必须加入 PSEUDOFS 的支持。两个都保留。


options         GEOM_PART_GPT            # GUID Partition Tables.
options         GEOM_LABEL               # Provides labelization
//提供了在磁盘上使用大量分区的能力。保留


options         COMPAT_43TTY             # BSD 4.3 TTY compat [KEEP THIS!]
//使系统兼容4.3BSD。有些程序依赖这个功能,看后边的KEEP THIS!,一定要保留。保留


options         COMPAT_FREEBSD4          # Compatible with FreeBSD4
options         COMPAT_FREEBSD5          # Compatible with FreeBSD5
options         COMPAT_FREEBSD6          # Compatible with FreeBSD6
//对FreeBSD4、5、6中程序的支持,运行老应用程序时需要这些功能。保留


#options         SCSI_DELAY=5000         # Delay (in ms) before probing SCSI
//内核探测SCSI设备延迟时间,视情况而定是否保留,如果只有IDE硬盘驱动器,可以拿掉这行。


#options UCONSOLE #Allow users to grab the console
//FreeBSD7.0没有这个;FreeBSD 5.X中, 就已经没有UCONSOLE了。
#options USERCONFIG #boot -c editor
//这个选项允许从启动菜单启动配置编辑器。
#options VISUAL_USERCONFIG #visual boot -c editor
//这个选项允许从启动菜单启动可视化的配置编辑器。
  注意: 从FreeBSD 5.0 开始,USERCONFIG选项和新的device.hints方式冲突。


#options         KTRACE                  # ktrace(1) support
//打开内核进程跟踪,在调试时很有用。拿掉。

#options         SYSVSHM                  # SYSV-style shared memory
#options         SYSVMSG                  # SYSV-style message queues
#options         SYSVSEM                 # SYSV-style semaphores
//这三个是Unix System V处理进程之间通信用的,分别是System V共享内存、消息队列、信号量,保护共享资源;
  BSD为进程通信提供的是管道(pipe)、命名管道(named pipe)、软中断信号(signal);注释上


#options P1003_1B #Posix P1003_1B real-time extensions
//在1993 POSIX中添加的实时扩展。在ports中有些应用程序会用到它们(比如Star Office )。
注意: 在 FreeBSD 5.X中, 此项功能已经被 _KPOSIX_PRIORITY_SCHEDULING 选项所取代,并且P1003_1B也不再是必选项了。--引自互联网


options         _KPOSIX_PRIORITY_SCHEDULING    # POSIX P1003_1B real-time extensions
//实时扩展。Ports Collection中某些应用程序会用到这些。保留


#options ICMP_BANDLIM #Rate limit bad replies
//这个选项启用基于带宽限制的ICMP的错误响应。你使用这个选项可以帮助你保护你的机器
免受拒绝式服务攻击。
FreeBSD 5.X, 已经默认支持这种功能,而不需要有ICMP_BANDLIM选项。--引自互联网


options         KBD_INSTALL_CDEV        # install a CDEV entry in /dev
//这个选项是在 /dev下建立键盘设备节点必需的。保留


options         ADAPTIVE_GIANT          # Giant mutex is adaptive.
//对内核全局锁技术的支持,保护内核资源。保留


options         STOP_NMI                # Stop CPUS using NMI instead of IPI
options         AUDIT                   # Security event auditing
//这两项保留吧,不太清楚,第二个是审计什么的。保留


# To make an SMP kernel, the next two lines are needed
#options         SMP                     # Symmetric MultiProcessor Kernel
#device          apic                    # I/O APIC
//对多CPU的支持,单CPU可以拿掉


# CPU frequency control
device          cpufreq
//CPU频率控制,保留


# Bus support.
#device          eisa
device          pci
//计算机总线类型,每个计算机都有其中的一种,选择自己的总线类型
isa总线在现在的i386机器上已经很少见了。而eisa在586以后的主机板已经没见过了。pci是目前的主流。


# Floppy drives
#device          fdc
//软盘驱动器


# ATA and ATAPI devices
device          ata
//IDE接口的硬盘也叫ATA接口的硬盘,如果有IDE/ATA硬盘或光驱,一定要打开这个选项。如果要支持以下任何IDE接口装置都必须将这个选项打开。
device          atadisk                 # ATA disk drives
#device         ataraid                 # ATA RAID drives
device          atapicd                 # ATAPI CDROM drives
#device         atapifd                 # ATAPI floppy drives
#device         atapist                 # ATAPI tape drives
//以上装置分别是IDE或ATA硬盘、IDE或ATA磁盘阵列装置、IDE或ATA光驱、IDE或ATA软盘机、及IDE或ATA磁带机。您可以将不必要的装置移除,例如IDE软盘机等。

#options         ATA_STATIC_ID          # Static device numbering
//创建固定的IDE或ATA控置器的控制号码,如果拿掉这个选项,控制号码将动态创建,通常用在一些比较旧的设备上。拿掉。


# SCSI Controllers
#device          ahb                     # EISA AHA1742 family
#device          ahc                     # AHA2940 and onboard AIC7xxx devices
#options         AHC_REG_PRETTY_PRINT    # Print register bitfields in debug
                                         # output.  Adds ~128k to driver.
#device          ahd                     # AHA39320/29320 and onboard AIC79xx devices
#options         AHD_REG_PRETTY_PRINT    # Print register bitfields in debug
                                         # output.  Adds ~215k to driver.
#device          amd                 # AMD 53C974 (Tekram DC-390(T))
#device          hptiop              # Highpoint RocketRaid 3xxx series
#device          isp                 # Qlogic family
#device         ispfw                # Firmware for QLogic HBAs- normally a module
#device          mpt                 # LSI-Logic MPT-Fusion
#device         ncr                  # NCR/Symbios Logic
#device          sym                 # NCR/Symbios Logic (newer chipsets + those of `ncr')
#device          trm                 # Tekram DC395U/UW/F DC315U adapters

#device          adv                 # Advansys SCSI adapters
#device          adw                 # Advansys wide SCSI adapters
#device          aha                 # Adaptec 154x SCSI adapters
#device          aic                 # Adaptec 15[012]x SCSI adapters, AIC-6[23]60.
#device          bt                  # Buslogic/Mylex MultiMaster SCSI adapters

#device          ncv                 # NCR 53C500
#device          nsp                 # Workbit Ninja SCSI-3
#device          stg                 # TMC 18C30/18C50
//SCSI控制器。如果没有SCSI硬盘之类的东东,就都拿掉。

# SCSI peripherals
device          scbus                # SCSI bus (required for SCSI)
//SCSI总线,下边的每项都需要scbus的支持。
#device          ch                  # SCSI media changers
device          da                   # Direct Access (disks)
#device          sa                  # Sequential Access (tape etc)
#device          cd                  # CD
#device          pass                # Passthrough device (direct SCSI access)
#device          ses                 # SCSI Environmental Services (and SAF-TE)
//这些是周边的SCSI接口设备,每一项都需要scbus的支持。ch是SCSI media changer(一种备份用的设备)。如果有SCSI硬盘或是USB硬盘,保留da这个选项。sa及cd分别是SCSI磁带机及光驱。


# RAID controllers interfaced to the SCSI subsystem
#device          amr                 # AMI MegaRAID
#device          arcmsr              # Areca SATA II RAID
#device          asr                 # DPT SmartRAID V, VI and Adaptec SCSI RAID
#device          ciss                # Compaq Smart RAID 5*
#device          dpt                 # DPT Smartcache III, IV - See NOTES for options
#device          hptmv               # Highpoint RocketRAID 182x
#device          hptrr               # Highpoint RocketRAID 17xx, 22xx, 23xx, 25xx
#device          iir                 # Intel Integrated RAID
#device          ips                 # IBM (Adaptec) ServeRAID
#device          mly                 # Mylex AcceleRAID/eXtremeRAID
#device          twa                 # 3ware 9000 series PATA/SATA RAID
# RAID controllers
#device          aac                 # Adaptec FSA RAID
#device          aacp                # SCSI passthrough for aac (requires CAM)
#device          ida                 # Compaq Smart RAID
#device          mfi                 # LSI MegaRAID SAS
#device          mlx                 # Mylex DAC960 family
#device          pst                 # Promise Supertrak SX6000
#device          twe                 # 3ware ATA RAID
//磁盘阵列的支持,磁盘阵列是将多个物理磁盘组成一个逻辑磁盘,如果只有一个硬盘,就都拿掉吧!



# atkbdc0 controls both the keyboard and the PS/2 mouse
device          atkbdc              # AT keyboard controller
device          atkbd               # AT keyboard
device          psm                 # PS/2 mouse
//atkbdc用来控制AT键盘及PS/2鼠标(就是圆口的鼠标)。而atkbd及psm分别为AT键盘及PS/2鼠标的驱动程序。后两者需要前两者的支持。保留


#device          kbdmux              # keyboard multiplexer
//对多个键盘的支持。 如果只使用一个键盘,可以拿掉。


device          vga                 # VGA video card driver
//显卡驱动。保留。


device          splash              # Splash screen and screen saver support
//启动时的 splash 画面! 屏幕保护程序也需要这一选项。保留。


# syscons is the default console driver, resembling an SCO console
device          sc
//预设的console终端驱动程序,有屏幕就一定要保留


#device          agp                 # support several AGP chipsets
//对AGP接口显卡支持的驱动程序。我的是集成显卡,所以我去掉了,要注意自己的哦!!



# PCCARD (PCMCIA) support
# PCMCIA and cardbus bridge support
#device          cbb                 # cardbus (yenta) bridge
#device          pccard              # PC Card (16-bit) bus
#device          cardbus             # CardBus (32-bit) bus
//笔记本专用,拿掉。


# Serial (COM) ports
device          sio                 # 8250, 16[45]50 based
device          uart                # Generic UART driver
//支持串行端口 Serial (COM) ports,这个不太懂,保留吧~


# Parallel port
device          ppc         
device          ppbus               # Parallel port bus (required)
#device          lpt                # Printer
device          plip                # TCP/IP over parallel
device          ppi                 # Parallel port interface device
#device         vpo                 # Requires scbus and da
// 这些是并行端口驱动程序,ppc提供ISA-bus并行接口支持;ppbus提供并行总线的支持;lpt提供并行打印机的支持,plip提供并行网络接口 驱动器的支持;普通用途的I/O (“geek port”) + IEEE1284 I/O;这是针对Iomega Zip驱动器的。它要求scbusda的支持。 最好的执行效果是工作在EPP 1.9模式。--引自手册


# If you've got a "dumb" serial or parallel PCI card that is
# supported by the puc(4) glue driver, uncomment the following
# line to enable it (connects to sio, uart and/or ppc drivers):
#device         puc
//默认已经注释,不太清楚,不用理会了。


# PCI Ethernet NICs.
#device          de                  # DEC/Intel DC21x4x (``Tulip'')
#device          em                  # Intel PRO/1000 adapter Gigabit Ethernet Card
#device          ixgb                # Intel PRO/10GbE Ethernet Card
device           le                  # AMD Am7900 LANCE and Am79C9xx PCnet
#device          txp                 # 3Com 3cR990 (``Typhoon'')
#device          vx                  # 3Com 3c590, 3c595 (``Vortex'')
//网卡驱动,保留自己的


# PCI Ethernet NICs that use the common MII bus controller code.
# NOTE: Be sure to keep the 'device miibus' line in order to use these NICs!
#device          miibus              # MII bus support
//对MII总线的支持,对于一些PCI 10/100 Ethernet NIC来说是必需的。
#device          bce                 # Broadcom BCM5706/BCM5708 Gigabit Ethernet
#device          bfe                 # Broadcom BCM440x 10/100 Ethernet
#device          bge                 # Broadcom BCM570xx Gigabit Ethernet
#device          dc                  # DEC/Intel 21143 and various workalikes
#device          fxp                 # Intel EtherExpress PRO/100B (82557, 82558)
#device          lge                 # Level 1 LXT1001 gigabit Ethernet
#device          msk                 # Marvell/SysKonnect Yukon II Gigabit Ethernet
#device          nfe                 # nVidia nForce MCP on-board Ethernet
#device          nge                 # NatSemi DP83820 gigabit Ethernet
#device         nve                  # nVidia nForce MCP on-board Ethernet Networking
#device          pcn                 # AMD Am79C97x PCI 10/100 (precedence over 'le')
#device          re                  # RealTek 8139C+/8169/8169S/8110S
#device          rl                  # RealTek 8129/8139
#device          sf                  # Adaptec AIC-6915 (``Starfire'')
#device          sis                 # Silicon Integrated Systems SiS 900/SiS 7016
#device          sk                  # SysKonnect SK-984x & SK-982x gigabit Ethernet
#device          ste                 # Sundance ST201 (D-Link DFE-550TX)
#device          stge                # Sundance/Tamarack TC9021 gigabit Ethernet
#device          ti                  # Alteon Networks Tigon I/II gigabit Ethernet
#device          tl                  # Texas Instruments ThunderLAN
#device          tx                  # SMC EtherPower II (83c170 ``EPIC'')
#device          vge                 # VIA VT612x gigabit Ethernet
#device          vr                  # VIA Rhine, Rhine II
#device          wb                  # Winbond W89C840F
#device          xl                  # 3Com 3c90x (``Boomerang'', ``Cyclone'')


# ISA Ethernet NICs.  pccard NICs included.
#device          cs                  # Crystal Semiconductor CS89x0 NIC
# 'device ed' requires 'device miibus'
#device          ed                  # NE[12]000, SMC Ultra, 3c503, DS8390 cards
#device          ex                  # Intel EtherExpress Pro/10 and Pro/10+
#device          ep                  # Etherlink III based cards
#device          fe                  # Fujitsu MB8696x based cards
#device          ie                  # EtherExpress 8/16, 3C507, StarLAN 10 etc.
#device          sn                  # SMC's 9000 series of Ethernet chips
#device          xe                  # Xircom pccard Ethernet
//ISA 以太网卡驱动


# Wireless NIC cards
#device          wlan                # 802.11 support
#device          wlan_wep            # 802.11 WEP support
#device          wlan_ccmp           # 802.11 CCMP support
#device          wlan_tkip           # 802.11 TKIP support
#device          wlan_amrr           # AMRR transmit rate control algorithm
#device          wlan_scan_ap        # 802.11 AP mode scanning
#device          wlan_scan_sta       # 802.11 STA mode scanning
#device          an                  # Aironet 4500/4800 802.11 wireless NICs.
#device          ath                 # Atheros pci/cardbus NIC's
#device          ath_hal             # Atheros HAL (Hardware Access Layer)
#device          ath_rate_sample     # SampleRate tx rate control for ath
#device          awi                 # BayStack 660 and others
#device          ral                 # Ralink Technology RT2500 wireless NICs.
#device          wi                  # WaveLAN/Intersil/Symbol 802.11 wireless NICs.
#device         wl                   # Older non 802.11 Wavelan wireless NIC.
//无线网卡驱动


# Pseudo devices.
device          loop                # Network loopback
// 内部循环网络,telnet等用,保留

device          random              # Entropy device
device          ether               # Ethernet support
//这是用来支持以太网络,只要您有网络卡都必须保留这个项目。保留

#device          sl                  # Kernel SLIP
//SLIP已经被PPP取代了,拿掉。

device          ppp                 # Kernel PPP
//PPP 就是 Point-to-Point 通讯协议的简写,提供了相当完整的 TCP/IP 功能。需要时可动态加载。
  这里的PPP称为Kernel-mode PPP,传输速度较快,但设定较为不易,额外功能较少。随便选择。

#device          tun                 # Packet tunnel.
//tun 是User-modePPP(亦称 iijppp),比Kernel-mode PPP容易设定,传输速度略慢,但提供许多特殊能,如需要时自动拨号联机 (Dial-up on demand)、封包过滤器 (packet filter)等等。后接数字表示要支持多少线的PPP,需要时可动态加载。随便选择。
    tun 会被ppp所使用,如果有拨接网络(含 ADSL 拨号)一定要保留这两个选项。

device          pty                 # Pseudo-ttys (telnet etc)
//终端例如:telnet同时上线最大人数,在 FreeBSD 4.x 预设是 16。你可以在pty的后面加上数字来提高人数,最大是 256。FreeBSD 5.x 后则不用理会这个问题。保留。

device          md                  # Memory "disks"
//用来支持虚拟的 Memory disk,这是一种将某块内存拿来当成磁盘驱动器使用的虚拟装置。
这个不太清楚,保留吧

device          gif                 # IPv6 and IPv4 tunneling
//IPv4与IPv6通信,可动态加载。随便选择。

device          faith               # IPv6-to-IPv4 relaying (translation)
//抓取封包,并将封包转交给负责IPv4与IPv6通讯的后台服务程序,提供动态加载。随便选择。

device          firmware            # firmware assist module
//介于硬件与软件之间的东东,挺麻烦的家伙,保留吧

# The `bpf' device enables the Berkeley Packet Filter.
# Be aware of the administrative consequences of enabling this!
# Note that 'bpf' is required for DHCP.
device          bpf                 # Berkeley packet filter
//提供网络封包过滤功能,网络监控程序用来获取网络上的封包。保留



# USB support
#device          uhci                # UHCI PCI->USB interface
#device          ohci                # OHCI PCI->USB interface
device          ehci                 # EHCI PCI->USB interface (USB 2.0)
device          usb                  # USB Bus (required)
#device         udbp                 # USB Double Bulk Pipe devices
#device          ugen                # Generic
#device          uhid                # "Human Interface Devices"
#device          ukbd                # Keyboard
#device          ulpt                # Printer
#device          umass               # Disks/Mass storage - Requires scbus and da
device          ums                  # Mouse
#device          ural                # Ralink Technology RT2500USB wireless NICs
#device          rum                 # Ralink Technology RT2501USB wireless NICs
#device          urio                # Diamond Rio 500 MP3 player
#device          uscanner            # Scanners
# USB Ethernet, requires miibus
#device          aue                 # ADMtek USB Ethernet
#device          axe                 # ASIX Electronics USB Ethernet
#device          cdce                # Generic USB over Ethernet
#device          cue                 # CATC USB Ethernet
#device          kue                 # Kawasaki LSI USB Ethernet
#device          rue                 # RealTek RTL8150 USB Ethernet
//USB支持,如果要使用鼠标(包括USB接口(方口)和PS/2接口(圆口))一定要有usb和ums的支持,其中如果想使用USB 2.0就要保留ehci。


# FireWire support
device          firewire            # FireWire bus code
device          sbp                 # SCSI over FireWire (Requires scbus and da)
device          fwe                 # Ethernet over FireWire (non-standard!)
device          fwip                # IP over FireWire (RFC 2734,3146)
device          dcons               # Dumb console driver
device          dcons_crom          # Configuration ROM for dcons
//防火墙支持

    注意:以上,只是我个人对GENERIC内核的设置,如果还需要其他一些功能,可以加在里边比如磁盘配额等等,不过那些以后再考虑也关系,先把这个GENERIC搞定吧~
    编译内的一定要适情况而定,依据自己计算机硬件信息所需要的功能而定
仅供参考。


    终于搞定了,真是麻烦死了,一定要有耐心哦~

接下来,就可以存盘退出,然后步骤如下:

1,执行#/usr/sbin/config MYKERNEL        //生成内核原始码

接着会有写提示,很简单的提示~


2,#cd ../compile/MYKERNEL               //新内核的原始码目录            
3,#make cleandepend                     //清除依赖吧关系吧~ 我的理解
4,#make depend                          //建立目标文件、源文件、头文件的依赖关系表,如果头文件已更新,就会重新编译需要该头文件                                                                                   的源文件。如果你没有看懂解释没有关系。如果以后你在Unix下开发程序,自然就会明白。
5,#make                                  //编译
6,#make install                         //安装

    接着,就等着吧。
注意如果出现了错误,千万别着急,多花些时间,简单看下错误提示,错误多数是后边那些不好确定的行目。修改完后保存,先把上次/usr/src/sys/i386/compile目录下的MYKERNEL删掉,然后再重新编译。

    这几步是我看了些资料和编译时的提示做的,看其他资料上说,还有别的方法,不过,我没有试过,也不知到这两种方法有什么区别,哪个比较好?

    以上,只是我个人的总结,虽然成功了,但是,还有些地方不太明白,比如,有些什么总线啦~  如何确定串口并口啦~  AT 键盘啦~  还有就是刚才的两种执行方法有和不同。
    如果需要详细说明的地方,我会再不断更新。
    小弟我也才刚刚出道,广交贤友,如果有高手看到还望指点。
    好了,累死我了,如果有不详细、不清楚的地方,就留言吧~ 我天天都上线的~

posted on 2008-04-08 09:16 Ken.UNC 阅读(1297) 评论(9)  编辑 收藏 引用

Feedback

# re: FreeBSD7.0基础--核心编译 2008-04-10 14:34 barry

认真拜读了,非常有用,谢谢!  回复  更多评论   

# re: FreeBSD7.0基础--核心编译 2008-04-12 01:21 Lf0x

不错,写的挺详细的,^_^  回复  更多评论   

# re: FreeBSD7.0基础--核心编译[未登录] 2008-04-12 06:19 gunc

谢谢 支持哈~  回复  更多评论   

# re: FreeBSD7.0基础--核心编译 2008-04-12 06:21 gunc

谢谢 支持啊  回复  更多评论   

# re: FreeBSD7.0基础--核心编译 2008-05-06 07:12 小黑米

谢谢 太有帮助了~  回复  更多评论   

# re: FreeBSD7.0基础--核心编译 2009-04-02 22:34 oice

从baidu空间追踪到这,总算看到一份全貌的编译文章
谢谢 博主~  回复  更多评论   

只有注册用户登录后才能发表评论。