Linux内核开发函数详解
生活随笔
收集整理的這篇文章主要介紹了
Linux内核开发函数详解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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等函數。
默認是內核空間,因為這是驅動,是在內核空間運行的。
總結
以上是生活随笔為你收集整理的Linux内核开发函数详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux压缩解压缩文章总结
- 下一篇: Linux 系统编程