前面編寫了乙個簡單的[linux字元裝置驅動]("linux driver 1")。接下來簡單地來看一下字元裝置驅動的框架。
在linux 字元裝置裡,有三個比較重要的資料結構,分別是:struct file_operations,struct file和struct inode
下面來簡單的說明一下
這個結構體是相當於裝置的驅動了,實現了字元裝置的相關操作函式
/* 只介紹部分struct file_operations結構體的成員 */
struct file_operations ;
這個結構體描述的是開啟的乙個檔案,每開啟乙個檔案就會有乙個struct file結構體來進行管理
/* 只介紹部分struct file結構體的成員 */
struct file ;
inode 結構用來描述磁碟上乙個檔案。inode 結構包含大量關於檔案的資訊,但這個結構只有 2 個成員對於編寫驅動**有用
/* 只介紹部分struct inode結構體的成員 */
struct inode ;
}
系統呼叫的到核心驅動的呼叫過程如下(以 open 系統呼叫為例,其他的系統呼叫類似)
(系統呼叫的入口函式在 kernel/calls.s 這個檔案裡面)
sys_open
do_sys_open
fd = get_unused_fd(); //找到乙個本程序沒有使用的檔案描述符
struct file *f = do_filp_open(dfd, tmp, flags, mode); // 構造和設定struct file 結構體
nameidata_to_filp(&nd, flags);
__dentry_open(nd->dentry, nd->mnt, flags, filp, null);
if (!open && f->f_op)//open是乙個函式指標作為__dentry_open 的第五個引數
open = f->f_op->open; //獲取fops的open成員
if (open)
念念有這位博主有一張比較詳細的框架圖,所以直接引用過來了
Linux 字元裝置驅動基本框架(二)
一 位址對映 我們知道 stm32 無法跑 linux 系統,是由於它內部沒有 mmu 記憶體管理單元 mmu 主要完成的功能如下 1 完成虛擬空間到物理空間的對映。2 記憶體保護,設定儲存器的訪問許可權,設定虛擬儲存空間的緩衝特性。linux 核心啟動的時候會初始化 mmu,設定好記憶體對映,設定...
linux 字元裝置驅動框架
linux 字元裝置驅動是3種型別中最簡單的一種,其實就是實現 file operations 中的函式,基本實現框架如下 1,需要包含的標頭檔案 include include include include include 2.定義及實現 file operations 中的函式,file op...
Linux字元裝置驅動框架總結
對於linux而言,一切皆檔案,在linux系統下,所有檔案都可以像文字檔案一樣open read write,那麼對於linux裝置驅動而言,比如現在有乙個點燈的驅動程式,它的裝置節點是 dev 當應用程式執行open read write的時候,是如何呼叫到驅動程式裡的open read wri...