02 註冊字元裝置驅動

2021-09-26 22:28:06 字數 3168 閱讀 2547

從核心中最簡單的驅動程式入手,描述linux驅動開發,主要文章目錄如下(持續更新中):

01 - 第乙個核心模組程式

02 - 註冊字元裝置驅動

03 - open & close 函式的應用

04 - read & write 函式的應用

05 - ioctl 的應用

06 - ioctl led燈硬體分析

07 - ioctl 控制led軟體實現(暫存器操作)

08 - ioctl 控制led軟體實現(庫函式操作)

09 - 註冊字元裝置的另一種方法(常用)

10 - 乙個cdev實現對多個裝置的支援

11 - 四個cdev控制四個led裝置

12 - 虛擬串列埠驅動

13 - i2c驅動

14 - spi協議及驅動講解

15 - spi linux驅動**實現

16 - 非阻塞型i/o

17 - 阻塞型i/o

18 - i/o多路復用之 select

19 - i/o多路復用之 poll

20 - i/o多路復用之 epoll

21 - 非同步通知

makefile

測試結果

前面介紹了模組的入口和出口函式,接著介紹一下字元裝置的註冊方法,02-09將採用字元裝置簡單的註冊函式 register_chrdev,09往後將採用另一種註冊方法。

demo.c

#include

#include

const

char

*name =

"demoname"

;int major;

const

struct file_operations fops =

;static

int __init demo_init

(void

)printk

("major is %d\n"

, major)

;return0;

err0:

return major;

}static

void __exit demo_exit

(void

)module_init

(demo_init)

;module_exit

(demo_exit)

;module_license

("gpl"

);

demo.c中首先呼叫了register_chrdev函式,來向核心中註冊乙個字元裝置,函式原型及引數說明如下:

原  型 :

static

inline

intregister_chrdev

(unsigned

int major,

const

char

*name,

const

struct file_operations *fops)

功 能 : 向核心中註冊字元裝置,並將其與檔案操作方法描述集繫結

@param1: 主裝置號,0表示動態註冊

@param2: 字元裝置的名字,字元裝置載入之後輸入命令 cat /proc/devices可以檢視

@param3: 檔案操作方法描述集

@return

: 成功返回主裝置號,失敗返回錯誤碼

在模組解除安裝時需要將註冊的字元裝置登出,對應的函式是unregister_chrdev,該函式功能及引數說明如下:

原  型:

static

inline

void

unregister_chrdev

(unsigned

int major,

const

char

*name)

功 能

@param1: 申請到的主裝置號,register_chrdev的返回值

@param2: 字元裝置的名字,與register_chrdev第二個引數相同

@return

: 無返回值

kerneldir ?

=/home/linux/ti-processor-sdk-linux-am335x-evm-

05.02

.00.10

/board-support/linux-

4.14

.79pwd :

= $(shell pwd)

all:

make arch=arm cross_compile=arm-linux-gnueabihf-

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

install:

sudo cp *

.ko /tftpboot

clean:

make arch=arm cross_compile=arm-linux-gnueabihf-

-c $(kerneldir) m=$(pwd) clean

obj-m +

= demo.o

root@am335x-evm:

~# insmod demo.ko

[1844.460109

] demo_init --15[

1844.465737

] major is 241

root@am335x-evm:

~# cat /proc/devices

character devices:

1 mem

2 pty

3 ttyp

4/dev/vc/

0188 ttyusb..

.241 demoname // 註冊成功得到的字元裝置..

.254 gpiochip

block devices:

1 ramdisk

7 loop

31 mtdblock

179 mmc

254 virtblk

259 blkext

root@am335x-evm:

~# rmmod demo.ko

[1901.748868

] demo_exit --

31

Linux字元裝置驅動的註冊

很多學習linux程式設計的新人都會被字元裝置註冊搞糊塗了,我剛開始也一樣糊里糊塗的,看到網上例程有各種版本,就是呼叫module init時傳遞的實參,先記為 init 大家可能還會看到雜項裝置驅動misc register 平台裝置驅動platform device register 但是作為l...

02 Linux字元裝置驅動 LED驅動

字元裝置驅動程式的實現,主要工作就是實現 file operations 結構體中的函 數指標成員。參考 include linux fs.h 當應用程式使用 open 函式開啟某個字元裝置時,字元裝置驅動程式的file operations 結構體中的 open 成員就會被呼叫 當應用程式使用 r...

Linux 驅動之字元裝置註冊

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