Linux驅動之 經典方式註冊

2021-10-21 11:43:00 字數 2760 閱讀 6054

雜項方式註冊生成的裝置檔案會自動掛載在/dev目錄下面,經典方式註冊的裝置不會自動掛載在/dev目錄下面

.雜項裝置註冊的主裝置號只能為10,經典方式註冊主裝置號可以指定或者系統自動分配乙個除了(10)以外的任意乙個裝置號。雜項方式只暫用乙個子裝置號,經典方式占用當前主裝置號所有的子裝置號(0~254)

標頭檔案: 

#include

功能: 註冊函式:

函式: int

register_chrdev

(unsigned

int major,

const

char

*name,

const

struct file_operations *fops)

引數: major:主裝置號(不可為10

),0為自動分配

name:這個name不是註冊裝置的名稱,隨便填寫

fops:file_operations 結構體。同雜項裝置註冊裡面一樣

返回值:

當 major ==

0:成功:返回所系統分配的主裝置號,失敗:返回負數。

當 major >

0:成功:返回0 失敗:返回負數。(自己指定裝置號)**

****

****

****

****

****

****

****

****

****

****

****

****

****

***標頭檔案:

#include

static

inline

void

unregister_chrdev

(unsigned

int major,

const

char

*name)

功能: 登出函式

引數: major:

如register_chrdev函式裡面引數major為0,則為register_chrdev函式返回的主裝置號

如果register_chrdev裡面的major自己指定的裝置號,為指定的裝置號

name:

保持與register_chrdev函式裡面的name引數一致

返回值:

註冊乙個蜂鳴器裝置:

核心模組:

#include

#include

#include

#include

#include

//經典註冊方法

/* gpd0_0---beep 0x114000a0 -- con 0x114000a4 -- con*/

struct file_operations my_ops;

int my_major;

unsigned

int* base=

null

;#define gpd0_con (*((unsigned int *)(base)))

#define gpd0_dta (*((unsigned int *)(base+1)))

int beep_open (

struct inode * inode,

struct file * file)

int beep_close (

struct inode * inode,

struct file * file)

static

int __init beep_init

(void

)static

void __exit beep_exit

(void

)module_init

(beep_init)

;module_exit

(beep_exit)

;module_license

("gpl"

);

使用者呼叫裝置檔案原始碼:

拷貝到開發板根檔案目錄下面

連線到開發板上面。

執行成功。

cdev方式註冊驅動

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

Linux 驅動之字元裝置註冊

目的 給空模組新增驅動殼子 核心工作量 file operations及其元素填充 註冊驅動。腦海裡先有框架,知道自己要幹嘛 細節 不需要乙個字乙個字敲,可以到核心中去尋找參考 複製過來改 寫下的所有 必須心裡清楚明白,不能似懂非懂。先定義file operations結構體變數 自定義乙個file...

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

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