设备文件是用来代表相对应的硬件设备绝大多数的硬件设备是用来进行输出和输入操作的, 所以在内核中肯定有内核从进程中获得发送到设备的输出的机制这是通过咑开一个设备文件然后 向其中进行写操作来实现的,如同对普通文件的写操作在下面的的例子中,这是通过 device_write
实现的
但这并不总是够用。设想你有一个通过串口连接的调制解调器(即使你使用的是内置调制解调器 对于CPU来说同样也是通过连接在串口上来实现工作的)。通常峩们通过打开一个设备文件向调制解调器 发送信息(将要通过通信线路传输的指令或数据)或读取信息(从通信线路中返回的响应指令或數据) 但是,我们如何设置同串口对话的速率也就是向串口传输数据的速率这个问题仍然没有解决。
解决之道是在Unix系统中的函数ioctl
(Input Output ConTroL的简寫) 每个设备可以有自己的ioctl
命令,通过读取ioctl
's 可以从进程中向内核发送信息或写ioctl
's向进程返回信息 ,或者两者都是或都不是。函数ioctl
调用时需要三个参数:合适的设备文件的文件描述符ioctl号,和一个可以被一个任务使用来 传递任何东西的long类型的参数
ioctl号是反映主设备号ioctl的种类,对应的命令和参数类型的数字它通常是通过在头文件中宏调用 (_IO, _IOR, _IOW 或_IOWR,取决于其种类)来建立的该头文件应该被使用
ioctl
的用户程序包含(这樣它们就可以生成正确的ioctl
's) 和内核驱动模块包含(这样模块才能理解它)。在下面的例子中头文件为chardev.h,源程序为ioctl.c
即使你只想在自己的模块中使用ioctl
s,你最好还是接收正式的 ioctl
标准这样当你意外的使用别人的ioctl
s, 或别人使用你的时你会知道有错误发生。详情参见内核代码目錄树下的文件 Documentation/ioctl-number.txt.
0 | |||
0 | 0 | 0 | 0 |
0 |
---|
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。