自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

在21世紀(jì)該怎樣編譯Linux內(nèi)核

系統(tǒng) Linux
在計(jì)算機(jī)世界里,內(nèi)核是處理硬件與一般系統(tǒng)之間通信的低階軟件。除過(guò)一些燒錄進(jìn)計(jì)算機(jī)主板的初始固件,當(dāng)你啟動(dòng)計(jì)算機(jī)時(shí),內(nèi)核讓系統(tǒng)意識(shí)到它有一個(gè)硬盤(pán)驅(qū)動(dòng)器、屏幕、鍵盤(pán)以及網(wǎng)卡。

[[278338]]

 也許你并不需要編譯 Linux 內(nèi)核,但你能通過(guò)這篇教程快速上手。

在計(jì)算機(jī)世界里,內(nèi)核kernel是處理硬件與一般系統(tǒng)之間通信的低階軟件low-level software。除過(guò)一些燒錄進(jìn)計(jì)算機(jī)主板的初始固件,當(dāng)你啟動(dòng)計(jì)算機(jī)時(shí),內(nèi)核讓系統(tǒng)意識(shí)到它有一個(gè)硬盤(pán)驅(qū)動(dòng)器、屏幕、鍵盤(pán)以及網(wǎng)卡。分配給每個(gè)部件相等時(shí)間(或多或少)使得圖像、音頻、文件系統(tǒng)和網(wǎng)絡(luò)可以流暢甚至并行地運(yùn)行。

然而,對(duì)于硬件的需求是源源不斷的,隨著發(fā)布的硬件越多,內(nèi)核就必須納入更多代碼來(lái)保證那些硬件正常工作。得到具體的數(shù)字很困難,但是 Linux 內(nèi)核無(wú)疑是硬件兼容性方面的頂級(jí)內(nèi)核之一。Linux 操作著無(wú)數(shù)的計(jì)算機(jī)和移動(dòng)電話(huà)、工業(yè)用途和愛(ài)好者使用的板級(jí)嵌入式系統(tǒng)(SoC)、RAID 卡、縫紉機(jī)等等。

回到 20 世紀(jì)(甚至是 21 世紀(jì)初期),對(duì)于 Linux 用戶(hù)來(lái)說(shuō),在剛買(mǎi)到新的硬件后就需要下載最新的內(nèi)核代碼并編譯安裝才能使用這是不可理喻的。而現(xiàn)在你也很難見(jiàn)到 Linux 用戶(hù)為了好玩而編譯內(nèi)核或通過(guò)高度專(zhuān)業(yè)化定制的硬件的方式賺錢(qián)?,F(xiàn)在,通常已經(jīng)不需要再編譯 Linux 內(nèi)核了。

這里列出了一些原因以及快速編譯內(nèi)核的教程。

更新當(dāng)前的內(nèi)核

無(wú)論你買(mǎi)了配備新顯卡或 Wifi 芯片集的新品牌電腦還是給家里配備一個(gè)新的打印機(jī),你的操作系統(tǒng)(稱(chēng)為 GNU+Linux 或 Linux,它也是該內(nèi)核的名字)需要一個(gè)驅(qū)動(dòng)程序來(lái)打開(kāi)新部件(顯卡、芯片集、打印機(jī)和其他任何東西)的信道。有時(shí)候當(dāng)你插入某些新的設(shè)備時(shí)而你的電腦表示發(fā)現(xiàn)了它,這具有一定的欺騙性。別被騙到了,有時(shí)候那就夠了,但更多的情況是你的操作系統(tǒng)僅僅是使用了通用的協(xié)議檢測(cè)到安裝了新的設(shè)備。

例如,你的計(jì)算機(jī)也許能夠鑒別出新的網(wǎng)絡(luò)打印機(jī),但有時(shí)候那僅僅是因?yàn)榇蛴C(jī)的網(wǎng)卡被設(shè)計(jì)成為了獲得 DHCP 地址而在網(wǎng)絡(luò)上標(biāo)識(shí)自己。它并不意味著你的計(jì)算機(jī)知道如何發(fā)送文檔給打印機(jī)進(jìn)行打印。事實(shí)上,你可以認(rèn)為計(jì)算機(jī)甚至不“知道”那臺(tái)設(shè)備是一個(gè)打印機(jī)。它也許僅僅是顯示網(wǎng)絡(luò)有個(gè)設(shè)備在一個(gè)特定的地址上,并且該設(shè)備以一系列字符 “p-r-i-n-t-e-r” 標(biāo)識(shí)自己而已。人類(lèi)語(yǔ)言的便利性對(duì)于計(jì)算機(jī)毫無(wú)意義。計(jì)算機(jī)需要的是一個(gè)驅(qū)動(dòng)程序。

內(nèi)核開(kāi)發(fā)者、硬件制造商、技術(shù)支持和愛(ài)好者都知道新的硬件會(huì)不斷地發(fā)布。它們大多數(shù)都會(huì)貢獻(xiàn)驅(qū)動(dòng)程序,直接提交給內(nèi)核開(kāi)發(fā)團(tuán)隊(duì)以包含在 Linux 中。例如,英偉達(dá)顯卡驅(qū)動(dòng)程序通常都會(huì)寫(xiě)入 Nouveau 內(nèi)核模塊中,并且因?yàn)橛ミ_(dá)顯卡很常用,它的代碼都包含在任一個(gè)日常使用的發(fā)行版內(nèi)核中(例如當(dāng)下載 FedoraUbuntu 得到的內(nèi)核)。英偉達(dá)也有不常用的地方,例如嵌入式系統(tǒng)中 Nouveau 模塊通常被移除。對(duì)其他設(shè)備來(lái)說(shuō)也有類(lèi)似的模塊:打印機(jī)得益于 FoomaticCUPS,無(wú)線(xiàn)網(wǎng)卡有 b43、ath9k、wl 模塊等等。

發(fā)行版往往會(huì)在它們 Linux 內(nèi)核的構(gòu)建中包含盡可能多合理的驅(qū)動(dòng)程序,因?yàn)樗麄兿胱屇阍诮尤胄略O(shè)備時(shí)不用安裝驅(qū)動(dòng)程序能夠立即使用。對(duì)于大多數(shù)情況來(lái)說(shuō)就是這樣的,尤其是現(xiàn)在很多設(shè)備廠商都在資助自己售賣(mài)硬件的 Linux 驅(qū)動(dòng)程序開(kāi)發(fā),并且直接將這些驅(qū)動(dòng)程序提交給內(nèi)核團(tuán)隊(duì)以用在通常的發(fā)行版上。

有時(shí)候,或許你正在運(yùn)行六個(gè)月之前安裝的內(nèi)核,并配備了上周剛剛上市令人興奮的新設(shè)備。在這種情況下,你的內(nèi)核也許沒(méi)有那款設(shè)備的驅(qū)動(dòng)程序。好消息是經(jīng)常會(huì)出現(xiàn)那款設(shè)備的驅(qū)動(dòng)程序已經(jīng)存在于最近版本的內(nèi)核中,意味著你只要更新運(yùn)行的內(nèi)核就可以了。

通常,這些都是通過(guò)安裝包管理軟件完成的。例如在 RHEL、CentOS 和 Fedora 上:

  1. $ sudo dnf update kernel

在 Debian 和 Ubuntu 上,首先獲取你當(dāng)前內(nèi)核的版本:

  1. $ uname -r
  2. 4.4.186

搜索新的版本:

  1. $ sudo apt update
  2. $ sudo apt search linux-image

安裝找到的最新版本。在這個(gè)例子中,最新的版本是 5.2.4:

  1. $ sudo apt install linux-image-5.2.4

內(nèi)核更新后,你必須 reboot (除非你使用 kpatch 或 kgraft)。這時(shí),如果你需要的設(shè)備驅(qū)動(dòng)程序包含在最新的內(nèi)核中,你的硬件就會(huì)正常工作。

安裝內(nèi)核模塊

有時(shí)候一個(gè)發(fā)行版沒(méi)有預(yù)計(jì)到用戶(hù)會(huì)使用某個(gè)設(shè)備(或者該設(shè)備的驅(qū)動(dòng)程序至少不足以包含在 Linux 內(nèi)核中)。Linux 對(duì)于驅(qū)動(dòng)程序采用模塊化方式,因此盡管驅(qū)動(dòng)程序沒(méi)有編譯進(jìn)內(nèi)核,但發(fā)行版可以推送單獨(dú)的驅(qū)動(dòng)程序包讓內(nèi)核去加載。盡管有些復(fù)雜但是非常有用,尤其是當(dāng)驅(qū)動(dòng)程序沒(méi)有包含進(jìn)內(nèi)核中而是在引導(dǎo)過(guò)程中加載,或是內(nèi)核中的驅(qū)動(dòng)程序相比模塊化的驅(qū)動(dòng)程序過(guò)期時(shí)。第一個(gè)問(wèn)題可以用 “initrd” 解決(初始化 RAM 磁盤(pán)),這一點(diǎn)超出了本文的討論范圍,第二點(diǎn)通過(guò) “kmod” 系統(tǒng)解決。

kmod 系統(tǒng)保證了當(dāng)內(nèi)核更新后,所有與之安裝的模塊化驅(qū)動(dòng)程序也得到更新。如果你手動(dòng)安裝一個(gè)驅(qū)動(dòng)程序,你就體驗(yàn)不到 kmod 提供的自動(dòng)化,因此只要能用 kmod 安裝包,就應(yīng)該選擇它。例如,盡管英偉達(dá)驅(qū)動(dòng)程序以 Nouveau 模塊構(gòu)建在內(nèi)核中,但官方的驅(qū)動(dòng)程序僅由英偉達(dá)發(fā)布。你可以去網(wǎng)站上手動(dòng)安裝英偉達(dá)旗下的驅(qū)動(dòng)程序,下載 “.run” 文件,并運(yùn)行提供的 shell 腳本,但在安裝了新的內(nèi)核之后你必須重復(fù)相同的過(guò)程,因?yàn)闆](méi)有任何東西告訴包管理軟件你手動(dòng)安裝了一個(gè)內(nèi)核驅(qū)動(dòng)程序。英偉達(dá)驅(qū)動(dòng)著你的顯卡,手動(dòng)更新英偉達(dá)驅(qū)動(dòng)程序通常意味著你需要通過(guò)終端來(lái)執(zhí)行更新,因?yàn)闆](méi)有顯卡驅(qū)動(dòng)程序?qū)o(wú)法顯示。

然而,如果你通過(guò) kmod 包安裝英偉達(dá)驅(qū)動(dòng)程序,更新你的內(nèi)核也會(huì)更新你的英偉達(dá)驅(qū)動(dòng)程序。在 Fedora 和相關(guān)的發(fā)行版中:

  1. $ sudo dnf install kmod-nvidia

在 Debian 和相關(guān)發(fā)行版上:

  1. $ sudo apt update
  2. $ sudo apt install nvidia-kernel-common nvidia-kernel-dkms nvidia-glx nvidia-xconfig nvidia-settings nvidia-vdpau-driver vdpau-va-driver

這僅僅是一個(gè)例子,但是如果你真的要安裝英偉達(dá)驅(qū)動(dòng)程序,你也必須屏蔽掉 Nouveau 驅(qū)動(dòng)程序。參考你使用發(fā)行版的文檔獲取最佳的步驟吧。

下載并安裝驅(qū)動(dòng)程序

不是所有的東西都包含在內(nèi)核中,也不是所有的東西都可以作為內(nèi)核模塊使用。在某些情況下,你需要下載一個(gè)由供應(yīng)商編寫(xiě)并綁定好的特殊驅(qū)動(dòng)程序,還有一些情況,你有驅(qū)動(dòng)程序,但是沒(méi)有配置驅(qū)動(dòng)程序的前端界面。

有兩個(gè)常見(jiàn)的例子是 HP 打印機(jī)和 Wacom 數(shù)位板。如果你有一臺(tái) HP 打印機(jī),你可能有能夠和打印機(jī)通信的通用的驅(qū)動(dòng)程序,甚至能夠打印出東西。但是通用的驅(qū)動(dòng)程序卻不能為特定型號(hào)的打印機(jī)提供定制化的選項(xiàng),例如雙面打印、校對(duì)、紙盒選擇等等。HPLIP(HP Linux 成像和打印系統(tǒng))提供了選項(xiàng)來(lái)進(jìn)行任務(wù)管理、調(diào)整打印設(shè)置、選擇可用的紙盒等等。

HPLIP 通常包含在包管理軟件中;只要搜索“hplip”就行了。

同樣的,電子藝術(shù)家主要使用的數(shù)位板 Wacom 的驅(qū)動(dòng)程序通常也包含在內(nèi)核中,但是例如調(diào)整壓感和按鍵功能等設(shè)置只能通過(guò)默認(rèn)包含在 GNOME 的圖形控制面板訪(fǎng)問(wèn)。但也可以作為 KDE 上額外的程序包“kde-config-tablet”來(lái)訪(fǎng)問(wèn)。

這里也有幾個(gè)類(lèi)似的個(gè)別例子,例如內(nèi)核中沒(méi)有驅(qū)動(dòng)程序,但是以 RPM 或 DEB 文件提供了可供下載并且通過(guò)包管理軟件安裝的 kmod 版本的驅(qū)動(dòng)程序。

打上補(bǔ)丁并編譯你的內(nèi)核

即使在 21 世紀(jì)的未來(lái)主義烏托邦里,仍有廠商不夠了解開(kāi)源,沒(méi)有提供可安裝的驅(qū)動(dòng)程序。有時(shí)候,一些公司為驅(qū)動(dòng)程序提供開(kāi)源代碼,而需要你下載代碼、修補(bǔ)內(nèi)核、編譯并手動(dòng)安裝。

這種發(fā)布方式和在 kmod 系統(tǒng)之外安裝打包的驅(qū)動(dòng)程序擁有同樣的缺點(diǎn):對(duì)內(nèi)核的更新會(huì)破壞驅(qū)動(dòng)程序,因?yàn)槊看胃鼡Q新的內(nèi)核時(shí)都必須手動(dòng)將其重新集成到內(nèi)核中。

令人高興的是,這種事情變得少見(jiàn)了,因?yàn)?Linux 內(nèi)核團(tuán)隊(duì)在呼吁公司們與他們交流方面做得很好,并且公司們最終接受了開(kāi)源不會(huì)很快消失的事實(shí)。但仍有新奇的或高度專(zhuān)業(yè)的設(shè)備僅提供了內(nèi)核補(bǔ)丁。

官方上,對(duì)于你如何編譯內(nèi)核以使包管理器參與到升級(jí)系統(tǒng)如此重要的部分中,發(fā)行版有特定的習(xí)慣。這里有太多的包管理器,所以無(wú)法一一涵蓋。舉一個(gè)例子,當(dāng)你使用 Fedora 上的工具例如 rpmdevbuild-essential,Debian 上的 devscripts。

首先,像通常那樣,找到你正在運(yùn)行內(nèi)核的版本:

  1. $ uname -r

在大多數(shù)情況下,如果你還沒(méi)有升級(jí)過(guò)內(nèi)核那么可以試試升級(jí)一下內(nèi)核。搞定之后,也許你的問(wèn)題就會(huì)在最新發(fā)布的內(nèi)核中解決。如果你嘗試后發(fā)現(xiàn)不起作用,那么你應(yīng)該下載正在運(yùn)行內(nèi)核的源碼。大多數(shù)發(fā)行版提供了特定的命令來(lái)完成這件事,但是手動(dòng)操作的話(huà),可以在 kernel.org 上找到它的源代碼。

你必須下載內(nèi)核所需的任何補(bǔ)丁。有時(shí)候,這些補(bǔ)丁對(duì)應(yīng)具體的內(nèi)核版本,因此請(qǐng)謹(jǐn)慎選擇。

通常,或至少在人們習(xí)慣于編譯內(nèi)核的那時(shí),都是拿到源代碼并對(duì) /usr/src/linux 打上補(bǔ)丁。

解壓內(nèi)核源碼并打上需要的補(bǔ)?。?/p>

  1. $ cd /usr/src/linux
  2. $ bzip2 --decompress linux-5.2.4.tar.bz2
  3. $ cd  linux-5.2.4
  4. $ bzip2 -d ../patch*bz2

補(bǔ)丁文件也許包含如何使用的教程,但通常它們都設(shè)計(jì)成在內(nèi)核源碼樹(shù)的頂層可用來(lái)執(zhí)行。

  1. $ patch -p1 < patch*example.patch

當(dāng)內(nèi)核代碼打上補(bǔ)丁后,你可以繼續(xù)使用舊的配置來(lái)對(duì)打了補(bǔ)丁的內(nèi)核進(jìn)行配置。

  1. $ make oldconfig

make oldconfig 命令有兩個(gè)作用:它繼承了當(dāng)前的內(nèi)核配置,并且允許你配置補(bǔ)丁帶來(lái)的新的選項(xiàng)。

你或許需要運(yùn)行 make menuconfig 命令,它啟動(dòng)了一個(gè)基于 ncurses 的菜單界面,列出了新的內(nèi)核所有可能的選項(xiàng)。整個(gè)菜單可能看不過(guò)來(lái),但是它是以舊的內(nèi)核配置為基礎(chǔ)的,你可以遍歷菜單并且禁用掉你沒(méi)有或不需要的硬件模塊。另外,如果你知道自己有一些硬件沒(méi)有包含在當(dāng)前的配置中,你可以選擇構(gòu)建它,當(dāng)作模塊或者直接嵌入內(nèi)核中。理論上,這些并不是必要的,因?yàn)槟憧梢圆孪?,?dāng)前的內(nèi)核運(yùn)行良好只是缺少了補(bǔ)丁,當(dāng)使用補(bǔ)丁的時(shí)候可能已經(jīng)激活了所有設(shè)備所必要的選項(xiàng)。

下一步,編譯內(nèi)核和它的模塊:

  1. $ make bzImage
  2. $ make modules

這會(huì)產(chǎn)生一個(gè)叫作 vmlinuz 的文件,它是你的可引導(dǎo)內(nèi)核的壓縮版本。保存舊的版本并在 /boot 文件夾下替換為新的。

  1. $ sudo mv /boot/vmlinuz /boot/vmlinuz.nopatch
  2. $ sudo cat arch/x86_64/boot/bzImage > /boot/vmlinuz
  3. $ sudo mv /boot/System.map /boot/System.map.stock
  4. $ sudo cp System.map /boot/System.map

到目前為止,你已經(jīng)打上了補(bǔ)丁并且編譯了內(nèi)核和它的模塊,你安裝了內(nèi)核,但你并沒(méi)有安裝任何模塊。那就是最后的步驟:

  1. $ sudo make modules_install

新的內(nèi)核已經(jīng)就位,并且它的模塊也已經(jīng)安裝。

最后一步是更新你的引導(dǎo)程序,為了讓你的計(jì)算機(jī)在加載 Linux 內(nèi)核之前知道它的位置。GRUB 引導(dǎo)程序使這一過(guò)程變得相當(dāng)簡(jiǎn)單:

  1. $ sudo grub2-mkconfig

現(xiàn)實(shí)生活中的編譯

當(dāng)然,現(xiàn)在沒(méi)有人手動(dòng)執(zhí)行這些命令。相反的,參考你的發(fā)行版,尋找發(fā)行版維護(hù)人員使用的開(kāi)發(fā)者工具集修改內(nèi)核的說(shuō)明。這些工具集可能會(huì)創(chuàng)建一個(gè)集成所有補(bǔ)丁的可安裝軟件包,告訴你的包管理器來(lái)升級(jí)并更新你的引導(dǎo)程序。

內(nèi)核

操作系統(tǒng)和內(nèi)核都是玄學(xué),但要理解構(gòu)成它們的組件并不難。下一次你看到某個(gè)技術(shù)無(wú)法應(yīng)用在 Linux 上時(shí),深呼吸,調(diào)查可用的驅(qū)動(dòng)程序,尋找一條捷徑。Linux 比以前簡(jiǎn)單多了——包括內(nèi)核。

 

責(zé)任編輯:龐桂玉 來(lái)源: Linux中國(guó)
相關(guān)推薦

2013-06-03 10:18:59

WindowsLinux微軟Office

2017-09-11 10:37:56

編程語(yǔ)言名單

2025-02-14 11:09:47

2024-04-22 11:40:50

2013-06-03 09:36:24

21世紀(jì)代碼寫(xiě)代碼

2011-04-20 13:14:33

BlackBerry黑莓RIM

2022-11-14 12:38:29

2013-05-21 16:20:40

2020-03-23 13:43:00

數(shù)據(jù)科學(xué)家大數(shù)據(jù)數(shù)據(jù)

2012-10-09 13:41:09

數(shù)據(jù)科學(xué)家職業(yè)

2020-04-10 10:11:15

數(shù)據(jù)泄露漏洞信息安全

2020-12-22 09:42:47

生物識(shí)別網(wǎng)絡(luò)安全

2020-01-08 13:40:01

戴爾

2011-02-17 14:27:16

WindowsMac

2013-11-20 11:35:44

SAP中國(guó)商業(yè)同略會(huì)

2021-11-03 21:00:19

智能建筑物聯(lián)網(wǎng)

2018-12-10 07:22:27

物聯(lián)網(wǎng)預(yù)測(cè)分析安全威脅

2022-06-07 16:40:09

區(qū)塊鏈數(shù)字貨幣分布式賬本

2019-11-11 14:15:54

大數(shù)據(jù)算法營(yíng)銷(xiāo)

2011-11-23 09:33:46

程序員
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)