为什么 SGX 调用 ioctl 这么多次?

Why does SGX calling ioctl so many times?

当我使用 strace 分析 sgx 进程时,ioctl 函数在 mmap 函数之后被调用了很多次,如下所示。

1424  11:18:56 mmap(NULL, 4194304, PROT_NONE, MAP_SHARED, 4, 0) = 0x7f7e6a800000
1424  11:18:56 ioctl(4, _IOC(_IOC_WRITE, 0xa4, 0x00, 0x08), 0x7ffdadb760b0) = 0
1424  11:18:56 ioctl(4, _IOC(_IOC_WRITE, 0xa4, 0x01, 0x1a), 0x7ffdadb76f00) = 0
1424  11:18:56 ioctl(4, _IOC(_IOC_WRITE, 0xa4, 0x01, 0x1a), 0x7ffdadb76f00) = 0
1424  11:18:56 ioctl(4, _IOC(_IOC_WRITE, 0xa4, 0x01, 0x1a), 0x7ffdadb76f00) = 0
1424  11:18:56 ioctl(4, _IOC(_IOC_WRITE, 0xa4, 0x01, 0x1a), 0x7ffdadb76f00) = 0

有谁知道为什么这个函数被调用了那么多次?

这个函数是什么意思?

很多东西不是添加自定义系统调用,而是在 "device" FD 上使用 ioctl 作为用户-space 与内核通信的一种方式。将其视为特定于设备的系统调用。

在 SGX 的这种特定情况下,我不知道它具体在做什么,但看到很多 ioctl 的情况并不少见。例如声卡驱动程序也使用了很多ioctl

最初 ioctl 主要用于 TTY 文件描述符上的终端 I/O 设置,例如规范与原始,以及哪些特殊字符执行什么操作,以及串口速度。但正如我所说,其他类型的设备驱动程序已将其用作添加新系统调用的替代方法。