把驅動程式, 編到核心???何意

歡迎提問 debian desktop 相關問題,何謂 desktop ? 舉凡您日常生活會用到的部份,如上網 ( www 、 bbs ..) 、程式設計、繪圖...等等。 通常以 X Window 環境底下問題為主。

把驅動程式, 編到核心???何意

文章kcw » 週五 10月 13, 2006 9:49 pm

想問一下,有聽說過這麼一句話
「把 driver 編到核心」

想問一下,driver 不就是一堆 source code
然後 compile 完變執行檔,

什麼叫 "編入核心" 呢?!?
kcw
可愛的小學生
可愛的小學生
 
文章: 40
註冊時間: 週二 6月 13, 2006 11:34 pm

文章yenjinc » 週五 10月 13, 2006 10:37 pm

換句話說...

Drivers 可看作是 kernel 中的一些 Modules
剛好這些 Modules 是用來驅動某些硬體...

那所謂的『把 driver 編到核心』

比較白話的解釋,你可以當作是:
『讓 kernel 支援並可以啟用此模組功能』

因此...『不把 driver 編到核心』

可以看作是:
『kernel 無法支援也不行啟用此模組的功能』

而就您說的:
『想問一下,driver 不就是一堆 source code』
『然後 compile 完變執行檔』

其實,driver 也好,Modules 也好,kernel 也好!
它們原先都只是 source code,若你把某 driver
編到核心,其實就是告訴編譯器說:

『我除了 kernel 以外,連帶這個 Modules 也順便
幫我編譯一下』

事實上,有一個檔案是在紀錄著 kernel 中哪些 Modules
是否要編譯。

假使你『不把某 Module 編到核心』,那此檔案就會寫著:
"某 Modules : 不 compile"

假使你『把某 Module 編到核心』,那此檔案就會寫著:
"某 Modules : 要 compile"

以上是我自己比較白話的解釋,不知道有沒有讓您比較清楚呢?
當然!白話的解釋是比較不周延的啦! :-P
yenjinc
懵懂的國中生
懵懂的國中生
 
文章: 190
註冊時間: 週三 7月 14, 2004 12:29 am

文章mason » 週六 10月 14, 2006 12:03 am

就我的理解層面
「把 driver 編到核心」 就是「把 driver 跟 kernel 綁在一起」

不把某 driver 編入核心,不見得就不會編譯
因為可以編成 module(compile as kernel module)
要變成 module 還是要經過編譯的過程。

而所謂不 compile 某 driver,是 kernel 壓根不去支援。

可以想像成:
1.在 kernel 對於該 driver 相對應的地方開一個接口,需要某個 driver 的時候才把這個 driver 被編譯過的 module 掛上接口 ==> 編譯成 module

2. 在 kernel 對於該 driver 的地方,根本封死 ==> 不編譯成 module 也不編入核心。

3. 在 kernel 對於該 driver 的地方,直接用膠水把 driver 黏起來然後編譯,讓 kernel 被載入記憶體的時候也連帶把該 driver 帶進來 ==>編入核心
skype:dantemason
http://blog.sikazozo.org
頭像
mason
快樂的大學生
快樂的大學生
 
文章: 547
註冊時間: 週二 9月 10, 2002 3:40 pm
來自: SIDE 3

文章kcw » 週六 10月 14, 2006 10:15 pm

mason 寫:就我的理解層面
「把 driver 編到核心」 就是「把 driver 跟 kernel 綁在一起」

不把某 driver 編入核心,不見得就不會編譯
因為可以編成 module(compile as kernel module)
要變成 module 還是要經過編譯的過程。

而所謂不 compile 某 driver,是 kernel 壓根不去支援。

可以想像成:
1.在 kernel 對於該 driver 相對應的地方開一個接口,需要某個 driver 的時候才把這個 driver 被編譯過的 module 掛上接口 ==> 編譯成 module

2. 在 kernel 對於該 driver 的地方,根本封死 ==> 不編譯成 module 也不編入核心。

3. 在 kernel 對於該 driver 的地方,直接用膠水把 driver 黏起來然後編譯,讓 kernel 被載入記憶體的時候也連帶把該 driver 帶進來 ==>編入核心

========================

謝謝兩位前輩給的說明。不過, 一直存在我心中的疑問是...

如果啦,make menuconfig 中
有可以讓你選的 [M] ,表示編成模組,
如果 [*] 就是編入核心 ,
那要是今天來了一片 --- 好強牌 無線網卡
make menuconfig 裡面 跟本沒這個選項,
那你要怎麼樣,讓kernel 知道~ 世間上,有 「好強牌 」 的存在。
還是跟本不用這樣做,只要把source 編成module,開機時再load 就成了@@"
kcw
可愛的小學生
可愛的小學生
 
文章: 40
註冊時間: 週二 6月 13, 2006 11:34 pm

文章matthewlam64 » 週六 10月 14, 2006 11:35 pm

kernel module 是只認晶片, 不認牌子的, 把有支持那個晶片的 module 載入就行了
Faith makes things possible
Love makes things easy
matthewlam64
可愛的小學生
可愛的小學生
 
文章: 11
註冊時間: 週二 4月 18, 2006 4:40 pm
來自: 香港

文章mason » 週日 10月 15, 2006 12:30 am

各個硬體廠商在製作硬體的時候,該硬體裡面會提供一些資訊

像是vendor 如果為1043,就是 ASUSTeK Computer Inc.
而 vendor 如果為 1002,就是 ATI Technologies Inc
10de 則是 nVidia Corporation
還有像是device若為3085,就是 Realtek RTL8139/8139C/8139C+

也就是說,每個硬體都有編號的,所以 kernel 載入 driver 之後(不管是掛 module 或直接編在核心裡面),就會知道這個編號對應到的硬體是什麼。

還有, kernel 不會知道「好強牌 」 的存在,因為「好強牌 」 只是個牌子,如同 matthewlam64 同學所言,是認晶片的。
像是一張GeForce MX 440顯示卡,有技嘉出的、有華碩出的、有微星出的,但是 kernel 只認卡上的晶片,也就是 nVidia Geforce MX 440
頭像
mason
快樂的大學生
快樂的大學生
 
文章: 547
註冊時間: 週二 9月 10, 2002 3:40 pm
來自: SIDE 3

文章kcw » 週日 10月 15, 2006 11:20 am

mason 寫:各個硬體廠商在製作硬體的時候,該硬體裡面會提供一些資訊

像是vendor 如果為1043,就是 ASUSTeK Computer Inc.
而 vendor 如果為 1002,就是 ATI Technologies Inc
10de 則是 nVidia Corporation
還有像是device若為3085,就是 Realtek RTL8139/8139C/8139C+

也就是說,每個硬體都有編號的,所以 kernel 載入 driver 之後(不管是掛 module 或直接編在核心裡面),就會知道這個編號對應到的硬體是什麼。

還有, kernel 不會知道「好強牌 」 的存在,因為「好強牌 」 只是個牌子,如同 matthewlam64 同學所言,是認晶片的。
像是一張GeForce MX 440顯示卡,有技嘉出的、有華碩出的、有微星出的,但是 kernel 只認卡上的晶片,也就是 nVidia Geforce MX 440


ok 那我了解。謝謝大家的解答。

所以照大家的說法…其實 kernel已經包含、支援大部份的晶片。

是這樣嗎?!
kcw
可愛的小學生
可愛的小學生
 
文章: 40
註冊時間: 週二 6月 13, 2006 11:34 pm

文章訪客 » 週日 10月 15, 2006 4:27 pm

是的!已經支援市面上「大多數」的晶片。
只是,萬一「好強牌」無線網卡是新的獨家的晶片,也就是kernel裡沒
有的,那就要去「好強牌網站」看看有沒有 for linux 的 driver, 如果有,
就抓來 make 成一個 hauchiang.o(或 hauchiang.ko) 要用時再
modprobe hauchiang 把好強網卡的 module 載入即可.

另外你最先提到「想問一下,driver 不就是一堆 source code
然後 compile 完變執行檔,」
是有錯誤的想法,一般所謂 driver make 出來並不是「執行檔」而只是
一個可以被掛上來的 xxxx.o 或 xxxx.ko, 就算你不是用 xxxx.o 而是直接
「包」在 kernel 裡, 那個 kernel 也不是「執行檔」

你問的「編入核心」指的應該是選「*」而不是選「M」, 它會直接包含
在 make 出來的 /usr/src/linux/arch/i386/boot/bzImage 裡, 而不是個別
獨立的 xxxx.o
訪客
 


回到 debian desktop

誰在線上

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