字元裝置驅動(二)

2021-07-31 02:08:45 字數 1932 閱讀 9885

mycdev.c

/*字元驅動模組程式 2023年04月21日 星期五*/

#include //模組所需的大量符號和函式定義

#include //指定初始化和清除函式

#include //dev_t 是用來在核心裡代表裝置號的型別.

#include //"檔案系統"標頭檔案是編寫裝置驅動需要的標頭檔案. 許多重要的函式和資料結構在此定義

#include

#include //cdev 結構管理的函式, 它代表核心中的字元裝置

#include

#include //printk()乙個傳統巨集定義, 可用來獲取乙個結構指標, 從它裡面包含的某個其他結構的指

#include

//#include //

#include //在核心和使用者空間中移動資料的函式copy_to_user和copy_from_user

module_license("leo bsd/gpl"); //許可證

#define mycdev_majob 231 /*給定的主裝置號*/

#define mycdev_size 2048

//open 方法提供給驅動來做任何的初始化來準備後續的操作.

static

int mycdev_open(struct inode *inode, struct file *fp)

//釋放 open 分配在 filp->private_data 中的任何東西,在最後的 close 關閉裝置

static

int mycdev_release(struct inode *inode, struct file *fp)

//檔案操作

static ssize_t mycdev_read(struct file *fp, char __user *buf, size_t size, loff_t *pos)

printk("reader: %d bytes was read...\n",count);

return count;

}static ssize_t mycdev_write(struct file *fp, const

char __user *buf, size_t size, loff_t *pos)

/*填充mycdev的file_operation結構*/

static

const

struct file_operations mycdev_fops = ;

/*模組初始化函式*/

static

int __init mycdev_init(void)

else

return

0;};

/*模組解除安裝函式*/

static

void __exit mycdev_exit(void)

module_init(mycdev_init);

module_exit(mycdev_exit);

test.c

#include 

#include

int main()

/*寫入裝置*/

fwrite(buf, sizeof(buf), 1, fp0);

/*重新定位檔案位置(思考沒有該指令,會有何後果)*/

fseek(fp0,0,seek_set);

/*清除buf*/

strcpy(buf,"buf is null!");

printf("buf: %s\n",buf);

/*讀出裝置*/

fread(buf, sizeof(buf), 1, fp0);

/*檢測結果*/

printf("buf: %s\n",buf);

return

0;

}

裝置驅動例項 字元裝置驅動

在整個linux裝置驅動學習中,字元裝置驅動較為基礎。通過對它的學習,對裝置驅動進一步加深了解 cdev 結構體struct cdev 講下比較重要的成員變數 dev t dev 定義了32位的裝置號,其中12位是主裝置號,20位是從裝置號。獲取主裝置號 major dev t dev 獲取從裝置號...

字元裝置驅動筆記(二)

怎麼寫led驅動 寫框架 完善硬體的操作 1 看原理圖 2 看2440手冊 3 微控制器 直接操作實體地址 驅動程式 操作虛擬位址,實體地址用iorremap對映為虛擬位址 myleds.c include include include include include include includ...

字元裝置驅動筆記(二)

怎麼寫led驅動 寫框架 完善硬體的操作 1 看原理圖 2 看2440手冊 3 微控制器 直接操作實體地址 驅動程式 操作虛擬位址,實體地址用iorremap對映為虛擬位址 myleds.c include include include include include include includ...