linux6.9升級內核
?
1、什麽叫內核
linux操作系統是一個用來和硬件打交道並為用戶程序提供一個有限服務集的低級支撐軟件。
一個計算機系統是一個硬件和軟件的共生體,它們互相依賴,不可分割。
計算機的硬件,含有外圍設備、處理器、內存、硬盤和其他的電子設備組成計算機的發動機。
但是沒有軟件來操作和控制它,自身是不能工作的。
完成這個控制工作的軟件就稱為操作系統,在Linux的術語中被稱為“內核”,也可以稱為“核心”。
註:此篇沒有使用先下載內核然後編譯的方法,這樣會需要安裝很多必備的環境和工具,比較麻煩,但是也有助於我們了解內核的編譯
?
2、內核版本號區分
Linux內核使用三種不同的版本編號方式。 . 第一種方式用於1.0版本之前(包括1.0)。 第一個版本是0.01,緊接著是0.02、0.03、0.10、0.11、0.12、0.95、0.96、0.97、0.98、0.99和之後的1.0。 . 第二種方式用於1.0之後到2.6,數字由三部分“A.B.C”,A代表主版本號,B代表次主版本號,C代表較小的末版本號。 只有在內核發生很大變化時(歷史上只發生過兩次,1994年的1.0,1996年的2.0),A才變化。 可以通過數字B來判斷Linux是否穩定,偶數的B代表穩定版,奇數的B代表開發版。C代表一些bug修復,安全更新,新特性和驅動的次數。 以版本2.4.0為例,2代表主版本號,4代表次版本號,0代表改動較小的末版本號。 在版本號中,序號的第二位為偶數的版本表明這是一個可以使用的穩定版本,如2.2.5; 而序號的第二位為奇數的版本一般有一些新的東西加入,是個不一定很穩定的測試版本,如2.3.1。 這樣穩定版本來源於上一個測試版升級版本號,而一個穩定版本發展到完全成熟後就不再發展。 . 第三種方式從2004年2.6.0版本開始,使用一種“time-based”的方式。 3.0版本之前,是一種“A.B.C.D”的格式。 七年裏,前兩個數字A.B即“2.6”保持不變,C隨著新版本的發布而增加,D代表一些bug修復,安全更新,添加新特性和驅動的次數。 3.0版本之後是“A.B.C”格式,B隨著新版本的發布而增加,C代表一些bug修復,安全更新,新特性和驅動的次數。 第三種方式中不使用偶數代表穩定版,奇數代表開發版這樣的命名方式。 舉個例子:3.7.0代表的不是開發版,而是穩定版!
?
3、什麽時候需要升級內核?
其實一般情況下內核幾乎是不升級的,絕大多數升級內核也是為了搭建服務的兼容性等問題而升級的,比如在部署Docker時內核要在3.10以上否則很卡不說還會有各種問題。
二、升級內核
1、升級之前查看內核
這是我當前系統(centos6.9)的內核
?
*2、這裏有ELRepo項目參考
導入public key: rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org 有關ELRepo項目使用的GPG密鑰的詳細信息,請參閱https://www.elrepo.org/tiki/key 如果您的系統啟用了安全啟動,請參閱SecureBootKey頁面以獲取更多信息。
3、安裝ELRepo(6和7不同)
為RHEL-7,SL-7或CentOS-7安裝ELRepo:
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm (external link)
1
為RHEL-6,SL-6或CentOS-6安裝ELRepo:
rpm -Uvh http://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm
1
4、升級Kernel
這裏需要註意的是,在 ELRepo 中有兩個內核選項,一個是 kernel-lt(長期支持版本),一個是 kernel-ml(主線最新版本),采用長期支持版本(kernel-lt),更穩定一些 # kernel-lt yum --enablerepo=elrepo-kernel install kernel-lt -y # kernel-ml yum --enablerepo=elrepo-kernel install kernel-ml -y
5、修改grub.conf文件根據安裝好以後的內核位置,修改 default 的值,一般是修改為0,因為 default 從 0 開始,一般新安裝的內核在第一個位置,所以設置default=0
PS:這裏就不得不稍微提下linux的啟動流程了,在第三目錄
6、升級結束
改完grub.conf文件後要重啟reboot、shutdown -r now都行,執行uname -r 查看
?
三、linux開機啟動流程
啟動第一步--加載BIOS
當你打開計算機電源,計算機會首先加載BIOS信息,BIOS信息是如此的重要,以至於計算機必須在最開始就找到它。這是因為BIOS中包含了CPU的相關信息、設備啟動順序信息、硬盤信息、內存信息、時鐘信息、PnP特性等等。在此之後,計算機心裏就有譜了,知道應該去讀取哪個硬件設備了。
?啟動第二步--讀取MBR
眾所周知,硬盤上第0磁道第一個扇區被稱為MBR,也就是Master Boot Record,即主引導記錄,它的大小是512字節,別看地方不大,可裏面卻存放了預啟動信息、分區表信息。
系統找到BIOS所指定的硬盤的MBR後,就會將其復制到0×7c00地址所在的物理內存中。其實被復制到物理內存的內容就是Boot Loader,而具體到你的電腦,那就是lilo或者grub了。
?啟動第三步--Boot Loader
Boot Loader 就是在操作系統內核運行之前運行的一段小程序。通過這段小程序,我們可以初始化硬件設備、建立內存空間的映射圖,從而將系統的軟硬件環境帶到一個合適的狀態,以便為最終調用操作系統內核做好一切準備。
Boot Loader有若幹種,其中Grub、Lilo和spfdisk是常見的Loader。
我們以Grub為例來講解吧,畢竟用lilo和spfdisk的人並不多。
系統讀取內存中的grub配置信息(一般為menu.lst或grub.lst),並依照此配置信息來啟動不同的操作系統。
?啟動第四步--加載內核
根據grub設定的內核映像所在路徑,系統讀取內存映像,並進行解壓縮操作。此時,屏幕一般會輸出“Uncompressing Linux”的提示。當解壓縮內核完成後,屏幕輸出“OK, booting the kernel”。
系統將解壓後的內核放置在內存之中,並調用start_kernel()函數來啟動一系列的初始化函數並初始化各種設備,完成Linux核心環境的建立。至此,Linux內核已經建立起來了,基於Linux的程序應該可以正常運行了。
?啟動第五步--用戶層init依據inittab文件來設定運行等級
內核被加載後,第一個運行的程序便是/sbin/init,該文件會讀取/etc/inittab文件,並依據此文件來進行初始化工作。
其實/etc/inittab文件最主要的作用就是設定Linux的運行等級,其設定形式是“:id:5:initdefault:”,這就表明Linux需要運行在等級5上。Linux的運行等級設定如下:
0:關機
1:單用戶模式
2:無網絡支持的多用戶模式
3:有網絡支持的多用戶模式
4:保留,未使用
5:有網絡支持有X-Window支持的多用戶模式
6:重新引導系統,即重啟
關於/etc/inittab文件的學問,其實還有很多
?啟動第六步--init進程執行rc.sysinit
在設定了運行等級後,Linux系統執行的第一個用戶層文件就是/etc/rc.d/rc.sysinit腳本程序,它做的工作非常多,包括設定PATH、設定網絡配置(/etc/sysconfig/network)、啟動swap分區、設定/proc等等。如果你有興趣,可以到/etc/rc.d中查看一下rc.sysinit文件,裏面的腳本夠你看幾天的
?啟動第七步--啟動內核模塊
具體是依據/etc/modules.conf文件或/etc/modules.d目錄下的文件來裝載內核模塊。
?啟動第八步--執行不同運行級別的腳本程序
根據運行級別的不同,系統會運行rc0.d到rc6.d中的相應的腳本程序,來完成相應的初始化工作和啟動相應的服務。
?啟動第九步--執行/etc/rc.d/rc.local
你如果打開了此文件,裏面有一句話,讀過之後,你就會對此命令的作用一目了然:
# This script will be executed after all the other init scripts.
# You can put your own initialization stuff in here if you don’t
# want to do the full Sys V style init stuff.
rc.local就是在一切初始化工作後,Linux留給用戶進行個性化的地方。你可以把你想設置和啟動的東西放到這裏。
?啟動第十步--執行/bin/login程序,進入登錄狀態
此時,系統已經進入到了等待用戶輸入username和password的時候了,你已經可以用自己的帳號登入系統了。:)
?漫長的啟動過程結束了,一切都清靜了…
其實在這背後,還有著更加復雜的底層函數調用,等待著你去研究…本文就算拋磚引玉了:)
這個啟動流程部分參考了如下文章:
http://blog.chinaunix.net/uid-26495963-id-3066282.html
linux6.9升級內核