來自http://www.zhouyuanchao.com/index.php/archives/70/
目的
構建環境,學習 《Linux設備驅動程序》 《Linux內核設計與實現》
Linux環境
Fedora 24,內核版本4.5.5。
Linux 4.5.5-300.fc24.x86_64
下載內核源碼
從https://www.kernel.org下載了4.19.128版本。
內核配置
使用make help
查看所有make選項。
可以使用不同的方法進行配置,比如make config
、make menuconfig
、make xconfig
等。
make xconfig
是基於Qt的一個配置工具。
執行make xconfig
,按照錯誤提示安裝依賴庫。
sudo install gcc-c++ qt qt-devel bison flex
make xconfig
最終在根目錄生成.config
文件。
編譯遇到問題
執行qmake
,提示編譯器版本太低。
最終決定將Fedora從24升級到30。
升級Fedora
https://www.cnblogs.com/suodingsuiji/p/6288064.html
dnf install dnf-plugin-system-upgrade
dnf system-upgrade download --releasever=25
dnf system-upgrade reboot
一開始使用--releasever=30
,提示錯誤,遂決定逐版本升級。
從24升級到25需要下載大量的軟件包,運行了一夜,早上發現提示錯誤:
警告:/var/lib/dnf/system-upgrade/python2-cssselect-0.9.2-1.fc25.noarch.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID fdb19c98: NOKEY
Curl error (37): Couldn't read a file:// file for file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-x86_64 [Couldn't open file /etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-x86_64]
https://blog.csdn.net/xdzfli/article/details/20225459
根據這篇文章從https://rpmfusion.org/keys上下載25的key,結果不能使用,因爲公鑰不匹配。網上幾番查詢,百度、Bing輪番上陣(別問爲什麼不用Google),終於找到了所需的公鑰文件。
執行dnf system-upgrade reboot
,重啓後又是漫長的升級過程,終於系統由24成功升級爲25。
升級到26之後,發現可以編譯內核了。
當前的版本:Fedora 26,內核版本4.16.11。
Linux 4.16.11-100.fc26.x86_64
編譯內核
直接make有錯誤發生,按照提示安裝了幾個軟件包。
sudo dnf install elfutils-libelf-devel
sudo dnf install openssl-devel
make
sudo make modules_install
sudo make install
重啓後,啓動選項中新加了一項內核4.19.128的啓動項,啓動提示錯誤,無法進入桌面環境:
/dev/fedora/swap does not exist
/dev/mapper/fedora-root does not exist
網上查詢一番,無果,以失敗告終。
再一次嘗試
在網上搜到一篇文章,說是在Fedora系統中有一個編譯內核用的配置文件,可以用來替換.config。
https://www.cnblogs.com/lufee/archive/2011/08/30/2160099.html
cp /boot/config-4.16.11-100.fc26.x86_64 .config
執行make oldconfig
和make
,這次編譯的時間非常漫長,最後導致硬盤空間不足了,導致編譯失敗。需要擴充虛擬機的硬盤空間,然後建立新分區、掛載至一個臨時目錄、將home文件夾的內容拷貝至臨時目錄、再將新分區卸載並掛載至home文件夾。
https://zhidao.baidu.com/question/1865322402933792867.html
解決了空間不足問題,繼續make
。
自此一切順利,系統正常啓動。看來以後得多研究研究內核配置。
有圖爲證: