//
謹記:寫下這篇教學的目的,是為了記錄自己在編譯Linux核心時遇見的各種問題,讓大家能少掉坑。雖然說事不過三,但這次是我第4次重新裝系統、重新編譯了…
提示:以下是本篇文章正文內容,核心已安裝成功,下面的命令和方法可供參考
//
說明:
光碟映像檔案:Ubuntu 20.04 server(伺服器版本64位元)
虛擬化軟體:VMware Workstation
(VirtualBox也不錯,但網上關於VirtualBox的教學太少了,我覺得兩款其實差不多啦,VirtualBox還更簡潔一點。)
1.開啟VM——點選建立新的虛擬機器器,點選下一步、再下一步。
2.選擇安裝我們之前下載好的Ubuntu Server版本的光碟映像檔案(字尾名是.iso)
//
3.填寫好資訊(要記得自己設的使用者名稱和密碼,可以寫在一個txt檔案)
//
4.核心編譯產生的大量臨時檔案和目標檔案會佔據很大的空間,所以儲存的位置要保證至少有50+G
//
5.為了讓Linux核心編譯更快一點,我這裡設定了4核。(如果本機承受得住可以設8核!)
//
6.接下來是設定執行記憶體(3G-4G就夠了),執行記憶體不夠大,編譯過程中也是會出錯的哦,但我沒有碰見。
//
7.選擇橋接網路,這個是wget命令下載、連線網路、主機與虛擬機器器間互ping的正確選擇
(之前搞主機與虛擬機器器間互ping搞了很久,其實就是橋接網路設定沒弄好)
//
8.接下來兩個選擇預設的就可以了,直接點選下一步。
//
9.建立虛擬磁碟,因為每個電腦的設定和安裝檔案不一樣,編譯核心用到的記憶體也不大相同,見過的最小有5G,最大的50+G,如果想要核心編譯一步到位,在此建議設80G左右(有多大搞多大!)
//
10.直接下一步,就建立好了,下圖是建立的虛擬機器器資訊,點選完成、開啟虛擬機器器:
//
1.預設English——>回車done(其餘介面沒特別說明都是預設設定就OK)
//
2.網線插好,有DHCP,系統就會自動預設為DHCP,並把已經獲取到的IP顯示到對應的網路卡上,大部分情況預設就可以了,done
//
3.接下來到了重點!! 手動手動手動磁碟分割區!!
本人前三次不能編譯完整,正是三次都是「根目錄記憶體太小」!!!即使前面設定60G、90G,如果是自動預設分割區,/ 根目錄分配到的記憶體都不夠用呀(/(ㄒoㄒ)/~~)
下面大家好好設定,編譯核心就不會出現「error:No space left on device」這個錯誤。
選擇"Custom storage layout"——done
選擇「Add GPT Partition」——(說明:圖是舊的60G,後來想想還是不夠,改成80G了)
/boot 10G空間夠了
同樣的選擇「Add GPT Partition」,給 / 這個根目錄設空間大小
確認就可以看到我們設定的兩個分割區啦!
4.設定Linux虛擬機器器登入的使用者名稱和密碼(這個要記住啊!登入虛擬機器器要輸入的哦)
//
5.這裡選擇開啟SSH服務,之後遠端連線就不會出錯了,有的遠端連線出錯了,是因為虛擬機器器還沒開啟SSH服務,可以用終端命令開啟這個服務,再連線,也不是很麻煩,百度一下就可以啦!
//
6.設定好,慢慢等待虛擬機器器安裝就OK了
//
//
在此本人用的是:Putty
下載網址:https://www.putty.org/
1.下載
根據自己電腦位數選擇下載安裝就可以了
可以查詢相關教學,設定喜歡的終端字型和其大小。
2.執行putty.exe,填寫虛擬機器器IP,進入
//
1.遠端 Shell 對談終端裡,使用 wget 命令下載最新的穩定版 Linux 原始碼包
命令如下:
sudo wget 原始碼包下載連結
例如下載linux-5.8.15.tar穩定版本的原始碼包:
sudo wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.8.15.tar.xz
下載好顯示如下:
//
2.環境設定(想順順利利一口氣編譯好就要做好準備)
(正式編譯前需要安裝部分軟體,之後編譯核心就不會報奇怪的錯誤了)
sudo apt update && sudo apt upgrade
sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison
(這裡是選讀,說明這步可能出現的錯誤和解決辦法)
要上網下載的命令 可能 會出現以下錯誤:
出現錯誤:
Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
應該是DNS伺服器域名存取失敗(ping不通網路也可能是這個原因)
解決辦法——>輸入命令
sudo vim /etc/resolv.conf
新增 nameserver 8.8.8.8
新增 nameserver 114.114.114.114
可能初學者不知道怎麼用vim插入文字,在此簡單說一下:
①進入這個介面,按 i 鍵 ,表達進入「INSERT」編輯模式,就可以在文字中新增內容。
②新增好後,按ESC鍵,再輸入「:wq!」,就可以儲存並回到普通命令列介面。
(選讀結束)
//
3.下載好後,對壓縮包進行解壓
①把xz字尾名去掉
sudo xz -d linux-5.8.15.tar.xz
②tar命令解壓(解壓至/usr/src 目錄下)
sudo tar -xvf linux-5.8.15.tar -C /usr/src/
解壓成功顯示:
4.在正式編譯核心之前,我們首先必須設定需要包含哪些模組
sudo cp /boot/config-$(uname -r) .config
意思就是拷貝對應當前核心設定到當前目錄下並重新命名為.config
之後可以輸入 uname -r 命令檢視當前資訊(為了和之後安裝好的新核心做對比)
//
//
5.正式開始編譯!!
①make menuconfig
提示:虛擬機器器下有可能提示會因為螢幕太小而無法顯示menuconfig而執行失敗。要確保遠端連線軟體全螢幕。
預設設定即可,選擇退出。執行完顯示如下:
②sudo time make -j4
開始編譯,此過程看每個人電腦、虛擬機器器等等方面的設定,執行時間有長有短,慢慢等待即可。
這裡可以用 make -jn 來進行編譯加速,其中 n 值一般為 2,4 或 8 (多給虛擬機器器分配一些 CPU 資源)
time 命令可以在編譯核心過程結束後,在終端丟擲編譯核心的消耗用時
編譯完後顯示:(我這裡大概編譯了1小時40分)
③sudo make modules_install
安裝模組
④sudo make install
安裝核心
//
1.重新驅動虛擬機器器,出現以下畫面,選擇「Advanced…」
2.進入之前編譯的最新的核心版本中
3.等待…
//
(這裡是選讀)
此過程當中可能出現以下錯誤:System is deadlocked on memory
其實虛擬機器器初始設定的執行記憶體不夠,需要增加記憶體:
解決辦法:直接進入虛擬機器器設定,增大執行記憶體,再重新開啟虛擬機器器。
(選讀結束)
4.開啟虛擬機器器登入後,輸入 uname -r 命令,確認核心版本
說明核心安裝成功!!!!!
//
說明:本人前三次編譯失敗其實都是分配的記憶體不夠大,雖然有一次設了60G,一次90G,但因為都選擇了系統預設記憶體分配,導致根目錄分配到的記憶體還是不夠大,所以手動分記憶體很重要啊!!!
本文獻給花了一個星期才搞定這個小作業的菜鳥yjy。
希望此文對有同樣困惑的你有所幫助。
參考教學:如何編譯安裝Linux核心