簡單的乙個字元裝置驅動

2021-05-27 09:36:27 字數 2558 閱讀 3754

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include /*包含記憶體管理兩個核心函式*/

#include "memdev.h"

static int mem_major=mem_major;

struct mem_dev *mem_devp; /*指向裝置結構體的指標*/

/*檔案開啟函式*/

int mem_open(struct inode *inode,struct file *filp)

/*檔案釋放函式*/

int mem_release(struct inode *inode,struct file *filp)

/*ioctl裝置控制函式*/

static  int mem_ioctl(struct inode *inodep,struct file *filp,unsigned int cmd,unsigned long arg)

return 0;

}/*讀函式*/

static ssize_t mem_read(struct file *filp,char __user *buf,size_t size,loff_t *ppos)

else

return ret;

}/*寫函式*/

static ssize_t mem_write(struct file *filp,const char __user *buf,size_t size,loff_t *ppos)

return ret;

}/*seek檔案定位函式*/

static loff_t mem_llseek(struct file *filp,loff_t offset,int orig)

if((unsigned int)offset>mem_size)

case 1:/*相對檔案當前位置偏移*/

if((filp->f_pos+offset)>mem_size)

if((filp->f_pos+offset)<0)

filp->f_pos+=offset;

ret=filp->f_pos;

break;

default:

ret=-einval;

break;

}return ret;

/*檔案操作結構體,對應的系統呼叫,實現賦值給函式指標*/

static const struct file_operations mem_fops =

;/*初始化並註冊cdev*/

static void mem_setup_cdev(struct mem_dev *dev,int index)

/*裝置驅動模組載入函式*/

static int memdev_init(void)

if(result<0)

return result;

/*分配cdev為裝置結構體分配記憶體*/

mem_devp=kmalloc(sizeof(struct mem_dev),gfp_kernel);

}memset(mem_devp,0,sizeof(struct mem_dev));

/*初始化並註冊cdev*/

mem_setup_cdev(mem_devp,0);

return 0;

fail_malloc:

unregister_chrdev_region(devno,1);

return result;

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

static memdev_exit(void)

module_author("wanghy");

module_license("gpl");

module_param(mem_major,int ,s_irugo);

module_init(memdev_init);

module_exit(memdev_exit);

#define mem_size 0x1000  /*全域性記憶體最大4kb*/

#define mem_clear 0x1  /*清零全域性記憶體*/

#define mem_major 250  /*預設的主裝置號*/

/*mem裝置結構體*/

struct mem_dev;

makefile編寫

ifneq ($(kernelrelease),)

obj-m := memdev.o

else

kdir := /home/whyzl/linux-2.6.37.4

all:

make -c $(kdir) m=$(pwd) modules arch=arm cross_compile=arm-linux-

clean:

rm -f *.ko *.o *.mod.o *.mod.c *.symvers  modul*

endif

乙個字元驅動

實現乙個基本框架 define notice fmt,args.printk kern notice scull fmt,args define error fmt,args.printk kern err scull fmt,args static init int scull init void...

c c ,輸入乙個字元

getch getche 和getchar 函式 1 getch 和getche 函式 這兩個函式都是從鍵盤上讀入乙個字元。其呼叫格式為 getch getche 兩者的區別是 getch 函式不將讀入的字元回顯在顯示螢幕上,而getche 函式卻將讀入的字元回顯到顯示螢幕上。例1 include ...

等等是乙個字元

在使用字串的過程中,我們經常會用到轉義字元,如 等等。對字串中的轉義字元進行操作時,有可能會誤認為這是兩個字元,需要我們根據轉義的定義,將這兩個字元轉換為乙個字元。其實完全不需要,因為對字串進行操作時,計算機自動地將它們識別為乙個字元。include stdio.h int my print str...