建議將本文全部看完之後再開始編譯核心,不要一開始就著這步驟來,因為在裡面會有一些需要修改的地方,而且編譯核心時用的時間比較長,所以如果出錯之後再改再編譯會浪費比較多的時間,在配置時注意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...