- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- Makefile条件执行.doc
- PPT设计、制作、演示学习和总结.doc
- qsort与其用法.doc
- for循环中i++与++i区别.doc
- sizeof函数功能:计算数据空间字节数.doc
- java中String“==”和equals判断相等性.doc
- JSF环境配置与简介.doc
- Sizeof和Strlen对比.doc
- IP地址和网络上其它系统有冲突解决方法.doc
- STL排序几种用法.doc
- 2008年小学语文六年级毕业模拟检测题(B).doc
- 2008期末县统测七年级语文.doc
- Photoshop cs2 用户名、组织或序列号丢失或无效解决方法.doc
- java考试试卷与答案[1].doc
- MATLAB_简介_2__MATLAB输入与输出格式和矩阵运算函数.ppt
- 2009-2010学年度吉林省长春市六十八中第一学期七年级期中监测.doc
- DOS模式下缩位拨号设置与查看命令.doc
- 2009-2010学年度上学期09级11月月考语文试卷.doc
- 2009---2010年第一学期九年级语文周测二试卷.doc
- loadrunner11.00 windows资源各参数意义以与性能瓶颈分析.doc
最近下载
- 【大学课件】电子商务案例分析.ppt VIP
- DL∕T 793.2-2017 发电设备可靠性评价规程 第2部分:燃煤机组.pdf
- 一种多酚类化合物和组合物及其在制备具有抗衰老作用的产品中的应用.pdf VIP
- 一种TA@LS-Ag复合物及其在制备具有抗衰老作用的护肤品、化妆品或药物中的应用.pdf VIP
- Walkera华科尔无人机FCS-F8使用指南_CN_V1.2_2020.10.12(金属壳版).pdf
- 老年人居家适老化改造工程竣工验收单(参考模板)(2022年参考新格式).docx
- 人教版(2024)七年级英语上册Unit 7 Happy Birthday Lesson 1课件+音频(共20张PPT).ppt.pptx VIP
- 中试平台管理制度.docx
- 北京市清华附小2023年四年级数学第二学期期末监测模拟试题含解析.doc
- 《化妆品配方与制备技术》课件——第7章 造型用品.pptx VIP
文档评论(0)