驅動程式設計之「匯出符號」

2021-06-19 00:04:40 字數 1524 閱讀 7962

驅動程式設計之「匯出符號」

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 ...