设为首页  
联系我们  
加入收藏  
网页制作 冲浪宝典 图形图像 操作系统 软件教学 编程开发 认证考试 安全技术 站长专区 文学驿站 娱乐天地 游戏天地 办公软件
文章搜索
您的位置: 首页 >> 文章首页 >> 操作系统 >> Linux >> 详解Linux操作系统设备驱动兼容性
精品推荐
Linux点击TOP10
·Linux下安装LumaQQ
·口袋里的Linux:在您的U盘上运行SLAX
·Linux命令Man解释:PPPD(8) :点对点daemon协议
·虚拟网络计算工具VNC使用指南
·Linux系统中如何正确安装摄像头驱动
·Linux 内核文件系统与设备操作流程分析
·Linux 核心--4.内存管理
·Ethernet HOWTO Linux以太网-HOWTO (4)型号的信息
·Linux精彩桌面 GNOME桌面主题安装实例
·Linux下Flash/Shockwave播放器安装
操作系统点击TOP10
·Windows Vista完全硬盘安装法
·Windows Vista 激活不求人
·Windows Vista局域网网络连接设置
·Windows Vista系统动态桌面截图欣赏
·Windows XP中磁盘的分区应用
·Windows NT/2000/XP 出现蓝屏并显示“STOP 0x0000007f”错误
·让Windows XP变身Vista
·一招搞定Vista系统软件不兼容问题
·教你如何正确配置和优化Windows Vista
·只转两圈 加快Windows XP启动速度
精选专题

详解Linux操作系统设备驱动兼容性

作者: 来源:http://www.xgdown.com/ 时间:2006-12-27 11:14:53

详解Linux操作系统设备驱动兼容性(5) unsigned long copy_to_user(unsigned long to, unsigned long from, unsigned
long len);
unsigned long __copy_to_user(unsigned long to, unsigned long from, unsigned
long len);
copy_to_user(to, from, len, retval);

  这些函数被用来将数据复制到用户空间,它们的行为非常类似于它们的copy_from的对应者。2.1版核心还定义了其它访问用户空间的函数:clear_user,strncpy_from_user,和strlen_user。我不打算讨论它们了,因为Linux2.0中没有这些函数,并且驱动程序的代码也很少用到它们。有兴趣的读者可以看看。

  使用新的接口
  访问用户空间的新的函数集初看起来可能有点令人失望,但它们的确使程序员的日子好过的多了。在Linux2.1上,不再需要显式地检查用户空间;access_ok一般不需要调用。使用新接口的代码可以直接进行数据传送。_ret函数在实现系统调用时证明是相当有用的,因为一个用户空间的失败通常导致系统调用的一个返回-EFAULT的失败。因此,一个典型的read实现,看起来如下:

  

long new_read(struct inode *inode, struct file *filp, char *buf,
unsigned long count);
       {
       /* identify your data (device-specific code) */
       if (__copy_to_user(buf, new_data, count))
              return -EFAULT;
       return count;
}

  注意使用不进行检查的__copy_to_user是因为调用者在把数据传输分派到文件操作之前已经检查了用户空间。这就象2.0,read和write不需要调用verify_area。类似地,典型的ioctl实现看起来如下:

  

int new_ioctl(struct inode *inode, struct file *filp, unsigned int
cmd, unsigned long arg);
       {
/* device-specific checks, if needed */
switch(cmd){
       case NEW_GETVALUE:
              put_user_ret(new_value, (int *)arg, -EFAULT);
              break;
       case NEW_SETVALUE:
              get_user_ret(new_value, (int *)arg, -EFAULT);
       default:

              return –EINVAL;

共9页 9 7 [1] [2] [3] [4] [5] [6] [7] [8] [98 :>

详解Linux操作系统设备驱动兼容性 相关文章:
详解Linux操作系统设备驱动兼容性 相关软件:
特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
转载请注明来源:http://www.xgdown.com