Linux字元裝置檔案

2021-10-10 08:46:41 字數 2089 閱讀 6095

申請字元裝置

第一種方法:檢視系統中哪個裝置號屬於空閒

我們可以檢視字元裝置,塊裝置

int

register_chrdev_region

(dev_t from,

unsigned count,

const

char

*name)

; from: 待申請的裝置號

count: 待申請的裝置號數目(次裝置號)

name: 裝置名稱(出現在/proc/devices)

返回: 成功返回0,失敗返回負值

優點:在申請裝置號之前,可以提前建立裝置節點

缺點:不利於驅動的推廣。如果現在驅動使用的主裝置號為250,放在別的開發板時,有可能這個主裝置已經被別人使用,造成申請裝置失敗!,我們檢視看哪個沒有使用,對他進行註冊,所以這種方法我們一般不使用

第二張方法

核心知道我們那些沒有使用,所以我們讓核心來幫助我們來分配

dev_t dev;

intalloc_chrdev_region

(dev_t* dev,

unsigned baseminor,

unsigned count, constchar *name)

;dev: 儲存分配到的裝置號,如果核心幫你分配好,將分配的裝置號儲存在dev中。

baseminor: 希望分配的起始次裝置號,一般這個引數指定為0

count: 需要分配的裝置號數目(主裝置號不變,次裝置號依次+

1)name:裝置名稱(出現在/proc/devices)

請求核心動態分配count個裝置號,且次裝置號baseminor開始

優點:便於驅動的推廣。

缺點:在申請裝置號之前,無法提前建立裝置檔案,只有申請完裝置號以後才能建立。

同樣的,當我們不再使用這些的時候,我們將他歸還給作業系統

unregister_chrdev_region

(dev_t dev,

int count)

;dev:裝置號

count:裝置的個數

open函式的呼叫

應用程式呼叫open,首先呼叫c庫的open實現,c庫的open函式會儲存open對應的系統呼叫號到r7中,然後呼叫swi/svc觸發乙個軟中斷異常

cpu跳轉到核心建立好的異常向量表的入口位址vetor_swi,根據open的系統呼叫號,在系統呼叫表中找到自己對應的系統核心實現sys_open

呼叫sys_open核心函式(fs/open.c),核心會在sys_open函式中建立file物件,根據已經找到的cdev物件,從這個物件中的ops中取出硬體操作集合(led_fops,beep_fops),把這個集合賦值給file物件的f_op欄位

sys_open最終執行:

file->f_op->open(inode,file); //如果底層驅動的操作集合有open函式(led_open,beep_open)那麼就呼叫此函式,如果沒有,直接返回使用者空間。

至此open的呼叫就完畢!

字元裝置驅動種四個重要的結構體是什麼

.3

struct cdev

描述:這個資料結構就是核心用來描述字元裝置,類似你用struct people來描述乙個人一樣!

跟驅動開發相關的重要字段

struct cdev

;

struct file_operations

描述:提供了操作硬體的方法(一堆的函式指標,這些函式指標最終指向驅動的某些函式),並且這些方法最終會提供給使用者去使用。

struct file_operations myfops =

;//一旦完成這些初始化,最終核心就會使用這個結構

體,供使用者去使用。

linux字元裝置

字元裝置的定義 linux下有三種裝置 字元裝置 塊裝置 網路裝置等等。它們均以乙個檔案節點形式顯示在檔案系統的 dev目錄下 crw w 1 root tty 4,0 7月 11 09 11 tty0其中c代表字元裝置型別 字元裝置是指裝置無需緩衝即可直接進行讀寫的裝置,如滑鼠,鍵盤,串列埠裝置等...

字元裝置驅動 裝置號 裝置檔案

主裝置號用來標識與裝置檔案相連的驅動程式.用來反映裝置型別.次裝置號被驅動程式用來辨別操作的是哪乙個裝置.用來區分同型別的裝置.通過的是主裝置號.字元裝置檔案 本身沒有太多的內容,通過 字元裝置檔案 能找到 字元裝置驅動程式 字元裝置檔案 能將 應用程式 的需求傳遞給 字元裝置驅動程式.核心中如何描...

Linux通過字元裝置檔案控制GPIO

通過字元裝置檔案控制gpio電平通知微控制器訊號。獲取gpio號 notify gpio of get named gpio pdev dev.of node,notify gpio 0 if ret gpio init 0 註冊字元裝置 define gpio major 199 major de...