Linux內核編譯(Ubuntu)

實驗內容:在系統中下載統一發行版本的版本號較高的內核,編譯之后運行自己編譯的內核,并使用uname-r命令查看是否運行成功。

實驗步驟:

1.查看實驗環境和內核版本

圖1 實驗環境

VMware中虛擬機Ubuntu(24.04)、內存8G、CPU(8核)、磁盤128G(下載Ubuntu虛擬機的時候一定要注意分配足夠的磁盤空間,建議100G)。

2 查看內核版本

初始內核版本是6.11.0。

為了提升下載速度,換源:

我打算換清華源,從清華大學開源軟件鏡像站得知:從 Ubuntu 24.04 開始,Ubuntu 的軟件源配置文件變更為 DEB822 格式,路徑為 /etc/apt/sources.list.d/ubuntu.sources

換源思路:將系統自帶的對應文件做個備份,然后根據格式的選擇做網頁中(ubuntu | 鏡像站使用幫助 | 清華大學開源軟件鏡像站 | Tsinghua Open Source Mirror)對應的內容替換,即可使用選擇的軟件源鏡像。

3 查看Ubuntu版本

執行了lsb_release -a 命令,獲取到系統信息:這是 Ubuntu 24.04.2 LTS 版本 ,代號為noble 。接下來換清華源,步驟如下:

備份源文件:

4 備份源文件

執行sudo cp /etc/apt/sources.list.d/ubuntu.sources備份當前軟件源配置文件。這樣就能正確找到源文件并將其備份到用戶主目錄下,文件名是ubuntu.sources.bak 。

5 Ubuntu上沒有安裝vim

圖5告訴我們Ubuntu上還沒有vim,并且提供了安裝不同版本vim的命令。

Vim是從vi發展出來的一個文本編輯器,最初的簡稱是Vi IMitation,隨著功能的不斷增加,正式名稱改成了Vi IMproved。

下載vim:

6 更新apt

在終端執行sudo apt update,因為軟件包列表可能不是最新的,會導致找不到對應軟件包。

7 安裝vim-gtk3

在Ubuntu軟件包搜索中,與vim-gtk匹配的軟件包是vim-gtk3,在終端執行 sudo apt-get install vim-gtk3 -y。什么是gtk3?因為這是vim安裝的圖形化界面。

Vim還需要進行配置,這不是本實驗的內容,參考博客:基于 Ubuntu 系統的 Vim 全面配置(持續更新)_ubuntu vim-CSDN博客。(已配置vim到自動補全符號)。之后安裝了VMware Tools。

前面已完成了備份,接下來要換清華源:

獲取清華源配置:

訪問清華大學開源軟件鏡像站(https://mirrors.tuna.tsinghua.edu.cn/ ),找到 Ubuntu 鏡像使用幫助,獲取適用于 Ubuntu 24.04(代號noble )的清華源配置內容 。

8 原有內容

在終端執行sudo vim /etc/apt/sources.list.d/ubuntu.sources ,刪除原有內容,粘貼清華源配置(在上文給出的鏈接里面就有清華源配置內容)后按ESC退出插入模式,進入正常模式,輸入:wq按回車鍵保存退出。

執行sudo apt update ,更新軟件包索引,之后即可基于清華源進行軟件安裝、升級等操作 。

進入Linux 內核的官網,下載最新版本,或者其它版本的內核代碼。在Linux系統中,只需要在命令行輸入如下命令就可以下載Linux內核壓縮包了。

2.下載內核

9 執行“wget 下載鏈接

3.解壓

下載后在終端輸入sudo tar-xvflinux-6.13.1.tar.xz解壓縮。

10 解壓完成

之后要將解壓的文件移動到/usr/src路徑下。

11 將解壓縮文件移動到/usr/src

也可以直接執行tar xf linux-6.13.1.tar.xz -C /usr/src,這樣完成了解壓并且放置到/usr/src路徑下。

4.安裝編譯工具和依賴的軟件包

接下來安裝編譯工具以及其它依賴的軟件包,執行sudo apt-get install build-essential libncurces-dev bison flex libssl-dev zstd、sudo apt-get install libelf-dev。

a

(b)

12安裝編譯工具以及依賴的軟件包

按下Y接著執行即可。

5.配置內核

???? 在編譯內核之前,對內核源代碼進行配置。配置的目的主要是確定哪些模塊會編譯到內核當中。執行sudo make menuconfig進行配置。

13 進入配置界面

對每個配置選項可通過點擊<Select>來選擇:

<*>或[*]:將該功能編譯進內核;

[]:不將該功能編譯進內核;

[M]:將該功能編譯成可以在需要時動態

插入內核的模塊。

14 進行配置

???? 如圖所示,將Compile also drivers which will not load和Compile the kernel with warnings as errors設置成將該功能編譯進內核。進行保存后退出。(也可以不配置這兩項內容,保持默認配置,Save--->ok--->Exit--->Exit)。

必做配置:

進入kernel hacking,然后修改warn for stack frames larger than 的數值,將其修改為4096(最好不要大過這個數值)。這一步驟的圖在下文圖21。

15 查看.config文件屬性

在 Linux 系統中使用ll(等同于 ls -l )命令查看.config文件屬性的結果。

接下來要對.config文件進行配置:

執行sudo vim .config打開當前目錄下的 .config 文件,配置如下兩項內容。

CONFIG_SYSTEM_TRUSTED_KEYS=””

CONFIG_SYSTEM_REVOCATION_KEYS=””

16 vim 中打開 .config 文件

17 配置.config文件前

如圖17所示,在 vim 命令模式下(進入 vim 后默認是命令模式,如果不是,按 Esc 鍵進入 ),輸入 /CONFIG_SYSTEM_TRUSTED_KEYS ,然后按回車鍵。vim 會自動定位到首次出現該配置項的位置 。如果位置不對,可按 n 鍵查找下一個匹配項。找到之后,按i鍵進入插入模式,刪除雙引號內的內容(如果有 ),使其變為 CONFIG_SYSTEM_TRUSTED_KEYS="" 。同理,找到 CONFIG_SYSTEM_REVOCATION_KEYS 所在行,按i鍵進入插入模式,刪除雙引號內的內容(如果有 ),設置為 CONFIG_SYSTEM_REVOCATION_KEYS="" 。

按 Esc 鍵回到命令模式,然后輸入 :wq 并回車,保存修改并退出 vim 。

6.編譯內核

前情提要:因為沒安裝libelf-dev以及配置內核(warn for stack frames larger than 的數值)發生了報錯(上文已經告訴讀者進行了操作,如果前面操作過了應該不會出現報錯),如果在前面沒有安裝libelf-dev以及配置內核,為了避免報錯,請在編譯內核前請執行sudo apt-get install libelf-dev、執行sudo make menuconfig進行配置(具體操作界面見圖21)。

利用make命令開始編譯內核。使用 -j 選項來多線程處理,可以更有效的利用CPU資源。參數是并發數量,通常可以是CPU的2倍。如圖18所示,使用sudo make -j$(nproc)。sudo make -j$(nproc) 是在 Linux 系統中用于并行編譯內核或其他軟件項目的命令。

18 編譯內核

?a

(b)

(c)

(d)

e

19 編譯內核過程中出現錯誤

從報錯信息 “fatal error: libelf.h: 沒有那個文件或目錄” 和 “fatal error: gelf.h: 沒有那個文件或目錄” 可知,是缺少相關開發庫文件導致編譯失敗 。libelf 庫用于處理 ELF(可執行與可鏈接格式)文件,編譯內核時部分工具和模塊依賴它。

可通過以下命令安裝 libelf 開發庫來解決:sudo apt-get install libelf-dev。安裝完成后,重新執行 sudo make -j$(nproc) 命令繼續編譯內核 。

20 再次報錯

??? 在編譯內核模塊驅動時,如果出現如上報錯信息,主要是因為內核中設置了堆棧報警大小,其默認為1024bytes。將其修改為4096既可以消除告警信息。

解決方法:

(1)make menuconfig

(2)kernel hacking

(3)修改warn for stack frames larger than 的數值,將其修改為4096(最好不要大過這個數值)

(4)重新編譯內核模塊則不會出現如上的告警信息。

21 解決報錯

22 編譯成功

7.編譯和安裝模塊

接下來是編譯和安裝模塊。執行make modules_install。

23 執行make modules_install之后

8.安裝內核

注意,該步驟出現了警告,圖25下方給出了解決辦法,請先閱讀完這部分再進行操作。

將編譯好的內核文件復制到/boot目錄下,并更新GRUB配置:

24 出現警告

出現的 Warning: os-prober will not be executed... 警告,是因為 GRUB_DISABLE_OS_PROBER 可能被設置,導致 os-prober 工具不被執行,無法檢測其他可引導分區并添加到 GRUB 配置中。

25 解決警告

解決警告的過程:使用文本編輯器vim,打開/etc/default/grub文件,命令為sudo vim /etc/default/grub。在文件中找到GRUB_DISABLE_OS_PROBER這一行。如果該行被注釋(行首有#),去掉注釋符號#,并確保其值為false。保存并關閉/etc/default/grub文件后,在終端執行sudo update-grub命令。該命令會重新生成 GRUB 配置文件,應用剛才的修改。執行后,os-prober工具將被允許執行,掃描其他可引導分區并添加到 GRUB 配置中,相應警告也會消失。

26 重新生成grub文件

此時警告提示變為os-prober will be executed...,說明配置修改生效,os-prober工具已能正常執行去檢測其他可引導分區,這是預期的正確狀態。可查看/boot/grub/grub.cfg文件(使用sudo cat /boot/grub/grub.cfg查看內容),確認新內核及其他相關啟動項是否正確添加。

接下來要對/etc/default/grub文件進行配置。

27 打開/etc/default/grub文件

28 進行配置前

29 進行配置后

30 更新grub

實驗結果

執行reboot重啟系統。

31 重啟系統界面

32?檢查新內核

執行uname -r查看內核版本。結果是6.13.1,說明成功。

關于報錯的總結

①編譯內核時出現 “fatal error: libelf.h: 沒有那個文件或目錄” 和 “fatal error: gelf.h: 沒有那個文件或目錄” 的錯誤,這是因為缺少相關開發庫文件。通過執行sudo apt-get install libelf-dev命令安裝libelf開發庫,解決了該問題,使編譯能夠繼續進行。

②在編譯內核模塊驅動時,出現 “the frame size of 1152 bytes is larger than 1024 bytes” 的錯誤。這是由于內核中設置的堆棧報警大小默認為 1024bytes。通過make menuconfig進入內核配置界面,找到 “Kernel hacking” -> “Compile - time checks and compiler options”,將 “Warn for stack frames larger than” 的數值修改為 4096,重新編譯內核模塊后,消除了警告信息。

③安裝內核時出現 “Warning: os - prober will not be executed...” 的警告,這是因為GRUB_DISABLE_OS_PROBER可能被設置,導致os - prober工具不被執行,無法檢測其他可引導分區并添加到 GRUB 配置中。使用sudo vim /etc/default/grub打開文件,找到GRUB_DISABLE_OS_PROBER這一行,去掉注釋符號#并確保其值為false,保存并關閉文件后執行sudo update - grub命令,重新生成 GRUB 配置文件,解決了該警告問題。

如果對你有幫助的話,請為我點個贊吧?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/76730.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/76730.shtml
英文地址,請注明出處:http://en.pswp.cn/web/76730.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

EdgeGPT - 新版Bing聊天功能逆向工程

本文翻譯整理自&#xff1a;https://github.com/acheong08/EdgeGPT 文章目錄 一、關于 EdgeGPT相關鏈接資源關鍵功能特性 二、安裝系統要求安裝命令 三、認證配置獲取Cookie步驟代碼中使用Cookie 四、使用方法1、命令行方式2、Python API方式使用Chatbot類使用Query輔助類 3、…

三網通電玩城平臺系統結構與源碼工程詳解(四):子游戲集成與服務器調度機制全解

本篇將深入講解三網通電玩城平臺中子游戲接入、前后端資源組織方式、服務器調度邏輯、并發接入方案等核心內容&#xff0c;重點覆蓋“李逵劈魚”、“水果瑪麗”、“瘋狂瑪麗”等熱門組件&#xff0c;輔以完整代碼框架與部署邏輯。 一、子游戲資源目錄結構與加載機制 平臺采用標…

1.1 AI大模型與Agent的興起及其對企業數字化轉型的推動作用

隨著人工智能技術的飛速發展&#xff0c;AI大模型和智能代理&#xff08;Agent&#xff09;的興起正成為推動企業數字化轉型的重要力量。從2017年GPT-1的首次亮相到2025年GPT-4和Qwen 2.5等多模態模型的成熟&#xff0c;AI大模型經歷了顯著的技術演進&#xff1b;與此同時&…

位運算練習:起床困難綜合征(貪心,位運算)(算法競賽進階指南學習筆記)

目錄 前情提要起床困難綜合征&#xff08;貪心&#xff0c;位運算&#xff09; 前情提要 一些基礎運算操作用法看看上一篇&#xff1b; 起床困難綜合征&#xff08;貪心&#xff0c;位運算&#xff09; 題目原文 [P2114 NOI2014] 起床困難綜合癥 - 洛谷 思路分析 題目很長…

PowerBi中REMOVEFILTERS怎么使用?

在 Power BI 的 DAX 中&#xff0c;REMOVEFILTERS() 是一個非常重要的函數&#xff0c;常用于取消某個字段或表的篩選上下文&#xff08;Filter Context&#xff09;&#xff0c;從而讓你的計算不受切片器&#xff08;Slicer&#xff09;、篩選器或視覺對象的限制。 ? 一、REM…

Vue3 實戰:打造多功能旅游攻略選項卡頁面

在旅游類應用開發中&#xff0c;為用戶提供全面、直觀的信息展示界面至關重要。本文將分享如何基于 Vue3 Axios 技術棧&#xff0c;實現一個包含攻略、游記、問答三大板塊的旅游攻略選項卡頁面&#xff0c;從樣式設計到交互邏輯&#xff0c;帶你深入了解整個開發過程。 項目背…

JavaScript性能優化實戰(1):性能優化基礎與性能分析工具

性能優化的重要性與業務價值 在當今競爭激烈的互聯網環境中,網站和應用的性能已成為用戶體驗和業務成功的關鍵因素。研究表明,頁面加載時間每增加1秒,轉化率可能下降7%,而53%的用戶會在頁面加載時間超過3秒后放棄訪問。這些數據直接揭示了性能優化對業務的巨大影響: 用戶…

Unity 腳本使用(二)——UnityEngine.AI——NavMesh

描述 Singleton class 用于訪問被烘培好的 NavMesh. 使用NavMesh類可以執行空間查詢&#xff08;spatial queries&#xff09;&#xff0c;例如路徑查找和可步行性測試。此類還允許您設置特定區域類型的尋路成本&#xff0c;并調整尋路和避免的全局行為。 靜態屬性&#xff0…

Java 靜態內部類面試題與高質量答案合集

本文整理了關于 Java 靜態內部類&#xff08;Static Nested Class&#xff09;在面試中的高頻問題及標準答案&#xff0c;幫助你理解其底層原理、內存表現以及實際應用。 1. 什么是靜態內部類&#xff1f;和普通內部類有什么區別&#xff1f; 答&#xff1a; 靜態內部類是定義…

為什么買不到一定阻抗特性曲線的磁環

為什么買不到一定阻抗特性曲線的磁環&#xff1a; 磁環繞不同的圈數&#xff0c;阻抗特性曲線不同&#xff0c;磁環沒有類似于磁珠的特定頻率和阻抗特性曲線的磁環。 磁環與磁珠的核心區別&#xff1a; 磁珠是一種固定頻率阻抗器件&#xff0c;出廠時已通過材料和工藝設計確定…

【MATLAB海洋專題】歷史匯總

【MATLAB海洋專題】歷史匯總 目錄 01&#xff1a;海洋專題進階教學 02&#xff1a;海洋數據處理 03&#xff1a;海洋數據下載 04&#xff1a;海洋配色 05&#xff1a;海洋專題基礎教學 06: 其他基礎畫圖 07&#xff1a;python 畫海圖專題 08&#xff1a;模式相關文件制作 01…

數據倉庫ODS、DWD、DWS、ADS各層介紹

數據倉庫Data warehouse&#xff08;可簡寫為DW或者DWH&#xff09;建設的目的&#xff0c;是為前端查詢和分析作為基礎&#xff0c;主要應用于OLAP&#xff08;on-line Analytical Processing&#xff09;&#xff0c;支持復雜的分析操作&#xff0c;側重決策支持&#xff0c;…

動態提示詞(小模型)、RAG和提示詞系統

動態提示詞(小模型)、RAG和提示詞系統 目錄 動態提示詞(小模型)、RAG和提示詞系統小模型方案:動態提示詞基于規則的動態提示詞生成基于模板的動態提示詞生成基于小模型的動態提示詞生成基于強化學習的動態提示詞生成基于元學習的動態提示詞生成動態提示詞(小模型)RAG(檢…

并發設計模式實戰系列(3):工作隊列

&#x1f31f; ?大家好&#xff0c;我是摘星&#xff01;? &#x1f31f; 今天為大家帶來的是并發設計模式實戰系列&#xff0c;第三章工作隊列&#xff08;Work Queue&#xff09;??&#xff0c;廢話不多說直接開始~ 目錄 一、核心原理深度拆解 1. 生產者-消費者架構 …

云賬號安全事件應急響應指南:應對來自中國IP的異常訪問

在當今數字化時代,云服務已成為企業IT基礎設施的核心。然而,隨之而來的安全挑戰也日益突出。本文將詳細介紹當發現云賬號被來自中國的IP地址異常利用時,應如何快速有效地響應,以確保賬戶安全并最小化潛在風險。 1. 確認異常活動 首先,我們需要確認是否真的發生了安全事件…

三網通電玩城平臺系統結構與源碼工程詳解(五):客戶端熱更機制與多端資源分發流程

本篇將聚焦三網通平臺在多客戶端部署中的資源熱更機制設計、跨平臺同步策略、版本控制與前端資源發布管理&#xff0c;幫助開發者搭建高效穩定的資源更新系統。 一、資源分發平臺架構 為實現安卓端、iOS端、PC端的統一更新分發&#xff0c;平臺采用 Node.js Express 構建資源…

spark和hadoop的區別

一、spark概述 二、處理速度 三、 編程模型 四、實時性處理 五、spark內置模塊 六、spark的運行模式

AI寫代碼之GO+Python寫個爬蟲系統

下面我們我們來利用AI&#xff0c;來用GOPython寫個爬蟲系統。 幫我寫一個Python語言爬取數據寫入Mysql的案例&#xff0c;信息如下&#xff1a; 1、Mysql數據庫地址是&#xff1a;192.168.1.20 &#xff0c;mysql用戶名是&#xff1a;root&#xff0c; Mysql密碼是&#xff1…

從單模態到多模態:深度生成模型的演進歷程

在人工智能領域&#xff0c;生成模型的發展一直是研究熱點。從最早的自編碼器到如今的多模態擴散模型&#xff0c;這一技術路線不斷突破&#xff0c;為創意內容生成、數據增強和表示學習等領域帶來革命性變化。本文將詳細介紹幾種關鍵生成模型的技術原理和演進路徑&#xff0c;…

【系統架構設計師】嵌入式微處理器

目錄 1. 說明2. 微處理器(MPU)3. 微控制器(MCU)4. 信號處理器(DSP)5. 圖形處理器(GPU)6. 片上系統(SoC)7. 例題7.1 例題1 1. 說明 1.嵌入式微處理器主要用于處理相關任務。2.由于嵌入式系統通常都在室外使用&#xff0c;可能處于不同環境&#xff0c;因此&#xff0c;選擇處理…