0

我想使用網絡驅動模塊導出的網絡設備接口。這是我的程序devget.c未定義對用戶空間的網絡設備接口中的「功能」的引用。

#include<stdio.h> 
#include<linux/netdevice.h> 

    void main(void) 
    { 
    struct net_device* device; 

    device = dev_get_by_name("eth0"); 
    if (device == NULL) 
     printf("device is NULL\n"); 
    else 
     printf("This is a success story\n"); 
    } 

我正在交叉編譯這個。對`dev_get_by_name'的未定義引用。現在這個函數被定義爲/linux/netdevice.h文件中的一個原型。我用agcc編寫了這個腳本中包含的路徑。

+0

看來'dev_get_by_name'不包含在內核中。 – ciphor 2012-02-24 09:29:32

+0

問題是如何獲取網絡設備接口,所以我可以在我的設備中爲內核調用網絡API。我需要提供內核頭文件/ inlcude文件,這些文件將具有此dev_get_by_name的原型。我正在編譯這個android操作系統,我包括內核操作系統,並提供在編譯期間的內核包括如agcc getdev.c -o getdev -I android /內核的路徑。 – sraddhaj 2012-02-24 09:53:10

+1

來自用戶空間,則無法訪問net_device結構。您應該使用一些標準接口來配置您的網絡(ethtool,ifconfig)。否則,你應該在內核中編寫代碼 – 2012-02-27 14:39:07

回答

1

您似乎在構建用戶空間程序,而不是內核模塊。

用戶空間程序不能使用內核函數。他們只能使用libc或其他庫中的函數。

您需要將代碼編譯爲內核模塊。
這改變了幾件事 - 你沒有main函數(而不是init_module,這是不一樣的),編譯過程是不同的(不僅僅是gcc -o myprog myprog.c)。

我建議你閱讀一本關於內核開發的基本書。