2012-03-22 20 views
9

Çekirdeğe iki basit modül geliştirdim. Şimdi bir modülde bir fonksiyon tanımlamak istiyorum ve bundan sonra bunu diğer tarafta kullanıyorum.Bir linux çekirdek modülünde bir işlev nasıl tanımlanır ve başka birimde kullanılır?

Bunu nasıl yapabilirim?

Diğer modüldeki işlevi ve arayanı sorunsuz bir şekilde tanımlayın.

#include <linux/module.h> 

int fun(void); 
EXPORT_SYMBOL(fun); 

int fun(void) 
{ 
    /* ... */ 
} 

Ve module2.c kullanmak:

+0

Olası kopyalar [başka modül ihraç çekirdek modülü işlevleri çağırmak nasıl?] (Http: // stackoverflow .com/question/12311867/nasıl yapılır-ara-ihraç-kernel-module-functions-on-başka-modülü) –

cevap

25

module1.c bunu tanımla

extern int fun(void); 
ait
+0

Hala bir sorunum var./Var/log/i dizininde, printk işleminin yapıldığını görmek için dosya mesajlarını açın. Şöyle bir mesaj görüntülenir: "modül lisansı" belirtilmemiş "kernel taint", "Kernel taintinden dolayı hata ayıklama devre dışı bırakılıyor". Diğer modülde bir mesaj yazdırmak için sadece bir modülün fonksiyonunu çağırıyorum. – Ricardo

+1

@Ricardo: Bu, dışa aktarma işlevleriyle ilgili değil, yalnızca modülün lisansını tanımlamadığınız gerçeğiyle ilgilidir. Bunu yapmak için 'MODULE_LICENSE' makrosunu kullanın. –

+0

Çalışıyor. Teşekkür ederim. Çekirdek görüntüsü içindeki modüller için aynı işlem mi? – Ricardo

İlgili konular