2015-01-21 50 views
0

我在更新內核消息時遇到了問題。我想我可能已經損壞了我的內核,因爲KERN ALERT消息似乎沒有更新。系統調用教程 - Hello World

我所謂的 「dmesg的」 命令,這是被顯示的內容:

Jan 20 18:18:59 cu-cs-vm kernel: [29194.126766] hello world 

但更新後helloworld.c:

#include <linux/kernel.h> 
#include <linux/linkage.h> 

asmlinkage long sys_helloworld(void) 
{ 
printk(KERN_ALERT "Why isn't this working now???"); 
return 0; 
} 

它仍然打印: 1月20日18:35: 25銅CS-VM內核:[30178.146268]你好世界

這是我測試它的腳本:

#include <unistd.h> 
#include <stdio.h> 

int main(){ 
    int id; 
    id = syscall(318); 
    printf("should print out zero: %d\n", id); 
    return 0; 
} 

printf確實打印0而不是-1,這很好,但爲什麼不把內核消息從「hello world」更新爲「爲什麼現在不工作?」我已重新編譯。如果有人有任何想法,我會很感激,如果你可以與我分享。謝謝!

+0

您是否使用modprobe重新加載了模塊? – 2015-01-21 02:43:16

+0

我對modprobe不是很熟悉,但是我的問題是我不知道哪個模塊導致了問題。不確定要重新加載哪一個。 – user2998285 2015-01-21 03:06:47

+1

確保已經使用'rmmod'卸載了以前加載的模塊,然後使用'insmod'插入最近編譯的模塊。 – 2015-01-21 04:44:26

回答

0

你有它的工作,所以你的代碼不是問題,問題是你的內核安裝或你的版本。如果版本不是較新的,那麼insmod將不會覆蓋它。在安裝新版本(insmod)之前,完全刪除舊版本(rmmod)或對版本進行衝擊。

http://linux.die.net/man/8/rmmod

http://linux.die.net/man/8/insmod

即使手冊頁建議使用modprobe代替。也許你應該試試看,這很容易。

http://linux.die.net/man/8/modprobe

當然與modprobe你可以簡單地給它一個--force忽略了很多的版本檢查。但是,您需要的是-v選項,因此您可以查看有關模塊被拒絕原因的錯誤。

如果內核已被加載/緩存,系統可能還需要重新啓動。