精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>电脑技术>>● FreeBSD>>系统管理>>系统设置与技巧>>系统相关之howto>>系统相关的 : 如何编译 kernel : 一个 ke

主题:系统相关的 : 如何编译 kernel : 一个 ke
发信人: neal()
整理人: (1999-04-22 02:51:29), 站内信件
 
        自己编译一个 kernel 是很重要的, 安装时附的 kernel 没有特殊功能 
        又含有一些不必要的 device 多占记忆体, boot 时还要 -c. 
        在 BSD 传统是有一个 kernel config file, 纪录一些设定, 编辑好後 
        再用 config 来产生编译环境再 make. 
 
        1. 首先, 你要取得 kernel source, 有安装 sourec packages 的人此 
           步可以略过, 不过一般人都不知道要装的. 
           使用 ftp 的方法..... 
           1) ftp 
ftp.edu.tw:/pub/FreeBSD/2.1.0-RELEASE/src/ssys.* 
           2) mkdir /usr/src/sys; cd /; ln -s /usr/src/sys . 
           3) cd /; cat /tmp/ssys.* | gunzip | tar xvf - 
 
        2. 编辑你自己的 kernel config 档, 此档会影响你的 kernel 功能, 
           不可乱编一齐, 通常你可以用 /sys/i386/conf/GENERIC 当做□例, 
           你可以看看 /sys/i386/conf/LINT, 里面有详细的说明, 不过不要 
           拿 LINT 来编译. 
           本文後附了一个□例, 你可以存下来改改做为你的第一个 kernel 
           config file. 
           通常我们使用 hostname 的大写做为档名, 如 CCSUN1 等等, 不过 
           用啥名字都无所谓. 
 
        3. 当你编好了以後, 放在 /sys/i386/conf 下, 再 
           cd /sys/i386/conf; config CCSUN1 
 
        4. 接下来就是要编译它罗.. 
           cd /sys/compile/CCSUN1, make depend all install 
           它会把 /kernel 备份成 /kernel.old, 在把新 kernel 拷背成 
           /kernel 
 
        5. sync; reboot 并且祈祷它能动并如你所愿. 
 
        6. 如果失败的话, 你可以用旧的 kernel.old 开机, 在 boot: 时键入 
           "/kernel.old -c". 
           如果连旧的 kernel 都不行了, 就用 "/kernel.GENERIC -c" 
 
======== a kernel config sample ======== 

# GENERIC -- Generic machine with WD/AHx/NCR/BTx 
family disks 

#       GENERIC,v 1.20 1994/11/18 19:10:25 jkh Exp 

 
#@ 永远是 i386 
machine         "i386" 
 
#@ CPU 种类 
#cpu            "I386_CPU" 
cpu             "I486_CPU" 
#cpu            "I586_CPU" 
#cpu            "I686_CPU" 
 
#@ 只是个识别字, 没有意义 
ident           GENERIC 
 
#@ 这并"不是"使用者人数上限, 而是定义一些系统的结构应该留多大的空间,通常 
#@ 打个 16 或 32 就够了, 除非你开站, 那就用 64 吧 
#@ 请注意这个值永远不要大於你的记忆体数目 
maxusers        32 
 
#@ 一个 user 可以执行的 process 数上限 
options         CHILD_MAX=128 
#@ 一个 user 可以开启的档案数上限 
options         OPEN_MAX=128 
 
#@ 打开 kernel debugger, 一般人用不到吧 (debug kernel 用) 
#options         DDB 
 
#@ 允许 system-call tracing (详情见 ktrace, kdump), useful to 
programmer 
#options         KTRACE                  #kernel tracing 
 
#@ 没有 FPU (SX) 的苦主用的, 用 DX 的人就不用了 
#options        MATH_EMULATE            #Support for x87 
emulation 
 
#@ 超过 64MB 记忆体时请指定,单位是 K。例如 128MB RAM: 
#options        "MAXMEM=(128*1024)" 
 
#@ 支援 networking, 一定要有 
options         INET                    #InterNETworking 
 
#@ IPX 相关 protocol 
#options         IPX                     #IPX/SPX communications 
protocols 
#options         IPXIP                   #IPX in IP encapsulation (not 
available 
#options         IPTUNNEL                #IP in IPX encapsulation 
(not available 
#options         IPXPRINTFS=0            #IPX/SPX Console 
Debugging Information 
#options         IPX_ERRPRINTFS=0        #IPX/SPX Console 
Debugging Information 
 
#@ 档案系统支援 
#@ 只有 UFS 是必备的, 其他的可以不必, 要用时 kernel 会用 LKM 载入 
options         FFS                     #Berkeley Fast Filesystem 
#options        NFS                     #Network Filesystem 
##options       NFS_NOSERVER            #Disable the 
NFS-server code. 
#options        MSDOSFS                 #MSDOS Filesystem 
#options        "CD9660"                #ISO 9660 Filesystem 
#options        PROCFS                  #Process filesystem 
#options        KERNFS                  #Kernel filesystem 
#options        NQNFS                   #Enable NQNFS lease 
checking 
#options        FDESC                   #File descriptor filesystem 
#options        LFS                     #Log filesystem 
#options        MFS                     #Memory File System 
#options        NULLFS                  #NULL filesystem 
#options        PORTAL                  #Portal filesystem 
#options        UMAPFS                  #UID map filesystem 
#options        UNION                   #Union filesystem 
#options        DEVFS                   #devices filesystem 
#options        "EXT2FS"                #ext2fs, only in 
2.2-CURRENT 
 
#@ 4.3BSD 相容, 这是必要的 
options         "COMPAT_43"             #Compatible with BSD 4.3 
 
#@ 执行 Linux 的执行档,就算你利用 LKM 载入,你还是需要这个参数 
#@ 你可以修改 /etc/sysconfig 中的 linux=YES,或是执行 /usr/bin/linux
 
#@ 你必须安装 packages 中的 linux_lib 
#options        "COMPAT_LINUX"          #Linux Emulator 
 
#@ SCO binary emulator 
#options        "IBCS2" 
 
#@ 一开机时 SCSI 卡会先等 device 几秒, 对於一些比较慢的 SCSI device, 
#@ 如 CDROM 而言是须要的, 最小值是 2, 选择适合你的值就好了 
options         "SCSI_DELAY=10"         #Be pessimistic about Joe
 SCSI device 
 
#@ 允许使用者截取 console message,对於 xconsole 之类的程式是必要的 
options         UCONSOLE                #Unix console 
 
#@ Virtual console 数目的上限, Alt-F1 到 Alt-F12 等等, 只是定义上限而
已 
#@ 真正能用的 virtual console 必须看 /etc/ttys 定义 vty 的数目 
#@ 本值内定是 16 
options         "MAXCONS=8"             #Max number for virtual 
console 
 
#@ 给 WINE (MS-Windows Emulator) 用的 
options         USER_LDT                #For WINE, MS-Windows 
Emulator 
 
#@ 使用 QUOTA 
options         QUOTA                   #For quotas 
 
#@ SYSV IPC/SHM (BBS 跟 X-window 及 COMPAT_LINUX 
须要用), 这是必要的 
options         SYSVMSG,SYSVSEM,SYSVSHM #For 
SYSV-IPC 
 
#@ LKM 的载入器, 这是必要的(在 2.1.5R 以後已经废除,成为内定参数) 
options         LKM                     #Loadable kernel module loader 
 
#@ 如果你用 ISA 的 SCSI 卡, 又有大於 16MB 的记忆体, 必须打开此项, 否则无
法 
#@ 使用 >16MB 记忆体. 如果你是用 EISA/VL/PCI 的 SCSI 卡就不须要了 
#@ 打开它会减低一点点速度, 没事不要开 (用 IDE 的当然不用了) 
#options                BOUNCE_BUFFERS          #include support 
for DMA bounceb 
uffers 
 
#@ 要用 IP-Firewall 才须要,你可以用 LKM 载入 
#options                IPFIREWALL              #Firewall code 
#options                IPFIREWALL_VERBOSE      #Print 
information about droppe 
packets 
#options                IPACCT                  #Used with ipfirewall 
 
#@ 要用 IP-Firewall 或要当 router 才要 
#@ 在 2.2-960323-SNAP 後已废除, 以 sysctl 打开 (见 /etc/sysconfig) 
#options                GATEWAY                 #Internetwork gateway 
 
#@ Multicast routing, 做 Multicast router 用 
#options         MROUTING                # Multicast routing 
 
#@ 允许 swap device 的数目 (内定 20) 
#options         NSWAPDEV=20 
 
#@ 指定 root partition 在那个硬碟上 
config          kernel root on wd0 dumps on wd0 
 
#@ 使用 ISA bus 
controller      isa0 
 
#@ 使用 EISA bus 
#controller     eisa0 
 
#@ 使用 PCI bus 
controller      pci0 
 
#@ 软碟控制卡 
controller      fdc0    at isa? port "IO_FD1" bio irq 6 drq 2 vector 
fdintr 
disk            fd0     at fdc0 drive 0 
disk            fd1     at fdc0 drive 1 
 
#@ IDE 硬碟控制卡 
controller      wdc0    at isa? port "IO_WD1" bio irq 14 vector 
wdintr 
disk            wd0     at wdc0 drive 0 
disk            wd1     at wdc0 drive 1 
 
#@ 2nd IDE 硬碟控制卡, 四台 IDE 硬碟用 
#controller     wdc1    at isa? port "IO_WD2" bio irq 15 vector 
wdintr 
#disk           wd2     at wdc1 drive 0 
#disk           wd3     at wdc1 drive 1 
 
#@ IDE(ATAPI 规格) 光碟机的 Device 
#options         ATAPI   #Enable ATAPI support for IDE bus 
#options         ATAPI_STATIC 
#device          wcd0    #IDE CD-ROM 
 
#@ SCSI 控制卡, 请从 /sys/i386/conf/LINT 中读取详细说明 
#controller     ahc0 
#controller     ncr0 
 
#controller     bt0     at isa? port "IO_BT0" bio irq ? vector btintr 
#controller     uha0    at isa? port "IO_UHA0" bio irq ? drq 5 
vector uhaintr 
#controller     ahc1    at isa? bio irq ? vector ahcintr 
#controller     ahb0    at isa? bio irq ? vector ahbintr 
#controller     aha0    at isa? port "IO_AHA0" bio irq ? drq 5 
vector ahaintr 
#controller     aic0    at isa? port 0x340 bio irq 11 vector aicintr 
#controller     nca0    at isa? port 0x1f88 bio irq 10 vector ncaintr 
#controller     nca1    at isa? port 0x350 bio irq 5 vector ncaintr 
#controller     sea0    at isa? bio irq 5 iomem 0xc8000 iosiz 
0x2000 vector sean 
tr 
 
#@ SCSI bus, 使用 SCSI 必备的 
#controller     scbus0 
 
#@ SCSI HD 
#device         sd0     #Only need one of these, the code 
dynamically grows 
 
#@ SCSI CDROM 
#device         cd0     #Only need one of these, the code 
dynamically grows 
 
#@ SCSI tape 
#device         st0     #Only need one of these, the code 
dynamically grows 
 
#@ SCSI optical disk (MO) 
#device         od0     #Only need one of these, the code 
dynamically grows 
 
#@ SCSI media changers (Juke-Box) 
#device         ch0     #Only need one of these, the code 
dynamically grows 
 
#------------------  AT-BUS 介面的光碟机 (非 ATAPI) 
--------------- 
#@ Mitsumi CDROM 
#controller     mcd0    at isa? port 0x300 bio irq 10 vector mcdintr
 
 
#@ SONY CDROM 
#controller     scd0    at isa? port 0x230 bio 
 
#@ Panasonic CDROM 
#controller      matcd0  at isa? port ? 
 
#@ QIC tape 
#device         wt0     at isa? port 0x300 bio irq 5 drq 1 vector 
wtintr 
 
#@ console 萤幕驱动程式, 这是必备的 
device          sc0     at isa? port "IO_KBD" tty irq 1 vector scintr 
 
#@ 呼叫 FPU 的机制, 无论有无 FPU 都要有, 都是必要的 
device          npx0    at isa? port "IO_NPX" irq 13 vector npxintr 
 
#@ COM1 到 COM4 
device          sio0    at isa? port "IO_COM1" tty irq 4 vector 
siointr 
device          sio1    at isa? port "IO_COM2" tty irq 3 vector 
siointr 
#device         sio2    at isa? port "IO_COM3" tty irq 5 vector 
siointr 
#device         sio3    at isa? port "IO_COM4" tty irq 9 vector 
siointr 
 
#@ Joystick 
#device          joy0    at isa? port "IO_GAME" 
 
#@ 如果你有 Logitech or ATI InPort bus mouse 的卡, 就要将此打开 
#@ 请注意一般人使用的是 serial mouse 不是 bus mouse 
#device         mse0 at isa? port 0x23c tty irq 5 vector ms 
 
#@ 给 PS/2 mouse 用的 
#device         psm0 at isa? port ``IO_KBD'' conflicts tty irq 12 
vector psmintr 
 
#@ 印表机 
device          lpt0    at isa? port? tty irq 7 vector lptintr 
#device         lpt1    at isa? port? tty 
#device         lpt2    at isa? port? tty 
 
#@ 网路卡, 读读 /sys/i386/conf/LINT 
#device ed0 at isa? port 0x280 net irq  5 iomem 0xd8000 vector 
edintr 
#device ed1 at isa? port 0x300 net irq  5 iomem 0xd8000 vector 
edintr 
#device eg0 at isa? port 0x310 net irq 5 vector egintr 
#device ep0 at isa? port 0x300 net irq 10 vector epintr 
#device ie0 at isa? port 0x360 net irq  7 iomem 0xd0000 vector 
ieintr 
#device ix0 at isa? port 0x300 net irq 10 iomem 0xd0000 iosiz 
32768 vector ixinr 
 
#device le0 at isa? port 0x300 net irq 5 iomem 0xd0000 vector 
le_intr 
#device lnc0 at isa? port 0x280 net irq 10 drq 0 vector lncintr 
#device lnc1 at isa? port 0x300 net irq 10 drq 0 vector lncintr 
#device ze0 at isa? port 0x300 net irq 5 iomem 0xd8000 vector 
zeintr 
#device zp0 at isa? port 0x300 net irq 10 iomem 0xd8000 vector 
zpintr 
#device de0 
#device vx0 
#device fpa0 
 
#@ SB16 音效卡, 其他的音效卡读读 /sys/i386/conf/LINT 
#controller     snd0 
#device sb0      at isa? port 0x220 irq 5 conflicts drq 1 vector 
sbintr 
#device sbxvi0   at isa? drq 5 
#device sbmidi0  at isa? port 0x330 
#device opl0     at isa? port 0x388 
 
#@ SB32/AWE32/AWE64 音效卡, 其他的音效卡读读 
/sys/i386/conf/LINT 
#controller     snd0 
#device sb0      at isa? port 0x220 irq 5 conflicts drq 1 vector 
sbintr 
#device sbxvi0   at isa? drq 5 
#device sbmidi0  at isa? port 0x330 
#device opl0     at isa? port 0x388 
#device awe0     at isa? port 0x620 
 
#@ PC Speaker Audio (用 PC Speaker 模拟音效卡) 
#device pca0 at isa? port IO_TIMER1 tty 
 
#@ loopback device, 这是必备的 
pseudo-device   loop 
 
#@ 使用 ethernet, 这是必备的 
pseudo-device   ether 
 
#@ Berkerley Packet Filter, tcpdump 须要用, 这是必备的 
pseudo-device   bpfilter 4 
 
#@ syslogd 须要, 这是必备的 
pseudo-device   log 
 
#@ 使用者 tty 上限, 限制最大 login 人数, 预设上限 256 
pseudo-device   pty     64 
 
#@ PC speaker, 这是必备的 
pseudo-device   speaker 
 
#@ 可以直接执行 gzip 的程式, 这是必备的 
pseudo-device   gzip            # Exec gzipped a.out's 
 
#@ 支援监看 tty 使用者 
pseudo-device   snp     4       #Snoop device - to look at 
pty/vty/etc.. 
 
#@ 把一个档案模拟成一个 partition, 通常用来做为 swap-to-file 
pseudo-device   vn      4       #Vnode driver (turns a file into a 
device) 
 
 
#@ Kernel mode PPP (man pppd),可用 LKM 载入 
#pseudo-device   ppp     2               #Point-to-point protocol 
 
#@ User mode PPP (man ppp),可用 LKM 载入 
#pseudo-device   tun     1               #Tunnel driver(user process 
ppp) 
 
#@ SLIP,可用 LKM 载入 
#pseudo-device   sl      2               #Serial Line IP 
 
#@ 虚拟网路卡 driver, 可任意写入,读取资料, 用於开发网路相关程式,可用 LKM 
载入 
#pseudo-device   disc                    #Discard device 
 
#@ 提供 RAID-0 Striping,Mirroring,parity(not complete) 的功能 
#@ 可以有效的将几颗 SCSI HD 合并起来,成为一个高速的档案系统 
#@ 详情请 man ccdconfig 
#pseudo-device   ccd     4 

--
※ 来源:.网易 BBS bbs.netease.com.[FROM: dmx320.resnet.ust.hk]

[关闭][返回]