标签: ioctl

IOCTL Linux设备驱动程序

任何人都可以解释我,

  1. 什么是IOCTL
  2. 它是干什么用的?
  3. 我怎么用呢?
  4. 为什么我不能定义执行相同工作的新功能IOCTL

linux ioctl driver linux-device-driver linux-kernel

122
推荐指数
2
解决办法
10万
查看次数

"设备不合适的ioctl"

我有一个在AIX框中运行的Perl脚本.

该脚本尝试从某个目录打开一个文件,但由于该文件没有读取权限,因此无法读取该文件,但我得到了一个不同的错误inappropriate ioctl for device.

它不应该说类似的no read permissions for file东西吗?

这条inappropriate ioctl for device消息是什么意思?

我该如何解决?

编辑:这是我在做的时候发现的strace.

open("/local/logs/xxx/xxxxServer.log", O_WRONLY|O_CREAT|O_APPEND|O_LARGEFILE, 
    0666) = 4 _llseek(4, 0, [77146], SEEK_END) = 0
ioctl(4, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbffc14f8) = -1 ENOTTY 
    (Inappropriate ioctl for  device)

perl ioctl

50
推荐指数
5
解决办法
19万
查看次数

如何在shell脚本中调用ioctl?

我正在尝试在只有bash和原始基础实用程序的系统上执行ioctl调用.

有没有办法在shell脚本中的/ dev中执行任意ioctl命令(如果params只是整数),而不编写C/perl/python程序?像"magic_ioctl/dev/console 30 1 2"这样的东西会调用"ioctl(open("/ dev/console"),30,1,2);".

bash shell ioctl

30
推荐指数
2
解决办法
2万
查看次数

检测笔记本电脑盖关闭和打开

是否可以检测笔记本电脑的盖子何时打开或关闭?从我所读到的,这是不可能的,但是SO已经帮助我完成了不可能的事情.

我发现的唯一可能是正确的方向是MSDN博客文章,关于报告电源按钮所需的IOCTL.操作系统调用它们是否有可能"嗅"这些?

我正在使用VB.NET,但会接受任何语言的建议.感谢您的时间和建议.

编辑:我的软件将(最终)覆盖盖子关闭时发生的操作(基于用户偏好),因此不能选择关闭盖子时通常发生的暂停和其他操作.

.net pinvoke winapi ioctl

26
推荐指数
3
解决办法
9734
查看次数

直接向Windows中的设备发送ATA命令?

我正在尝试将ATA命令发送到Windows中的物理磁盘,并从设备获取响应.

注意:在这种情况下,我想发送IDENTIFY DEVICE(0xEC)命令.设备将响应512字节的数据块.(特别是我对第119行的第0位感兴趣 - 设备TRIM命令支持).

我知道我需要CreateFile用来打开设备:

handle = CreateFile(
    "\\.\PhysicalDrive0", GENERIC_READ, FILE_SHARE_READ, 
    nil,            // no security attributes
    OPEN_EXISTING,
    0,              // flags and attributes
    nil             // no template file
);
Run Code Online (Sandbox Code Playgroud)

但在此之后,我陷入困境,无法做什么.

我想过发送0xEC使用[DeviceIoControl][4]:

// const ATACommand_IdentifyDevice = 0xEC;
uint bytesReturned = 0;

DeviceIoControl(handle, 
    0xEC,               // IO Control Code
    nil,                // input buffer not needed
    0,                  // input buffer is zero bytes
    @buffer,            // output buffer to store …
Run Code Online (Sandbox Code Playgroud)

windows ioctl trim device ata

17
推荐指数
2
解决办法
3万
查看次数

在内核模式和用户模式之间使用ioctl通信

我想使用ioctl与我的内核模块进行通信.我已经为内核模块编写了两个c程序,其他用于用户模式.编译内核模块时出现此错误:

错误:初始化程序中指定的未知字段'ioctl'

在这一行:

struct file_operations Fops = {
 .read = device_read,
 .write = device_write,
 .ioctl = device_ioctl,  ------> at this point error is occuring.
 .open = device_open,
 .release = device_release,
};
Run Code Online (Sandbox Code Playgroud)

知道为什么会这样.

谢谢

ioctl kernel-module ubuntu-10.04

17
推荐指数
1
解决办法
2万
查看次数

如何在Mac插件中使用ioctl()设置RTS?

我可以在一个小型终端应用程序中使用ioctl设置RTS,但不能在我的Mac插件代码中设置,尽管两者都运行相同的代码.在插件中,我只能"获取"串口标志/引脚,但不能"设置"它们.在终端应用程序中,我可以"获取并"设置"它们.我得到了ENODEV的错误.错误号码是19,消息是"设备不支持操作".

如果这是一个安全问题(在浏览器的上下文中)有没有办法获得使用ioctl修改标志的权限?我有一个连接到usb端口的串行设备.我使用FTDI vcp(虚拟COM端口)驱动程序.Windows端的一切都很流畅.顺便说一句,我使用Safari和Firefox获得相同的结果.以下是我的代码:

int disableRTS ()
{
    char fd, ret, flags;

    // open device
    if ((fd = open("/dev/cu.mydevice", O_RDWR | O_NDELAY)) < 0)
    {
        fprintf(stderr, "failed to open device");
        return -1;
    }

    // Get the current state of the bits
    ioctl(fd, TIOCMGET, &flags);
    fprintf(stderr, "Flags are %x.\n", flags);    

    flags &= ~TIOCM_RTS;  // Disable the RTS bit
    ret = ioctl(fd, TIOCMSET, &flags);

    if (ret == -1)
        fprintf(stderr, "TIOCMSET failed\n");
    else
        fprintf(stderr, "TIOCMSET succeeded. flags: %x.\n", flags);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

=========

更新 …

c++ macos plugins ioctl serial-port

16
推荐指数
1
解决办法
1277
查看次数

unlocked_ioctl vs normal ioctl

在我的驱动程序的file_operations结构中,我有:

struct file_operations Fops = {
  read:    device_read,
  write:   device_write,
  unlocked_ioctl:   device_ioctl,
  ...
};
Run Code Online (Sandbox Code Playgroud)

即没有使用ioctl字段.这是否足以避免Big Kernel Lock并在没有任何同步的情况下进入device_ioctl()?或者我是否必须在代码的用户空间部分更改ioctl()调用?

c linux synchronization kernel ioctl

15
推荐指数
3
解决办法
2万
查看次数

如何了解C中接口的IP地址?

假设我正在运行一个名为IpAddresses.c的程序.我希望该程序根据每个接口获取此设备具有的所有IP地址.就像ifconfig一样.我怎样才能做到这一点?

我对ioctl了解不多,但我读到它可能会对我有所帮助.

c ioctl interface ip-address

15
推荐指数
3
解决办法
3万
查看次数

USBDEVFS_RESET与IOCTL_USB_RESET

我似乎不同的抽象之间纠结的USB堆栈上..有什么不同betweeen IOCTL_USB_RESETUSBDEVFS_RESET解雇对一个USB设备?这两个调用最终会在接口上触发相同的低级操作,还是有区别?

我注意到USBDEVFS_RESET有时用'相当于重新插入和重新枚举设备'来描述,而我自己发现,触发IOCTL_USB_RESET(由libusb的usb_reset()调用完成)确实会触发重置消息dmesg但没有新的"枚举",这将导致通常我猜多线USB检测和识别消息.

由于IOCTL_USB_RESET解决我的问题(卡住usb设备)是不可行的,甚至不会触发重新计算,有没有机会USBDEVFS_RESET做得更好?

linux usb ioctl

15
推荐指数
1
解决办法
4059
查看次数