Driverdemo源代码分析与步骤.doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Driverdemo源代码分析 模块驱动源代码demo.c如下,其中的demo_read,demo_write函数完成驱动的读写接口功能,do_write函数实现将用户写入的数据逆序排列,通过读取函数读取转换后的数据。这里只是演示接口的实现过程和内核驱动对用户的数据的处理。Demo_ioctl函数演示ioctl调用接口的实现过程。 #ifdef MODULE #include linux/module.h #ifdef CONFIG_DEVFS_FS #include linux/devfs_fs_kernel.h #endif #include linux/init.h /*初始化相关头文件*/ #include linux/kernel.h /*与 printk()等函数有关的头文件 */ #include linux/slab.h /*与 kmalloc()等函数有关的头文件*/ #include linux/fs.h /* 与文件系统有关的头文件everything... */ #include linux/errno.h /* 错误代码处理头文件error codes */ #include linux/types.h /*数据类型头文件 size_t */ #include linux/proc_fs.h /*与进程调度相关的头文件*/ #include linux/fcntl.h /* O_ACCMODE */ #include linux/poll.h /* COPY_TO_USER */ #include asm/system.h /* cli(), *_flags */ #define DEVICE_NAME UP-TECH DEMO /*该驱动的设备名*/ #define DEMORAW_MINOR 1 #define DEMO_Devfs_path demo/0 static int demoMajor = 0; static int MAX_BUF_LEN=1024; /*定义一缓冲区最大长度*/ static char drv_buf[1024]; /*定义一缓冲区*/ static int WRI_LENGTH=0; /*********************************************************************** * 名称:static void do_write() * 功能:逆序排列缓冲区数据 * 入口参数:无 * 出口参数:无 **********************************************************************/ static void do_write() { int i; int len = WRI_LENGTH; char tmp; for(i = 0; i (len1); i++,len--){ tmp = drv_buf[len-1]; drv_buf[len-1] = drv_buf[i]; /*对drv_buf[]数组进行逆序排列*/ drv_buf[i] = tmp; } } /*********************************************************************** * 名称:demo_write() * 功能:对应用户空间的write系统调用,从用户空间拷贝给定长度缓冲区数据到内核空间 * 入口参数:*filp 操作设备文件的ID,*buffer对应用户空间的缓冲区的起始地址,count用户空间数 据缓冲区长度 * 出口参数:返回用户空间数据缓冲区长度 **********************************************************************/ static ssize_t demo_write(struct file *filp,const char *buffer, size_t count) { if(count MAX_BUF_LEN) count = MAX_BUF_LEN; copy_from_user(drv_buf , buffer, count); /*从用户空间拷贝缓冲区数据到内核空间的关键函数,把用 户空间的buffer数据传递给drv_buf数组*/ WRI_LENGTH = count; printk(user write data to drive

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档