版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式技术应用驱动程序与测试程序之间的数据交换模块三:嵌入式网关之驱动程序编写学习目标一、有关复制的两个内核函数二、编写copydata_driver驱动程序三、编写copydata_test测试程序四、测试程序和驱动程序copydata的Makefile一、有关复制的两个内核函数
由于用户空间与内核空间的内存映射方式完全不同,所以不能使用像memcpy()之类的函数在用户空间与内核空间之间传输数据。1.1copy_to_user()函数内核函数copy_to_user()是将数据从驱动程序复制到应用程序中。这个函数的原型如下:返回值=应用程序调用的count参数,表明请求数据传输成功。unsignedlongcopy_to_user(void*to,constvoid*from,unsignedlongcount);返回值<应用程序调用的count参数,表明部分数据传输成功。根据设备的不同,导致这个问题的原因也不同,一般采取再次读取的方法。返回值=0,表示到达文件的末尾。返回值=负数,表示出现错误,并且返回值指明了是何种错误,错误号的定义见<linux/errno.h>。1.2copy_from_user()函数内核函数copy_from_user()是将数据从应用程序复制到驱动程序中。unsignedlongcopy_from_user(void*to,constvoid*from,unsignedlongcount);返回值=应用程序调用的count参数,表明请求数据传输成功。返回值<应用程序调用的count参数,表明部分数据传输成功。根据设备的不同,导致这个问题的原因也不同,一般采取再次读取的方法。返回值=0,表明没有写入任何数据。返回值=负数,表示出现错误,并且返回值指明了是何种错误,错误号的定义见<linux/errno.h>。二、编写copydata_driver驱动程序见copydata_driver.c,可以使用gedit打开。下面我们来看看有关复制的两个内核函数的语句。2.1登记有关复制的两个内核函数2.2编写有关复制的两个内核函数staticssize_tdemo_read(structfile*filp,char*buffer,size_tcount,loff_t*ppos){copy_to_user(buffer,data_to_user,count);
returncount;//上一条语句将数据从内核复制到应用程序}staticstructfile_operationscopydata_fops={owner:THIS_MODULE,//表示这个驱动的所有者为驱动模块本身
read:demo_read,//登记demo_read()函数为read()函数
write:demo_write,//登记demo_write()函数为write()函数};三、编写copydata_test测试程序接下来需要编写一个使用驱动程序中read()和write()函数的测试程序。staticssize_tdemo_write(structfile*file,constchar*buffer,size_tcount,loff_t*ppos){inti;
copy_from_user(drv_buf,buffer,count);
for(i=0;i<5;i++){//上一条语句将数据从应用程序复制到内核data_to_user[i]=drv_buf[i]+drv_buf[i];}returncount;}见copydata_test.c,可以使用gedit打开。其中,copydata_test测试程序的核心语句如下所示。intmain(){......printf("Write%dbytesdatato%s.\n",5,DEVICE_NAME);showbuf(buf);write(fd,buf,5);//将数据写入内核
printf("Read%dbytesdatafrom%s.\n",5,DEVICE_NAME);read(fd,buf,5);//从内核读取处理完的数据
showbuf(buf);......}四、测试程序和驱动程序copydata的MakefileTARGET=copydata_testCROSS_COMPILE=arm-linux-CC=$(CROSS_COMPILE)gccSTRIP=$(CROSS_COMPILE)strip#指定内核源代码的路径KERNELDIR=/opt/EmbedSky/linux-2.6.30.4/PWD:=$(shellpwd)#使用交叉编译器编译测试程序和驱动程序all:$(TARGET)modules$(TARGET): $(CC)-o$(TARGET)$(TARGET).cmodules: $(MAKE)-C$(KERNELDIR)M=$(PWD)modulesclean: rm-rf*.o*~core.depend.*.c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 厂房装饰装修合同范本
- 医院和药店合作协议书范本
- 商协会公司劳务合同
- 二零二四年度企业品牌形象设计服务协议
- 固定资产折旧合同
- 二零二四年度煤矿企业保洁保安服务合同
- 二零二四年建筑设计与工程咨询合同
- 专业老鼠防治合同
- 施工合同权益规定
- 二零二四年度停车场车牌识别系统合同:某智能科技公司与停车场的车牌识别系统协议
- 大单元下的教学评一体化
- 2023年过河拉管方案
- 高职院校学生顶岗实习存在的问题及对策分析
- 读后续写10篇(第一期)-2023高考英语广东省名校模拟真题速递
- 小学五年级科学实验操作考试试题
- 高等数学(下)知到章节答案智慧树2023年西北农林科技大学
- 二人合伙人合同协议书电子版
- 人音版小学音乐四年级上册期末测试题(音乐理论)及答案
- 服装怎么验货服装验货的标准及步骤详解
- 生命科学导论(上海交通大学)智慧树知到答案章节测试2023年
- 护理不良事件分析修改
评论
0/150
提交评论