驅動學習之驅動和應用的介面
在前面講過,驅動層是應用層是分離,驅動層的程式碼不能使用再應用層,應用層也不能直接操作驅動程式碼,那麼應用層和驅動層之間是如何來實現資料間的交換的能,方法就是通過相應的介面函式。
(1)copy_from_user
1
2
3
4
5
6
7
8
9
|
unsigned long copy_from_user( void *to, const void __user *from, unsigned long n)
{ might_sleep();
if (access_ok(VERIFY_READ, from, n))
n = __copy_from_user(to, from, n);
else
memset (to, 0, n);
return n;
} |
這個函式是從使用者空間拷貝資料到核心空間,失敗返回沒有被拷貝的位元組數,成功返回0,注意使用者空間的資料不能直接通過memcpy複製到核心空間,原因是核心空間和使用者空間的地址不在同一個對映區域裡面。核心空間和使用者空間的記憶體是不能直接訪問的。
(2)copy_to_user
1
2
3
4
5
6
7
8
|
unsigned long copy_to_user( void __user *to, const void *from, unsigned long n)
{ might_sleep();
BUG_ON(( long ) n < 0);
if (access_ok(VERIFY_WRITE, to, n))
n = __copy_to_user(to, from, n);
return n;
} |
返回值和copy_from_user一樣,成功返回0,失敗返回沒有拷貝成功的位元組數。
引數to有個__user限定,這個在~/include/linux/compiler.h中有如下定義:
# define __user __attribute__((noderef, address_space(1)))
表示這是一個使用者空間的地址,即其指向的為使用者空間的記憶體。
__attribute__是gnu c編譯器的一個功能,它用來讓開發者使用此功能給所宣告的函式或者變數附加一個屬性,以方便編譯器進行錯誤檢查,其實就是一個核心檢查器。
以上兩個函式參考
http://blog.sina.com.cn/s/blog_55465b470100kdn9.html
本文轉自 菜鳥養成記 51CTO部落格,原文連結:http://blog.51cto.com/11674570/1872418
相關文章
- android驅動學習入門-android應用怎麼呼叫驅動2Android
- extcon驅動及其在USB驅動中的應用
- 學Linux驅動: 應該先了解驅動模型Linux模型
- linux驅動之LED驅動Linux
- 寫作驅動學習
- usb驅動開發1之學習準備
- 驅動和應用層的三種通訊方式
- 應用呼叫驅動的ioctl函式函式
- 應用層和驅動如何判斷當前的啟動模式模式
- mtd裝置驅動(待學習)
- 字元裝置驅動學習之cdev_init和cdev_alloc字元dev
- Linux裝置驅動之字元裝置驅動Linux字元
- 資料驅動的介面設計
- Redis 原始碼學習之事件驅動Redis原始碼事件
- Linux裝置驅動程式學習----1.裝置驅動程式簡介Linux
- 乾坤合一:Linux裝置驅動之USB主機和裝置驅動Linux
- MySQL的驅動表與被驅動表MySql
- 新字元驅動框架驅動LED字元框架
- ODBC 驅動程式管理器 在指定的 DSN 中,驅動程式和應用程式之間的體系結構不匹配 解決方案
- 童欣:資料驅動方法在圖形學中的應用
- Linux 驅動之IoctlLinux
- 行為驅動開發學習心得(一)
- 字元裝置驅動——申請、建立、應用.字元
- 驅動精靈是幹嘛的 驅動精靈怎麼安裝驅動
- 事件驅動的微服務-事件驅動設計事件微服務
- 資料結構學習(C++)——佇列應用(事件驅動模擬) (轉)資料結構C++佇列事件
- 驅動Driver-platform平臺驅動Platform
- 深入淺出:Linux裝置驅動之字元裝置驅動Linux字元
- 乾坤合一:Linux裝置驅動之塊裝置驅動Linux
- 擁抱手勢驅動的介面設計
- mini2440驅動奇譚——ADC驅動與測試(動態掛載驅動)
- 嵌入式Linux驅動學習筆記(十六)------裝置驅動模型(kobject、kset、ktype)Linux筆記模型Object
- 既支援時間驅動又支援事件驅動,TDengine3.0流式計算的學習使用心得事件
- 【驅動】串列埠驅動分析(二)-tty core串列埠
- Linux的input輸入子系統:裝置驅動之按鍵驅動Linux
- Bevy:基於Rust的資料驅動遊戲引擎和應用程式框架Rust遊戲引擎框架
- 蛻變成蝶:Linux裝置驅動之字元裝置驅動Linux字元
- 蛻變成蝶~Linux裝置驅動之字元裝置驅動Linux字元