[問題] 修改Linux Module(insmod傳入參數的問題)

看板C_and_CPP (C/C++)作者時間16年前 (2010/05/11 01:01), 編輯推噓5(5025)
留言30則, 3人參與, 最新討論串1/1
這個問題不知道po在這裡合不合適? 除了Linux和CPP以外如果有更適合的板希望可以來信告知XD --- 我沒有寫過Linux Kernel Programming (Kernel新人), 不過因為實驗所需, 我試著修改Madwifi的SampleRate演算法的模組,也就是ath_rate_sample。 我修改了madwifi/ath_rate/sample/sample.c這個檔案, 希望可以runtime從終端機傳入參數來改變模組的功能。 例如定一個叫做myint的變數,希望可以做到: if (myint==1) {...} else if (myint==2) {...} else {...} //myint是希望可以從Terminal改變它的值 查了很久發現module_param + insmod可以做到這件事情。 http://blog.roodo.com/seanlin226/archives/3885605.html 所以我在sample.c裡面的#include串之後寫了 static int myint=9; module_param(myint,int,0); 重新make和make install之後,在sample的資料夾下, 因為我不確定要如何操作到剛剛寫完的sample.c,所以我試著輸入 1. insmod ath_rate_sample.ko myint=5 -> insmod: error inserting 'ath_rate_sample.ko': -1 File exists 2. insmod ./ath_rate_sample.ko myint=5 -> insmod: error inserting 'ath_rate_sample.ko': -1 File exists 3. insmod ath_rate_sample myint=5 -> insmod: can't read 'ath_rate_sample': No such file or directory 4. insmod sample.o myint=5 -> insmod: error inserting 'sample.o': -1 Invalid module format 我個人認為是1.或2.最合理啦(ath_rate_sample.ko),不過它卻會顯示-1 File exists, Google了很久也找不出是為什麼, 請問有沒有人知道我是哪裡做的不對呢? 問題有點長,希望有人可以幫幫初學者小弟解惑。 感謝再感謝!!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.42.171 ※ 編輯: littleboy 來自: 140.112.42.171 (05/11 01:02)

05/11 01:09, , 1F
應該是因為你已經把該kernel module insert進kernel了
05/11 01:09, 1F

05/11 01:10, , 2F
試著先下rmmod ath_rate_sample.ko,然後再打你要的指令
05/11 01:10, 2F

05/11 01:17, , 3F
喔我有試過這樣 可是他會說那個module正在使用 不能刪
05/11 01:17, 3F

05/11 01:17, , 4F
我不知道要怎麼單獨關掉一個module
05/11 01:17, 4F

05/11 01:20, , 5F
你有別的module正在使用該module嗎?
05/11 01:20, 5F

05/11 01:20, , 6F
如果有, 先移除使用ath_rate_sample.ko的module
05/11 01:20, 6F

05/11 01:21, , 7F
即使使用rmmod -f 也是會有error(Resource temporarily
05/11 01:21, 7F

05/11 01:21, , 8F
再卸載ath_rate_sample.ko
05/11 01:21, 8F

05/11 01:21, , 9F
unavailable) 然後insmod會有一樣的結果(-1 File exist)
05/11 01:21, 9F

05/11 01:22, , 10F
不然試試重開機重新insert...這應該算絕招吧..
05/11 01:22, 10F

05/11 01:27, , 11F
可以耶!!先把ath_pci rmmod就可以了!!感謝你!! 可是...
05/11 01:27, 11F

05/11 01:28, , 12F
ath_pci卸載無線網路就會斷掉了...囧
05/11 01:28, 12F

05/11 01:29, , 13F
所以沒有辦法在module不關掉的前提下傳參數進module嗎??
05/11 01:29, 13F

05/11 01:33, , 14F
你用的module_param本來就是module在載入階段設定的
05/11 01:33, 14F

05/11 01:33, , 15F
我猜你希望達到的功能是有一個application console
05/11 01:33, 15F

05/11 01:34, , 16F
直接讓你輸入參數來改變kernel module的值
05/11 01:34, 16F

05/11 01:34, , 17F
不知我猜的對不對
05/11 01:34, 17F

05/11 01:36, , 18F
對對對 我就是希望可以達到這種功能! 樓上有什麼方法嗎?
05/11 01:36, 18F

05/11 01:40, , 19F
用netlink如何呢?可以從application傳訊息下去kernel
05/11 01:40, 19F

05/11 01:53, , 21F
感謝樓上 似乎是用個類似socket的東西來讓兩邊傳訊息
05/11 01:53, 21F

05/11 01:53, , 22F
應該是可以達到我要的功能沒錯 不過沒想到只是傳一個
05/11 01:53, 22F

05/11 01:53, , 23F
變數到kernel裡面會需要這麼麻煩 Orz
05/11 01:53, 23F

05/11 01:56, , 24F
這就是人生
05/11 01:56, 24F

05/11 02:01, , 25F
樓上真是一語道破...
05/11 02:01, 25F

05/11 14:35, , 26F
所以跟kernel打交道 就是人生的縮影?
05/11 14:35, 26F

05/12 00:31, , 27F
樓上的結論好奇怪XD 來回一下自己
05/12 00:31, 27F

05/12 00:31, , 28F
rmmod可以改 可是只能在載入模組時改變
05/12 00:31, 28F

05/12 00:32, , 29F
netlink應該也可以 不過如果只傳個參數進去沒有太多互動
05/12 00:32, 29F

05/12 00:33, , 30F
改 /sys/module/module_name/parameter/var_name 即可
05/12 00:33, 30F
文章代碼(AID): #1Bw3lU-a (C_and_CPP)
文章代碼(AID): #1Bw3lU-a (C_and_CPP)