#include
dev_t
dev_t 是用來在核心裡代表裝置號的型別.
int major(dev_t dev);
int minor(dev_t dev);
從裝置編號中抽取主次編號的巨集.
dev_t mkdev(unsigned int major, unsigned int minor);
從主次編號來建立 dev_t 資料項的巨集定義.
#include
"檔案系統"標頭檔案是編寫裝置驅動需要的標頭檔案. 許多重要的函式和資料結構在此定義.
int register_chrdev_region(dev_t first, unsigned int count, char *name)
int alloc_chrdev_region(dev_t *dev, unsigned int firstminor, unsigned int count, char *name)
void unregister_chrdev_region(dev_t first, unsigned int count);
分配裝置號後將在/proc/device和sysfs中新增裝置名稱.
允許驅動分配和釋放裝置編號的範圍的函式. register_chrdev_region 應當用在事先知道需要的主編號時; 對於動態分配, 使用 alloc_chrdev_region 代替.
struct file_operations;
struct file;
struct inode;
大部分裝置驅動使用的 3 個重要資料結構. file_operations 結構持有乙個字元驅動的方法; struct file 代表乙個開啟的檔案, struct inode 代表磁碟上的乙個檔案.
#include
struct cdev *cdev_alloc(void);
void cdev_init(struct cdev *dev, struct file_operations *fops);
int cdev_add(struct cdev *dev, dev_t num, unsigned int count);
void cdev_del(struct cdev *dev);
cdev 結構管理的函式, 它代表核心中的字元裝置.
int register_chrdev(unsigned int major, const char *name, struct file_operations *fops);
int unregister_chrdev(unsigned int major, const char *name);
2.6版本以前的註冊字元裝置的介面函式
#include
container_of(pointer, type, field);
乙個傳統巨集定義, 可用來獲取乙個結構指標, 從它裡面包含的某個其他結構的指標.
#include
這個包含檔案宣告核心**使用的函式來移動資料到和從使用者空間.
unsigned long copy_from_user (void *to, const void *from, unsigned long count);
unsigned long copy_to_user (void *to, const void *from, unsigned long count);
在使用者空間和核心空間拷貝資料.
LDD3 讀書筆記 之 第 3 章 字元驅動
本章介紹了下面符號和標頭檔案.struct file operations 和 struct file 中的成員的列表這裡不重複了.include dev t dev t 是用來在核心裡代表裝置號的型別.int major dev t dev int minor dev t dev 從裝置編號中抽取...
LDD3讀書筆記(第11章 高階字元驅動程式操作)
本章的目的是讓讀者知道 1.核心與使用者空間同步 2.如何使程序休眠 並喚醒 3.如何實現非阻塞i o 4.裝置可讀取或寫入時如何通知使用者空間 include 這個標頭檔案宣告了用於定義ioctl命令的所有的巨集。它現在包含在中。ioc nrbits ioc typebits ioc sizebi...
LDD3讀書筆記(第13章 網路裝置驅動)
這個小節給出了本章介紹過的概念的快速參考,同時解釋了驅動程式應該包含的每個標頭檔案。但是net device和sk buff結構的成員不會在這裡重複。include 這個標頭檔案儲存有net device和net device stats結構的定義,幷包含了網路驅動程式需要的其他幾個標頭檔案。str...