一、基本理論
二、基本資料結構和例項
三 、總結
一、基本理論
雖然基本的linux核心是乙個大的image檔,也可以當做是乙個bin檔,可執行檔案。但是核心是模組化組成的,它允許在核心執行時向其中動態的插入或刪除**。
二、基本資料結構和例項
以下是module_init和module_exit巨集函式
/* each module must use one module_init(). */
#define module_init(initfn) \
static inline initcall_t __inittest(void) \
\int init_module(void) __attribute__((alias(#initfn)));
/* this is only required if you want to be unloadable. */
#define module_exit(exitfn) \
static inline exitcall_t __exittest(void) \
\void cleanup_module(void) __attribute__((alias(#exitfn)));
這個是基本的核心或驅動的書籍都會提到的入門demo。
#include #include #include /*
* hello_init ---初始化函式,當模組裝載時被呼叫,如果成功返回 0,否則返回非0值
* */
static int __init hello_init(void)
/* * hello_exit ---退出函式,當模組解除安裝時被呼叫
* */
static void __exit hello_exit(void)
module_init(hello_init);
module_exit(hello_exit);
module_license("dual bsd/gpl");
ifneq ($(kernelrelease),)
obj-m :=hello.o
else
kerneldir ?=/lib/modules/$(shell uname -r)/build
pwd :=$(shell pwd)
modules:
$(make) -c $(kerneldir) m=$(pwd) modules
endif
clean:
rm -rf *.o hello.mod.c module* module*
下面是測試的結果
三 、總結
驅動 入門例項字元驅動(二)
一 基本理論 二 基本資料結構和例項 一 基本理論 本文例項參考 linux裝置驅動開發詳解第二版 例項只是為了入門測試,初始化基本沒有錯誤檢查。這次基於前面的例項,在filp private data新增自定義的裝置指標,這個是許多驅動都採取的做法。二 基本資料結構和例項 ifndef glbme...
Hello的驅動示例 linux驅動開發入門
開發環境 虛擬機器上的linux fedora arm 11 友善之臂的光碟帶的linux核心linux 2.6.36 開發步驟 1.先安裝手冊重新編譯下核心和裁剪切檔案系統,具體的就參考手冊,上面寫的很清楚,但是需要注意的是 在編譯核心的時候不要選擇linux module sample已經led...
Linux驅動篇之hello
一 環境 a ubuntu18.04 b arm linux gnueabi gcc 7.5.0 gcc 7.5.0 c friendlyarm tiny4412 標準版 d linux 5.5 二 目標 a hello驅動 b hello應用 三 步驟 a hello驅動 1 在drivers目錄...