编译linux源码报错,记录一次Linux内核源码编译实验
記錄一次Linux內(nèi)核源碼編譯實(shí)驗(yàn)
文章目錄
記錄一次Linux內(nèi)核源碼編譯實(shí)驗(yàn)
0. 實(shí)驗(yàn)環(huán)境
1. 選擇、下載內(nèi)核源碼
2. 安裝必要的依賴軟件以及性能要求
3. 解壓、配置和編譯內(nèi)核源碼
3.1 準(zhǔn)備工作
3.2 編譯
3.3 安裝模塊
4. 配置引導(dǎo)
5. 問(wèn)題記錄
6. 記錄一些其他問(wèn)題的解決方法以及一些工具的使用
6.1 軟件更新或安裝時(shí)`dpkg`報(bào)錯(cuò)
6.2 ssh中scp的使用
0. 實(shí)驗(yàn)環(huán)境
Ubuntu-16.04
內(nèi)核源碼-4.15.0
本次試驗(yàn)我使用的是之前安裝后大半年沒(méi)開機(jī)的Ubuntu-16.04,很多軟件需要更新、軟件源也要更新。這個(gè)過(guò)程中也遇到不少問(wèn)題,比較重要的一個(gè)是更新mysql時(shí)dpkg報(bào)錯(cuò),這個(gè)問(wèn)題似乎是有一個(gè)通用的解決辦法,記錄在文末供后續(xù)參考。
對(duì)硬盤容量的要求
編譯較新版本的內(nèi)核源碼會(huì)消耗大量的硬盤空間,以我編譯linux-source-4.15.0為例,第一次編譯時(shí)虛擬機(jī)硬盤配置是40G,結(jié)果編譯快要結(jié)束時(shí)出現(xiàn)硬盤空間不足的錯(cuò)誤。后來(lái)把虛擬硬盤擴(kuò)容到80G編譯成功。這其中固然有我先前占用一部分空間的原因,但是為確保一次成功,請(qǐng)保證至少50-60G的硬盤空間,而且編譯越新版本的源碼應(yīng)該對(duì)硬盤容量要求越高。
1. 選擇、下載內(nèi)核源碼
使用命令uname -a查看本機(jī)內(nèi)核版本
使用命令apt-cache search linux-source查詢當(dāng)前軟件源可供下載的Linux源碼版本
本次試驗(yàn)我選擇的是linux-source-4.15.0,下載(默認(rèn)到/usr/src目錄下):
sudo apt-get install linux-source-4.15.0
2. 安裝必要的依賴軟件以及性能要求
依賴軟件
老師所提供的依賴軟件如下,依次安裝即可。中間可能會(huì)碰到dpkg的問(wèn)題,可移步文末查看解決方法。
實(shí)驗(yàn)過(guò)程中我是把老師給的依賴軟件包以及別人編譯內(nèi)核時(shí)所用的依賴包全部安裝了一遍,肯定有很多冗余。
sudo apt-get install libncurses5-dev libssl-dev
sudo apt-get install build-essential openssl
sudo apt-get install pkg-config
sudo apt-get install libc6-dev bison flex
sudo apt-get install libelf-dev zlibc minizip libidn11-dev libidn11
sudo apt-get install cpp cvs fakeroot g++ gcc
sudo apt-get install gettext gnome-user-guide
sudo apt-get install intltool-debian kernel-package libgcc1
sudo apt-get install patch po-debconf xz-utils
也有安裝這些依賴包編譯成功的:
sudo apt-get install flex bison libncurses-dev libelf-dev libssl-dev
性能要求 – 請(qǐng)依照實(shí)驗(yàn)環(huán)境部分所述情況,自行為虛擬機(jī)配置足夠大的虛擬硬盤。
3. 解壓、配置和編譯內(nèi)核源碼
3.1 準(zhǔn)備工作
進(jìn)入/usr/src目錄下解壓對(duì)應(yīng)的Linux源碼壓縮包。
這里請(qǐng)注意通過(guò)terminal下載的Linux源碼壓縮包結(jié)構(gòu)似乎和官網(wǎng)下載到的不太一樣。第一次解壓后發(fā)現(xiàn)解壓出的目錄下還有一個(gè)源碼壓縮包,將其解壓后才是真正的源碼目錄。
sudo tar -xavf linux-source-4.15.0.tar.bz2
如圖這是源碼目錄的上一級(jí)目錄:
這里才是真正的源碼目錄:
刪除以前編譯的中間文件
sudo make mrproper
這個(gè)命令以及sudo make clean是用來(lái)清除前幾次編譯所產(chǎn)生的中間文件,如果編譯出錯(cuò)后你認(rèn)為需要重新進(jìn)行整個(gè)編譯過(guò)程,可以使用這兩個(gè)命令。
拷貝內(nèi)核配置
這里參考用戶木又啊的文章Ubuntu下編譯內(nèi)核所述方法 – 將本機(jī)內(nèi)核配置復(fù)制到要編譯的新內(nèi)核。具體操作為:
sudo cp /boot/config-4.15.0-70-generic ./.config
這個(gè)config-[version]-generic文件就是本機(jī)內(nèi)核配置文件,注意這里version當(dāng)然應(yīng)該是當(dāng)前內(nèi)核版本而不是要編譯的內(nèi)核版本,即:使用命令uname -a查看到的內(nèi)核版本。
使用菜單界面配置內(nèi)核選項(xiàng)
sudo make menuconfig
執(zhí)行此命令后會(huì)彈出圖形化配置菜單。有眾多配置選項(xiàng),實(shí)驗(yàn)內(nèi)容是在內(nèi)核版本信息中加入自己姓名。編輯完成后選擇exit會(huì)提示保存。
如果依賴軟件沒(méi)有裝全,執(zhí)行sudo make menuconfig命令時(shí)可能會(huì)報(bào)錯(cuò)提示缺少依賴,我實(shí)驗(yàn)過(guò)程中并沒(méi)有出現(xiàn)這個(gè)錯(cuò)誤。
3.2 編譯
編譯過(guò)程:
sudo make [-jn]
這是編譯過(guò)程中最耗時(shí)、耗內(nèi)存的過(guò)程,可以通過(guò)參數(shù)-jn設(shè)置進(jìn)行編譯的CPU內(nèi)核數(shù)量來(lái)提高編譯速度。但是要和宿主機(jī)所支持的數(shù)量一致,可以在vmware 的虛擬機(jī)設(shè)置界面根據(jù)提示正確配置。
例如我編譯時(shí)設(shè)置n為8:
sudo make -j8
這個(gè)過(guò)程中有可能出現(xiàn)gcc: internal compile error,可能是因?yàn)榫幾g過(guò)程中內(nèi)存不足,可能需要給虛擬機(jī)配置更大的內(nèi)存。
3.3 安裝模塊
如果編譯順利完成,使用命令sudo make modules_install完成模塊安裝。
這部分操作完成后,在源碼目錄下的/lib/modules下會(huì)生成一個(gè)帶有新內(nèi)核版本號(hào)的文件。
4. 配置引導(dǎo)
在內(nèi)核源碼目錄下輸出引導(dǎo)所需文件到/boot目錄:(下面所有命令中的[version]都表示編譯好的內(nèi)核源碼版本)
sudo mkinitramfs /lib/modules/[version] -o /boot/initrd.img-[version]-generic
拷貝兩個(gè)文件到/boot目錄:
sudo cp arch/x86/boot/bzImage /boot/vmlinuz-[version]-generic
sudo cp System.map /boot/System.map-[version]
然后進(jìn)入/boot/grub/目錄下執(zhí)行sudo update-grub2,完成后即可重啟引導(dǎo)新內(nèi)核啟動(dòng)。
5. 問(wèn)題記錄
實(shí)驗(yàn)一開始選擇的是linux-source-4.19.123版本,編譯過(guò)程總是報(bào)錯(cuò)如下,但沒(méi)有提示任何解決方法。最后切換Linux-source-4.15.0編譯成功。
6. 記錄一些其他問(wèn)題的解決方法以及一些工具的使用
6.1 軟件更新或安裝時(shí)dpkg報(bào)錯(cuò)
dpkg: error processing mysql-server (--configure):
dependency problems - leaving unconfigured
No apport report written because the error message indicates its a followup error
from a previous failure.Errors were encountered while processing:
mysql-server-5.7
mysql-server
解決方法:重新生成/var/lib/dpkg目錄下的info:
cd /var/lib/dpkg
sudo mv info info.bak
sudo mkdir info
sudo apt-get upgrade
6.2 ssh中scp的使用
以在宿主機(jī)(win10下)操作為例(當(dāng)然win10下必須已經(jīng)安裝好ssh,并配置好環(huán)境變量)。方括號(hào)中表示參數(shù)。
復(fù)制文件:
宿主機(jī) --> 虛擬機(jī):`scp [fpath/filename] [user]@[ip]:[destpath]`
虛擬機(jī) --> 宿主機(jī):`scp [user]@[ip]:[fpath/filename] [destpath]`
使用-r參數(shù)可遞歸復(fù)制整個(gè)文件夾:
宿主機(jī) --> 虛擬機(jī):`scp -r [fpath/filename] [user]@[ip]:[destpath]`
虛擬機(jī) --> 宿主機(jī):`scp -r [user]@[ip]:[fpath/filename] [destpath]`
總結(jié)
以上是生活随笔為你收集整理的编译linux源码报错,记录一次Linux内核源码编译实验的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 曼尼托巴大学计算机科学专业怎么样,加拿大
- 下一篇: Linux下的聊天软件