標頭檔案:linux/cdev.h linux/fs.h
//描述字元裝置共性資訊的結構體
struct cdev ;
/*操作方法集*/
struct file_operations
//裝置號,本質是32位無符號整型數
dev_t dev;
//該裝置號由兩部分組成,1.主裝置號 2.次裝置號
major(dev_t dev) //從裝置號中提取主裝置號
minor(dev_t dev) //從裝置號中提取次裝置號
mkdev(int ma,int mi) //由主次裝置好生成裝置號
#define minormask ((1u << 20)-1)
#define major(dev) ((unsigned int) ((dev) >> 20))
#define minor(dev) ((unsigned int) ((dev) & minormask))
#define mkdev(ma,mi) (((ma) << 20) | (mi))
//主裝置號由裝置號的高12bit組成
//次裝置好由裝置號的低20bit組成
圍繞cdev結構體進行操作
0.申請裝置號
[0].自動分配
引數:@dev 存放裝置號的位址(指標)
@baseminor 次裝置號起始
@count 個數
@name 名字
返回值:成功返回0,失敗返回負數錯誤碼
int alloc_chrdev_region(dev_t *dev, unsigned baseminor, \
unsigned count,const char *name)
[1].指定裝置號,註冊
引數:@from 裝置號(mkdev()生成)
@count 個數
@name 名字
返回值:成功返回0,失敗返回負數錯誤碼
int register_chrdev_region(dev_t from, unsigned count,\
const char *name)
[3]裝置號如果不使用,登出
void unregister_chrdev_region(dev_t from, unsigned count)
1.分配cdev結構體空間
struct cdev *cdev_alloc(void);
功能:分配cdev結構體空間
返回值:成功返回cdev結構體指標,失敗返回
2.cdev結構體進行初始化
void cdev_init(struct cdev *cdevp, const struct file_operations *fops);
功能:初始化cdev結構體
引數: @cdevp cdev結構體指標,**於cdev_alloc
@fops 操作方法集
3.註冊cdev結構體
int cdev_add(struct cdev *cdevp, dev_t dev, unsigned
);功能:註冊cdev結構體到核心
引數: @cdevp cdev結構體指標,**於cdev_alloc
@dev 裝置號(裝置是核心資源,必須向核心申請)
@count 該驅動操作的裝置數量
返回值:成功返回0,失敗返回負數錯誤碼
4.如果不使用該驅動,記得登出給字元裝置驅動
void cdev_del(struct cdev *cdevp);
字元裝置驅動框架
字元裝置驅動框架 一 linux軟體系統的層次關係 乙個應用程式操作底層驅動程式的過程 1 應用程式使用庫提供的 open函式開啟某乙個裝置檔案。2.庫根據 open函式傳入的引數執行 swi 軟體中斷 指令,這會引起 cpu異常,進入核心。3 核心的異常處理函式根據這些引數找到相應的驅動程式,返回...
字元裝置驅動框架
include file operations宣告 include module init module exit宣告 include init exit 巨集定義宣告 include class devise宣告 include copy from user 的標頭檔案 include 裝置號 d...
linux 字元裝置驅動框架
linux 字元裝置驅動是3種型別中最簡單的一種,其實就是實現 file operations 中的函式,基本實現框架如下 1,需要包含的標頭檔案 include include include include include 2.定義及實現 file operations 中的函式,file op...