#include
#include
static
int __init hello_init(void) //核心初始化函式
static
void __exit hello_exit(void)//核心清除函式
module_init(hello_init); //指定初始化函式
module_exit(hello_exit); //指定清除函式
module_license("gpl"); //指定**使用的許可證
module_author("laowu"); //指定作者
module_version("1.0"); //指定**修訂號
obj-m := hello.o
kdir
:=~/linux-
2.6make -c
$(kdir) m=`pwd` modules
obj-m := hello.o說明有乙個核心模組需要從hello.o構造,生成的模組名稱是hello.ko.
如果hello.ko是由兩個原始檔生成,例如file1.c file2.c,則應該如下編寫
obj-m := hello.ko
hello-objs := file1.o file2.0
make -c $(kdir) m=pwd
modules
首先改變目錄到-c指定的位置(即核心源**目錄),其中儲存有核心的頂層makefile檔案, m=選項,讓該makefile在構造modules目標之前返回到模組源**目錄
insmod hello.ko
module_param函式使用方法:
module_param(name, type, perm)
name:核心引數的名稱,自己定義;
type:核心引數的型別,常見的型別byte、short、int、long、ulong、bool 、charp(字元指標);
perm:核心引數的許可權s_irugo(對模組引數具有讀許可權)。其實許可權和檔案的 許可權差不多
核心載入模組時傳遞引數的方法:
使用命令:insmod ***.ko a=1
模組載入後,並且他的許可權不為0,就可在/sys/module/***/parameter目錄下 找到對應的模組引數。
使用export_symbol將函式匯出,供其他模組使用;在」/proc/kallsyms」檔案中對應這符號表,它記錄了函式的符號和函式在記憶體所在的位址。
Linux裝置驅動 模組
模組檔案 在檔案系統中可以被直接插入到核心的檔案 模組三要素 模組載入函式 必須 當在檔案系統中使用insmod或者該模組在核心被執行的時候,自動執行該函式 函式方式 1 預設方式 int init module void 2 使用者自定義 int test init void module ini...
LINUX塊裝置驅動 1
編寫塊裝置驅動的關鍵步驟 1 呼叫register blkdev申請或註冊主裝置號及裝置名稱,詳見核心原始碼中該函式的注釋。不過下面這篇文章裡並未用到這一步 2 呼叫blk init queue函式建立並初始化乙個 request queue 結構,該函式需要乙個用來處理請求的do request函...
USB 裝置相關驅動模組 2 6核心
a.核心模組 usbcore 對應核心配置引數 config usb b.usb 主控制器驅動模組 ehci hcd ehci usb 2.0 支援 config usb ehci hcd uhci hcd uhci pc 系統的晶元支援 config usb uhci hcd ohci hcd o...