Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15476
  • 博文数量: 5
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 42
  • 用 户 组: 普通用户
  • 注册时间: 2014-02-23 09:16
文章分类
文章存档

2014年(5)

我的朋友

分类: LINUX

2014-08-10 17:06:38

    ioctl可以通过对内核设备的控制达到核内外通信的目的,即在用户态控制内核动作。从ioctl这个名称上看,本意是针对I/O设备进行的控制操作,但实际并不限制是真正的I/O设备,可以是任何一个内核设备即可。
    使用ioctl通信一般是通过字符设备实现的。所以首先要向内核注册一个字符设备,设置字符设备属性:
STATIC struct miscdevice test_char_dev=
{
    .name  = “test_dev”,
    .fops  = &test_char_dev_fops 
};
STATIC const struct file_operations test_char_dev_fops =
{
    .open = test_ctl_open,
   .release = test_ctl_release,
    .ioctl = test_ctl_ioctl,
    .owner = THIS_MODULE
};
misc_register(&test_char_dev);
这样就向内核注册了一个字符设备,字符设备名是"test_dev",注册完成后会在/dev/目录下有个test_dev,这个就是我们的字符设备。在用户态操作的时候先open这个文件。打开这个文件后的文件操作指针是test_char_dev_fops ,所以如果我们有ioctl相关的操作,会调用到test_ctl_ioctl,这个接口,根据cmd的不同相关的处理都在这个接口完成。

阅读(773) | 评论(0) | 转发(0) |
0

上一篇:linux vlan处理

下一篇:一次内核hung task分析

给主人留下些什么吧!~~