2014年10月8日 星期三

Linux Kernel 編譯及更新

1. 安裝編譯工具

#gcc-4.4
gcc
#g++-4.4
g++
#cpp-4.4
cpp
m4
make
nasm
bison
flex
autoconf
automake
autotools-dev
#compile kernel
kernel-package
libncurses5-dev
# Fetch Source Code
git
subversion

將上述工具、套件 copy 起來,
並建立一個編譯工具安裝列表 PKG_PROG 文字檔 paste 上去,
可以更方便紀錄及管理;接著下 cmd 安裝:
sudo apt-get update && apt-get install -y `grep -v ^# PKG_PROG`

grep 是擷取文字。
-v 是 inverter 反向。
^# 其中 ^ 是文字每行之開頭意思,# 是 shell script 做為註解用途,這邊目的是要取每個 # 開頭的行再結合 -v 做反向 → 每個 # 開頭的行都不截取。

2. 至 https://www.kernel.org/ ,下載最新的核心版本,
建議使用 longterm (長期支援版),下載至 /usr/src 目錄下,
下面以linux-3.14.20.tar.xz 為例。


3. 電腦驅動模組:

lspci -v
lspci -k
lsmod
cat /proc/cpuinfo


基本的查看的項目:Ethernet、VGA、Audino…等,以我的為例:
02:00.0 Ethernet controller: Atheros Communications Inc. AR8121/AR8113/AR8114 Gigabit or Fast Ethernet (rev b0)
        Subsystem: ASUSTeK Computer Inc. Device 8226
        Flags: bus master, fast devsel, latency 0, IRQ 17
        Memory at fe9c0000 (64-bit, non-prefetchable) [size=256K]
        I/O ports at bc00 [size=128]
        Capabilities: 
        Kernel driver in use: ATL1E

01:00.0 VGA compatible controller: NVIDIA Corporation G94 [GeForce 9600 GT] (rev a1) (prog-if 00 [VGA controller])
        Subsystem: ASUSTeK Computer Inc. Device 8304
        Flags: bus master, fast devsel, latency 0, IRQ 46
        Memory at fd000000 (32-bit, non-prefetchable) [size=16M]
        Memory at c0000000 (64-bit, prefetchable) [size=512M]
        Memory at fa000000 (64-bit, non-prefetchable) [size=32M]
        I/O ports at ac00 [size=128]
        [virtual] Expansion ROM at fe880000 [disabled] [size=512K]
        Capabilities: 
        Kernel driver in use: nvidia

06:00.0 Multimedia audio controller: VIA Technologies Inc. VT1720/24 [Envy24PT/HT] PCI Multi-Channel Audio Controller (rev 01)
        Subsystem: Device 160b:0010
        Flags: bus master, medium devsel, latency 64, IRQ 16
        I/O ports at ec00 [size=32]
        I/O ports at e880 [size=128]
        Capabilities: 
        Kernel driver in use: snd_ice1724


4. 先解壓縮,並做一個 sublink 到 linux,並進去做核心參數設定

tar xfva linux-3.14.20.tar.xz
ln -s /usr/src/linux-3.14.20 /usr/src/linux
cd /usr/src/linux

make menuconfig


下面開始做最基本的核心選單設定,可以用 "/" 來做搜尋,輸入上面找到的 Kernel driver,可以更快的開啟模組:

設定編譯的壓縮格式,XZ 為壓縮率高及失真率低優點:
> General setup > Kernel compression mode > XZ


設定自己核心所屬的家族 (本例是 Core 2/newer Xeon):
> Processor type and features > Processor family > (Core 2/newer Xeon)


網路卡開啟自己的型號(本例是 Atheros 要開啟 ):
> Device Drivers > Network device support > Ethernet driver support > Atheros 全開


顯卡驅動( 本例是 Nvidia ),這邊注意不能選<*> ,後面要裝官方驅動會有問題。
> Device Drivers > Graphics support >  <M> Nouveau (nVidia) cards 


音效卡驅動(本例是 Onkyo SE-90PCI 音效卡,晶片為 VT1720/24 [Envy24PT/HT]):
-> Device Drivers > Sound card support (SOUND [=m])  > Advanced Linux Sound Architecture (SND [=m])  > PCI sound devices (SND_PCI [=y])  >   ICE/VT1724/1720 (Envy24HT/PT) 


選好所需要的核心模組後,及可按 Exit 並儲存離開,回到 /usr/src/linux 目錄下。

5. 開始編譯!直接指令來 Run :

time make-kpkg --initrd --revision=[版本名稱] kernel_image -j [核心數]


版本名稱可以自訂,一般設定習慣為 1.0.1.xxx 這種格式,數字及英文代號皆可自訂。
核心數可以用 cat /proc/cpuinfo 來查看 siblings 核心處理序數量。

6. 編譯完成,來進行最後核心 .deb 檔的安裝(本例核心版本名稱為 1.0.1.lpm ):

sudo dpkg -i linux-image-3.14.20_1.0.1.lpm_amd64.deb


7. 安裝完成,重開機~

sudo shutdown -r now 或
reboot

8. 查看核心版本:

uname -a



沒有留言:

張貼留言