--在網友基礎上修改而來
模組1代碼:
#include<linux/init.h>#include<linux/module.h>MODULE_LICENSE("Dual BSD/GPL");int test_global_value_1 = 0x55;int test_global_value_2 = 0xaa;EXPORT_SYMBOL(test_global_value_1);EXPORT_SYMBOL(test_global_value_2);static int __init symbol_init(void){ printk("<0> symbol_init\n"); return 0; } int add_integar(int a, int b) { return (a + b); }int sub_integar(int a, int b){ return (a - b);}static void __exit symbol_exit(void){ printk("<0> symbol_exit\n");}EXPORT_SYMBOL(add_integar);EXPORT_SYMBOL(sub_integar);module_init(symbol_init);module_exit(symbol_exit);
模組2代碼:
#include<linux/module.h>#include<linux/init.h>extern int add_integar(int, int);extern int sub_integar(int, int);extern int test_global_value_1;extern int test_global_value_2;MODULE_LICENSE("GPL");static int __init use_symbol_init(void){ printk("test_global_value_1 = %x\n", test_global_value_1);printk("test_global_value_2 = %x\n", test_global_value_2);printk("<0> use_symbol_init");printk("<0> 1+2 = %d\n",add_integar(1,2));printk("<0> 3-2 = %d\n",sub_integar(3,2));return 0;}static void __exit use_symbol_exit(void){ printk("<0> Module exit!\n");}module_init(use_symbol_init);module_exit(use_symbol_exit);