驅動程式設計之「匯出符號」
1) 檔案**main.c:
#include
#include
#include"include/pymath.h"
module_license("dual bsd/gpl");
static int num=30;
module_param(num,int,s_irugo);
static int __init py_init(void)
static void __exit py_exit(void)
module_init(py_init);
module_exit(py_exit);
module_author("cuina");
2) main.c目錄下的makefile檔案:
ifneq ($(kernelrelease),)
obj-m :=hello.o
hello-objs:=main.o add.o
else
kdir:=/lib/modules/2.6.28/build
all:
make -c $(kdir) m=`pwd` modules
clean:
-rm -f *.ko *.o *.mod.o *.symvers
endif
3) pymath.h檔案:
#ifndef py_math_h_
#define py_math_h_
int pyadd(int x,int y);
#endif
4) pymath.c檔案:
#include
#include
#include"../include/pymath.h"
module_license("dual bsd/gpl");
extern int pyadd(int x,int y)
export_symbol(pyadd);
module_author("cuina");
5) pymath.c目錄下的makefile檔案:
ifneq ($(kernelrelease),)
obj-m :=pymath.o
else
kdir:=/lib/modules/2.6.28/build
all:
make -c $(kdir) m=`pwd` modules
clean:
-rm -f *.ko *.o *.mod.o *.symvers
endif
6) 此模組遇到的為題:
insmod hello.ko
insmod: error inserting 'hello.ko': -1 unknown symbol in module
7) 解決方法:把在
pymath。c的make出來的
module.symvers
拷到main.c所在的目錄中即可
16 驅動模組的符號表與符號匯出
檢視elf檔案的資訊 readelf test.ko a ko檔案組成 1 elf檔案頭 elf header magic 7f 45 4c 46 0101 0100 0000 0000 0000 0000 class elf32 data 2 s complement,little endian ...
Linux shell指令碼程式設計之符號篇
shell的作用是解釋執行使用者的命令,使用者輸入一條命令shell就解釋執行一條,這種方式成為互動式shell shell還有一種執行命令的方式稱為批處理,即使用者事先編寫好乙個shell指令碼 script 其中有很多條命令,讓shell一次性執行這些命令。今天我們重點說的就是這種批處理shel...
模組匯出符號
linux核心標頭檔案提供了乙個方便的方法用來管理符號的對模組外部的可見性,因此減少了命名空間的汙染 命名空間的名稱可能會與核心其他地方定義的名稱衝突 並且適當資訊隱藏。如果你的模組需要輸出符號給其他模組使用,應當使用下面的巨集定義 export symbol name export symbol ...