1. 程式人生 > >ubuntu編譯核心 (個人覺得很詳細)

ubuntu編譯核心 (個人覺得很詳細)


1. 下載核心原始碼
http://www.kernel.org/
下載The latest stable version of the Linux kernel is:  2.6.25.7  ,點後面的“F”  按鈕下載
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.25.7.tar.bz2
  檔案。
2. 在終端 su root命令切換到root許可權,然後把linux-2.6.25.7.tar.bz2  檔案複製到/usr/src/ 目錄下。
在ubuntu中不能以root身份登入介面,很奇怪
3. cd 到/usr/src/ 目錄下, 執行  tar  -jxvf  linux-2.6.25.7.tar.bz2
     命令解壓原始碼包。就會解壓到
/usr/src/ linux-2.6.25.7,我又把它複製到 /usr/src/ linux-2.6.25.7-widebrihgt 目錄下了,/usr/src/
linux-2.6.25.7-widebrihgt     掛載了一個 8G的盤。
4.root使用者,cd到/usr/src/ linux-2.6.25.7-widebright  目錄下
make mrproper (該命令可確保原始碼目錄下沒有不正確的.o檔案     .config檔案等)
核心配置工具
(1) make config (純字元提示模式)
       
(2)
make menuconfig
 (配置核心各選項,居於ncurse 的選單選擇模式) 
需要ncurse 庫的支援, ubuntu中預設沒有安裝  需要安裝一下
# apt-get install libncurses5-dev   
(3)
# make xconfig     (X視窗的圖形介面,配置核心各選項)     
xconfig基於X11, 使用qt庫, 在Ubuntu中先安裝qt庫: 
# apt-get install libqt3-headers libqt3-mt-dev
我是安裝libncurses5-dev     之後用 menuconfig  來配置的,  都是用他預設配置,
除了
General setup --->
()  Local version - append to kernel release ()
這個可以在核心版本後面加上個性字串,我輸入了widebrighgt
然後選最後一條,儲存配置檔案就行了,他會在 /usr/src/ linux-2.6.25.7-widebright 生成 .config 檔案





5.編譯核心
只需要執行 make就行了
#make
執行之前可以先執行make clean 清空生成的核心檔案,或者編譯中間有問題了,想重新編譯,可以用這
個先清空已經生成的核心檔案
我在VirtualBox虛擬機器的ubuntu8.04 系統裡面執行make 命令, 結果make一次花的編譯時間應該在兩個
小時以上。注意 /usr/src/ linux-2.6.25.7-widebright的剩餘空間要在2.5G以上,我一開始mount到一個
2G的盤,結果編譯時候提示沒有空間。後來重試了幾次,花了很多時間,最後mount了一個8G的盤,終
於編譯成功了。 看他完成後,佔用的控制元件大概在1.8G左右。
這個make相當於,手工執行了一下兩步:
# make bzImage 
# make modules (編譯可載入模組)
其中make bzImage  將在  /usr/src/ linux-2.6.25.7-widebrihgt/arch/i386/boot 目錄下生成一個名字為
bzImage的核心映象檔案。  make zImage  命令其實可以生成核心映象的,bzImage 的區別就是它是壓
縮的。
make modules 則是生產大量的 *.ko  核心檔案,就是模組化的核心驅動等等吧,你不把它編譯進去
bzImage裡面去的都會另外單獨生成的一個ko檔案了,以後需要的時候再由核心載入這個ko模組。
6.安裝核心
(1)
執行 make install  命令
           
我運行了這一步後,提示需要在GRUB menu.lst 配置檔案中把 入口 點指向 /boot/vmlinuz-
2.6.25.7widebright  檔案。  應該是已經把上面一步生成的bzImage複製到系統的 /boot 目錄去了, ls
-l看一下 /boot 目錄,可以已經把vmlinuz 檔案連結到 vmlinuz-2.6.25.7widebright 檔案  System.map
檔案連結到     System.map-2.6.25.7widebright 檔案,config 檔案連結到 config-2.6.25.7widebright 文
件。
(2)
沒有看到模組的配置資訊輸出,所以我又執行了一下 make modules_install 命令,這個是安裝模組的。
這個會安裝很多 ko檔案,最後輸出 DEPMOD  2.6.25.7widebright。不懂這個流程是什麼樣子的。不過
在/lib/modules/ 目錄下面生成了一個 2.6.25.7widebright的目錄,下面 目錄就是上面make modules生
成的那些ko核心模組檔案。
(3)  我上面的編譯過程好像沒有生成initrd映象檔案,不知道怎麼回事,只好手工來了。什麼是initrd鏡
像請看最後附的那篇文章
生成initrd映象檔案,redhat系統下面用new-kernel-pkg  命令應該就可以了,後面那篇文章說的mkinitrd
命令不知道是什麼系統。 ubuntu系統下面在網上搜索了一下,應該是用 mkinittramfs 命令來生成的。
執行一下 "mkinitramfs  -o  initrd.img-2.6.25.7widebrihgt     2.6.25.7widebrihgt" ,將在當前目錄下生成
一個名字為 initrd.img-2.6.25.7widebrihgt大小7.1M左右的initrd 映象檔案。最後我把它移到 /boot/ 目
錄裡面去。 
注意:最後那個引數“2.6.25.7widebrihgt” 是version,指定 核心版本,就是/lib/modules/  目錄下相應的
資料夾名字。這個一定要指定的,不然他預設使用的是正在執行的系統的版本,最後系統就不能引導成
功。
(4)檢查一下 grub的配置檔案
cat  /boot/grub/menu.lst ,  看來make install 命令沒有自動把新編譯的核心的配置寫到grub的配置文
件裡面。修改 timeout  屬性 為 10,讓等待的時間長一點,然後仿造原有的配置新建一項放在最前面,因為一開始的default 的值設定為0的,預設是第一項。增加的內容如下
title          Ubuntu 8.04, kernel 2.6.25-7-widebright
root          (hd0,0)
kernel          /boot/vmlinuz-2.6.25.7widebright root=UUID=a082d103-894e-443a-bf58-8b128c7e5dd1 ro quiet splash locale=zh_CN
initrd          /boot/initrd.img-2.6.25.7widebright
quiet
注意其中的 kernel 和initrd 都指向自己的映象檔案。 root的 UUID可能沒個人都不一樣的,可以參考GRUB的配置檔案說明。






做完上面步驟之後,重啟系統,等到系統提示按 ESC 鍵的時候,可以選擇和進入GRUB的選單。可以看到自己的核心版本已經顯示出來了。

選擇進入之後,一切正常。
使用uname -a 命令檢視,可以看到當前核心已經被更新了
[email protected]:~$ uname -r
2.6.25.7widebright
[email protected]:~$ uname -a
Linux widebright-desktop 2.6.25.7widebright #1 SMP Sat Jun 21 05:37:09 CST 2008 i686 GNU/Linux
[email protected]:~$




=======另附一篇initrd映象相關文章==============================================
initrd 映象檔案的作用與製作
我們在安裝新核心的時候,通常都會編輯lilo.conf 和grub.conf 檔案。裡面有一段“initrd=/boot/initrd-
***.img”(其中的***表示核心的版本號)的我們都很少會注意到,有時候還會發現這 一行不要也可以
正常開機。那這個initrd***.img究竟是用來幹什麼的呢?
其實initrd***.img是一個映象檔案,類似ramdisk,把一段程式打包到img裡,然後在開機的時候在記憶體
裡開闢一段區域,一般是2m,釋 放到那裡執行,都是一些初始化的程式,比如sisc_mod、ext3、
sd_mod等模組和insmod、nash等命令。不同核心,初始化的img可 以相同,也可以不同,如果沒有,
可以在grub.conf里加上no initrd,它就跳過initrd的檢測和執行了,以前好像就沒有,後來才有的。
它的作用是在沒有mount /分割槽以前,系統要執行一些操作,比如掛載scsi驅動,它就把initrd釋放到內
存裡,作一個虛擬的/,然後執行其根目錄下的一個指令碼 “linuxrc”,執行insmod和nash命令掛裝模組。
為什麼有的時候我們在lilo或grub的配置檔案中不加入該行都可以正常開機呢?這是因 為我們一般的PC
機都沒有使用scsi硬碟等需要先載入其驅動的裝置,所以就算沒有initrd***.img也可以正常開機。但是
如果我們要在伺服器上 為其編譯新核心那就一定不要忘記也為其新建一個initrd檔案呀!
好,下面來看看如何檢視initrd***.img裡面的內容和如何為你的新核心建立一個新的initrd.img檔案。
檢視initrd.img:
initrd***.img雖然後綴是“img”,但其實它是一個gz格式的檔案,我們可以先把它解壓,然後載掛裝到
目錄下:
1、cp initrd.img initrd.gz
2、guzip initrd.gz
3、mount -o loop initrd /mnt/floppy
進入/mnt/floppy目錄,我們就可以看到initrd***.img檔案的廬山真面目了。
製作initrd檔案
當我們編譯了一個新的核心,也不要忘了為我們的scsi裝置做一個新的initrd映象:
語法:
mkinitrd 檔名 核心的目錄名
示例:
mkinitrd initrd-2.4.19.img 2.4.19
initrd-2.4.19.img檔案是自己任意取的,但最好對應自己的核心版本號。
2.4.19是在/lib/modules中的目錄名,對應核心的版本。
當然,我們也可以在掛裝了initrd***.img檔案後直接新增模組到/lib目錄中,然後修改linuxrc指令碼讓其開
機進行掛裝。但必須具備一定的shell指令碼的能力才行。
附:
一次幫朋友裝好系統後執行sudo,出現下列錯誤,記錄在這了
更改時間為正確時間後,沒有重啟,重新進入終端時出現: 
"sudo: timestamp too far in the future: Feb 26 06:54:27 2008"
1、先把時間更改為 大於<sudo: timestamp too far in the future:>後面出現的時間(Feb 26 06:54:27 2008)。
2、在終端使用命令:sudo -k。
3、把時間調整正確。
                
                
                
如果檢視原文請點:http://blog.chinaunix.net/u2/76292/showart_1285998.html

相關推薦

ubuntu編譯核心 個人覺得詳細

1. 下載核心原始碼http://www.kernel.org/ 下載The latest stable version of the Linux kernel is:  2.6.25.7  ,點後面的“F”  按鈕下載http://www.kernel.org/pub/linux/kernel/v2.6/l

遺傳演算法詳解GA個人覺得形象,適合初學者

本文是去年課題組週報中的一個專題講解,詳細講了GA,由於是週報,所以十分詳細。很適合初學者入門。文中也簡單提及了模擬退火演算法。文章綜合參考了一些網際網路資料。發部落格以備忘! 三:遺傳演算法         照例先給出科學定義:        遺傳演算法(Genetic

Delete出錯分析總結個人總結到位 0x0000007ff64426f87e(ucrtbased.dll)處處於dataa.exe中引發的異常:

近日在除錯C++程式中new class 後delete 出現如下錯誤: * 0x0000007ff64426f87e(ucrtbased.dll)處(處於dataa.exe中)引發的異常:0xC0000005:讀取位置(0xffffffffffffff

Linux新手們,請選擇ubuntu吧!可以省多心

前言  當看到很多人在說“怎麼安裝不上呀”“怎麼不能播放mp3呀”“搞了一個星期終於可以播放mp3,卻還要再用一個星期來弄得可以播放wma”等等問題的時候,感觸,特別地深……如果你是Linux新手,或者說,你想嚐嚐鮮,那麼,為了讓您省心,請不要選擇什麼redhat一類的發行版

最佳eclipse字體推薦個人覺得

san 4.4 log eclips lan nload 排名 字體 fonts 首先大家能夠看看這裏面推薦的最佳十款字體。http://www.iteye.com/news/11102-10-great-programming-font 可是經過測試發現,排名第

在MyEclipse2015中上傳項目到github的步驟詳細

hub csdn log www sdn 使用詳解 html cli idc (圖文)在MyEclipse(2015)中上傳項目到github的步驟(很詳細) git|smartGit使用詳解 SmartGit使用教程在MyEclipse(2015)中上傳項目到github

android-----模擬器載入自己編譯核心適用於驅動練習

1. 下載android 模擬器所用的核心原始碼, 代號為goldfish   2. 下載arm-linux交叉工具鏈 3. 編譯核心檔案 4. 讓android模擬器執行在剛編譯的核心上 5. 編譯自己的hello核心模組 6 將hello.ko載入到核心中 1

HTTP-web伺服器接收到client請求後的處理過程詳細

      1. 客戶發起情況到伺服器網絡卡;     2. 伺服器網絡卡接受到請求後轉交給核心處理;     3. 核心根據請求對應的套接字,將請求交給工作在使用者空間的Web伺服器程序     4. Web伺

HTTP-web服務器接收到client請求後的處理過程詳細

dns解析 版權 如果能 結束 它的 配置網絡 cin 規範 路徑 1. 客戶發起情況到服務器網卡; 2. 服務器網卡接受到請求後轉交給內核處理; 3. 內核根據請求對應的套接字,將請求交給工作在用戶空間的Web服務器進程 4. Web服

ANR日誌traces.txt分析 mark~ 詳細

ANR日誌traces.txt分析  DD_Dog 關注 2018.07.24 19:58* 字數 806 閱讀 234評論 0喜歡 0 導致ANR的幾種情況 KeyDispatchTimeout(5s): 按鍵或觸控事件在特定時間內無法

linux環境下安裝ngnix步驟詳細

安裝準備開始前,請確認gcc g++開發類庫是否裝好,預設已經安裝。ububtu平臺編譯環境可以使用以下指令apt-get install build-essentialapt-get install libtoolcentos平臺編譯環境使用如下指令 安裝make:yum

跨公司採購轉儲詳細

業務情景:同一集團下的兩個公司1100與2100之間的採購業務。1100下設工廠1101,2100下設工廠2101。供貨公司1100須先送貨到訂單公司2100的倉庫,然後2100公司再按集團外客戶的要求發貨(因此不能使用跨公司銷售模式—跨公司銷售的圖文詳解請

前端資源彙集個人覺得不錯的學習資源收集

前言:此前在“掘金”上看到技術大牛們分享的技術貼,其中涵蓋了很多本人所未接觸過使用過的前端學習的資源。通過對裡面幾個自己比較感興趣的資源網站進行學習之後發現真心不錯,因此想與各位跟我一樣想在前端上深入學習,努力想從菜鳥變大牛的前端工程師們分享幾個學習網站。希望可以幫助到大家

C/C++ typedef用法詳解真的詳細

是p2++出錯了。這個問題再一次提醒我們:typedef和#define不同,它不是簡單的文字替換。上述程式碼中const pStr p2並不等於const char * p2。const pStr p2和const long x本質上沒有區別,都是對變數進行只讀限制,只不過此處變數p2的資料型別是我們自

關於AD9各種佈線總結詳細----轉載

轉載地址:http://www.51hei.com/bbs/dpj-30480-1.html 1.常規佈線:不詳細說了,是個人就知道怎麼弄。需要說明的是在佈線過程中,可按小鍵盤的*鍵或大鍵盤的數字2鍵新增一個過孔;按L鍵可以切換佈線層;按數字3可設定最小線寬、典型線寬、最大

IOS 上線詳細流程別人的,但詳細

上架前預熱 由於我提交上架的是iOS Apps,因此進入最左邊這一欄: 一開始,看著這幾個“Certificates、Identifiers、Devices、Provisioning Profiles”,感覺沒什麼的,但是到實際用起來,特麼的我就蒙圈了。下面解釋一下

Android客戶端與伺服器端的json資料互動詳細

      Android客戶端與伺服器端的json資料互動,主要是通過json形式的資料互動,就是json的寫入和解析。  先看效果圖,我最討厭講東西,一個圖沒有的。 算了,看來我不是寫部落格的材料,寫不下去了,要排版之類的麻煩,大家還是直接去下載原始碼,裡面有大量的注

關於AD9各種佈線總結詳細

1.常規佈線:不詳細說了,是個人就知道怎麼弄。需要說明的是在佈線過程中,可按小鍵盤的*鍵或大鍵盤的數字2鍵新增一個過孔;按L鍵可以切換佈線層;按數字3可設定最小線寬、典型線寬、最大線寬的值進行切換。2. 匯流排式佈線:通俗的講就是多條網路同事佈線的問題。具體方法是,按住SH

圖文詳解MyEclipse中新建Maven webapp專案的步驟詳細

MyEclipse中建立新的Maven專案(webapp目錄結構)過程如下: 1. New -> Project... -> Maven Project 2. Next,  3. Next, 選擇“maven-archetype-webapp”建立一

Log4j.xml配置詳細

獲取logger Logger.getRootLogger() 獲取根logger Logger.getLogger(String name)獲取子logger Logger.getLogger(Class clazz)或 Logger.getLogger(clazz.getName()) 設定日誌級