كيفية كتابة لينكس دعوة وحدة سائق / استخدام وحدة سائق آخر؟

StackOverflow https://stackoverflow.com/questions/413955

سؤال

وأنا تطوير لينكس وحدة سائق loadable ولدي لاستخدام جهاز آخر في بلدي السائق. (نوع من سائق مكدسة على سائق آخر)

وكيف يمكنني الاتصال / استخدام سائق آخر في السائق الخاص بي؟ أعتقد أنهم في كل من نواة لذلك قد يكون هناك طريقة التي يمكن استخدامها سائق آخر مباشرة.

هل كانت مفيدة؟

المحلول

وسوف تحتاج لEXPORT_SYMBOL (أو EXPORT_SYMBOL_GPL) الماكرو. على سبيل المثال:

/* mod1.c */
#include <linux/module.h>
#include <linux/kernel.h>
#include "mod1.h"
....
void mod1_foo(void)
{
    printk(KERN_ALERT "mod1_foo\n");
}
EXPORT_SYMBOL(mod1_foo);

/* mod2.h */
....
extern void mod1_foo(void);
....

/* mod2.c */
#include <linux/module.h>
#include <linux/kernel.h>
#include "mod1.h"
#include "mod2.h"
int init_module(void)
{
    mod1_foo();
    ...

وهذا يجب أن يكون الإبحار عادي، ولكن يجب بالطبع أن تكون حذرا مع مساحة الاسم - الدوس على شخص آخر حرف حدة النواة سيكون من المؤسف

نصائح أخرى

وأنت نسيت أن أذكر أن يجب أيضا دراسة try_module_get / module_put / symbol_get / symbol_put / symbol_request، لضمان تحميل وحدة أخرى، والحقيقة أنه لا تفرغ أثناء الاستخدام. لا أذكر التفاصيل الدقيقة الرغم من ذلك؛ أعتقد أن مودبروب سيضمن يتم تحميل وحدة أخرى، لكنني لست متأكدا مما اذا كان سيتم إضافة تبعية وقت لتفريغ. انا اعتقد ان هذا قد تكون هناك حاجة إلى تلك اجهات برمجة التطبيقات لبعض الحالات الأخرى، ولكن تحتاج لمعرفته حول لهم للتحقق من ذلك.

وراجع للشغل، هو الكتاب مجانا لينكس برامج تشغيل الأجهزة متوفرة هنا، وسوف أجيب على هذا السؤال، وأكثر من ذلك بكثير: http://lwn.net/Kernel/LDD3/

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top