歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> BSD >> FreeBSD kernel 編譯大法

FreeBSD kernel 編譯大法

日期:2017/2/28 11:22:15   编辑:BSD


1.寫在之前的:
路徑:/usr/src/sys/i386/conf
在這之下...GENERIC LINT NEWCARD 有3個檔案
GENERIC -- 一般預設的kernel文字敘述檔
LINT -- kernel options 的說明
NEWCARD -- new pccard 的設定
2.編譯 kernel 之前續動作
a.先做kernel的文字敘述檔
cp GENERIC OHAHA // 保持GENERIC不變,以防不時之需..或許待會會用到..-___-||
// 通常我們用大寫的host name表示kernel新的文字敘述檔名稱
b.做kernel的備份
mv OHAHA /etc/ // 因為一般備份/etc,常會忘了kernel
c.因為kernel的文字敘述檔一定要位於/usr/src/sys/i386/conf中,所以做一個link
ln -s /etc/OHAHA ./
d.編輯 kernel 新的文字敘述檔
vi OHAHA
3.新的文字敘述檔內容 // # 表示功能不開啟,綠色表示內文,棕色表示我加上的
為讓頁面顯示清晰明,所以加以分頁,但是有依照順序的...請放心...
now here we go ... 『 kernel內容編譯 』
4.路徑:/usr/src/sys/i386/conf
指令:config OHAHA // OHAHA 為我們先前編好的文字敘述檔名
5.若第4步驟沒有錯誤的話,接下來進行文字敘述檔相依性檢查
路徑:/usr/src/sys/compile/OHAHA
指令:make depend
6.若第5步驟沒有錯誤的話,接下來進行編譯
路徑:/usr/src/sys/compile/OHAHA
指令:make
7.若第6步驟沒有錯誤的話,接下來進行安裝
路徑:/usr/src/sys/compile/OHAHA
指令:make install
:5.6.7.步驟可以省略為 make depend all install
若4.5.6.7中發生錯誤,請檢查一下您的文字敘述檔的內容。
8.完成後先行重新開機...若成功開機...恭喜...
這時別忘了做下面這一步驟..將不必要的檔案清除
路徑:/usr/src/sys/compile/OHAHA
指令:make clean
9.若很不幸的您在開機途中掛點....這時請看看急救區中編譯kernel失敗時的處理方式
說明
第一部份: 開始到options設定之前
第二部份: 大部分的options 設定(除了SMP之外)
第三部份: SMP、軟碟、主機板及IDE介面 設定
第四部份: SCSI裝置 設定
第五部份: RAID、滑鼠、鍵盤、顯示卡、電源管理、浮點運算、console 設定
第六部份: PCMICA、COM port、平行埠 設定
第七部份: PCI 及ISA 網卡 設定
第八部份: 虛擬裝置、封包過濾器、USB的裝置 設定
----------------------------------------------------------------------------
[第一部份] 開始到options設定之前
----------------------------------------------------------------------------
machine i386
// 機器的內部結構,除了i386 還有 alpha 及pc98我們現今看到的多是i386
#cpu I386_CPU
#cpu I486_CPU
#cpu I586_CPU
cpu I686_CPU
// CPU的型態...若您不知道您的CPU型態為何.. >_<
it's ok ...FreeBSD will help you ...^^
用 dmesg | more 指令(此指令顯示開機資訊),可以看到您的CPU型態
這是我從dmesg中看到的訊息....
CPU:Pentium II / Pentium II Xeon / Celeron (350.80-MHz 686-class CPU)
所以我將其他的3個型態#掉,只留下I686_CPU
ident OHAHA
// kernel的識別,通常我們用host name的大寫..所以我的是OHAHA
maxusers 64
// 這個數值大約等於你希望同時能夠登入機器的人數
在正常的情況下,如果您要跑X-Window的話,最小值是4
正確的說,此代表process的最大值有關maximum=20+16*maxusers
正常來說,用64已經足夠
// 注意:maxusers不是能夠login的限制。
----------------------------------------------------------------------------
[第二部份]大部分的options 設定(除了SMP之外)
----------------------------------------------------------------------------
#makeoptions DEBUG=-g #Build kernel with gdb(1) debug symbols
#options MATH_EMULATE #Support for x87 emulation
// 模擬數學浮點運算器 除非您的機器是386或486SX之前的型號,不然您可以將此行 # 掉
因為FreeBSD在這方面的模擬並不很精確,若您要求精確度的話..
將 MATH_EMULATE 改成 GPL_MATH_EMULATION 改用GNU 的模擬數學浮點運算器
options INET #InterNETworking-
// Networking support ,即使您沒有打算要連上網路也請保留,因為有些程式會用到loop
#options INET6 #IPv6 communications protocols
// IPv6 的通訊協定 (因為尚未啟用所以disable)
options FFS #Berkeley Fast Filesystem
options FFS_ROOT #FFS usable as root device [keep this!]
// 以上兩項,是基本的硬碟檔案系統。若您要用硬碟開機...keep this !!
options MFS #Memory Filesystem
options MD_ROOT #MD is a potential root device
// memory-mapped檔案系統,如果您有很大的swap空間,您想要好好的利用的話...keep this
如果要使用的話,通常我們會將他掛在(mount)在/tmp 這個地方,
因為這裡有許多程式將暫存資料存放在此。
要如此的話...請在/etc/fstab中的swap部分加入(或者說更新):
# Device Mountpoint FStype Options Dump Pass#
/dev/ad0s1b /tmp mfs rw 0 0
options NFS #Network Filesystem
options NFS_ROOT #NFS usable as root device, NFS required
// 網路檔案系統,除非您想經由TCP/IP的方式,將UNIX的系統分割區掛上,否則 # 掉
因為本網站之後有講到NFS方面...所以留著...^^
options MSDOSFS #MSDOS Filesystem
// MSDOS檔案系統,除非您要在開機時就掛上此分割區,否則您可以 # 掉
options CD9660 #ISO 9660 Filesystem
options CD9660_ROOT #CD-ROM usable as root, CD9660 required
// ISO9660檔案系統,若您沒有光碟機,或者不常mount光碟機,則可以 # 掉
options PROCFS #Process filesystem
// the process 檔案系統,為假想的檔案系統,掛(mount)在/proc,
此允許 ps 指令顯示process的資訊
options COMPAT_43 #Compatible with BSD 4.3 [KEEP THIS!]
// 與4.3BSD的相容性[keep this!]
options SCSI_DELAY=15000 #Delay (in ms) before probing SCSI
// 使kernel暫停15秒,去搜尋您機器上的SCSI裝置。
這個您應該看過吧...就是開機時令你覺得很煩很慢的那個...
您可以將此數值減少..以加快開機速度。
options UCONSOLE #Allow users to grab the console
// 讓您能夠抓取console的畫面...這個對 X 的使用者比較有用...
options USERCONFIG #boot -c editor
// 允許您從開機選單中啟動組態編輯器(configuration editor) 幾乎用不到
options VISUAL_USERCONFIG #visual boot -c editor
// 同上...只不過是視覺化的...幾乎用不到
options KTRACE #ktrace(1) support
// 啟動kernel process tracing(追蹤系統程序),在debug時很有用...一般人還是用不到...@@"
options SYSVSHM #SYSV-style shared memory
// 此選項提供給System V 型態的shared memory ...,最常用此選項功能的是 X 中的XSHM
若您要使用 X 請務必加上,此外許多有關圖形的程式也會因此選項功能而加速。
又者...big5con(中文console)也需要此選項。
options SYSVSEM #SYSV-style semaphores
// 支援System V 的信號(semsphores),只占用少量的kernel大小
options SYSVMSG #SYSV-style message queues
// 支援System V 的訊息(messages),只占用少量的kernel大小,BBS會用到此選項功能。
// 通常我們會將以上三種全部加上.....-__-||
options P1003_1B #Posix P1003_1B real-time extensions
options _KPOSIX_PRIORITY_SCHEDULING
// Real-time extensions added in the POSIX,某些應用程式會用到(star office)。
options ICMP_BANDLIM #Rate limit bad replies
// 啟動反應頻寬限制的ICMP error,對於幫助拒絕packet攻擊有所助益。
----------------------------------------------------------------------------
[第三部份] SMP、軟碟、主機板及IDE介面 設定
----------------------------------------------------------------------------
# To make an SMP kernel, the next two are needed
// 多CPU的支援 ....
#options SMP# Symmetric MultiProcessor Kernel
#options APIC_IO # Symmetric (APIC) I/O
// 新版本的只要將此兩項打開,系統會自動抓到...^^
device isa
// 每個被FreeBSD支援的PC都有這一個....
device eisa
// 若您有EISA的主機板..加上它,會自動偵測及設定所有EISA裝置
device pci
// 若您有PCI的主機板..加上它,會自動偵測PCI的卡,及在PCI及ISA介面做一區隔
# Floppy drives
// 軟碟
device fdc0 at isa? port IO_FD1 irq 6 drq 2
device fd0 at fdc0 drive 0
#device fd1 at fdc0 drive 1
// 軟碟的控制卡,fd0是A:,fd1是B:(因為我沒有第二個軟碟機,所以 # 掉fd1)
# ATA and ATAPI devices
device ata0 at isa? port IO_WD1 irq 14
device ata1 at isa? port IO_WD2 irq 15
// 以上這兩個,是給那些沒有PCI的系統使用
device ata
// kernel偵測PCI/ATA/ATAPI的選項
device atadisk # ATA disk drives
// IDE介面的硬碟機
device atapicd # ATAPI CDROM drives
// IDE介面的光碟機
#device atapifd # ATAPI floppy drives
// IDE介面的軟碟機 (我沒有..所以 # 掉)
#device atapist # ATAPI tape drives
// IDE介面的磁帶機 (這....我更沒有...所以 # 掉)
options ATA_STATIC_ID #Static device numbering
// 讓控制卡的數值固定,否則,則使用動態產生
options ATA_ENABLE_ATAPI_DMA #Enable DMA on ATAPI devices
// 啟動DMA(動態記憶體存取),預設是#掉..因大多數硬碟都支援,所以我將#拿掉
----------------------------------------------------------------------------
[第四部份] SCSI裝置 設定
----------------------------------------------------------------------------
# SCSI Controllers
#device ahb # EISA AHA1742 family
#device ahc # AHA2940 and onboard AIC7xxx devices
#device amd # AMD 53C974 (Teckram DC-390(T))
#device isp # Qlogic family
#device ncr # NCR/Symbios Logic
#device sym # NCR/Symbios Logic (newer chipsets)
#options SYM_SETUP_LP_PROBE_MAP=0x40
# Allow ncr to attach legacy NCR devices when
# both sym and ncr are configured
#device adv0 at isa?
#device adw
#device bt0 at isa?
#device aha0 at isa?
#device aic0 at isa?
// SCSI控制卡...#掉你沒有的裝置,若您像我只有IDE介面,您可以#掉以上。
請參照 LINT 說明...找找您的卡是屬於哪一種...
# SCSI peripherals
#device scbus # SCSI bus (required)
// 若您有SCSI介面...please keep this ...
#device da # Direct Access (disks)
// SCSI硬碟機
#device sa # Sequential Access (tape etc)
// SCSI磁帶機
#device cd # CD
// SCSI光碟機
#device pass # Passthrough device (direct SCSI access)
// SCSI周邊裝置...#掉你沒有的裝置,若您像我只有IDE介面,您可以#掉以上。
同樣若您有疑問,請參照 LINT 說明
----------------------------------------------------------------------------
[第五部份] RAID、滑鼠、鍵盤、顯示卡、電源管理、浮點運算、console 設定
----------------------------------------------------------------------------
# RAID controllers interfaced to the SCSI subsystem
#device asr # DPT SmartRAID V, VI and Adaptec SCSI RAID
#device dpt # DPT Smartcache - See LINT for options!
// 多磁碟陣列接SCSI控制卡
請參照 LINT 說明...找找您的卡是屬於哪一種...(我很窮..所以這..更不用說了..# 掉吧)
# RAID controllers
#device ida # Compaq Smart RAID
#device amr # AMI MegaRAID
#device mlx # Mylex DAC960 family
#device twe # 3ware Escalade
// 多磁碟陣列卡
請參照 LINT 說明...找找您的卡是屬於哪一種...(我很窮..所以這..更不用說了..# 掉吧)
# atkbdc0 controls both the keyboard and the PS/2 mouse
device atkbdc0 at isa? port IO_KBD
// AT及PS/2的裝置
這個被atkbd及psm所需要...也就是有atkbd就要有atkbdc0,psm亦然
device atkbd0 at atkbdc? irq 1 flags 0x1
// AT 84 鍵盤
device psm0 at atkbdc? irq 12
// PS/2的滑鼠
device vga0 at isa?
// 顯示卡驅動程式
# splash screen/screen saver
pseudo-device splash
// 引人注目的啟動螢幕(like microsoft windows),以及螢幕保護程式。
# syscons is the default console driver, resembling an SCO console
device sc0 at isa? flags 0x100
// FreeBSD預設的console驅動程式,類似SCO console ...
# Enable this and PCVT_FREEBSD for pcvt vt220 compatible console driver
#device vt0 at isa?
#options XSERVER # support for X server on a vt console
#options FAT_CURSOR # start with block cursor
# If you have a ThinkPAD, uncomment this along with the rest of the PCVT lines
#options PCVT_SCANSET=2 # IBM keyboards are non-std
// VT220相容的console驅動程式,與VT100/102相容。
當您無法使用sc0時使用之(某些筆記型電腦),
在任何平台上VT100都可以執行。不過較少人使用... export TERM=vt100
# Floating point support - do not disable.
device npx0 at nexus? port IO_NPX irq 13
// npx0是FreeBSD上的數學浮點運算單位,包括實體的或是軟體模擬的
# Power management support (see LINT for more options)
#device apm0 at nexus? disable flags 0x20 # Advanced Power Management
// 支援進階的電源管理,對筆記型電腦很有助益。
----------------------------------------------------------------------------
[第六部份]PCMICA、COM port、平行埠 設定
----------------------------------------------------------------------------
# PCCARD (PCMCIA) support
#device card
#device pcic0 at isa? irq 0 port 0x3e0 iomem 0xd0000
#device pcic1 at isa? irq 0 port 0x3e2 iomem 0xd4000 disable
// PCMCIA支援...針對於筆記型電腦
# Serial (COM) ports
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
// COM1~COM4,預設COM3、COM4不會用到所以#掉
# Parallel port
// 平行埠
device ppc0 at isa? irq 7
// ISA-bus的平行埠介面
device ppbus # Parallel port bus (required)
// 平行埠bus支援
#device lpt # Printer
device plip # TCP/IP over parallel
// 平行埠的網路介面
#device ppi # Parallel port interface device
#device vpo # Requires scbus and da
// 這是專門給Iomega Zip的支援 (我更沒有ZIP)
----------------------------------------------------------------------------
[第七部份]PCI 及ISA 網卡 設定
----------------------------------------------------------------------------
# PCI Ethernet NICs.
#device de # DEC/Intel DC21x4x (``Tulip'')
#device fxp # Intel EtherExpress PRO/100B (82557, 82558)
#device tx # SMC 9432TX (83c170 ``EPIC'')
#device vx # 3Com 3c590, 3c595 (``Vortex'')
#device wx # Intel Gigabit Ethernet Card (``Wiseman'')
// PCI的網路卡..選擇您的網卡...其馀的# 掉
# PCI Ethernet NICs that use the common MII bus controller code.
device miibus # MII bus support
#device dc # DEC/Intel 21143 and various workalikes
#device pcn # AMD Am79C79x 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 vr # VIA Rhine, Rhine II
#device wb # Winbond W89C840F
#device xl # 3Com 3c90x (``Boomerang'', ``Cyclone'')
// PCI的網路卡..選擇您的網卡...其馀的# 掉
若您的網卡是這第二部份的..別忘了要將第一個miibus支援加上,像我一樣。
// 網卡的型號可以從dmesg中看出...否則您也可以從 LINT 中參考
# ISA Ethernet NICs.
#device ed0 at isa? port 0x280 irq 10 iomem 0xd8000
#device ex
#device ep
#device fe0 at isa? port 0x300
# WaveLAN/IEEE 802.11 wireless NICs. Note: the WaveLAN/IEEE really
# exists only as a PCMCIA device, so there is no ISA attatement 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 paremeters here.
#device an
# Xircom Ethernet
#device xe
# 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
// ISA的網卡...同樣的選擇您有的...沒有的#掉 ...
同樣的..您也可以參考/sur/src/sys/i386/conf/LINT 有詳細的說明
----------------------------------------------------------------------------
[第八部份]虛擬裝置、封包過濾器、USB的裝置 設定
----------------------------------------------------------------------------
# Pseudo devices - the number indicates how many units to allocated.
pseudo-device loop # Network loopback
// 通常的loop裝置,當您用telnet或ftp localhost它就是經由此裝置
此為必需的。
pseudo-device ether # Ethernet support
// 當您有網路卡時才需要,它也包含基本的網路協定碼
#pseudo-device sl 1 # Kernel SLIP
// 支援SLIP,不過他以快要被PPP取代,s1後的數字表示,同時有多少SLIP session被支援
#pseudo-device ppp 1 # Kernel PPP
// 對撥接的PPP支援,ppp後的數字表示,同時有多少PPP連結被支援
#pseudo-device tun # Packet tunnel.
// 被PPP所使用,tun後的數字表示,同時有多少PPP session被支援
pseudo-device pty # Pseudo-ttys (telnet etc)
// 虛擬終端機裝置,預設是16,最高可以達到256 (login port)
pseudo-device md # Memory "disks"
// memory disk 虛擬裝置 與之前的(第二部份)MFS相呼應,不可單獨存在
#pseudo-device gif 4 # IPv6 and IPv4 tunneling
// IPv4及IPv6間的工具
#pseudo-device faith 1 # IPv6-to-IPv4 relaying (translation)
// 抓取封包並使之轉向到IPv4/IPv6間的轉化daemon
# The `bpf' pseudo-device enables the Berkeley Packet Filter.
# Be aware of the administrative consequences of enabling this!
pseudo-device bpf #Berkeley packet filter
// Berkeley的封包過濾器。(這是必要的)
他允許網路介面即使被放置在一個雜亂的模式,它也能在broadcast上抓取每一封包。
這些封包能被抓取到磁碟或經由tcpdump程式解釋。
# USB support
#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
# USB Ethernet, requires mii
#device aue # ADMtek USB ethernet
#device cue # CATC USB ethernet
#device kue # Kawasaki LSI USB ethernet
// USB裝置的支援
終於...把文字敘述檔給修正完成了....現在已經完成編譯的一大步了...
讓我們一鼓作氣完成他...繼續編譯
Copyright © Linux教程網 All Rights Reserved