給ubuntu換內核


本文為原創,轉載請注明:http://www.cnblogs.com/tolimit/

 

 

下載內核源碼

  有兩種方式,一種方式是直接從官網:https://www.kernel.org/直接下載,另一種方式是通過git進行下載。

  首先,在官網內核版本分為三種:

  • mainline:主線版本,最新的
  • stable:穩定版本
  • longterm:長期支持版本

  對於內核版本后面有個rc的,表示這個版本開始不會往里面添加新的功能和內容,只會在其基礎上解決bug(有些驅動除外)。

  如果你搞不懂這幾個版本區別,就下載一個stable版本准沒錯。

 

  現在我們着重說說如何通過git進行下載內核源碼:

  沒有安裝git的先安裝git,命令如下

sudo apt-get install git

  之后新建一個目錄用於存放獲取的linux內核源碼,進入到該目錄下,執行如下命令來獲取最新的linux內核版本

git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git

   這樣就可以直接把內核源碼下載到所在目錄下,很方便。

 

注:

  如果需要下載的不是當前最新版本的內核,也可以通過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中的編號)。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM