1

我的 strace 往往会混淆一些ioctl值(我确信SNDRVioctls 没有被很好地识别......)

我如何识别正确的ioctl价值?

一个小例子:

$ strace aplay -l

...
fcntl64(4, F_SETFD, FD_CLOEXEC)         = 0
ioctl(4, UI_DEV_CREATE, 0xbfaa6e74)     = 0
close(4)                                = 0
...

UI_DEV_CREATE是一个SNDRV_CTL_IOCTL_CARD_INFO

(另一个例子)

ioctl(4, USBDEVFS_CONTROL or USBDEVFS_CONTROL32, 0xbfaa6f94) = 0
ioctl(4, UI_DEV_CREATE, 0xbfaa71f0)     = 0
ioctl(4, 0x80045530, 0xbfaa73ac)  

USBDEVFS_CONTROL是一个SNDRV_CTL_IOCTL_PVERSION ,我真的不知道宏扩展是什么0x80045530...

谢谢 :)

4

1 回答 1

2

正如您在 中看到的Documentation/ioctl/ioctl-number.txt,值 0x55 ( 'U') 被多个子系统使用。 strace不知道设备文件属于几个子系统中的哪一个,并且可能无法识别一些较新的 ioctl 代码。

最新strace版本知道SNDRV_CTL_IOCTL_PCM_NEXT_DEVICE.

于 2013-03-12T13:52:51.233 回答