驅動模組的編寫 向核心新增系統呼叫函式

2021-07-09 13:28:56 字數 1621 閱讀 9929

1.驅動模組的編寫

例子:

@在pc機原始碼目錄drivers/arm_emb:

mkdir demo_******  建乙個模組目錄

vim demo.c 編寫demo

static int demo_init (void) {};

module_init(demo_init);

static void demo_exit (void) {};

module_exit(demo_exit);

module_license("gpl");

module_author("***");

module_version("xx-xx-xx");

module_description(" ********");

vim makefile 編寫makefile

obj-m :=demo.o

kernel :=/linux-3.5

all:

make -c $(kernel) m=`pwd` modules

clean:

make -c $(kernel) m=`pwd` clean

完了make 將生成的檔案 demo.ko 拷貝到開發板的根目錄

@開發板:

插入 insmod demo.ko

移除 rmmod demo (注意木有.ko)

檢視 lsmod demo.ko

注:如模涉及到模壞呼叫的,先移除被呼叫的模組,再移除呼叫模組

兩個模組的呼叫:

在被呼叫的函式模組:export_symbol_gpl(demo_func); //demo_func是被呼叫的函式名

在主動呼叫模組:extern void demo_func(int val); //對函式進行外部宣告

對與兩的模組間引數的傳遞也是一樣的

extern int val; //在主動呼叫模組宣告

export_symbol_gpl(val); //在主動呼叫模組匯出

注: 符號(引數)匯出:在那呼叫,在哪匯出

2.如何向核心新增系統呼叫函式

例子:

@在pc機linux原始碼目錄drivers下:

mkdir arm_emb  建立目錄檔案

vim mysyscall.c 編寫呼叫函式

syscall_define1(buzzer_ctrl, int, cmd) {}; //cmd函式的引數,有x個引數=》definex

vim makefile 建立makefile

obj-y +=mysyscall.o

vim arch/arm/kernel/calls.s 新增系統呼叫號

arch/arm/include/asm/unistd.h //檢視真正系統呼叫號

vim ../makefile 即 arm_emb 的上層目錄drivers 的makefile 新增一行:

obj-y +=arm_emb/ //arm_emb是使當前目錄能夠編譯

然後返回原始碼目錄 make -jx

Linux向核心新增模組

linux核心程式設計的基礎是向核心新增自己的模組。下面就以hellomod為例,簡單的介紹一下向核心新增模組。1 編寫 hellomod.c include 所有的模組都要使用標頭檔案module.h include 標頭檔案kernel.h包含了常用的核心函式 include 包含了巨集 ini...

核心驅動模組編寫規範

書寫格式範例 include include 模組入口函式規範 static int init func init void static void exit func exit void 關閉init中占用的資源 printk byebye s n module module init func ...

Linux 驅動開發核心模組的新增

寫這篇部落格的目的是做一下筆記,便於自己查閱。首先給出核心模組源 當然是最最簡單的helloworld。include include module license gpl gpl 開源協議 static inthello init void static voidhello exit void m...