基於Ubuntu製作內核鏡像

基於Ubuntu製作內核鏡像

準備工作:

1.      完整的linux內核(本次試驗以linux2.6.35爲例)

2.      PC機

 

操作步驟:

1.      首先,將linux內核拷貝到系統的/usr/src目錄下。

在這個拷貝的過程中有一點需要注意,下載的linux內核不能在windows下進行解壓拷貝。Windows和linux對於文件的命名規則不同,在linux下,文件名是區分大小寫的,名字相同大小寫不同完全可以,但是在windows下,這種命名方式不行,如果在windows下解壓縮,windows會自動刪除文件名相同的文件中的一個。

2.      修改根目錄下的Makefile文件,

修改如下:export KBUILD_BUILDHOST := $(SUBARCH)

                     ARCH                  ?= $(SUBARCH)

                     CROSS_COMPILE         ?=

3.      將系統目錄下的Kconfig拷貝到Linux2.6.35內核目錄下

4.      執行:                 makeclean

 Make menuconfig (注:參見文檔linux修改kernel支持xr17d158方法-3)

                                      Make bzImage

                   執行完到這一步,可能出現一個錯誤:

                            Error: gcc : 錯誤:elf_i386 : 沒有那個文件或目錄

                            Reason: PC機上安裝的gcc 編譯器不支持linker-style架構

Solution : 1, 修改 ./arch/x86/vdso/Makefile 中,找到VDSO_LDFLAGS_vdso.lds= -m elf_x86_64  –WL , ***

將“-melf_x86_64”替換爲“-m 64 ”

2, 找到VDSO_LDFLAGS_vdso32.lds = -m elf_x86_i386  –WL ,***

把“-melf_x86_i386”替換爲“-m32”

5.      執行make bzImage

成功則顯示: Root device is(8,7)

                             Setup is 13532bytes (padded to 13824 bytes)

                             System is 3455kb

                             CRC 3fa36e81

                             Kernel :arch/x86/boot/bzImage is ready (#1)

6.      執行make modules

可能出現的錯誤:

           Error : Infile include from driver /net/igbvf/ethtool.c : 36: 0 :

driver/net/igbvf/igbvf.h : 在文件作用域:

driver/net/igbvf/igbvf.h : 129 : 15 : error : 重複的成員’page’

Reason : 錯誤是由於gcc版本與內核版本衝突,首先建議更換內核,目前,我們修改內核代碼以適應當前的編譯器。

Solution :/drivers/net/igbvf/igbvf.h : 129 : 15 : 代碼爲:”struct page*page”和line124中有相同的定義,”struct page *page“,將line129中的定義改爲”struct page *pagep”。

7.      重新執行make modules

8.      執行make modules_install

9.      執行make install

 

注:在執行make modules 的時候如果出現以下錯誤:

         1,Make[1] : ***沒有規則可以創建”***/***.o”需要的目標”***/***.c”,停止。

         2,In file include from**/**/**.c : ** : ** :

Include/**/**/**.h: 在文件作用域 :include/**/**/**.h: ** : ** : 致命錯誤,linux/**/**.h : 沒有這個文件或目錄。

 

Reason : 由於windows 和linux 下解壓縮的過程中的文件命名規則不同,在windows下可能會刪除名字一樣大小寫不一樣的文件,而linux下這種文件卻是可以共存的。故可能是因爲內核在windows下解壓縮,造成文件的丟失。

 

Solution : 修改指定目錄下的Makefile文件,將出現錯誤的文件所對應的Makefile配置代碼註釋掉。

 

Solu-Web : http://www.cnblogs.com/crazywangzx/p/3505289.html

                    http://loveboykan.blog.163.com/blog/static/182699468201211101659849/

發佈了36 篇原創文章 · 獲贊 12 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章