關於重編kernel的問題...

如果您覺得您的問題不屬於 debian desktop 或是 debian server 版的範圍內,請在這裡發問。

版主: mufa

關於重編kernel的問題...

文章cyt » 週一 7月 05, 2004 12:36 am

想問的是, 現在重編kernel需要作以下的動作嗎?

ln -s /usr/src/linux-<version>/include/asm-i386 /usr/include/asm
ln -s /usr/src/linux-<version>/include/linux /usr/include/linux

還有 /usr/include 這個目錄是編kernel需要參照的, 還是 glibc 本身呢?

這兩個問題在網路上有看到不同的說法?

煩請大家多多指教... 謝謝.
cyt
懵懂的國中生
懵懂的國中生
 
文章: 137
註冊時間: 週一 5月 31, 2004 2:20 pm

re:關於重編kernel的問題...

文章cyt » 週一 7月 05, 2004 10:19 pm

嗯...自問自答

就我今天的經驗(在使用2.4.25-1 kernel的環境下編譯2.4.18整個過程)的確都不需要做上述的symbolic link即可成功編譯完成, 且以2.4.18的核心開機成功.

PS: 這要感謝網路上的roxin666前輩, 告訴我把
代碼: 選擇全部
Loadable module support  --->
    Set version information on all module symbols

取消掉。 這樣 make dep 才能成功.
cyt
懵懂的國中生
懵懂的國中生
 
文章: 137
註冊時間: 週一 5月 31, 2004 2:20 pm

re:關於重編kernel的問題...

文章roxin666 » 週二 7月 06, 2004 12:11 am

哎呀,被點名了...
請不要叫我前輩,我也只是個 Linux 的愛好者而已....

另外,上面的寫法可能會造成一些初學者的誤導,以為make dep與標頭檔的 symbolic link
有干連,這邊澄清一下

1.
ln -s /usr/src/linux-<version>/include/asm-i386 /usr/include/asm
ln -s /usr/src/linux-<version>/include/linux /usr/include/linux

上面這種方式的確在網路上常看到,不過在 LFS Book 裡面有轉錄 Linus 的見解,
Linus 是認為這種方式沒有必要,因為在"/usr/include/{linux,asm}"中的標頭檔應該是
當初編譯系統上 GNU C 函式庫所使用的核心標頭檔,這些檔案的版本與你目前系統所運行的核心版本
並不相關。講白一點,你系統上當初 glibc 是使用那些核心標頭檔去進行編譯,你的"/usr/include/{linux,asm}"
就應該放置當初編譯時所使用的那些核心標頭檔,而不是像上面那樣子去作 link,這樣你編譯其他會使用到 glibc 的套件原始碼時,
glibc 的 object binary 與 header 才會一致。

目前 Debian 似乎也是使用這種方法,如果你查詢 libc6-dev
#apt-cache show libc6-dev
會發現其與 linux-kernel-headers 有相依性,也就是說 Debian 會在你安裝 libc6-dev 這個套件時,一併把
當初編譯時所使用的核心標頭檔安裝至"/usr/include/{linux,asm}"。

2.
Loadable module support --->
Set version information on all module symbols
編譯核心時取消上面的選項與前一個主題老實說並沒有任何干聯,只是在 kernel source 中的 bug-list 有提到,
如果設了 $CONFIG_MODVERSION,常會導致 make dep 有問題。這個正確的原因小弟還不清楚,有待 trace。
圖克斯小舖 (Linux T-恤, 馬克杯)
http://www.tuxshop.idv.tw
頭像
roxin666
懵懂的國中生
懵懂的國中生
 
文章: 102
註冊時間: 週四 9月 25, 2003 11:19 pm

re:關於重編kernel的問題...

文章cyt » 週二 7月 06, 2004 10:07 am

還是有些疑問, 想請教 :)

以下是我的想法整理, 不知道對不對:

1.
在編kernel的時候, gcc是使用 /usr/src/linux/include/{asm,linux,...} 裡面的headers, 不會參考到
/usr/include/{asm,linux,...} 裡面的headers, 但如果是這樣gcc如何得知是這個目錄? kernel source code中在include 的部分都只有寫 #include <linux/header-file.h> 或是 <asm/header-file.h>, 預設不是指向 /usr/include/ 嗎? 那如果想自行編譯某個device driver的module(從廠商提供的driver source code編譯), 那header file又是參照哪裡的呢? (?)

2.
而 /usr/include/{linux,asm,...} 裡面的headers, 是在編譯其他ap的時候, 會被參考到. (?)

3.
若要在系統上開發程式, 需要安裝 libc6-dev, 而 debian 會因相依性自動安裝 linux-kernel-headers 到 /usr/include 裡, 以保持 headers 是當初編譯 glibc 時所使用的一致, 這樣編出來的ap才能運行無誤. 但是其他distro卻不一定會自動這麼做, 如Red Hat, SuSE?? (?)

問題有點多, 不好意思 :ooops:
cyt
懵懂的國中生
懵懂的國中生
 
文章: 137
註冊時間: 週一 5月 31, 2004 2:20 pm

re:關於重編kernel的問題...

文章roxin666 » 週二 7月 06, 2004 11:04 am

1.
簡單的來講,這與 Makefile 以及 gcc 的參數有關,kernel source tree 中 Makefile 下給 gcc 的參數
在標頭檔參照的這一部份是指向 kernel source tree 本身內部的標頭檔(不要忘了還有 Makefile 這種東西)。
一般來講,gcc 是到 /usr/include 及現行目錄中去找標頭檔,但是你也可以使用 "-I" 參數或利用 Makefile
去指示 gcc。較詳細的部份可以參考一些 Linux 程式設計的書,大部份都會有相關的說明。

2.
其他 Linux Distribution 小弟並不熟,而且目前身邊的機器也都只有安裝 Debian,這部份你可能要去看看那些有安裝
其他 distribution 的機器,或詢問那些比較熟的人。
圖克斯小舖 (Linux T-恤, 馬克杯)
http://www.tuxshop.idv.tw
頭像
roxin666
懵懂的國中生
懵懂的國中生
 
文章: 102
註冊時間: 週四 9月 25, 2003 11:19 pm

re:關於重編kernel的問題...

文章cyt » 週二 7月 06, 2004 11:20 am

剛剛看了MAKEFILE, 其中的內容果然是:
代碼: 選擇全部
TOPDIR  := $(shell /bin/pwd)
HPATH  = $(TOPDIR)/include
FINDHPATH = $(HPATH)/asm $(HPATH)/linux $(HPATH)/scsi $(HPATH)/net


非常感謝 :-D
cyt
懵懂的國中生
懵懂的國中生
 
文章: 137
註冊時間: 週一 5月 31, 2004 2:20 pm


回到 debian misc

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客