六 混雜裝置miscdevices

2021-10-24 20:40:32 字數 2288 閱讀 2938

混雜裝置也叫雜項裝置,是普通字元裝置驅動(struct cdev)的乙個封裝,可以簡化乙個普通字元裝置驅動的設計流程。

混雜裝置的特點:

1)主裝置號10,次裝置號不同。

2)簡化cdev的設計流程

3)使用上和cdev是沒有差異。

[root@gec6818 /]

#cat /proc/devices

character devices:

1 mem

5 /dev/tty

5 /dev/console

5 /dev/ptmx

5 ttyprintk

10 misc ----->混雜裝置

[root@gec6818 /]

#cat /proc/misc

42 network_throughput

43 memory_throughput

44 network_latency

45 cpu_dma_latency

46 xt_qtaguid

47 alarm

48 log_system

49 log_radio

50 log_events

51 log_main

52 ashmem

53 binder

54 uhid

55 hdmi-cec

56 nxp-scaler

223 uinput

57 keychord

1 psaux

58 usb_accessory

59 mtp_usb

60 android_adb

200 tun

61 tgt

237 loop-control

62 sw_sync

229 fuse

235 autofs

63 ion

1、普通字元裝置驅動的設計流程

-------定義並初始化乙個字元裝置---------

1)定義乙個字元裝置—>struct cdev

2)定義並初始化字元裝置的檔案操作集—>struct file_operations

3)給字元裝置申請乙個裝置號—>裝置號=主裝置號<<20 + 次裝置號

4)初始化字元裝置

5)將字元裝置加入核心

-------自動生成裝置檔案---------

6)建立class

7)建立device,其中device是屬於class的

-------得到實體地址對應的虛擬位址-------

8)申請物理記憶體區,申請sfr的位址區。sfr — special function register: gpioeout

9)記憶體的動態對映,得到實體地址對應的虛擬位址

10)訪問虛擬位址

2、混雜裝置驅動的設計流程

1)定義檔案操作集

2)定義乙個混雜裝置,並完成混雜裝置的初始化

3)註冊乙個混雜裝置

4)申請物理記憶體區,申請sfr的位址區。sfr — special function register: gpioeout

5)記憶體的動態對映,得到實體地址對應的虛擬位址

6)訪問虛擬位址

1、混雜裝置

struct miscdevice ---->來描述乙個混雜裝置

#include

struct miscdevice

;

成員說明:

int minor; —>次裝置號

const char *name; ---->混雜裝置的名字,也是裝置檔案的名字。

const struct file_operations *fops; —>檔案操作集

2、混雜裝置的註冊

int

misc_register

(struct miscdevice * misc)

;

3、混雜裝置的登出

int

misc_deregister

(struct miscdevice *misc)

;

**示例:led_drv.c

linux 混雜裝置miscdevice

miscdevice混雜裝置 miscdevice混雜裝置是字元裝置的一種,它們共享乙個主裝置號 10 但次裝置號不同,所有混雜裝置形成乙個鍊錶,對裝置發給你問時核心根據次裝置號查詢到相應的miscdevice裝置。這樣做的好處,節約主裝置號,將某些裝置用鍊錶的形式鏈結在一起,最後通過查詢次裝置區分...

雜項裝置(misc device)

雜項裝置也是在嵌入式系統中用得比較多的一種裝置驅動。在 linux 核心的include linux目錄下有miscdevice.h檔案,要把自己定義的misc device從裝置定義在這裡。其實是因為這些字元裝置不符合預先確定的字元裝置範疇,所有這些裝置採用主編號10 一起歸於misc devic...

字元雜項裝置(miscdevice)

misc雜項裝置是主裝置號為10的驅動裝置 在linux核心原始碼miscdevice.h裡雜項裝置描述結構體定義 struct miscdevice extern int misc register struct miscdevice misc extern int misc deregister...