文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 国产软件 | 国外软件 | 汉化补丁 | 设为首页 | 加入收藏
业界资讯 | 图形图像 | 操作系统 | 网络冲浪 | 工具软件 | 办公软件 | 媒体动画 | 精文荟萃 | 认证考试 | 网站建设 | 技术开发 | 专栏
当前位置:abcdown网络学院操作系统 LinuxLinux操作系统内核和设备文件对话
精品广告
推荐TOP10
·高效使用Linux的七个好习惯
·为何Linux比Windows更安全?
·Linux和Unix最常用的网络命令
·Linux系统下安全防护十大招数
·Linux各种服务器的架设
·Linux操作系统下用单网卡捆绑双IP
·恢复被误删除的Linux文件
·在Linux服务器上做备份和恢复
·Linux中网络参数的意义及其应用
·linux知识大全
阅读TOP10
·LINUX动态链接库高级应用
·口袋里的Linux:在您的U盘上运行SLAX
·LINUX系统中动态链接库的创建与使用
·RedHat Linux 9升级内核
·如何编写Linux设备驱动程序
·自己动手做一个迷你型Linux操作系统
·RedHat Linux 9软件包管理
·如何架构高性价比的分布式计算机集群(1)
·Slax本土化:移动硬盘上的Linux中文套件
·Python Socket 编程(1)

Linux操作系统内核和设备文件对话

日期:2006年12月18日 作者: 查看:[大字体 中字体 小字体]


  设备文件是用来代表物理设备的。多数物理设备是用来进行输出或输入的,所以必须由某种机制使得内核中的设备驱动从进程中得到输出送给设备。这可以通过打开输出设备文件并且写入做到,就想写入一个普通文件。在下面的例子里,这由device_write实现。

  这不是总能奏效的。设想你与一个连向modem的串口(技是你有一个内猫,从CPU看来它也是作为一个串口实现,所以你不需要认为这个设想太困难)。最自然要做的事情就是使用设备文件把内容写到modem上(无论用modem命令还是电话线)或者从modem读信息(同样可以从modem命令回答或者通过电话线)。但是这留下的问题是当你需要和串口本身对话的时候需要怎样做?比如发送数据发送和接收的速率。
  回答是Unix使用一个叫做ioctl(input output control的简写)的特殊函数。每个设备都有自己的ioctl命令,这个命令可以是ioctl读的,也可以是写的,也可以是两者都是或都不是。Ioctl函数由三个参数调用:适当设备的描述子,ioctl数,和一个长整型参数,可以赋予一个角色用来传递任何东西。

  Ioctl数对设备主码、ioctl类型、编码、和参数的类型进行编码。Ioctl数通常在头文件由一个宏调用(_IO,_IOR,_IOW或_IOWR——决定于类型)。这个头文件必须包含在使用ioctl(所以它们可以产生正确的ioctl's)程序和内核模块(所以它可以理解)中。在下面的例子里,这个头文件是chardev.h,使用它的程序是ioctl.c。

  如果你希望在你自己的内核模块中使用ioctl's,最好去接受一分正式的ioctl职位,这样你就可以得到别人的ioctl's,或者他们得到你,你就可以知道哪里出了错误。如果想得到更多的信息,到'documentation/ioctl-number.txt'中查看内核源文件树。

ex chardev.c 

/* chardev.c 

* Create an input/output character device 
*/ 


/* Copyright (C) 1998-99 by Ori Pomerantz */ 

 

/* The necessary header files */ 

/* Standard in kernel modules */ 
#include /* Were doing kernel work */ 
#include /* Specifically, a module */ 

/* Deal with CONFIG_MODVERSIONS */ 
#if CONFIG_MODVERSIONS==1 
#define MODVERSIONS 
#include 
#endif 

/* For character devices */ 

/* The character device definitions are here */ 
#include 

/* A wrapper which does next to nothing at 
* at present, but may help for compatibility 
* with future versions of Linux */ 
#include 


/* Our own ioctl numbers */ 
#include "chardev.h" 


/* In 2.2.3 /usr/include/linux/version.h includes a 
* macro for this, but 2.0.35 doesnt - so I add it 
* here if necessary. */ 
#ifndef KERNEL_VERSION 
#define KERNEL_VERSION(a,b,c) ((a)*65536+(b)*256+(c)) 

[1] [2] [3] [4] [5] [6] [7] [8] [9] 下一页 

上一篇:Fireworks绘XP风格精致图标

下一篇:在Linux系统下清除操作信息的记录


相关软件: 相关文章:
·黑客技术之知道对方IP入侵别人的电脑
·世界各地域名后缀对照表 世界各国域名表
·中文姓对应英文姓
·巧用搜狗输入法 面对特殊字符不再犯愁
·JavaScript自定义模式对话框
·[魔兽世界]对萨满天赋加点经验
·在Asp.net中如何实现弹出提示对话框

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.abcdown.net
首页 | 本站声明 | 下载帮助 | 发布软件 |
中文版权所有:ABC学院 浙ICP备05000717号