007 驅動註冊

2021-09-26 21:29:38 字數 2392 閱讀 7518

platform_driver_register 函式和platform_driver_unregister 函式用於註冊和解除安裝驅動。

1、在原始碼目錄下的 include/linux/platform_device.**件中。

extern int platform_driver_register(struct platform_driver *);

extern void platform_driver_unregister(struct platform_driver *);

2、platform_driver結構體在原始碼目錄下的include/linux/platform_device.h標頭檔案中。
struct platform_driver ;
該結構中包含了一組操作函式和乙個struct device_driver 的物件。在驅動中首先要做的就是定義platform_driver 中的函式,並建立這個結構的乙個物件例項, 然後呼叫platform_driver_register()向系統註冊驅動。

函式 int (*probe)(struct platform_device *);

主要是進行裝置的探測和初始化。想呼叫乙個gpio,那麼首先需要探測這個gpio 是

否被占用了,如果被占用了那麼初始化失敗,驅動註冊也就失敗了;如果沒有被占用,那麼就

宣告要占用它。

函式 int (*remove)(struct platform_device *);

移除驅動,該函式中一般用於去掉裝置節點或者釋放軟硬體資源。

結構體struct device_driver driver;

主要包含兩個引數,乙個是name 引數,驅動名稱(需要和裝置驅動結構體中的name 引數一樣);乙個是owner,一般是this_module。

1、register_driver.c

#include #include /*驅動註冊的標頭檔案,包含驅動的結構體和註冊、解除安裝的函式*/

#include //driver_name 需要和註冊的裝置名稱相同

//這樣才會呼叫platform_match與裝置進行匹配

#define driver_name "skyfall"

module_license("dual bsd/gpl");

module_author("skyfall");

static int skyfall_probe(struct platform_device *pdv)

static int skyfall_remove(struct platform_device *pdv)

static void skyfall_shutdown(struct platform_device *pdv)

static int skyfall_suspend(struct platform_device *pdv)

static int skyfall_resume(struct platform_device *pdv)

struct platform_driver skyfall_driver =

};static int __init skyfall_init(void)

static void __exit skyfall_exit(void)

module_init(skyfall_init);

module_exit(skyfall_exit);

2、makefile檔案
#!/bin/bash

$(warning kernelrelease = $(kernelrelease))

ifeq ($(kernelrelease),)

#核心的原始碼路徑, ?= 條件賦值, uname -r 得到核心版本號

kerneldir ?= /home/mint/itop/linux_3.0

# := 立即賦值, 得到當前的絕對路徑

pwd := $(shell pwd)

# -c 切換工作路徑, $(make) = make

modules:

$(make) -c $(kerneldir) m=$(pwd) modules

clean:

rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions module* modules*

.phony: modules clean

else

# 生成模組

obj-m := register_driver.o

endif

3、編譯驅動模組

Linux驅動程式設計(十) 驅動註冊

驅動註冊使用結構體platform driver,該結構體在 include linux platform device.h 中,使用命令開啟 vim include linux platform device.h驅動註冊函式platform driver register,驅動解除安裝函式plat...

cdev方式註冊驅動

核心提供了三個函式來註冊一組字元裝置編號,這三個函式分別是 register chrdev region alloc chrdev region 和 register chrdev 1 register chrdev 比較老的核心註冊的形式 早期的驅動 2 register chrdev regio...

Platform匯流排註冊驅動

linux核心中常見的的匯流排有i2c匯流排,pci匯流排,串列埠匯流排,spi匯流排,pci匯流排,can匯流排,單匯流排等,所以有些裝置和驅動就可以掛在這些匯流排上,然後通過匯流排上的match進行裝置和驅動的匹配。但是有的裝置並不屬於這些常見匯流排,所以我們引入了一種虛擬匯流排,也就是plat...