linux 4.1核心原始碼編譯
編譯環境
Arch Linux on VirtualBox
下載核心
下載的核心壓縮包,此時的最新核心版本為4.1:
解壓包
# tar -xvJf linux-4.1.tar.xz
在這裡為了方便直接切換到su許可權了,如果為普通許可權,須在每條命令前加上sudo,如果sudo可用的話。
(命令語句中劃線的部分為檔名或目錄名,是要根據實際情況更改的部分,後面也會遇到很多)
cd到原始碼根目錄
# cd ~/Documents/linux-4.1
進行設定
這裡我使用了當前執行核心的預設設定。
拷貝正在執行的核心的配置檔案(.config檔案)到編譯根目錄。
# zcat /proc/config.gz > .config
當然也可以手動設定
# sudo make menuconfig
(末尾參考資料一中有詳細的說明)
編譯核心
# sudo make [-j 2]
後面的引數-j2表示,cpu要開啟兩個執行緒來編譯核心,可以加快編譯速度。
編譯完成後的核心檔案:
[root@localhost linux-4.1.18]# ll arch/x86/boot/
安裝模組
指定:驅動模組的安裝目錄
[root@localhost linux-4.1.18]# make modules_install INSTALL_MOD_PATH=/home/test/tmp/
[root@localhost tmp]# ls lib/
firmware modules
# sudo make modules_install
將編譯好的核心拷貝到/boot目錄
# cp -v arch/x86/boot/bzImage /boot/vmlinuz-YourKernelName
# cp -v arch/x86/boot/bzImage /boot/vmlinuz-YourKernelName
在這裡YourKernelName為4.1:
# cp -v arch/x86/boot/bzImage /boot/vmlinuz-4.1
# cp -v arch/x86/boot/bzImage /boot/vmlinuz-4.1
製作初始化記憶體盤
# mkinitcpio -k FullKernelName /etc/mkinitcpio.conf -g /boot/initramfs-YourKernelName.img
可以通過 ls /lib/modules 命令查詢到可用的FullKernelName:
在這裡FullKernelName為4.1.0-ARCH(如上圖):
# mkinitcpio -k 4.1.0-ARCH -c /etc/mkinitcpio.conf -g /boot/initramfs-4.1.img
[拷貝System.map]
# cp System.map /boot/System.map-YourKernelName
在這裡YourKernelName為4.1:
# cp System.map /boot/System.map-4.1
# ln -sf /boot/System.map-YourKernelName /boot/System.map
完成了這部操作後,/boot目錄如下圖所示:
在這裡vmlinuz-linux為當前核心,vmlinuz-4.1為新編譯的核心。initramfs-4.1.img為新的初始化記憶體盤,還有剛拷貝的System.map-4.1檔案以及System.map連結。
下面我們需要對新的核心檔案和記憶體盤進行引導,以啟動新核心。
設定啟動項
# grub-mkconfig -o /boot/grub/grub.cfg
我們可以看到grub自動添加了新的核心,新的核心啟動選項在"Advanced options for Arch Linux"中。
重啟
# reboot 0
編譯前後核心對比
編譯前: