編譯Linux內核時出現“fatal error: linux/netfilter/xt_dscp: No such file or directory”

編譯Linux內核時出現“fatal error: linux/netfilter/xt_dscp: No such file or directory”。下面開始查找原因。


第一步:

找到編譯器報錯的.h和.c文件,發現linux-3.8.1/include/uapi/linux/netfilter下有2個類似的文件:

        "xt_DSCP.h" 和 "xt_DSCP.h (Case Conflict 1)"

類似的問題還發生在xt_MARK.h, xt_CONNMARK.h, ipt_ECN.h等頭文件中。


第二步:

google了幾個小時,最終查到是case sensitive/insensitive filesystem 的問題,

也就是文件系統是否區分大小寫的問題,

        比如:windows下的fat/ntfs文件系統是大小寫不敏感的,即“DSCP”和“dscp”是相同的字符串

                    linux下的ext3/ext4文件系統是大小寫敏感的,即“DSCP”和“dscp”是不同的字符串

這裏有一個相關的鏈接,是提交給內核netfilter部分開發人員的bug報告,要求處理文件名相同大小寫不同帶來的不方便的問題。

但是問題又來了:

       我是在ext4文件系統下解壓內核壓縮包的,文件名相同大小寫不同應該是沒問題的,但是爲什麼出現"xt_DSCP.h (Case Conflict 1)"這樣名字的頭文件?


第三步:

於是突然想起來我的源碼包是放在Dropbox下的子文件夾的,也就是說linux-3.8.1會被同步到Dropbox的服務器,

而Dropbox的文件系統是case insensitive的,也就是說同步時Dropbox檢測到“xt_dscp.h”與"xt_DSCP.h"重名,於是改成了"xt_DSCP.h (Case Conflict 1)"。


結論:千萬別把linux內核源碼包解壓到Dropbox的任何子目錄下!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章