linux驅動中實現上層select介面
在驅動中實現file_operations結構的poll方法後,上層應用可以通過select或者poll方法來查詢裝置是否有資料可以讀寫。本文記錄驅動中實現上層select查詢裝置是否有資料可以讀取的方法。
1、實現file_operation
實現file_operation結構體中的相關開啟、關閉、查詢和讀取方法,在上層呼叫select介面時會呼叫poll方法,該方法完成如下動作:
① 在一個或多個可指示查詢狀態變化的等待佇列上呼叫
poll_wait. 如果沒有檔案描述符可用來執行 I/O, 則核心使程式在傳遞到該系統呼叫的所有檔案描述符對應的等待佇列上等待。
② 返回一個用來描述操作是否可以立即無阻塞執行的位掩碼。
如:
int landsem_is_shakeup_open(struct inode *inode, struct file *filp) {
return 0;
}
static ssize_t landsem_is_shakeup_read(struct file *filp, char __user *buffer, size_t size, loff_t *off)
{
size_t rel_size = 0;
ls_dev_dbg("call %s.\n",__func__);
return rel_size;
}
static unsigned int landsem_is_shakeup_poll(struct file *filp, struct poll_table_struct *wait)
{
unsigned int mask = 0;
poll_wait(filp, &event_wait, wait);
//set mask
if(/*資料可讀條件*/) {
mask |= POLLIN | POLLRDNORM;
}
return mask;
}
int landsem_is_shakeup_close(struct inode *inode, struct file *filp) {
return 0;
}
static struct file_operations fops_is_shakeup = {
.open = landsem_is_shakeup_open,
.read = landsem_is_shakeup_read,
.poll = landsem_is_shakeup_poll,
.release = landsem_is_shakeup_close,
};
2、在有資料可以供讀取時喚醒等待佇列
在有資料可以讀時如中斷底部處理程式碼中更新poll的判別條件並喚醒等待佇列,喚醒時用如下方法:
wake_up_interruptible(&(event_wait));
相關文章
- 【linux】驅動-5-驅動框架分層分離&實戰Linux框架
- node中間層實現檔案上傳
- Rest Assured+TestNg實現資料驅動的介面測試REST
- PostgreSQL中利用驅動程式實現故障轉移SQL
- 解析ArrayList的底層實現(上)
- 有容雲:容器驅動的PaaS平臺實現方案(上)
- ae+C#實現圖層管理控制元件上的圖層移動功能C#控制元件
- redis驅動-jedis實現1Redis
- Linux下的硬體驅動——USB裝置(上)(驅動配置部分)(轉)Linux
- 嵌入式Linux中platform平臺裝置模型的框架(實現LED驅動)LinuxPlatform模型框架
- linux驅動之LED驅動Linux
- 使用者層與驅動層通訊
- JS實現拖動div層移動JS
- Linux : select()詳解 和 實現原理【轉】Linux
- 驅動學習之驅動和應用的介面
- 實現領域驅動設計
- ReactiveCocoa 中 RACSignal 所有變換操作底層實現分析(上)React
- SAE J1850 汽車匯流排協議 VPW 物理層驅動程式在STM32晶片上的實現協議晶片
- Linux驅動實踐:如何編寫【 GPIO 】裝置的驅動程式?Linux
- 超實用!移動端介面中的版式設計原理(上)
- 『政善治』Postman工具 — 12、Postman中實現資料驅動Postman
- 如何在Java中實現事件驅動的微服務架構Java事件微服務架構
- Select 元件實現元件
- 在 Zig 中實現介面
- 基於spring實現事件驅動Spring事件
- 【Mysql原理與實踐】2020-08-03-景羅-MySQL中select count(col) 底層實現探索MySql
- linux裝置驅動中的併發控制Linux
- Linux驅動開發: Ubuntu(PC機)系統上編譯驅動並載入測試LinuxUbuntu編譯
- Binder 驅動詳解(上)
- 深入解析 Go 中 Slice 底層實現Go
- 驅動中如何給ring3層應用程式提權
- 一個嵌入式Linux系統的鍵盤驅動實現(轉)Linux
- 資料驅動的介面設計
- 通過API介面實現圖片上傳API
- 簡單的11步在Laravel中實現測試驅動開發Laravel
- 簡單的 11 步在 Laravel 中實現測試驅動開發Laravel
- Linux中select()函式分析Linux函式
- 學Linux驅動: 應該先了解驅動模型Linux模型