如何編譯自己的linux核心

編譯你自己的Linux核心是一個很怪的技術問題,對吧?我們已經介紹了一些您可能希望這樣做的原因--現在是您自己嘗試的時候了!...

在安裝Gentoo的同時,編譯自己的Linux內核也是被認為非常古怪和技術性的事情之一。我們已經討論了一些您可能希望這樣做的原因。在我們引導您完成這些步驟之前,下面是一些重要概念的簡要概述。

compile-linux-kernel

什麼是內核(a kernel)?

簡而言之,它是操作系統的重要組成部分,如果不是最重要的話。操作系統負責讓你的程序運行,允許它們訪問你的硬件。然而,它實際上是執行所有這些任務的內核。

Linux內核的特殊之處在於它可以根據您自己的硬件進行定製。這與windowsnt內核相比,它在每臺計算機上都是相同的。為此,內核必須經歷一個稱為編譯的過程。

有關更多信息,請查看我們對Linux內核的介紹。

什麼是編譯(compiling)?

通常,程序是以人類可讀的格式編寫的。這使得人們更容易創建軟件。例如,Linux內核主要是用一種叫做C的編程語言編寫的,但是計算機不能理解這一點。他們只識別一種叫做機器代碼的複雜語言。要做到這一點,需要使用一種叫做編譯器的特殊軟件來翻譯文本行。

不同的編譯器用於轉換不同的編程語言。例如,GCC是一個編譯器,它將C代碼轉換成機器代碼(除其他外)。但這並不是他們所做的全部——編譯器也可以優化特定機器的翻譯代碼。同時,它們還可以在執行此操作時從程序中刪除不需要的功能。

通常,很多軟件都已經完成了這個過程。相反,人們下載轉換後的二進制指令,這些指令是現成的。例如,您現在運行的web瀏覽器已經編譯。這是因為編譯一些東西可能有點複雜和耗時。把它想象成把一本大書翻譯成外語。

簡而言之,編譯內核意味著將其代碼轉換為實際在計算機上運行的代碼。

獲取內核源

沒有燃料你不能生火。同樣,如果您沒有代碼,那麼您就不能編譯程序。對於大多數Linux操作系統,通常都是相同的,但有一些例外。其中許多人提供自己的自定義內核源。如果可以的話,你應該試著用它。例如,如果您使用的是基於Debian的操作系統,如Ubuntu,則應使用以下命令安裝源:

sudo apt-get updatesudo apt-get install linux-source

007Ys3FFgy1h1omqpe82sj30ic0c6tah

如果願意,還可以安裝此軟件包的不同版本(例如linux-source-4.8.0)。您將在/usr/src/目錄中找到已安裝的文件,因此請在那裡導航並查看內容:

cd /usr/src/ls

您將看到一個以結尾的文件。焦油bz2. 這是您將使用的源。使用以下命令提取:

sudo tar xjvf linux-source-4.4.0.tar.bz2

當然,請確保用正確的名稱替換文件。文件將相當大,所以過程將需要一點時間!

替代方法

如果您願意,您可以從官方的Linux內核網站上獲得您的源代碼。我建議只有在Linux操作系統沒有提供的情況下才這樣做。選擇所需的版本並下載。如果你通過這個途徑,你應該下載到一個空文件夾。這樣,如果你想在將來編譯更多的內核,你會有一個很好的文件夾來組織它們。

007Ys3FFgy1h1omqq539yj30im0dnmy8

完成此操作後,使用以下命令提取文件:

tar xJvf linux-4.9.11.tar.xz

007Ys3FFgy1h1omqqp7m7j30in0ce3z0

確保使用的文件名與下載的版本匹配!

自定義內核

在這一步中,您可以選擇要除去內核的哪些部分。例如,內核為各種設備提供了許多不同的驅動程序。如果您不需要這種支持,去掉它們可以帶來一些速度上的好處,同時還可以獲得更小的內核。

先決條件

在繼續之前,您必須安裝一些程序,讓您自定義和編譯它。

在基於Debian的系統上,您需要構建基本包,除其他外:

sudo apt-get install build-essential gcc libncurses5-dev libssl-dev

libncurses5 dev包將使配置內核更容易,因此請確保安裝它。其他Linux操作系統也會有一個類似的程序,但可能會使用不同的名稱。例如,如果您使用的是軟呢帽,則稱為ncurses。

如果尚未安裝,還需要GNU編譯器集合(GCC)。這是負責將原始源代碼翻譯成計算機可以理解的東西的工具。也就是說,編譯。

安裝了這些程序後,打開終端,以便您在提取的Linux源文件夾中。例如,如果使用linux源方法,您將執行以下操作:

cd /usr/src/linux-source-4.4.0

內核配置文件

在編譯內核之前,您需要告訴GCC您希望如何完成它。您可以使用名為make的命令行工具來執行此操作。鍵入以下命令:

sudo make localmodconfig

這將創建一個名為.config的文件,它告訴GCC從內核源代碼編譯什麼。makelocalmodconfig命令檢測當前正在運行的內核組件,並將它們標記為編譯。如果內核位於您自己的文件夾中,則不需要sudo就可以工作。

你可能會遇到下面這樣的信息。只要按回車鍵就可以跳過它們——它們通常只是新的內核特性。

007Ys3FFgy1h1omqrdfarj30im0bkq40

然而,localmodconfig並不完美!如果您當前沒有使用計算機的某些部分,它可能無法檢測到它支持的所有內容。因此,您需要手動啟用它們。或者,您可以完全跳過此步驟,改用下一個命令。這將使用與當前使用的選項相同的選項編譯新內核。

如果您希望這樣做,但之前使用過localmodconifg命令,請執行以下操作:

sudo make clean

這將給你一個乾淨的建設。如果以前用這些源代碼編譯過內核,也應該使用這個命令。

進一步配置

在內核源文件夾中,有一個名為.config的文件。這就是GCC用來選擇編譯內容的方法。代替手動編輯(不推薦),您將使用一些終端工具。這將使選擇編譯選項更加容易。

完成此操作後,請進一步微調:

sudo make nconfig

你會看到一個彩色菜單彈出。這是內核配置菜單。要四處導航,請使用箭頭鍵。您可以按向右箭頭鍵展開旁邊帶有--->號的條目。按向左箭頭鍵,從這些子菜單中導航出來。

007Ys3FFgy1h1omqs5tdyj30ik0e2wfs

通過按空格鍵,可以切換旁邊帶有<gt;或[]符號的菜單項。這將在不同的菜單選項之間循環。如果您在內部看到*或M,那麼將編譯特定的內核組件。它們之間唯一的區別是M選項將在需要時加載。如果您正在編譯一個不經常使用的驅動程序,這可能很有用。

如果您想了解有關特定開關的更多功能,請按F2鍵。您將看到對所編譯內容的有用描述。

007Ys3FFgy1h1omqsr8bxj30ik0g5my0

完成後,按F9按鈕保存並退出。

007Ys3FFgy1h1omqup047j30ik0e20tc

編譯和安裝內核

現在您已經創建了一個定製的make文件,您需要編譯內核。鍵入以下命令:

sudo make -j$(nproc --all)

如果您從web上下載內核源,則不需要sudo。命令的第二部分利用所有CPU內核,幫助加快內核編譯時間。如果您想在不發生太多打嗝的情況下將計算機用於其他任務,可以消除此問題,或者將數字更改為其他的(例如,-j2)。但是,這也會使編譯速度減慢!

這一過程可能而且將需要很長時間。你選擇編譯的越少,它就越短。即便如此,你還是需要耐心。

然後,輸入此命令以完成編譯內核的其餘部分:

sudo make modules_install

要實際使用此內核,您需要輸入以下命令:

sudo make install

這將自動將內核複製到/boot文件夾並生成適當的文件以使其正常工作。

使用grub交換內核

如果在安裝新內核後重新啟動,系統可能無法工作!這通常是由於編譯不正確的內核(也就是說,沒有很好地支持您的計算機)。舉個例子,我自己的筆記本電腦。為了防止這種情況發生,我建議編輯GRUB以便它可以切換回舊的內核。為此,請使用以下命令:

sudo nano /etc/default/grub

007Ys3FFgy1h1omqv9g4ij30il0c6jsx

在GRUB#U HIDDENŠU TIMEOUT和GRUBŠU HIDDENŠTIMEOUTŠ安靜線前放置一個Š標誌。之後,通過運行以下命令保存這些更改:

sudo grub-mkconfig -o /boot/grub/grub.cfg

007Ys3FFgy1h1omqvwawwj30hs0dcmxg

現在,如果你重新啟動你的電腦,你可以切換到一箇舊的內核,如果你的新內核不工作。只需轉到高級選項菜單項並選擇要引導的內核。如果一切順利,恭喜你!您將使用自己編譯的內核。

你有興趣編譯更多的內核嗎?其他程序?你覺得值得嗎?

圖片來源:chombosan/Shutterstock

  • 發表於 2021-03-15 10:33
  • 閱讀 ( 45 )
  • 分類:電腦

你可能感興趣的文章

mono是什麼?它如何幫助windows切換到linux?

... 如何處理Linux上的應用程式缺口? ...

  • 發佈於 2021-03-12 18:14
  • 閲讀 ( 53 )

這些是最難安裝的linux作業系統嗎?

...他事情也是如此。許多人將面臨的一個很大的不同點是,如何將這樣一個系統安裝到計算機上。 ...

  • 發佈於 2021-03-13 01:34
  • 閲讀 ( 46 )

一個尺寸不適合所有人:為什麼軟體不能普遍相容

...作業系統工作需要一點(只是一點,我保證)關於軟體是如何**的知識。 ...

  • 發佈於 2021-03-13 08:34
  • 閲讀 ( 52 )

如何用gentoo完全控制你的電腦

...inux作業系統。在Linux發行版(“發行版”)中,它的本地編譯原始碼是獨一無二的。與傳統作業系統相比,Linux發行版提供了更大的靈活性,而Gentoo則充分利用了自己動手的心態。 ...

  • 發佈於 2021-03-13 12:40
  • 閲讀 ( 42 )

為什麼幾乎沒有人把linux稱為“gnu/linux”

...桌面依賴的很酷的工具。80年代建立的關鍵工具包括GCC(編譯C的工具)、Emacs(文字編輯器)、Bash和各種仍在使用的命令列實用程式。 ...

  • 發佈於 2021-03-13 20:45
  • 閲讀 ( 47 )

為什麼使用哪種linux作業系統無關緊要

...在很大程度上,Linux提供了一種很好的體驗,不管您決定如何執行它。不管它是一個拱形系統,還是一個基本的作業系統,這其實並不重要。所以自豪地使用任何Linux作業系統。 ...

  • 發佈於 2021-03-15 05:08
  • 閲讀 ( 47 )

為什麼我們從來沒有“linux桌面年”

...都使用GRUB引導載入程式,預設情況下,它會詢問您希望如何引導作業系統,並給您10秒鐘的時間來做出決定。 ...

  • 發佈於 2021-03-17 08:13
  • 閲讀 ( 57 )

11款最適合程式設計師的linux發行版

...業系統安裝的每個元素都由您自己決定——包括為發行版編譯原始碼。 ...

  • 發佈於 2021-03-18 11:41
  • 閲讀 ( 77 )

10種檢查執行哪個linux版本的方法

... 如何檢查linux發行版和核心版本 ...

  • 發佈於 2021-03-19 19:21
  • 閲讀 ( 52 )

如何從linux命令列檢視二進位制檔案

...。檔案裡有一大堆馬廄,可以幫你分析。我們將向您展示如何使用這些工具。 識別檔案型別 檔案通常具有一些特性,允許軟體包識別它是哪種型別的檔案,以及其中的資料表示什麼。嘗試在MP3音樂播放器中開啟PNG檔案是沒有...

  • 發佈於 2021-04-02 04:41
  • 閲讀 ( 49 )
figoim486
figoim486

0 篇文章

作家榜

  1. admin 0 文章
  2. 孫小欽 0 文章
  3. JVhby0 0 文章
  4. fvpvzrr 0 文章
  5. 0sus8kksc 0 文章
  6. zsfn1903 0 文章
  7. w91395898 0 文章
  8. SuperQueen123 0 文章

相關推薦