不少時候咱們在使用Ubuntu的時候,想修改一下內核配置,而後編譯,安裝到Ubuntu中。這也是進行Ubuntu內核開發的前提。linux
有不少方法能夠得到Ubuntu內核代碼,可是下面兩種很是方便。git
uname -r顯示當前內核的版本號,apt-get source則用來獲取package的source code:ubuntu
apt-get source linux-image-$(uname -r)
另外一種方法是使用git,每一個發行版的內核庫都會在kernel.ubuntu.com找到。若是想下載,只須要git clone一個庫到本地便可:ide
git clone git://kernel.ubuntu.com/ubuntu/ubuntu-<release codename>.git
其中release codename經過lsb_release -a獲取,好比Ubuntu 16.04的Codename爲xenial。ui
Distributor ID: Ubuntu
Description: Ubuntu 16.04.3 LTS
Release: 16.04
Codename: xenialspa
PS:從實際使用來看,apt-get source的方式更方便,也不容易出錯,獲取的內核代碼和當前使用的是同一個版本。code
若是須要編譯內核,還須要安裝一個package。可使用以下命令:orm
sudo apt-get build-dep linux-image-$(uname -r)
整個編譯過程使用的配置文件分佈在若干子配置文件中,使用以下命令能夠將這些配置文件集中,調用menuconfig進行修改。blog
使用chmod解決部分腳本可執行權限問題,ip
chmod a+x debian/rules chmod a+x debian/scripts/* chmod a+x debian/scripts/misc/* fakeroot debian/rules clean fakeroot debian/rules editconfigs # you need to go through each (Y, Exit, Y, Exit..) or get a complaint about config later
進入內核代碼的根目錄,執行以下命令:
fakeroot debian/rules clean # quicker build: fakeroot debian/rules binary-headers binary-generic binary-perarch # if you need linux-tools or lowlatency kernel, run instead: fakeroot debian/rules binary
若是編譯成功,在根目錄下會生成若干.deb包。
以下是4.4.0-57-generic內核在AMD64系統上生成的.deb包:
使用dpkg -i安裝若干.deb文件到系統中,而後重啓:
sudo dpkg -i linux*4.4.0-57*.deb sudo reboot
有時進行Debug須要符號表,這就須要在編譯的時候進行配置。首先須要安裝pkg-config-dgbsym,而後在執行編譯binary-*的時候增長’skildbg=false’:
sudo apt-get install pkg-create-dbgsym fakeroot debian/rules clean fakeroot debian/rules binary-headers binary-generic binary-perarch skipdbg=false
若是部份內核不須要,能夠選擇刪除。須要先查看當前使用的內核版本:
uname -a能夠獲取當前內核版本號。
在Ubuntu內核鏡像包含了如下的包。
首先檢查系統中安裝的內核鏡像:
dpkg --list|grep linux-image
dpkg --list|grep linux-headers
輸出以下結果:
al@al:~/data/ubuntu-kernel$ dpkg --list|grep linux-image
ii linux-image-3.13.0-105-generic 3.13.0-105.152 amd64 Linux kernel image for version 3.13.0 on 64 bit x86 SMP
rc linux-image-3.13.0-32-generic 3.13.0-32.57 amd64 Linux kernel image for version 3.13.0 on 64 bit x86 SMP
ii linux-image-4.4.0-57-generic 4.4.0-57.78 amd64 Linux kernel image for version 4.4.0 on 64 bit x86 SMP
ii linux-image-extra-3.13.0-105-generic 3.13.0-105.152 amd64 Linux kernel extra modules for version 3.13.0 on 64 bit x86 SMP
rc linux-image-extra-3.13.0-32-generic 3.13.0-32.57 amd64 Linux kernel extra modules for version 3.13.0 on 64 bit x86 SMP
ii linux-image-extra-4.4.0-57-generic 4.4.0-57.78 amd64 Linux kernel extra modules for version 4.4.0 on 64 bit x86 SMP
ii linux-image-generic 4.4.0.57.60 amd64 Generic Linux kernel image
al@al:~/data/ubuntu-kernel$ dpkg --list|grep linux-headers
ii linux-headers-4.4.0-57 4.4.0-57.78 all Header files related to Linux kernel version 4.4.0
ii linux-headers-4.4.0-57-generic 4.4.0-57.78 amd64 Linux kernel headers for version 4.4.0 on 64 bit x86 SMP
ii linux-headers-generic 4.4.0.57.60 amd64 Generic Linux kernel headers
在列出的內核鏡像中,你能夠移除一個特定的版本(好比3.13.0-105和3.13.0-32)。
sudo apt-get purge linux-image-3.19.0-15
這就會將3.19.0-15相關的內核模塊刪除。經過下面dpkg --list再驗證以下:
dpkg --list|grep linux-headers
還能夠經過sudo update-grub2來更新grub列表。
BuildYourOwnKernel:https://wiki.ubuntu.com/Kernel/BuildYourOwnKernel
KernelGitGuide:https://wiki.ubuntu.com/Kernel/Dev/KernelGitGuide