2011-08-20 67 views
0

我在使用Ubuntu Linux內核正確編譯此特定內核修補程序時遇到了一些麻煩。Linux內核修補問題

該修補程序來自一個名爲SCST的軟件,它是Linux的iSCSI目標。當我運行patch -p1 < put_page_callback-2.6.32.patch時,修補程序加載正常,但是當我編譯時,大約需要一個小時左右,然後失敗並返回這些錯誤。

/root/d1/development/kernel/lucid/source/net/ipv4/tcp_zero_copy.c:63: error: redefinition of '__kcrctab_net_get_page_callback' 
/root/d1/development/kernel/lucid/source/net/ipv4/tcp_zero_copy.c:14: note: previous definition of '__kcrctab_net_get_page_callback' was here 
/root/d1/development/kernel/lucid/source/net/ipv4/tcp_zero_copy.c:63: error: redefinition of '__kstrtab_net_get_page_callback' 
/root/d1/development/kernel/lucid/source/net/ipv4/tcp_zero_copy.c:14: note: previous definition of '__kstrtab_net_get_page_callback' was here 
/root/d1/development/kernel/lucid/source/net/ipv4/tcp_zero_copy.c:63: error: redefinition of '__ksymtab_net_get_page_callback' 
/root/d1/development/kernel/lucid/source/net/ipv4/tcp_zero_copy.c:14: note: previous definition of '__ksymtab_net_get_page_callback' was here 
/root/d1/development/kernel/lucid/source/net/ipv4/tcp_zero_copy.c:66: error: redefinition of '__kcrctab_net_put_page_callback' 
/root/d1/development/kernel/lucid/source/net/ipv4/tcp_zero_copy.c:17: note: previous definition of '__kcrctab_net_put_page_callback' was here 
/root/d1/development/kernel/lucid/source/net/ipv4/tcp_zero_copy.c:66: error: redefinition of '__kstrtab_net_put_page_callback' 
/root/d1/development/kernel/lucid/source/net/ipv4/tcp_zero_copy.c:17: note: previous definition of '__kstrtab_net_put_page_callback' was here 
/root/d1/development/kernel/lucid/source/net/ipv4/tcp_zero_copy.c:66: error: redefinition of '__ksymtab_net_put_page_callback' 
/root/d1/development/kernel/lucid/source/net/ipv4/tcp_zero_copy.c:17: note: previous definition of '__ksymtab_net_put_page_callback' was here 

和我有absolutley不知道發生了什麼事情。我不是任何方式的內核開發者,我只是試圖獲得這個補丁和另一個工作正常。所以我可以讓這個iSCSI目標全速運行。

任何想法我可以做什麼?

**更新**

我下面從https://help.ubuntu.com/community/Kernel/Compile的insructions。更具體地說,該頁面上的鏈接轉到http://blog.avirtualhome.com/2010/05/05/how-to-compile-a-ubuntu-lucid-kernel/

我已經使用這些說明完成了一些編譯,我的問題要麼是我忘了應用補丁或者補丁沒有用,而是直到現在他們總是完成。這個新的補丁有些東西搞砸了。

至於爲什麼iSCSI目標搞亂了網絡部分,它顯然與網絡性能有關。當我在沒有補丁的情況下編譯目標軟件時,它會對性能表示不滿。目標網站是http://scst.sourceforge.net/index.html

+1

看起來好像可能有一個壞的#define守衛在某個地方,並且它重新定義了一些符號。你能告訴我們你如何建立? iSCSI目標不應該混淆任何ipv4的東西,這就是爲什麼我很好奇。還有哪些Linux發行版是你的? (我曾遇到過問題,人們告訴我我的內核不能正確構建在11.04 ubuntu上,仍然不確定爲什麼,因爲預編譯版本引導良好) –

+0

我會在問題中寫入更多,但基本知識是:Ubuntu 2.6.32-34.74從Ubuntu GIT回購,它基於Lucid Lynx。 – ianc1215

+0

只是爲了踢我嘗試應用2.6.33的補丁,而它使情況變得更糟。我的想法是,另一個可能更接近我的內核,其次版本比2.6.32的SCST補丁生成的更高。但就像我說的那樣沒用。所以我使用我的虛擬機快照向後退出。 – ianc1215

回答

0

您應該遵循讓自己從一個適當的內核版本後的標準內核編譯方法kernel.org

這裏是爲了步驟

  1. 解開內核到文件夾
  2. 應用補丁
  3. 須藤的make menuconfig,保存默認config文件
  4. 須藤使
  5. 須藤使modules_install
  6. 須藤使安裝
  7. CD /啓動
  8. 須藤mkinitramfs -o initrd.img-(您的版本在這裏)(您的版本再次)
  9. 須藤更新grub的

你現在應該看到你的啓動選項中的新內核,它應該(希望)啓動。

+0

看起來我說話太快了,它根本無法啓動,當我嘗試重新啓動內核時,我按照上述步驟出現錯誤。之前當我編譯時使用了一個叫做kpkg-make的東西。我迷路了,我不知道是什麼讓這件事失敗。好像所有的補丁都被拍攝了。 – ianc1215

+0

你能從上面的步驟啓動一個標準內核嗎? –

+0

我沒有嘗試。 – ianc1215