=== 編譯設定時請先注意核心版本是否正確,並確定是否有 64-bit kernel 選項 ===
設定核心參譯參數:
設定參數有三種選項,分別是:
1. M -> 編譯成模組,可即時載入/移除模組,舉例來說:搖桿的驅動程式是 joydev.ko,一般人電腦並沒有連接 USB 搖桿,因此我們無需隨時載入 joydev.ko 這個驅動程式模組,等到我們有接上 USB 搖桿時再來載入即可。
2. * -> 編譯並內嵌至核心,無法移除
3. -> 不編譯此模組
驅動程式模組操作:
1. lsmod -> 觀看目前有那些驅動程式模組已載入至記憶體,其輸出如下:
herman@debian:~$ lsmod
Module Size Used by
joydev 17232 0
nvidia 9384645 29
drm 211810 2 nvidia
nfsv3 29787 1
rpcsec_gss_krb5 26504 0
nfsv4 158090 0
nfsd 192007 2
auth_rpcgss 39085 2 nfsd,rpcsec_gss_krb5
oid_registry 12419 1 auth_rpcgss
nfs_acl 12511 2 nfsd,nfsv3
nfs 105982 3 nfsv3,nfsv4
lockd 55577 3 nfs,nfsd,nfsv3
fscache 37551 2 nfs,nfsv4
sunrpc 160406 24 nfs,nfsd,rpcsec_gss_krb5,auth_rpcgss,lockd,nfsv3,nfsv4,nfs_acl
..
..
其中 Module 欄位是目前已載入至記憶體中之模組,Size 是該模組大小,Used by 是指該模組是否有被其它模組使用,舉例來說,如果我們執行:
lsmod|grep usb
會得到以下輸出:
usb_storage 48020 0
scsi_mod 158157 5 sg,usb_storage,libata,sd_mod,sr_mod
usbcore 134854 4 uhci_hcd,usb_storage,ehci_hcd,ehci_pci
usb_common 12440 1 usbcore
其中 usbcore 是 USB 驅動程式之主模組,它會被其它 USB 相關驅動程式模組所使用,例如 usb_storage 是用來驅動 USB 儲存裝置之模組,它必須有 usbcore 才能使用。
2. modprobe -> 載入驅動程式模組
請先執行 lsmod|grep joydev 看看目前是否有載入 joystick 之驅動程式模組。接著我們可以使用 root 權限來載入 joydev 驅動程式模組:
# modprobe joydev
載入後可以再執行一次 lsmod|grep joydev 來看目前是否有載入 joystick 之驅動程式模組,理論上其輸出如下:
joydev 17232 0
這表示我們已成功載入 joydev 驅動程式模組。
3. rmmod -> 移除驅動程式模組
若我們要移除 joydev 模組的話,請以 root 權限執行底下指令:
# rmmod joydev
再以 lsmod|grep joydev 來看目前是否有載入 joystick 之驅動程式模組。
編譯核心參數設定
請以 root 權限在 /usr/src/linux 目錄下執行底下指令:
/usr/src/linux # make menuconfig
接著可以進行參數設定
1. General setup --->
Kernel compression mode (Gzip) --->
XZ
目的:使用最高壓縮率之壓縮演算法以節省空間。
[*] Enable loadable module support --->
目的:開啟可載入模組設定
[*] Module versioning support
支援其它版本核心所編譯出來的模組,萬一有相容性的問題則無法支援。
2. Processor type and features --->
Processor family (Generic-x86-64) --->
Processor family (Core 2/newer Xeon)
目的:把 CPU 由 Generic-x86-64 改為 Core 2/newer Xeon 可以加強在本機的
效能,因為本機 CPU 是 Core 2 Duo (hint: cat /proc/cpuinfo)
(512) Maximum number of CPUs
目的:支援最高 512 顆 CPU。
Bus options (PCI etc.) ---> 設定電腦內部匯流排,例如 PCI、ISA .. etc.
3. Executable file formats / Emulations --->
[*] IA32 Emulation
<*> IA32 a.out support
目的:在 64 位元 Linux 底下執行 32 位元 Linux 程式,例如 Adobe Reader 只出 32
位元版 (i386 版),打開此參數可以讓我們所編譯的 Linux 核心支援此程式
執行。
--- Networking support 設定網路相關硬體及軟體
Networking options ---> 不要動,以免網路無法動作
[ ] Amateur Radio support ---> 業餘無線電支援,請關閉,我們不需要。
< > CAN bus subsystem support --->
< > IrDA (infrared) subsystem support --->
<M> Bluetooth subsystem support --->
-*- Wireless ---
< > WiMAX Wireless Broadband support --->
< > NFC subsystem support --->
4. Device Drivers ---> 此目錄底下有相當多的參數可以設定,請將不要的模組移除以
減少空間。
< > Parallel port support ---> 關閉,我們現在的電腦已經沒有 RS232
的平行埠介面了。
<M> Loopback device support
(8) Number of loop devices to pre-create at init time
< > Cryptoloop Support
loopback device 可以用來掛載光碟片的 ISO 檔,簡單來說它是 Linux 上的
虛擬光碟。舉例來說,假設我們要掛在 debian 安裝 iso 檔,其檔名是:
debian-7.1.0-amd64-CD-1.iso 的話,我們可以使用 root 的權限執行:
# mount -o loop debian-7.1.0-amd64-CD-1.iso /mnt
將此光碟片掛載至 /mnt 目錄下,此時系統會出現底下訊息:
mount: warning: /mnt seems to be mounted read-only.
這表示 /mnt (光碟片) 是唯讀目錄,無法寫入。我們可以使用 ls /mnt
來觀看是否是光碟片內容。
因此 Loopback device 參數一定要設定,否則將無法使用虛擬光碟。
< > ATA/ATAPI/MFM/RLL support (DEPRECATED) --->
此參數有個 DEPRECATED 的單字,因此通常不再支援,除非你的電腦有接很老舊
的裝置,否則可以不必編。
<M> Serial ATA and Parallel ATA drivers --->
支援 SATA 介面,問題在於:我們如何知道本機 SATA 介面卡為何 ?
lspci 可以看到底下資訊:
00:1f.2 IDE interface: Intel Corporation NM10/ICH7 Family SATA Controller [IDE mode] (rev 01)
上述資料告訴我們本機的 SATA 介面是 Intel 的 NM10/ICH7 晶片,若想知道該晶
片使用那個模組的話,請執行:lspci -v,其輸出如下所示:
00:1f.2 IDE interface: Intel Corporation NM10/ICH7 Family SATA Controller [IDE mode] (rev 01) (prog-if 80 [Master])
Subsystem: Giga-byte Technology Device b002
Flags: bus master, 66MHz, medium devsel, latency 0, IRQ 19
I/O ports at 01f0 [size=8]
I/O ports at 03f4 [size=1]
I/O ports at 0170 [size=8]
I/O ports at 0374 [size=1]
I/O ports at f000 [size=16]
Capabilities: <access denied>
Kernel driver in use: ata_piix
============
IEEE 1394 (FireWire) support ---> 取消,目前此介面幾乎沒人使用
[ ] Macintosh device drivers ---> 取消,目前此介面幾乎沒人使用
============
-*- Network device support ---> 設定網路介面
< > ARCnet support --->
[ ] ATM drivers --->
*** CAIF transport drivers ***
Distributed Switch Architecture drivers --->
-*- Ethernet driver support ---> 設定網路卡驅動程式
我們以 lspci -v 可以看到以下訊息:
03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 02)
Subsystem: Giga-byte Technology GA-EP45-DS5/GA-EG45M-DS2H Motherboard
Flags: bus master, fast devsel, latency 0, IRQ 43
I/O ports at d000 [size=256]
Memory at e5010000 (64-bit, prefetchable) [size=4K]
Memory at e5000000 (64-bit, prefetchable) [size=64K]
[virtual] Expansion ROM at e5020000 [disabled] [size=64K]
Capabilities: <access denied>
Kernel driver in use: r8169
因此可以看到本機電腦所使用之網路卡驅動模組是 r8169,廠牌為 Realtek。
< > FDDI driver support
[ ] HIPPI driver support
< > General Instruments Surfboard 1000
{M} PHY Device support and infrastructure --->
< > Micrel KS8995MA 5-ports 10/100 managed Ethernet switch (NEW
< > PLIP (parallel port) support
{M} PPP (point-to-point protocol) support
USB Network Adapters ---> 沒有 USB 網卡則全部關掉
[ ] Wireless LAN ---> 沒有 wifi 無線網卡則全部關掉
WiMAX Wireless Broadband devices ---> 沒有 wimax 卡則關掉
[ ] Wan interfaces support --->
< > IEEE 802.15.4 drivers --->
< > VMware VMXNET3 ethernet driver
[ ] ISDN support --->
<M> Sound card support ---> 音效卡支援
--- Sound card support
[ ] Preclaim OSS device numbers
<M> Advanced Linux Sound Architecture --->
< > Open Sound System (DEPRECATED) --->
音效卡我們只保留 ALSA,我們的音效卡是:
00:1b.0 Audio device: Intel Corporation NM10/ICH7 Family High Definition Audio Controller (rev 01)
因此其驅動程式如下:
[*] PCI sound devices --->
<M> Intel HD Audio --->
<M> Intel/SiS/nVidia/AMD/ALi AC97 Controller
<M> Intel/SiS/nVidia/AMD MC97 Modem
Graphics support ---> 顯示卡支援
我們的顯示卡是
01:00.0 VGA compatible controller: NVIDIA Corporation G96 [GeForce 9400 GT] (rev a1)
由於我只裝官方驅動程式,因此把 nouveau 關掉,兩者會相衝。
< > Nouveau (nVidia) cards
其餘驅動程式可以關閉以簡省空間。
{*} Hardware Monitoring support --->
硬體監測驅動程式,因為我們看不到主機板上面的晶片,因此建議全部編譯,
讓電腦開機時自動偵測並載入相對應之驅動程式模式。
我們可以使用 lm-sensors 這個套件來看主機板上面的溫度/電壓/風扇
sensors-detect
偵測完畢後會出現底下訊息,告訴我們要載入那些模組以驅動硬體監視驅動
程式。
Now follows a summary of the probes I have just done.
Just press ENTER to continue:
Driver `it87':
* ISA bus, address 0x290
Chip `ITE IT8718F Super IO Sensors' (confidence: 9)
Driver `coretemp':
* Chip `Intel digital thermal sensor' (confidence: 9)
To load everything that is needed, add this to /etc/modules:
#----cut here----
# Chip drivers
coretemp
it87
#----cut here----
If you have some drivers built into your kernel, the list above will
contain too many modules. Skip the appropriate ones!
Do you want to add these lines automatically to /etc/modules? (yes/NO)
Unloading i2c-dev... OK
Unloading cpuid... OK
{M} Generic Thermal sysfs driver ---> 溫度管理
<M> Multimedia support ---> 設定視訊/電視卡之驅動程式模組
<M> VFIO Non-Privileged userspace driver framework ---> 將 VGA pass 給 qemu
--- VFIO Non-Privileged userspace driver framework
<M> VFIO support for PCI devices
[*] VFIO PCI support for VGA devices
5. Firmware Drivers ---> 某些硬體需要 firmware (韌體) 才能動作,
這些韌體在 Debian 的 firmware* 套件中。
大部份常見會用到的韌體是無線網卡,例如 b43 (broadcom) 無線網卡之類。