光華商場

經典論壇博物館 (2000~2002)

典藏千禧年硬體社群討論

請問幾個問題

看板:Linux 作業系統 發表時間:2001-01-27 15:06:21 回覆數:9 則 瀏覽點閱:169 次
請教高手:

1.我用 Red Hat 7 與 custom 的方式安裝我的系統.由於一開始抓不到網路卡(我有兩張網卡),所以我必須在安裝完成後,自己裝入網路卡的驅動程式.
我從 D-link 的網站 download tar 檔案下來後,解壓縮, 編譯, 然後產生了兩個模組: pci-scan.o, via-rhine.o
我把這兩個檔案 cp 到 /lib/modules/net/2.2.16-22/net 裡面. 然後這樣是不是就可以使用網卡了呢? 還是要重新編譯 kernel 才能用網卡?

2.我用 linuxconf 去設定兩張網卡的 IP,mask,device. 設定完後要 Active 我的這些設定(否則設定會消失),可是我卻一直出現一個 warning message:
"The file xxx as a revision data in the future. This probably means that
your system time is wrong or as been at some point."
這樣的訊息總共出現四次,xxx 分別為 "/etc/printcap" ,"etc/sysconfig/mouse", "/etc/crontab","etc/X11/fs/config".這究竟是哪邊發生問題呢?

3.這是從 Windows 裡面的控制台看到的,兩張網卡插在同一台主機,他們的 IRQ 居然一樣,都是 9 ,為什麼會這樣呢? 這樣不會造成衝突嗎 ?
💬 討論串回覆 (9 則)
#1 樓 nash
📅 2001-02-02 19:39:01
你是如何做的? tar開之後不是有一堆東西嗎? 一般來講可在該tar開的那個資料夾執行make all再make install(如果它的driver有寫make file的話)那如果是照你這樣做的話就必須要手動copy到該資料夾是沒錯,但這僅是你將該module給複製到系統但並不代表系統會知道你要此裝置用該module來跑,我這樣說你瞭解嗎? 至於要不要重新編譯kernel,我得先告訴你,當你到kernel source的資料夾下(/usr/src/linux/linuxX.X.X)執行make clean然後make all時,會出現一堆問題要問你,包含了您的CPU啦,硬體是否有SCSI或支援RAID啦,....等等主要是在設您的LINUX對於你的硬體或一些軟體上的支援程度,其中有一個項目是針對PnP所做的支援,我這麼說好了,你最好將主機版上的BIOS的其中一個選項PnP OS installed 選成Disable;怎麼說呢? 因為我們在寫driver時,裡頭有一段是去跟系統要一個可用IRQ,而如果今天你那driver的寫法剛好是比較偷懶,在沒有探測之前就跟系統的configuration space要的話那它always要到同一個數字,所以這是為何兩個裝置的IRQ都是9的原因;而將BIOS裡頭PnP OS installed選成Disable的意思就是該作業系統不支援PnP(Plug and Play)而這對你的作業系統到底是否為PnP是沒有影響的(例如:windowsX支援PnP,但你還是可以將該選項Disable),差只差在Disable的話所有裝置的IRQ是由BIOS自行分配,而Enable的話則由作業系統來分配;而我現在建議你的這件事也等效於BIOS裡該選項選Enable,而你去kernel重build成支援PnP....,不過重build的話要比較久就是了; 剛才! 請注意! 剛才只是其中我的一個較直接的想法,比較有可能的......但.....據我了解pci-scan.o這個module是由pci-scan.c compile出來的而且據我了解pci-scan.c的功能是去掃瞄PCI匯流排上可用的裝置再來由該產品的driver去call它,然後比對DEVICE ID及VENDOR ID去認出自己的裝置,而它的用法應該可以你自己去看到底driver有沒有起來,應為它只是很單純的call來call去的function而已,不過問題是你都沒講你到底是那張卡咧?

Hello! I'm nash......
#2 樓 nash
📅 2001-02-02 19:39:07
你是如何做的? tar開之後不是有一堆東西嗎? 一般來講可在該tar開的那個資料夾執行make all再make install(如果它的driver有寫make file的話)那如果是照你這樣做的話就必須要手動copy到該資料夾是沒錯,但這僅是你將該module給複製到系統但並不代表系統會知道你要此裝置用該module來跑,我這樣說你瞭解嗎? 至於要不要重新編譯kernel,我得先告訴你,當你到kernel source的資料夾下(/usr/src/linux/linuxX.X.X)執行make clean然後make all時,會出現一堆問題要問你,包含了您的CPU啦,硬體是否有SCSI或支援RAID啦,....等等主要是在設您的LINUX對於你的硬體或一些軟體上的支援程度,其中有一個項目是針對PnP所做的支援,我這麼說好了,你最好將主機版上的BIOS的其中一個選項PnP OS installed 選成Disable;怎麼說呢? 因為我們在寫driver時,裡頭有一段是去跟系統要一個可用IRQ,而如果今天你那driver的寫法剛好是比較偷懶,在沒有探測之前就跟系統的configuration space要的話那它always要到同一個數字,所以這是為何兩個裝置的IRQ都是9的原因;而將BIOS裡頭PnP OS installed選成Disable的意思就是該作業系統不支援PnP(Plug and Play)而這對你的作業系統到底是否為PnP是沒有影響的(例如:windowsX支援PnP,但你還是可以將該選項Disable),差只差在Disable的話所有裝置的IRQ是由BIOS自行分配,而Enable的話則由作業系統來分配;而我現在建議你的這件事也等效於BIOS裡該選項選Enable,而你去kernel重build成支援PnP....,不過重build的話要比較久就是了; 剛才! 請注意! 剛才只是其中我的一個較直接的想法,比較有可能的......但.....據我了解pci-scan.o這個module是由pci-scan.c compile出來的而且據我了解pci-scan.c的功能是去掃瞄PCI匯流排上可用的裝置再來由該產品的driver去call它,然後比對DEVICE ID及VENDOR ID去認出自己的裝置,而它的用法應該可以你自己去看到底driver有沒有起來,應為它只是很單純的call來call去的function而已,不過問題是你都沒講你到底是那張卡咧?

Hello! I'm nash......
#3 樓 fly
📅 2001-02-02 22:55:06
感謝 nash 的大篇幅指教
我之後又做了幾件事:
1. 我真的到 kernel 底下,試圖 make kernel.只不過後來給它強迫中斷,因為重新編譯核心真的是太久太久了,然後又問了一大堆的問題,初學者哪裡知道那麼多的東西 ??
2. 基於 1. 的理由,後來我選擇重灌,因為我直覺的認為,核心已經被我破壞的一榻糊塗
3. nash 說的沒錯, tar 完之後, 它的 makefile 裡面有 all 和 clean 兩個參數. make clean 和 make all 我都做了,然後把產生的 obj 檔案 copy 到 lib 目錄下.
4. 我唯一沒做的,就是再去 insmod (install module), 我以為重開機之後, Linux 就會幫我載入到 kernel 了.
由於工作的關係,大年初六之後,我就沒時間再碰 Linux 了,所以並不曉得如果我執行 insmod 之後,是不是就正常了.
nash 是寫 driver 的嗎?是寫什麼樣的 driver 呢?
我是 BIOS 助理工程師,看來我們做的工作都是挺類似的呢 不過我是以組合語言為主. 而 driver 和 kernel 幾乎都是用 c 寫的比較多.
#4 樓 nash
📅 2001-02-03 00:14:22
sorry! 你可能有點誤會insmod這指令的意思了! 它所提供的function是去將module插入系統,所以應該是insmod(insert module),這個將module插入系統的動作最基本可由該程式裡有一段是init_module()(但該程式必須#include )才可讓insmod這個使用者界面的指令來成立可以執行init_module()之內所做的一些事情ex:
init_module()
{
register_XXXXX ;
.......
}
這是為了要跟系統註冊function而在init_module()之後也要加上一段clean_module()是為了讓這module從系統給拔出來,在clean_module()之內通常可以做unregister_XXXX是為了在module拔出之後跟系統做unregister之類的動作,其在使用者界面中之指令為rmmod(後面不能加副檔名.o);講到這裡我講的都是最一般單純的case,不一定要這樣用,據我所知pci-scan.c在init_module()及clean_module()中並不需要做出什麼事,只要它的主程式部分等著跟別人的driver做呼叫就行了.....,講了這麼多,主要是要告訴你insmod並沒有將driver給install,你可以用lsmod這指令去verify,當你執行insmod *.o後鍵入lsmod可以看到現在系統正在用的module,的確是有你剛才插入的module(當然也得你剛才insmod有成功),但是你看看重開之後去執行lsmod去check那個module是否還被系統使用,答案是不僅沒被始用而且它也不在module名單之列.....所以一個driver如果是用make file去做的話,在make中之參數應該也要有install這項,也就是make all之後再make install(若先前已有make過也就是還有之前make出之*.o的話,請先make clean再make all再make install)

Hello! I'm nash......
#5 樓 nash
📅 2001-02-03 00:15:40
sorry! 是#include

Hello! I'm nash......
#6 樓 nash
📅 2001-02-03 00:16:09
linux/module.h

Hello! I'm nash......
#7 樓 nash
📅 2001-02-03 00:19:41
I'm so sorry! 一直有個符號沒辦法顯示所以傳那麼多次......

Hello! I'm nash......
#8 樓 nash
📅 2001-02-03 00:21:37
我之前是寫Linux driver的,現在在玩ATMEL AP

Hello! I'm nash......
#9 樓 fly
📅 2001-02-04 23:27:54
感謝 nash 的協助. 我現在又可以上網了.
我之所以會說 insmod 是 install module, 這是書上寫的 (Red Hat Linux 7 指令參考手冊,旗標出版社出版) ......
不過 nash 講的沒錯.我 insmod 之後,果然可以抓到網路卡 (用 ifconfig 指令看). 可是重開機之後又不行了. 變成說,我每次開機,都要手動安裝一次這兩個 module (pci-scan.o 可能可以不用).
難道真的,一定要 make kernel 才能完全把網路卡的驅動程式載入嗎? make kernel 比我組譯 BIOS source code 還要久ㄋㄟ ...... 我組譯完整的 BIOS source code 要花 20 分鐘的時間 ......
不過其實,一台 server 本來就不需要常開機關機,所以少數幾次開機,手動裝網路卡,這應該是可以忍受的.
另外,我現在知道了一件事: 兩張網路卡的 IRQ 一樣, 這是可以被允許的.因為 PCI bus 本來就可以 share irq 資源. 這在 PCI spec 上面可能有定義,有興趣的網友可以去看看.

Edited by - fly on 2001/02/04 23:32:46

Edited by - fly on 2001/02/04 23:39:07
⬅️ 返回【Linux 作業系統】看板列表 🏛️ 回到經典論壇博物館首頁