本文爲原創,轉載請註明:http://www.cnblogs.com/tolimit/linux
有兩種方式,一種方式是直接從官網:https://www.kernel.org/直接下載,另外一種方式是經過git進行下載。git
首先,在官網內核版本分爲三種:工具
對於內核版本後面有個rc的,表示這個版本開始不會往裏面添加新的功能和內容,只會在其基礎上解決bug(有些驅動除外)。ui
若是你搞不懂這幾個版本區別,就下載一個stable版本準沒錯。es5
如今咱們着重說說如何經過git進行下載內核源碼:spa
沒有安裝git的先安裝git,命令以下線程
sudo apt-get install git
以後新建一個目錄用於存放獲取的linux內核源碼,進入到該目錄下,執行以下命令來獲取最新的linux內核版本code
git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
這樣就能夠直接把內核源碼下載到所在目錄下,很方便。blog
注:get
若是須要下載的不是當前最新版本的內核,也能夠經過git進行下載其餘版本的內核源碼,不過在下載其餘版本的內核源碼的前提是已經經過以上git命令下載過內核源碼。
首先,當經過以上git命令下載好內核源碼後,應該會有個linux-stable目錄,先進入此目錄中,而後執行以下命令查看其餘內核源碼版本列表
git branch -a
而後經過如下命令切換到其餘內核源碼版本的分支
git checkout 版本名稱(在git branch中的列表中的名稱)
這樣就能夠切換到其餘版本的linux內核源碼了。切換後就直接是目標版本的源碼了,也就是說,當執行上面的命令時,git會把其餘版本中內容不一樣的文件替換到本地上,就不用再從新下載一次內核源碼了。
下載完成後,經過以下命令能夠將當前系統使用的內核配置文件複製到咱們下載的最新內核源碼目錄中,咱們要使用這個配置文件進行編譯內核
cp /boot/config-x.xx.xxxx-generic 下載的源碼目錄/.config
若是須要修改配置,可經過
make menuconfig
進行修改配置,不過對於menuconfig,好像還會須要其餘的庫,我印象是ncurses庫,若是須要則經過apt-get libncurses5-dev安裝這個庫便可。
注:
若是不想使用當前系統使用的配置文件,內核中也提供了不一樣平臺默認的配置文件,這些配置文件放在:
內核源碼目錄/arch/目標平臺類型/configs/
若是你編譯的是arm版本的內核,那目標平臺類型就是arm,若是編譯的是x86版本的內核,目標平臺類型就是x86。在這個目錄裏,那些默認的配置文件格式通常爲XXXXX_defconfig,找到對應的默認配置後,使用命令將其放到內核源碼目錄下並更名爲.config
cp XXXXX_defconfig 內核源碼目錄/.config
內核源碼目錄下的.config是內核編譯的基礎,其註明了哪些模塊須要編譯哪些模塊不須要編譯,又有哪些模塊須要編譯成模塊(以模塊進行加載,並不加入到內核鏡像中),編譯時就是按照裏面的列表進行編譯的。
先安裝必要的工具:
sudo apt-get install build-essential
在內核源碼目錄中依次執行如下命令:
make -jx(x是編譯時使用的線程數量,如-j2或-j3等。使用線程能加快編譯速度) make modules_install (把安裝modules到/lib/modules/目錄中) make bzImage (將內核編譯成bzImage類型的內核) make install (安裝內核)
整個過程會比較久,我大概編譯了2,3個小時(虛擬機只配了一個CPU。。。),在編譯過程當中有可能使用舊的配置文件會致使編譯失敗,這時可使用內核源碼中默認的配置文件試試。
make install幫咱們作了引導所須要作的工做,基本上make install後重啓就直接進入到最新的內核中了,固然,這部分工做咱們也能夠手動去作,接下來咱們說說如何去作引導這部分所須要的工做。
第一步,咱們要將編譯完成的bzImage複製到/boot/中,並改個名字,好比個人內核版本是4.2.0-rc1,我執行的命令就是
cp 內核源碼目錄/arch/x86/boot/bzImage /boot/vmlinuz-4.2.0-rc1
注意編譯好的bzImage保存的位置是在內核源碼目錄/arch/目標平臺類型/boot/中,我這裏的目標平臺類型是x86。
第二步,將內核源碼目錄下的System.map文件複製到/boot/中,一樣須要改個名字:
cp 內核源碼目錄/System.map /boot/System.map-4.2.0-rc1
第三步,生成新版本的initrd.img文件
cd /lib/modules/4.2.0-rc1/ update-initramfs -c -k 4.2.0-rc1
第四步,讓grub引導自動查找新內核
update-grub
最後重啓一下,選擇本身的新內核進入就能夠了,若是但願系統自動進入最新編譯的內核,則須要修改grub的配置文件,其配置文件是/boot/grub/grub.cfg,修改此文件中的set default="X"(X是最新內核對應在grub中的編號)。