閱讀687 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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

  上一篇:go 關於linux下的嵌入式文件係統以及flash文件係統選擇
  下一篇:go android dialog 模擬新浪、騰訊title彈框效果