2013-06-19 21 views
5

a.ko'dan (çekirdek modülünden) foo() ve foo1() öğelerini dışa aktarıyorum foo1() giriş parametresini, bir işlev işaretçisi alır. foo1() öğesini b.ko'dan çağırıyorum ve foo() parametresini giriş parametresi olarak geçiriyorum.EXPORT_SYMBOL | insmod sırasındaki tanımsız sembol

a.ko b.ko'dan önce işlenmemiş olsa da b.ko (bilinmeyen sembol foo) için bir insmod başarısızlığı görüyorum.

Herhangi bir açıklama/çözüm? Bu sorunu çözmek için iki yol vardır şanslı

+0

Modülleri farklı dizinlerde oluşturdunuz mu? B.ko oluştururken .symvers dosyasını kullandınız mı? Ayrıca bkz .: http://stackoverflow.com/questions/12311867/ – Eugene

+0

En az çalışma örneği: https://stackoverflow.com/questions/12311867/how-to-call-exported-kernel-module-functions-from-another- modül/44614246 # 44614246 –

cevap

3

sayesinde, 1) Makefile'ında aynı çekirdek modüllerini Derleme yani OBJS m: = a.o B.Ö. 2) Dahil edilmiş işlevi veya değişkeni kullanacak olan çekirdek modülünün Makefile öğesinde "> dışa aktarma işlevini veya değişkenini veren çekirdek modülünün Module.symvers'ına mutlak yol)" KBUILD_EXTRA_SYMBOLS = < "ifadesini ekleyin.

+0

KBUILD_EXTRA_SYMBOLS satırı için biçim nedir? Yapmak bana "karışık örtülü ve normal kurallar: kullanım dışı sözdizimi" – jeremiah

+1

@jeremiah, KBUILD_EXTRA_SYMBOLS bir make değişkeni ve sanırım böyle bir biçim yoktur. GNU, "karışık örtülü ve normal kurallar: atıfta bulunmuş sözdizimi" atma işlemini daha yeni GNU yapım sürümü (4.0) kullanmasından kaynaklanmaktadır. Modülü derlemek için GNU make versiyonunu (3.8.1) kullanmayı deneyin. Http://blog.melski.net/2015/01/12/whats-new-in-gnu-make-4-1/ bağlantısından geçin –