Linux核心開發函數詳解__Oracle

來源:互聯網
上載者:User
MKDEV 功能   將主、次裝置號轉換成dev_t類型 主裝置號 major 次裝置號 minor


標頭檔
定義在<linux/cdev.h>中的宏
MKDEV(int major,int minor)


宏定義
#define MKDEV(major,minor) (((major) << MINORBITS) | (minor))


參數
major為主裝置號
minor為次裝置號


傳回值
成功執行返回dev_t類型的裝置編號


註解:
1 Linux裝置號


主裝置號用來表示一個特定的驅動程式。次裝置號用來表示使用該驅動程式的各
裝置。例如一個嵌入式系統,有兩個LED指示燈,LED燈需要獨立的開啟或者關閉。那麼
,可以寫一個LED燈的字元裝置驅動程式,可以將其主裝置號註冊成5號裝置,次裝置號
分別為1和2。這裡,次裝置號就分別表示兩個LED燈。


主裝置號相同的設 備是同類裝置(使用同一個驅動程式)。
有些裝置是對實際存在的物理硬體的抽象,有些裝置則是核心自身提供的功能(不依賴於特定的物理硬體,又稱為"虛擬設備")。
每個裝置在 /dev 目錄下都有一個對應的檔案(節點)。
可以通過 cat /proc/devices 命令查看當前已經載入的裝置驅動程式的主裝置號。
核心能夠識別的所有裝置都記錄在源碼樹下的 documentation/devices.txt 檔案中。
在 /dev 目錄下除了字元裝置和塊裝置節點之外還通常還會存在:fifo管道、socket、軟/硬串連、目錄。這些東西沒有主/次裝置號。


copy_to_user 作用:從核心區中讀取資料到使用者區
簡述:
#include <linux/uaccess.h>
unsigned long copy_to_user(void __user *to, const void *from, unsigned long n);
如果資料拷貝成功,則返回零;否則,返回沒有拷貝成功的資料位元組數。
*to是使用者空間的指標,
*from是核心空間指標,
n表示從核心空間向使用者空間拷貝資料的位元組數


註解:
1 __user宏
__user宏簡單告訴編譯器(通過 noderef)不應該解除這個指標的引用(因為在當前地址空間中它是沒有意義的)。 


(void __user *)arg 指的是arg值是一個使用者空間的地址,不能直接進行拷貝等,要使用例如copy_from_user,copy_to_user等函數。
預設是核心空間,因為這是驅動,是在核心空間啟動並執行。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.