Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1476191
  • 博文数量: 295
  • 博客积分: 10051
  • 博客等级: 上将
  • 技术积分: 3850
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-11 08:50
文章分类

全部博文(295)

文章存档

2011年(1)

2009年(4)

2008年(290)

我的朋友

分类: BSD

2008-04-19 12:55:07

BSD内核编译相对来说比linux的内核简单
内核文件配置好以后就能够进行内核的编译了,一般有两种编译的方式,我们采取传统的编译方式。
我们进入 /usr/src/sys/i386/conf 目录:
# cd /usr/src/sys/i386/conf
运行config命令来产生内核源代码。
# /usr/sbin/config GENERIC
切换到建立内核的目录。
# cd ../compile/GENERIC
编译内核
# make depend
# make
安装新内核。
# make install
OK,到这里,如果中间没有出现任何错误的话,那么我们的内核心就已经安装成功了,reboot后就能够使用我们的新编译的内核
升级────────────》
cvsup
mergemaster -p
make buildworld kernel installworld
mergemaster
当然,一般来说,先做mergemaster也不至于造成太严重的问题(并不总是这样)。

最后,参考UPDATING非常重要。


你可以於make 前將原kernel先備份一份,
cp /kernel /kernel.backup
然後再make新的kernel
如果make新的kernel有問題你可以於boot時可使用備份的kernel?黹_機
unload
load kernel.old
boot
然後再重新修正kernel設定檔

然后:
1.chflags noschg /kernel
2.cp /kernel.old /kernel
3.chflags schg /kernel
即可

附加:


#
# APACHE -- FreeBSD/i386内核配置文件
#

machine i386         # 体系模型为i386
cpu I386_CPU         # 支持80386
cpu I486_CPU         # 支持80486
cpu I586_CPU         # 支持Pentium
cpu I686_CPU         # 支持Pentium Pro以及更高
ident APACHE         # 内核文件的名字
maxusers 0          # 自动检测同时允许的最大用户数

#makeoptions DEBUG=-g # 包含调试符号。通常只有current版本打开
options MATH_EMULATE #支持协处理器模拟
#options GPL_MATH_EMULATE #GPL模拟更好,但仍然没必要,P III有内建协处理器
options INET     #支持互联网
options INET6     #IPv6通讯协议
options FFS      #伯克利快速文件系统
options FFS_ROOT   #FFS作为根设备[必须保留]
options SOFTUPDATES  #打开FFS soft updates支持
options UFS_DIRHASH  #提高大型目录的支持
options MFS      #内存文件系统
options MD_ROOT    #MD作为根设备
options NFS      #Network Filesystem
options NFS_ROOT   #NFS作为根设备(需要NFS)
options MSDOSFS    #MSDOS文件系统
options CD9660    #ISO 9660文件系统(光盘)
options CD9660_ROOT  #CD-ROM作为根设备(需要CD9660)
options PROCFS    #进程文件系统
options COMPAT_43   #兼容4.3BSD[必须保留]
options SCSI_DELAY=5000 #检测SCSI设备前的延时(ms)
options UCONSOLE   #用户可以夺取控制台[没有X,不用]
options USERCONFIG  #boot -c编辑器 editor
options VISUAL_USERCONFIG #菜单式boot -c编辑器
options KTRACE    #ktrace(1)支持
options SYSVSHM    #SYSV-风格的共享内存
options SYSVMSG    #SYSV-风格的消息队列
options SYSVSEM    #SYSV-风格的信号量(semaphores)
options P1003_1B   #Posix P1003_1B实时扩展
options _KPOSIX_PRIORITY_SCHEDULING
options ICMP_BANDLIM #对恶意ICMP请求进行限制[例如flood ping]
options KBD_INSTALL_CDEV # 在/dev安装一个CDEV设备

options CPU_ENABLE_SSE #启用SSE支持(Pentium III)
#options CPU_ATHLON_SSE_HACK #如果你的BIOS不能正确识别Athlon SSE
#options NO_F00F_HACK #如果你使用Pentium且没有F00F bug

# 对ISA总线,AUTO_EOI将启用8259A的自动EOI功能
# 这意味着每次中断调用节省0.7-1.25微秒,但不应用于笔记本
options AUTO_EOI_1



#options AUTO_EOI_2 # 请不要和AUTO_EOI_1同时打开,否则会崩溃。
#options MAXMEM="(1024*1024)" #除非你的BIOS设置不正确造成
               #无法检测内存大小,单位是KB

#在xntpd的监督下启用内核相同步逻辑
#options PPS_SYNC

#IPFirewall。我们需要的功能IPFilter都提供,并且更高效
#除非你需要IPFirewall的某些专有功能,否则这部分不必编译
#options IPFIREWALL  #防火墙
options IPDIVERT
#options IPFIREWALL_VERBOSE #允许防火墙日志
#options IPFIREWALL_FORWARD #允许透明代理
#options IPFIREWALL_VERBOSE_LIMIT=100 #限制日至
#options IPFIREWALL_DEFAULT_TO_ACCEPT #默认允许所有IP包
#options ICMP_BANDLIM #deny ddos not in 5.4
options DUMMYNET #limit


#options IPFW2 # IPFW2,这一特性并非4.x默认。

options IPFILTER    #ipfilter支持
options IPFILTER_LOG  #ipfilter日志
options IPFILTER_DEFAULT_BLOCK #默认阻断所有IP包

# 静态数据包过滤许可规则(直接放入内核)
options ACCEPT_FILTER_DATA
options ACCEPT_FILTER_HTTP

#options DEVICE_POLLING #改善网络响应时间,但realtek不支持

options IPSTEALTH   #支持秘密IP转发
###options RANDOM_IP_ID  #随机IP ID,阻止信息泄漏( 5.4无效)
#options TCP_DROP_SYNFIN #抛弃SYN+FIN包,阻止检测服务器
            #的TCP协议栈、操作系统,但这对Web
            #服务器是不推荐的,因为不符合RFC1644

#options QUOTA     #启用配额支持,但此处没用

makeoptions CONF_CFLAGS=-fno-builtin #禁用memcpy等GCC默认的影响性能的设置

# 根据内存大小配置应用程序可用的最大内存
# 这台机器有1GB内存
# FreeBSD默认是允许使用128MB
options MAXDSIZ="(1024*1024*1024)"
options MAXSSIZ="(1024*1024*1024)"
options DFLDSIZ="(1024*1024*1024)"

#options PMAP_SHPGPERPROC=201 #每一进程的可用PV项数。

#options NO_SWAPPING     #禁用交换区。不推荐

options PANIC_REBOOT_WAIT_TIME=0 #内核异常(kernel panic)立即重启

#核心内存大小限制。我倾向使用默认值
#options VM_KMEM_SIZE="(12*1024*1024)"
#options VM_KMEM_SIZE_MAX="(256*1024*1024)"
#options VM_KMEM_SIZE_SCALE="4"

#将这份配置文件保存到kernel文件中,以便以后读取
#使用这样的命令:
# strings -n 3 /kernel | sed -n 's/^___//p' > APACHE
#这里我们不需要这样做。
#options INCLUDE_CONFIG_FILE # 包含配置文件到内核中

#options USER_LDT #某些ports需要这么做,未来的FreeBSD可能也需要

# 下面两项在制作对称多处理器(SMP)内核时需要
#options SMP     #对称多处理器内核
#options APIC_IO   #对称(APIC) I/O

device isa
device eisa
device pci

# 软驱
device fdc0 at isa? port IO_FD1 irq 6 drq 2
device fd0 at fdc0 drive 0
device fd1 at fdc0 drive 1
#
# 如果使用东芝Libretto以及他的Y-E Y-E Data PCMCIA软驱
# 不要使用上面的fdc0,而应使用
#device fdc0

# ATA以及ATAPI设备
# 下面两行被删去,因为新系统不再需要它们。
device ata0 at isa? port IO_WD1 irq 14
device ata1 at isa? port IO_WD2 irq 15
device ata
device atadisk # ATA 磁盘驱动器(IDE硬盘)
device atapicd # ATAPI 光驱
device atapifd # ATAPI 软驱
device atapist # ATAPI 磁带机
options ATA_STATIC_ID #静态设备编号[新系统不再需要]

# SCSI控制器
device ahb # EISA AHA1742 family
device ahc # AHA2940 板载AIC7xxx设备
device amd # AMD 53C974 (Tekram DC-390(T))
device isp # Qlogic family
device ncr # NCR/Symbios Logic
device sym # NCR/Symbios Logic (较新的芯片组)
options SYM_SETUP_LP_PROBE_MAP=0x40
# 使用ncr可以在配置了sym和ncr的情况下挂接旧的NCR设备

device adv0 at isa?
device adw
device bt0 at isa?
device aha0 at isa?
device aic0 at isa?

device ncv # NCR 53C500
device nsp # Workbit Ninja SCSI-3
device stg # TMC 18C30/18C50

# SCSI 外设
device scbus # SCSI 总线(如果使用SCSI设备,必须有)
device da # Direct Access (硬盘)
device sa # Sequential Access (磁带,等等)
device cd # CD
device pass # Passthrough device (直接 SCSI 访问)

# 通过SCSI子系统接口的RAID控制器
device asr # DPT SmartRAID V, VI and Adaptec SCSI RAID
device dpt # DPT Smartcache - See LINT for options!
device iir # Intel Integrated RAID
device mly # Mylex AcceleRAID/eXtremeRAID
device ciss # Compaq SmartRAID 5* series

# RAID控制器
device aac # Adaptec FSA RAID, Dell PERC2/PERC3
device aacp # SCSI passthrough for aac (requires CAM)
device ida # Compaq Smart RAID
device amr # AMI MegaRAID
device mlx # Mylex DAC960 family
device twe # 3ware Escalade

# atkbdc0 控制键盘和PS/2鼠标[这台机器没配鼠标,也不用图形界面]
device atkbdc0 at isa? port IO_KBD
device atkbd0 at atkbdc? irq 1 flags 0x1
device psm0 at atkbdc? irq 12 #鼠标器

device vga0 at isa?
options VGA_NO_FONT_LOADING # 不需要保存/加载字体[节省内存]
options VGA_NO_MODE_CHANGE # 不需要修改显示模式[节省内存]

# 启动画面和屏幕保护程序[我的服务器平时不接显示器]
pseudo-device splash

# syscons 是默认的控制台驱动,类似SCO控制台
device sc0 at isa? flags 0x100
options MAXCONS=4 # 不需要更多的控制台
options SC_DISABLE_REBOOT # 禁止Ctrl+Alt+Del重启,必须以root登录。

options SC_NO_CUTPASTE   # 禁用剪贴板[节省内存]
options SC_NO_FONT_LOADING # 禁用字体加载[节省内存]
options SC_NO_SYSMOUSE   # 禁用鼠标[节省内存]

# 对于pcvt vt220控制台,启用这个和PCVT_FREEBSD
#device vt0 at isa?
#options XSERVER # 在vt控制台支持X服务器
#options FAT_CURSOR # 使用大光标
# 如果你是用ThinkPad,将下面的一行和其他PCVT相关设备的注释去掉
#options PCVT_SCANSET=2 # IBM使用非标准键盘

# 浮点运算支持 - 请勿禁用
device npx0 at nexus? port IO_NPX irq 13

# 电源管理支持[这台机器期待长期运行]
device apm0 at nexus? disable flags 0x20 # Advanced Power Management

# PCCARD (PCMCIA) 支持
device card
device pcic0 at isa? irq 0 port 0x3e0 iomem 0xd0000
device pcic1 at isa? irq 0 port 0x3e2 iomem 0xd4000 disable

# 串口(COM)
device sio0 at isa? port IO_COM1 flags 0x10 irq 4
device sio1 at isa? port IO_COM2 irq 3
device sio2 at isa? disable port IO_COM3 irq 5
device sio3 at isa? disable port IO_COM4 irq 9

# 并口
device ppc0 at isa? irq 7
device ppbus # 并口总线 (所有并口设备都需要)
device lpt  # 打印机
device plip # 并口TCP/IP
device ppi  # 并口接口设备
#device vpo # 需要scbus和da

# PCI 以太网适配器
device de # DEC/Intel DC21x4x (``Tulip'')
device em # Intel PRO/1000 adapter Gigabit Ethernet Card (``Wiseman'')
device txp # 3Com 3cR990 (``Typhoon'')
device vx # 3Com 3c590, 3c595 (``Vortex'')

# 使用公共的MII总线控制器代码的PCI以太网适配器
# 注意:一定要保留'device miibus'以确保可用
device miibus # MII总线支持
device dc # DEC/Intel 21143 and various workalikes
device fxp # Intel EtherExpress PRO/100B (82557, 82558)
device pcn # AMD Am79C97x PCI 10/100 NICs
device rl # RealTek 8129/8139
device sf # Adaptec AIC-6915 (``Starfire'')
device sis # Silicon Integrated Systems SiS 900/SiS 7016
device ste # Sundance ST201 (D-Link DFE-550TX)
device tl # Texas Instruments ThunderLAN
device tx # SMC EtherPower II (83c170 ``EPIC'')
device vr # VIA Rhine, Rhine II
device wb # Winbond W89C840F
device xl # 3Com 3c90x (``Boomerang'', ``Cyclone'')
device bge # Broadcom BCM570x (``Tigon III'')

# ISA以太网适配器
# 'device ed' 需要 'device miibus'
device ed0 at isa? port 0x280 irq 10 iomem 0xd8000
device ex
device ep
device fe0 at isa? port 0x300
# Xircom Ethernet
device xe
# PRISM I IEEE 802.11b wireless NIC.
device awi
# WaveLAN/IEEE 802.11 wireless NICs. Note: the WaveLAN/IEEE really
# exists only as a PCMCIA device, so there is no ISA attachment needed
# and resources will always be dynamically assigned by the pccard code.
device wi
# Aironet 4500/4800 802.11 wireless NICs. Note: the declaration below will
# work for PCMCIA and PCI cards, as well as ISA cards set to ISA PnP
# mode (the factory default). If you set the switches on your ISA
# card for a manually chosen I/O address and IRQ, you must specify
# those parameters here.
device an
# The probe order of these is presently determined by i386/isa/isa_compat.c.
device ie0 at isa? port 0x300 irq 10 iomem 0xd0000
#device le0 at isa? port 0x300 irq 5 iomem 0xd0000
device lnc0 at isa? port 0x280 irq 10 drq 0
device cs0 at isa? port 0x300
device sn0 at isa? port 0x300 irq 10

# 伪设备 - 数字表示分配多少个
pseudo-device loop # 环回网络
pseudo-device ether # 以太网支持
pseudo-device sl 1 # 核心级SLIP
pseudo-device ppp 1 # 核心级PPP
pseudo-device tun  # 数据包隧道
pseudo-device pty  # 伪-tty(telnet等等)
pseudo-device md  # 内存虚拟盘
pseudo-device gif  # IPv6和IPv4隧道
pseudo-device faith 1 # IPv6-to-IPv4转发(翻译)

# `bpf'伪设备将启用伯克利数据包过滤器。
# 小心由此带来的管理问题
pseudo-device bpf #Berkeley packet filter

# USB支持
device uhci # UHCI PCI->USB interface
device ohci # OHCI PCI->USB interface
device usb # USB Bus (required)
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 uscanner # Scanners
device urio # Diamond Rio MP3 Player

# USB 以太网,需要mii
device aue # ADMtek USB ethernet
device cue # CATC USB ethernet
device kue # Kawasaki LSI USB ethernet



LINT中对于配置有更详细的说明。由于时间关系,这里不给出LINT的完整翻译。对于常用的LINT配置(蓝色,但被注释的部分),我做了一点说明。

需要说明的是,我个人的经验,在较旧的AMD处理器上运行FreeBSD服务器不是一个明智的选择。我个人的经验是,在K6上运行FreeBSD,只要 CPU占用超过98%,系统就会死机。这可能是由于FreeBSD的设计过分地挖掘了系统的性能(按FreeBSD.org自己的说法,榨干服务器的每一滴油,旧的AMD处理器可能会吃不消;但我在双AMD Athlon MP 1900+上运行FreeBSD没有出现类似的情况。与AMD不同,在Intel的全系列处理器上(包括存在F00F bug的Pentium处理器,486,Pentium-III, Pentium 4, Celeron-II 667等等)我从未遇到过任何问题。

这台服务器的网卡使用的是Realtek-8139芯片,这样的网卡在市场上非常常见。为了确认你的网卡型号,请运行ifconfig。

编辑完配置文件,是用下面的命令编译、安装内核:

cd /usr/src
make kernel KERNCONF=APACHE
阅读(1350) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~