天天看點

高版本核心系統(Ubuntu12.04)下編譯低版本核心(2.6.30)bug解決方法

近期由于項目需求,需要用到低版本的2.6.30核心,在ubantu12.04系統下編譯2.6.30時出現一下bug:

(1)在make menuconfig配置完之後(選的預設配置),然後就make出現如下錯誤:
      

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

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

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

make: *** [sub-make] 錯誤 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_386" 替換為 "-m32"。

(2)重複定義錯誤,如:

include/linux/kvm.h:230:9: 錯誤: 重複的成員‘padding’

drivers/net/igbvf/igbvf.h:128:15: 錯誤: 重複的成員‘page’

這主要是由于高版本的gcc不再支援在同一個函數中結構體和聯合出現相同名稱的變量引起的,分别到對應的檔案裡,找到定義的結構體或者聯合将其相同的變量名稱任意修改掉一個就可以了。

繼續閱讀