日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

/dev 设备文件属性解读

發(fā)布時間:2025/3/20 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 /dev 设备文件属性解读 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一.???????知識點

1.??????設(shè)備號;

2.??????創(chuàng)建設(shè)備文件;

3.??????設(shè)備注冊;

4.??????重要數(shù)據(jù)結(jié)構(gòu);

5.??????設(shè)備操作;

?

二.主設(shè)備號

字符設(shè)備通過字符設(shè)備文件來存取。字符設(shè)備文件由使用ls? -l?的輸出的第一列的”C”標(biāo)識;

如果使用ls –l?命令,會看到在設(shè)備文件項中有2個數(shù)(由一個逗號分隔)這些數(shù)字就是設(shè)備文件的主次設(shè)備編

舉例:

crw-rw----??1 root uucp???? 4,? 66 04-18 21:59 ttyS2

crw-rw----??1 root uucp???? 4,? 67 04-18 21:59 ttyS3

crw-rw-rw-??1 root root???? 1,?? 9 04-18 22:00 urandom

crw-rw----??1 root root?? 249,?? 0 04-18 22:00 usbdev1.1_ep00

crw-rw----??1 root root?? 249,?? 1 04-18 22:00 usbdev1.1_ep81

crw-rw----??1 root root?? 249,?? 2 04-18 22:00 usbdev2.1_ep00

crw-rw----??1 root root?? 249,?? 3 04-18 22:00 usbdev2.1_ep81

crw-rw----??1 root root?? 251,?? 0 04-18 22:00 usbmon0

crw-rw----??1 root root?? 251,?? 1 04-18 22:00 usbmon1

crw-rw----??1 root root?? 251,?? 2 04-18 22:00 usbmon2

crw-rw----??1 vcsa tty????? 7,?? 0 04-18 22:00 vcs

crw-rw----??1 vcsa tty????? 7,?? 1 04-18 22:00 vcs1

crw-rw----??1 vcsa tty????? 7,?? 2 04-18 22:00 vcs2

crw-rw----??1 vcsa tty????? 7,?? 3 04-18 22:00 vcs3

crw-rw----??1 vcsa tty????? 7,?? 4 04-18 22:00 vcs4

?

設(shè)備號

設(shè)備號用來做什么??

設(shè)備號的作用

?

1>.主設(shè)備號用來標(biāo)識設(shè)備文件相連驅(qū)動程序

次設(shè)備號被驅(qū)動程序用來辨別操作的是哪個設(shè)備

?

*****主設(shè)備號用來反映設(shè)備類型******

***次設(shè)備號用來區(qū)分同類型的哪一個設(shè)備***

?

三.主次設(shè)備號

Q:內(nèi)核中如何描述設(shè)備號?

A:dev_t

*****其實質(zhì)為unsigned??int? 32位整數(shù),其中高12位為主設(shè)備號,低20位為次設(shè)備號。

?

Q:如何從dev_t中分解出主設(shè)備號?

AMAJOR(dev_t??dev)

?

Q:如何從dev_t只分解出次設(shè)備號?

AMINOR(dev_t dev)

?

四.分配主設(shè)備號

Linux?內(nèi)核如何給設(shè)備分配主設(shè)備號?

可以采用靜態(tài)申請,動態(tài)分配兩種方法

(動態(tài)、靜態(tài)是針對主設(shè)備號來說的)

?

靜態(tài)申請

int??register_chrdev_region(dev_t from ,unsigned count ,const char *name)

?

功能:申請使用從from開始的count?個設(shè)備號(主設(shè)備號不變,次設(shè)備號增加)

參數(shù):

From :希望申請使用的設(shè)備號數(shù)目

Count :希望申請使用的設(shè)備號數(shù)目

Name :設(shè)備名(體現(xiàn)在/proc/devices

?

動態(tài)分配

?

方法:

使用alloc_chrdev_region分配設(shè)備號

?

優(yōu)點:簡單,易于驅(qū)動推廣

缺點:無法在安裝驅(qū)動前創(chuàng)建設(shè)備文件(因為安裝前還沒分配到主設(shè)備號。)

?

解決辦法:

安裝驅(qū)動后,從/proc/devices中查詢設(shè)備號

?

動態(tài)分配

Int alloc_chrdev_region(dev_t *dev,??unsigned baseminor,? unsigned count,? const char *name)

功能:動態(tài)申請count個設(shè)備號,第1個設(shè)備號的次設(shè)備號為baseminor.

參數(shù):

Dev:分配到的設(shè)備號

Baseminor :起始次設(shè)備號

Count :要注冊的設(shè)備號個數(shù)

Name :設(shè)備名(體現(xiàn)在/proc/devices

主設(shè)備號是動態(tài)產(chǎn)生的,次設(shè)備號(的第一個)是要指定的;

?

??五.注銷設(shè)備號

???????不論使用何種方法分配設(shè)備號,都應(yīng)該在不再使用它們的時候釋放這些設(shè)備號。

?

Void unregister_chrdev_region(dev_t??from,? unsigned count)

?功能:

釋放從from?開始的count個設(shè)備號

?

六.創(chuàng)建設(shè)備文件

兩種方法:1.使用mknod命令手工創(chuàng)建;

???2.自動創(chuàng)建

?

手工創(chuàng)建:

mknod用法:

mknod??filename type major minor

filename :設(shè)備文件名

type:?設(shè)備文件類型

major主設(shè)備號

minor?:次設(shè)備號

?

例如:mknod serial0??c ?100 ?0

?

之后?ls??serial0??命令可查

不要0也可以,通過0知道是第幾個設(shè)備

?

七.重要結(jié)構(gòu)

Linux?字符設(shè)備驅(qū)動程序設(shè)計中,有3種非常重要的數(shù)據(jù)結(jié)構(gòu):

1.??????struct??file

2.??????struct??inode

3.??????struct??file_operations

?

Stuct??file?

代表一個開打的文件。系統(tǒng)中每一個打開的文件在內(nèi)核空間都有一個關(guān)聯(lián)的struct??file .??它由內(nèi)核在打開文件時創(chuàng)建,在文件關(guān)閉后釋放。

(一個文件被打開一次對應(yīng)一個Struct??file,這個文件同時被打開10次,則對應(yīng)10Struct??file)

?

***重要成員

Loff_t??f_pos? /*文件讀寫位置*/

Struct??file_operations *f_op

?

struct??inode

用來記錄文件的物理上的信息。因此,他和代表打開文件的file結(jié)構(gòu)是不同的。

一個文件可以對應(yīng)多個file結(jié)構(gòu),但只有一個inode結(jié)構(gòu)

?

轉(zhuǎn)載于:https://blog.51cto.com/yumsun/1690558

總結(jié)

以上是生活随笔為你收集整理的/dev 设备文件属性解读的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。