2013-03-24 118 views
5

我試圖編譯Linux 2.6.32.6內核,內核中包含幾個模塊,這是因爲一個非常特定的原因。我已經在NFS上包含了Root文件系統,試圖通過局域網PXE啓動我自己定製的救援Live-CD。在包含ROOT_NFS所需的依賴關係和模塊之後,我試圖編譯僅與Linux內核make bzImage。在運行此我得到的錯誤編譯Linux內核錯誤xt_CONNMARK.h

make[4]: *** No rule to make target './linux-2.6.32.6/include/linux/netfilter/xt_CONNMARK.h', needed by './linux-2.6.32.6/usr/include/linux/netfilter/.install'. Stop. 

現在,我已經嘗試在配置禁用Netfilter的模塊,並試圖找到使需要Netfilter的任何相關性,但這個錯誤仍不斷髮生。

任何解決此錯誤的建議都會很棒。

+0

您可能需要清理該文件的'依賴'。 * kbuild *應該已經找到了更改'.config'的事實,但可能不適用於此舊版本的Linux。 – 2013-03-24 16:23:06

+0

先做一個'make clean'或手動刪除'Makefile'依賴信息。你的問題似乎令人難以置信,但我不記得是什麼問題。它可能與'make O = ...'有關。 – 2013-03-24 17:07:31

+0

經過多次嘗試,我刪除了Kbuild中的特定條目。然而奇怪的是在那裏有兩個'xt_CONNMARK.h'條目。失敗的人全部上限,而另一人全部小寫。通過這個進入更多的例子,但是一旦我刪除了所有事件(總共大約5個),系統編譯並正確引導。 – Blackninja543 2013-03-24 17:30:36

回答

10

這很可能是因爲您有由於通過大小寫不敏感的文件系統傳輸而丟失了源樹中的某些文件。從不同的時間起,Linux源代碼樹中大約有15個不同的文件,名稱相同,但大小寫不同。這通常不是構建Linux內核的人員的問題,因爲所有合理的文件系統都區分大小寫。

對於那些很好奇的,這種方式的文件都在netfilter樹中 - 例如,參見include/linux/netfilter/xt_CONNTRACK.hinclude/linux/netfilter/xt_conntrack.h在v3.0中。

所以,這些文件確實存在,但你失去了它們。獲取一個新的源代碼樹,將其解壓縮到區分大小寫的文件系統中,並且不會再出現此錯誤。或者,如果您害怕丟失對樹的修改,則從「原始」源樹或github mirror of the kernel複製文件 - 它們很可能不會在您正在編譯的版本中從發行版更改。