linux驅動開發--導出內核符號
導出內核符號模板代碼,驗證小實例:
/** *Copyright (c) 2013.TianYuan *All rights reserved. * *文件名稱: Esdexp.c *文件標識: 導出內核符號,此文件中的函數模塊被Esdimp.c調用 * *當前版本:1.0 *作者:wuyq * *取代版本:xxx *原作者:xxx *完成日期:2013-11-18 */ #include <linux/init.h> #include <linux/module.h> //聲明內核模塊的許可權,如果不聲明LISCENSE,模塊加載時將收到內核被汙染(kernel tainted)的警告 MODULE_LICENSE("GPL"); int esdexp_mult(int x, int y) { printk("enter esdexp_mult!\n"); return (x*y); } int esdexp_divd(int x, int y) { printk("enter esdexp_divd!\n"); return (x/y); } /*導出內核符號,定義的函數可以被其他函數調用*/ EXPORT_SYMBOL(esdexp_mult); EXPORT_SYMBOL(esdexp_divd);
/** *Copyright (c) 2013.TianYuan *All rights reserved. * *文件名稱: Esdimp.c *文件標識: 驗證Esdexp.c中的模塊 * *當前版本:1.0 *作者:wuyq * *取代版本:xxx *原作者:xxx *完成日期:2013-11-18 */ #include <linux/init.h> #include <linux/module.h> /*兩個ko文件, 安裝應該有順序的 modprob*/ //聲明內核模塊的許可權,如果不聲明LISCENSE,模塊加載時將收到內核被汙染(kernel tainted)的警告 MODULE_LICENSE("GPL"); extern int esdexp_mult(int ,int ); extern int esdexp_divd(int ,int ); static int __init esdimp_init(void) { int result = 0; /*編譯器、代碼可移植性、健壯性 */ printk("enter esdimp_init!\n"); /*局部變量分配在棧內存中,賦初值。默認不一定為0*/ /*局部變量應該放在函數內,可執行代碼之前。且賦初值。即:函數開頭,否則會有警告信息。*/ result = esdexp_mult(10, 17); printk("result = %d\n", result); return 0; } static void __exit esdimp_exit(void) { int result = 0; printk("enter esdimp_exit!\n"); result = esdexp_mult(1000, 60); printk("result = %d\n", result); } module_init(esdimp_init); module_exit(esdimp_exit);
KERNELDIR ?=/root/Desktop/work/ldd3/linux-2.6.31_TX2440A PWD := $(shell pwd) obj-m += Esdimp.o Esdexp.o #obj-m += Esdexp.o default: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules clean: @rm -f *.o *.ord* *.sy* *.mod.* *.ko
最後更新:2017-04-03 12:53:57