核心編譯過程及相關錯誤解答 elf i386錯誤

2021-06-07 07:45:50 字數 3658 閱讀 1268

建議將本文全部看完之後再開始編譯核心,不要一開始就著這步驟來,因為在裡面會有一些需要修改的地方,而且編譯核心時用的時間比較長,所以如果出錯之後再改再編譯會浪費比較多的時間,在配置時注意filesystem項的配置。還有在編譯的時候會有很多的警告,基本上都是某變數定義了,但是未使用。這些變數是linux核心為以後的擴充套件留下來的,不用在意。

(2)修改bootloader的配置檔案;

(3)呼叫mkinitrd(如果是ubuntu則用mkinitramfs命令)程式建立核心的initrd映象,然後修改/boot/grub/grub.cfg檔案。如果自己更新的話使用update-grub2命令就可以了。

grub的更新是根據/boot目錄下的檔案來更新的,在修改grub.cfg檔案之前可以先檢視一下在/boot目錄下是否有你剛編譯的核心的initrd.img-x.y.z   system.map-x.y.z   config-x.y.z    vmlinuz-x.y.z檔案,x.y.z是核心的版本號,如果沒有應該是make install的步驟沒做全,如果缺少initrd檔案的話,新的核心是沒法啟動的,最好再開啟grub.cfg檔案檢視你的新核心的部分的最後一句是否有關於initrd的語句,如果沒有照著grub.cfg檔案中其他核心的語句寫一下,當然前提是在你的/boot目錄下要有initrd.img-x.y.z檔案,如果沒有可以通過

mkinitramfs -o /boot/initrd.img-x.y.z來實現。

mkinitramfs 命令實在ubuntu下使用的,其他的使用mkinitrd命令。

g.reboot(重啟)

在編譯核心過程中遇到的問題及解決方法:

1.root@org:/usr/src/linux# make menuconfig

*** unable to find the ncurses libraries or the

*** required header files.

*** 'make menuconfig' requires the ncurses libraries.

*** 

*** install ncurses (ncurses-devel) and try again.

*** 

make[1]: *** [scripts/kconfig/dochecklxdialog] 錯誤 1

make: *** [menuconfig] 錯誤 2

解決方法:

根據網上資料的提示進行如下的安裝過程:

1.sudo apt-get install ncurses

如果安裝失敗,軟體包ncurses還沒有可供安裝的候選者.就先安裝libncurses*

2.sudo apt-get install libncurses*

3.安裝完之後檢視kernel-package是否已安裝:

wjj@org:/usr/src/linux$apt-cache policy kernel-package

kernel-package:

已安裝:  (無)

候選軟體包:12.036+nmu1

版本列表:

12.036+nmu1 0

500 oneiric/universe i386 packages

上面的結果表示kernel-package沒有安裝好。所以下面安裝kernel-package:sudo apt-get install  kernel-package

3.安裝好kernel-package之後再檢視build-essential的安裝狀態:

wjj@org:/usr/src/linux$ apt-cache policy build-essential 

build-essential:

已安裝:  11.5ubuntu1

候選軟體包:11.5ubuntu1

版本列表:

*** 11.5ubuntu1 0

500 oneiric/main i386 packages

100 /var/lib/dpkg/status

表示已安裝。如果沒有安裝則apt-get install

至於這些包是什麼作用,我並不是很清楚。

現在make menconfig可以執行了。

接下來make menuconfig可以了,但是make xconfig還是有問題.根據錯誤提示還得安裝qt庫:

sudo apt-get install libqt3-headers libqt3-mt-dev

sudo apt-get install libqt3-compat-headers

然後就ok了!make xconfig也可以配置了。

make xconfig的配置方法很簡單:直接用滑鼠選擇就好了。

make config:是通過字元介面的提示,輸入y/n/m

make menconfig的配置方法如下:

配置介面的使用方法(至於各個配置的選項代表的意思可以查閱其它資料,如果是用筆記本安裝要更加注意,因為配置不好的話會導致無法啟動新編譯的核心,filesystem這個選項的配置尤為重要)

(1)在選單方式的配置介面上可用上下方向鍵來在各選單之間移動

(2)在標有"---->" 標誌的地方按回車鍵進入下級選單

(3)按兩次或選擇則返回到上級選單

(4)按「 鍵或選擇下面的 則可看到配置幫助資訊h」

(5)按鍵則在各控制選項之間移動

(6) 表示包含該功能選項配置在核心中,m 表示以模組的方式編譯到核心中,n 表示y

該功能選項不進行編譯

(7)設定狀態在 [ ] 或 < > 中以 「* 「(選擇), 「m 「(模組), 空格(除外)來表示.

下面是make menuconfig的介面:

下面是make xconfig的介面:

下面是make config的介面:

make oldconfig的我就不例舉了。

問題2.make bzimage提示如下錯誤(這個錯誤不是每個人都會遇到的,可以用gcc--help檢視你的gcc版本,如果你的版本是4.6或者4.6之後的應該會有下面的問題,如果比4.6的早就不會出現這個問題):

gcc: 錯誤: elf_i386:沒有那個檔案或目錄

make[2]: *** [arch/x86/vdso/vdso32-int80.so.dbg] 錯誤 1

make[1]: *** [arch/x86/vdso] 錯誤 2

make: *** [arch/x86] 錯誤 2

解決方法:

這個問題是由於 gcc 4.6 不再支援 linker-style 架構。將 arch/x86/vdso/makefile 中,

以 vdso_ldflags_vdso.lds 開頭所在行的 "-m elf_x86_64" 替換為 "-m64"。

以 vdso_ldflags_vdso32.lds 開頭所在行的 "-m elf_x86" 替換為 "-m32"。

問題3:make modules的錯誤(如果你在編譯核心時正在使用的核心比較新的話會出現下面的問題,我在3.0.0-13上編譯2.6.32.27的核心是出現下面的問題,但是在2.6.32.32上編譯時沒有下面的問題)

根據提示檢視原始碼:

解決方案:將第乙個struct page* page注釋掉,因為我覺的這樣效果是一樣的。

問題4:reboot後grub未啟動,或者是沒有2.6.32.27的選項。

解決方法:將grub.cfg中的timeout全賦值為10。

android 編譯STL模組相關錯誤解決

由於android系統目前沒有將boost加入,這裡面使用了大量的stl及c 的一些語言特性,導致編譯出現令人非常頭痛的問題。1 出現類似的異常函式錯誤 boost exception detail exception ptr.hpp 382 error expected before catch ...

gcc編譯過程及相關引數

1.gcc編譯過程 2.gcc編譯引數 i 指定包含的標頭檔案路徑,如 i include d 指定編譯過程中的全域性巨集,如 d macro debug o 需不需要優化我們的程式,範圍0 3,0表示不優化,3表示最高優化 wall 程式編譯過程中輸出警告資訊 g 在生成的程式中新增除錯資訊 l ...

Lua cjson模組編譯筆記及錯誤解決方法

使用文件 http程式設計客棧 位址 程式設計客棧wnload lua cjson 2.1.0.tar.gz 編譯時可能會報錯,要修改makefile檔案 我 的是lua jit版本,改了以下 部分內容 複製 如下 lua include dir prefix include lua include...