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