#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...