1. 程式人生 > >Ubuntu 核心編譯

Ubuntu 核心編譯

實驗環境:Ubuntu12.04LTS  核心版本  3.5.0   更新核心版本3.9.0   

首先是準備條件:

①、有一臺裝有ubuntu 12.04的機器

②、先移步到http://www.kernel.org/下載linux穩定版核心(注:可以從科大映象下載,速度快 http://mirrors.ustc.edu.cn/linux-kernel/   )

③、擁有root許可權  

④、並將下載好的核心解壓到/usr/src下,使用命令如下:

        #tar jxvf   linux-3.3.4.tar.bz2

       這樣你就可以得到一個名叫linux-3.3.4

好,現在一切都準備好了,接下來就開始配置,編譯,安裝新核心吧!

1, 進入剛才的資料夾 /usr/src/linux-3.3.4,輸入命令:

     $ make mrproper

     該命令的功能在於清除當前目錄下殘留的.config和.o檔案,這些檔案一般是以前編譯時未清理而殘留的。而對於第一次編譯的程式碼來說,不存在這些殘留檔案,所以可以略過此步,但是如果該原始碼以前被編譯過,那麼強烈建議執行此命令,否則後面可能會出現未知的問題。

2, 配置編譯選項

     作為作業系統的核心,其內容和功能必然非常繁雜,包括處理器排程,記憶體管理,檔案系統管理,程序通訊以及裝置管理等等,而對於不同的硬體,其配置選項也不相同,所以在編譯原始碼之前必須設定編譯選項。其實我覺得這一步是升級核心整個過程中最有技術含量的,因為要根據自己的需要正確選擇yes or no需要對計算機方方面面的知識都有所瞭解。但是這裡的選項實在是太多了,大概有幾百項之多,我以前曾嘗試著一項一項的選,但是最後還是放棄了,因為有很多選項不是很明白。

     既然這樣,難道沒有什麼簡便的方法麼? 當然有!那就是make menuconfig 或者make xconfig。我使用的是make menuconfig,但是前提條件是要裝ncurses。

                        tar zxvf  ncurses<version>.tar.gz  #解壓縮並且釋放 檔案包

cd ncurses<version>        #進入解壓縮的目錄(注意版本)
./configure                        #按照你的系統環境製作安裝配置檔案
make                                 #編譯原始碼並且編譯NCURSES庫
su root                              #切換到root使用者環境
make install                     #安裝編譯好的NCURSES庫

     另外,在make menuconfig過程中也會有一些選項需要你來設定*, y, n 或者m,選擇*表示選項中的內容被直接編入核心中,選擇m表示選項中的內容不編入核心,而只是編成獨立的module,用到時才呼叫。

     ok, 在當前檔案路徑下,輸入命令:

    make menuconfig(或者用 make xconfig,我沒有啟用成功)

    根據選單提示,選擇編譯配置選項,並儲存配置檔案為.config(也可以直接複製現有的.config檔案,我是這樣做的!!!)(注:這是因為現在的核心設定針對了大多數的電腦配置,一般包含了基本上的配置,當然寫到這裡你也可以知道,很多配置對於我們一臺機子來說有些多餘的了,有了一定基礎之後具體可以參照核心板塊說明,自己設定。)

3,確定依賴性

    根據以往的經驗,這一步是必須的,但是這次編譯的時候,系統提醒我沒必須要執行這個命令:

    make dep

    如果用現有的.config檔案,這裡會有很多核心新增加的驅動和功能讓你確認是否編入核心中,這個你就自己看著輸入y/n/m/?吧!(注:因為我是沒有設定,所以沒有這三個選項)

4,清除編譯中間檔案

    輸入命令:make clean

注:接下來的 5,6 兩個步驟可以使用  make -j4   命令,4是你核心數的兩倍,比如我的機子是T2450 雙核,所以2*2=4,當然你也可以設定另外的常數,但不要超過100,經一些網友實驗得到,*2的效率會好點。如果你還是走5,6兩步的話,速度會慢點咯

5,生成新核心(這是我用的時間07:38-07:57,19分鐘。這裡時間的長短都取決於你機器的效能)

    就是把配置過程中,我們選中編入核心中的程式編譯連結生產linux核心,輸入命令:

    make bzImage

6,生成modules(這是我用的時間07:58-09:28)

    和上步差不多,就是把配置過程中,我們選中編成modules的程式編譯連結成modules,輸入命令:

    make modules

(注:經過5,6兩步之後,你可以檢視是否編譯成功 以下的是x86結構下的核心位置

  1. <span style="color:#FF0000;">[email protected]:/usr/src/linux-3.9# ls -l arch/x86/boot/bzImage   
  2. -rw-r--r-- 1 root root 5380928 Jun  8 01:11 arch/x86/boot/bzImage  
  3. </span>  


7,安裝modules

    就是把剛才編譯生產的modules拷到系統資料夾下,以供新核心呼叫。輸入命令:

    make modules_install

(注:經這一步之後,輸入如下命令,看是否成功

  1. <span style="color:#FF0000;">[email protected]:/usr/src/linux-3.9# ls -l /lib/modules/  
  2. total 8  
  3. drwxr-xr-x 4 root root 4096 Feb 14 06:09 3.5.0-23-generic      //這個是我原來的核心
  4. drwxr-xr-x 3 root root 4096 Jun  8 09:40 3.9.0     
  5. </span>  
 

    一切都自動做好了。

8,建立要載入ramdisk的映像檔案

(注:如果你的機子是2005年入手的,基本上都是scsi磁碟,也可以檢視自己機子的磁碟型別,切換到root許可權下,輸入命令 fdisk -l

  1. [email protected]:/usr/src/linux-3.9# fdisk -l  
  2. Disk /dev/sda: 156.3 GB, 156292685824 bytes  
  3. 255 heads, 63 sectors/track, 19001 cylinders, total 305259152 sectors  
  4. Units = sectors of 1 * 512 = 512 bytes  
  5. Sector size (logical/physical): 512 bytes / 512 bytes  
  6. I/O size (minimum/optimal): 512 bytes / 512 bytes  
  7. Disk identifier: 0x8c3283fe  
  8.    Device Boot      Start         End      Blocks   Id  System  
  9. /dev/sda1   *        2048      206847      102400    7  HPFS/NTFS/exFAT  
  10. /dev/sda2          206848    67690495    33741824    7  HPFS/NTFS/exFAT  
  11. /dev/sda3        67690496    92266495    12288000    7  HPFS/NTFS/exFAT  
  12. /dev/sda4        92268542   305258495   106494977    f  W95 Ext'd (LBA)  
  13. /dev/sda5        92268544   215148543    61440000    7  HPFS/NTFS/exFAT  
  14. /dev/sda6       215150592   265930751    25390080   83  Linux  
  15. /dev/sda7       265932800   297445375    15756288   83  Linux  
  16. /dev/sda8       297447424   305258495     3905536   82  Linux swap / Solaris  

dev/sda  都為scsi硬碟

且下面的步驟是針對所有機子的咯

下面的步驟缺少了一個步驟,即將.config 檔案拷貝到 /boot 檔案下,故首先要進行

  1. <span style="color:#FF0000;"><strong>[email protected]:/# cp /usr/src/linux-3.9/.config /boot/config-3.9.0</strong></span>  
其中 config-3.9.0 的命名規則為  config-(版本號)
如若沒有這一步的話,會導致報一個 grep  檔案不存在錯誤

)

   如果linux系統安裝在scsi磁碟上,這步是必須的,否則可以跳過。我的linux是裝在vmware上的,用的是虛擬的scsi磁碟,所以必須 要這一步。輸入命令:

   mkinitramfs -o /boot/initrd-linux3.3.4.img  3.3.4

   如果你的linux不是ubuntu,而是其他的發行版本,那麼使用的命令可能不是mkinitramfs,而是mkinitrd,但功能和用法類似。

9,按裝核心

   輸入命令:make install

   (注,這一步也會自動更新grup項)

   此時系統會把linux核心的映象檔案還有System.map考入到/boot下,然後會自動生成引導選單。

10, 配置grub載入程式

     (下面的這步我沒做哈,因為我還比較喜歡自己在開機的時候選擇核心版本)

       既然新的核心編譯並安裝好了,那麼我們要配置系統的載入程式用新核心正確引導,這一步我的是自動新增的,如果沒有自動新增進去就自動動手修改新增吧。物件是/boot/grub/grub.cfg,首先用chmod更改該檔案的只讀屬性。然後參照裡面的已有內容新增一個新啟動項,我的新啟動項是:


menuentry 'Ubuntu,Linux 3.3.4' --class ubuntu --class gnu-linux --class gnu --class os {

        recordfail

        gfxmode $linux_gfx_mode

        insmod gzio

        insmod part_msdos

        insmod ext2

        set root='(hd0,msdos1)'

        search --no-floppy --fs-uuid --set=root ee7c3a4d-5305-46b1-807e-fa9f39a5d13e

        linux        /boot/vmlinuz-3.3.4 root=UUID=ee7c3a4d-5305-46b1-807e-fa9f39a5d13e ro   quiet splash $vt_handoff

        initrd        /boot/initrd.img-3.3.4

}

menuentry 'Ubuntu,Linux 3.3.4 (恢復模式)' --class ubuntu --class gnu-linux --class gnu --class os {

        recordfail

        insmod gzio

        insmod part_msdos

        insmod ext2

        set root='(hd0,msdos1)'

        search --no-floppy --fs-uuid --set=root ee7c3a4d-5305-46b1-807e-fa9f39a5d13e

        echo        '載入 Linux 3.3.4 ...'

        linux        /boot/vmlinuz-3.3.4 root=UUID=ee7c3a4d-5305-46b1-807e-fa9f39a5d13e ro recovery nomodeset

        echo        '載入初始化記憶體盤...'

        initrd        /boot/initrd.img-3.3.4

}

submenu "Previous Linux versions" {

menuentry 'Ubuntu,Linux 3.2.0-24-generic-pae' --class ubuntu --class gnu-linux --class gnu --class os {

        recordfail

        gfxmode $linux_gfx_mode

        insmod gzio

        insmod part_msdos

        insmod ext2

        set root='(hd0,msdos1)'

        search --no-floppy --fs-uuid --set=root ee7c3a4d-5305-46b1-807e-fa9f39a5d13e

        linux        /boot/vmlinuz-3.2.0-24-generic-pae root=UUID=ee7c3a4d-5305-46b1-807e-fa9f39a5d13e ro   quiet splash $vt_handoff

        initrd        /boot/initrd.img-3.2.0-24-generic-pae

}

menuentry 'Ubuntu,Linux 3.2.0-24-generic-pae (恢復模式)' --class ubuntu --class gnu-linux --class gnu --class os {

        recordfail

        insmod gzio

        insmod part_msdos

        insmod ext2

        set root='(hd0,msdos1)'

        search --no-floppy --fs-uuid --set=root ee7c3a4d-5305-46b1-807e-fa9f39a5d13e

        echo        '載入 Linux 3.2.0-24-generic-pae ...'

        linux        /boot/vmlinuz-3.2.0-24-generic-pae root=UUID=ee7c3a4d-5305-46b1-807e-fa9f39a5d13e ro recovery nomodeset

        echo        '載入初始化記憶體盤...'

        initrd        /boot/initrd.img-3.2.0-24-generic-pae

}

    預設是從新核心映象啟動系統。

    萬事ok,敲下reboot,系統啟動後,從grub選單中選中新核心引導linux,怎麼樣,系統啟動的鼓聲響了吧!

    進入後用uname -a看看是否新核心。

11、刪除舊核心檔案


1,檢視一下當前核心版本:uname -a
2.檢視一下當前系統內的所有核心檔案:dpkg --get-selections|grep linux
3.刪除核心檔案:
sudo apt-get remove linux-image-3.2.0-24*sudo apt-get remove linux-headers-3.2.0-24*或(刪除當前版本之外的所有核心sudo apt-get purge ~ilinux-image-.*\(\!`uname -r`\)
4.另外一條命令:
sudo aptitude purge ~ilinux-image-*\(\!'uname -r'\)
這樣就成功刪除了,重啟一下看看是不是沒有那些沒用的核心啟動項了。

相關推薦

Ubuntu核心編譯教程-編譯Linux4.5.0核心

轉自http://www.linuxidc.com/Linux/2016-04/129955.htm 實驗環境:Ubnuntu 64位(推薦使用14.04)+Xshell Linux雲伺服器很好用的,用來編譯核心效能也不錯。本文介紹最基本的核心編譯方法,為了方便,所有操作

Ubuntu 核心編譯

實驗環境:Ubuntu12.04LTS  核心版本  3.5.0   更新核心版本3.9.0    首先是準備條件: ①、有一臺裝有ubuntu 12.04的機器 ②、先移步到http://www.kernel.org/下載linux穩定版核心(注:可以從科大映象下載

ubuntu核心編譯及RTAI的安裝

準備工作 apt-get install qt3-apps-dev build-essential kernel-package vim apt-get install libncurses5-dev  (meke menuconfig要呼叫的) Step1 下載原始碼並

用make-kpkg簡化Ubuntu系統的核心編譯過程

本文介紹的make-kpkg可以用於所有Debian系的發行版如Debian、Ubuntu、Linux Mint等。   傳統編譯方式 通常,如果我們需要編譯Linux核心,大概要經歷以下幾個步驟: 1、配置核心 最常用的配置核心的方法是“make menuconfig

Ubuntu下Xilinx Linux核心編譯問題,出現“缺少ncurses”libraries

對官方提供的核心原始碼包進行解壓縮,進入到核心目錄,使用make menuconfig後,發現提示以下錯誤: *** Unable to find the ncurses libraries or the *** required header files

Ubuntu 11 編譯 linux-2.6核心 出錯,給出部分編譯問題解決方暗,新問題求解決

# configuration written to .config # make[2]:正在離開目錄 `/home/gdsdj/src/linux-2.6.19' make EXTRAVERSION=dell1400   ARCH=i386 prepare make[2]

ubuntu 交叉編譯arm linux 核心

相關文章 安裝arm-linux-gcc 4.2.3 sudo tar  xvzf arm-linux-gcc-4.3.2.tar.gz  -C / 此時將安裝到/usr/local/arm下面 設定環境變數 gedit ~/.profile 在

Ubuntu編譯3.0.4核心

Linux核心3.0版本釋出已有一段時間了,不知道這個版本號大躍進的核心是否好用。目前各個發行版的linux還仍未採用3.0的核心,因此可以自己動手編譯核心來感受一下!趁著這次編譯核心的機會可以再熟悉一下編譯核心的步驟。 1.下載並解壓核心到任意目錄 從原始碼官網下載最新的核心原始碼3.0.4,可以解

Ubuntu 11 編譯 linux-2.6核心 出錯,給出部分編譯問題解決

# configuration written to .config # make[2]:正在離開目錄 `/home/gdsdj/src/linux-2.6.19' make EXTRAVERSION=dell1400   ARCH=i386 prepare make[2]

Ubuntu編譯linux核心

1.概念解釋       vmlinuz是可引導的、壓縮的核心。“vm”代表“Virtual Memory”。Linux 支援虛擬記憶體,不像老的作業系統比如DOS有640KB記憶體的限制。Linux能夠使用硬碟空間作為虛擬記憶體,因此得名“vm”。vmlinuz的建立有

ffmpeg的ubuntu編譯過程(編譯靜態庫和動態庫)

ffmpeg第一步源碼下載通過git下載git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg或者直接下載wget http://ffmpeg.org/releases/ffmpeg-3.3.tar.bz2如果是下載的ffmpeg-3.3.tar.bz2 需要進

[Ubuntu/Deepin_15] 編譯安裝 PHP 依賴庫

1.0 libmcrypt php擴展 highlight essential apt openssl client conf 編譯環境 sudo apt-get -y install build-essential xml sudo apt-get -y insta

Ubuntu安裝編譯OpenCV一鍵腳本(帶ffmpeg)

amd64 unix rep conf python 執行 pre -s spa 1.切換到用戶文件夾cd ~2.新建一個文件。命名為opencv.sh 腳本例如以下:version="$(wget -q -O - http://sourceforge.net

ubuntu 17 編譯BTCoin

tar autot req wall pda sse .gz pre -a 一. 安裝開發環境 sudo apt-get update sudo apt-get install build-essential libtool autotools-dev autoco

Ubuntu系統編譯安裝ffmpeg

ubun acc profile pro -a toc nth export com FFmpeg編譯安裝(參數可以自定):./configure --enable-libmp3lame --enable-libfdk-aac --enable-libx264 --enab

ubuntu編譯 wpa_supplicant-2.6

wifi wlan 1.1 libnl-3.4.0./configure --prefix=/home/fnie/wpa/out/libnl --disable-static makemake checkmake install// to install the API documentation:m

ubuntu編譯ffmpeg+SDL+ffplay提取motion vector

ubunt cut object device .org 最新 編譯運行 sam draw 編譯ffmpeg: 第一步: 從官網http://ffmpeg.org/下載最新版本. 解壓tar -xjvf ffmpeg-3.3.1.tar.bz2 進入目錄cd ffmpeg

ubuntu編譯小知識點

enabled with ubun set 改變 led 特性 enable The 1 #改變編譯器選項 2 SET(CMAKE_C_COMPILER"g++") 3 #出現如下錯誤:添加C++11特性 4 #error: #error This file requir

解決一個Ubuntu編譯NEON優化的OpenCV的錯誤

asm pre neon iat tar 查詢 avg mpi 安裝 在Ubuntu 16中編譯開啟NEON優化的Opencv時,遇到libpng編譯是使用匯編代碼的錯誤,完整錯誤見文章末尾。通過查詢發現解決方案是安裝跨平臺編譯器,安裝代碼如下: sudo apt-get

Linux核心編譯以及新增系統呼叫函式

實驗內容 (作者:Baron_w,禁止轉載) ⚫ 編譯 Linux 核心 ⚫ Linux 啟動過程 ⚫ Linux 系統呼叫實現分析 ⚫ 增加一個系統呼叫** 相關知識 dmesg 的用法 ⚫ 列出載入到核心中的所有驅動 我們可以使用如‘more’。 ‘tail’ ,