驅動 入門例項hello驅動(一)

2021-09-26 06:49:32 字數 1547 閱讀 5910

一、基本理論

二、基本資料結構和例項

三 、總結

一、基本理論

雖然基本的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目錄...