阿里雲原始碼編譯核心並替換
阿新 • • 發佈:2018-12-11
1 介紹
阿里雲新機器:
- 系統Ubuntu 16.04
- 記憶體16G
- 4核CPU
原始碼編譯Linux最新stable版本核心,並替換現有核心使用新核心
2 編譯
2.1 安裝依賴
$ apt update
$ apt apt-get install ncurses-dev bison flex pkg-config libelf-dev libssl-dev
2.2 下載原始碼
下載xz壓縮後的tar包,以減少下載時間:
$ wget https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/linux-4.18.9.tar.xz $ xz -d linux-4.18.9.tar.xz $ tar xvf linux-4.18.9.tar $ ls linux-4.18.9 linux-4.18.9.tar
- xz -d: decompress xz file
- tar xvf: x for e’x’traction, v for 'v’borse, ‘f’ for 'f’ile.
2.3 配置
$ cd linux-4.18.9
$ make menuconfig
Select->Save,會在(當前目錄下生成.config
檔案,應該也是基於當前核心配置的基礎上生成的)
.config
檔案格式如下,舉例說明:
CONFIG_PCI=y
PCI support# CONFIG_XFS_FS is not set
We have not selected the XFS filesystem support
可以Load->Select->Save來選擇Custom的config,或者直接拷貝一個config檔案:
$ cp /boot/config-$(uname -r) .config
2.4 編譯
檢視當前核心版本:
$ uname -r
4.4.0-117-generic
編譯生成Kernel的Image,這裡是compressed後的Image,-jN
後面的N
一般為CPU核心數的兩倍,這裡選擇8:
$ make bzImage -j8
xxx
Kernel: arch/x86/boot/bzImage is ready (#1)
編譯上述配置中選擇的components生成kernel modules:
$ make modules -j8
安裝modules,會在/lib/modules/4.18.9
目錄下安裝模組和其他一些必要檔案:
$ make modules_install
安裝kernel image,會在/boot
更新kernel image,更新bootloader的配置檔案(grub.conf)和其他一些讓新核心bootable的操作:
$ make install
重啟再檢視現有核心版本:
$ reboot
$ uname -r
4.18.9
3 修改預設的啟動核心
修改預設啟動的Kernel,來切換核心版本,比如又想回到之前的核心版本
首先是要知道GRUB的menu格式,可以重啟進入GRUB看,也可以不重啟看:
- 重啟進入GRUB看:
$ vi /etc/default/grub
GRUB_HIDDEN_TIMEOUT=10(預設是0,修要修改成大於0的值,比如10)
然後按Esc
進入GRUB
- 不重啟執行用如下命令看:
$ update-grub -v
grub-mkconfig (GRUB) 2.02~beta2-36ubuntu3.18
$ grep -Ei 'submenu|menuentry ' /boot/grub/grub.cfg | sed -re "s/(.? )'([^']+)'.*/\1 \2/"
menuentry Ubuntu
submenu Advanced options for Ubuntu
menuentry Ubuntu, with Linux 4.18.9
menuentry Ubuntu, with Linux 4.18.9 (recovery mode)
menuentry Ubuntu, with Linux 4.4.0-117-generic
menuentry Ubuntu, with Linux 4.4.0-117-generic (recovery mode)
menuentry Ubuntu, with Linux 4.4.0-116-generic
menuentry Ubuntu, with Linux 4.4.0-116-generic (recovery mode)
menuentry Ubuntu, with Linux 4.4.0-87-generic
menuentry Ubuntu, with Linux 4.4.0-87-generic (recovery mode)
修改GRUB預設啟動的核心
$ vi /etc/default/grub
GRUB_DEFAULT="1>2"
$ update-grub
修改預設的為Advanced options for Ubuntu
(1)下面menuentry Ubuntu, with Linux 4.4.0-117-generic
(2),下標從0開始。
$ reboot
$ uname -r
4.4.0-117-generic
好的,核心版本換了,我胡漢三又回來了
4 總結
原始碼編譯Linux核心就下面那些命令:
$ make menuconfig
# make包含Image和Modules
$ make
$ make modules_install
$ make install
5 出現的問題
問題1:依賴問題,解決方法就是按照提示安裝依賴
問題2:不能進GRUB,解決方法是修改GRUB_HIDDEN_TIMEOUT=10