I/O 控件(ioctls)

重要

这是 Azure Sphere(旧版)文档。 Azure Sphere(旧版)将于 2027 年 9 月 27 日停用,用户此时必须迁移到 Azure Sphere(集成)。 使用位于 TOC 上方的版本选择器查看 Azure Sphere(集成)文档。

本主题介绍作为 Azure Sphere SDK 随附的头文件的一部分的 Linux ioctls。 Linux ioctls 针对模拟到数字转换器(ADC)和脉冲宽度调节(PWM)外围设备、通用 I/O(gpio)、通用异步接收器发射机(UART)和 CPU 性能缩放(CPUFreq)公开。

如果不想使用 Linux ioctls,请使用 Azure Sphere 运行时库中可用的 API。

Linux open() 调用支持以下文件路径,用于创建 I/O 函数的文件和文件描述符:

  /dev/gpiochip<number>
  /dev/tty<affix><number>
  /dev/pwm<number>
  /dev/adc<number>

CPUFreq

此 ioctl 的行为等效于在 sysfs 中设置缩放调控器策略属性。 请参阅 scaling_governor。 可以在 azure_sphere_cpufreq_dev_scaling_governor_for_cpu usr/include/linux/cpufreq_dev.h 中找到结构定义

#define CPUFREQ_SET_SCALING_GOVERNOR_FOR_CPU _IOW('p', 0x0A, struct azure_sphere_cpufreq_dev_scaling_governor_for_cpu)

参数

  • Fd 要打开的文件描述符
  • CPUFREQ_SET_SCALING_GOVERNOR_FOR_CPU 请求
  • &Sgn 结构详细信息

代码示例

int fd = open("/dev/cpufreq", O_WRONLY | O_CLOEXEC, 0);
if (fd >= 0) {
    struct azure_sphere_cpufreq_dev_scaling_governor_for_cpu sgn;
    sgn.cpu = 0;
    sgn.governor_name = "ondemand" //allowed values are conservative, ondemand, and performance
    int res = ioctl(fd, CPUFREQ_SET_SCALING_GOVERNOR_FOR_CPU, &sgn);
}

ADC

以下工业 I/O (IIO) ioctls 在 Azure Sphere 中公开 ADC,并在 usr/include/linux/iio/ioctl.h 中定义:

  #define IIO_GET_DEVICE_INFO_BUFFER_TOTAL_SIZE_IOCTL _IOR('i', 0xD0, unsigned int)
  #define IIO_GET_DEVICE_INFO_BUFFER_IOCTL _IOWR('i', 0xD1, struct iio_ioctl_dev_info_buffer)
  #define IIO_GET_CHANNEL_SPEC_BUFFER_TOTAL_SIZE_IOCTL _IOWR('i', 0xD2, struct iio_ioctl_chan_spec_buffer_size)
  #define IIO_GET_CHANNEL_SPEC_BUFFER_IOCTL _IOWR('i', 0xD3, struct iio_ioctl_chan_spec_buffer)
  #define IIO_READ_RAW_CHANNEL_INFO_IOCTL _IOWR('i', 0xD4, struct iio_ioctl_raw_channel_info)
  #define IIO_WRITE_RAW_CHANNEL_INFO_IOCTL _IOWR('i', 0xD5, struct iio_ioctl_raw_channel_info)
  #define IIO_READ_CHANNEL_EXT_INFO_IOCTL _IOWR('i', 0xD6, struct iio_ioctl_read_chan_ext_info)
  #define IIO_WRITE_CHANNEL_EXT_INFO_IOCTL _IOWR('i', 0xD7, struct iio_ioctl_write_chan_ext_info)
  #define IIO_SCAN_MASK_QUERY_BIT_IOCTL _IOW('i', 0xD8, unsigned int)
  #define IIO_SCAN_MASK_SET_BIT_IOCTL_IOW('i', 0xD9, unsigned int)
  #define IIO_SCAN_MASK_CLEAR_BIT_IOCTL _IOW('i', 0xDA, unsigned int)
  #define IIO_BUFFER_GET_ENABLE_IOCTL _IO('i', 0xDB)
  #define IIO_BUFFER_SET_ENABLE_IOCTL _IOW('i', 0xDC, unsigned int)
  #define IIO_BUFFER_GET_LENGTH_IOCTL_IO('i', 0xDD)
  #define IIO_BUFFER_SET_LENGTH_IOCTL _IOW('i', 0xDE, unsigned int)
  #define IIO_BUFFER_GET_WATERMARK_IOCTL _IO('i', 0xDF)
  #define IIO_BUFFER_SET_WATERMARK_IOCTL _IOW('i', 0xE0, unsigned int)

有关详细信息,请参阅 高级应用程序中使用 ADC。

PWM

标头文件 Sysroots/ApiSet/usr/include/linux/pwm.h (Linux OS):

 #define PWM_APPLY_STATE _IOW(0xf7, 0x01, struct pwm_chardev_params)
 #define PWM_GET_STATE _IOWR(0xf7, 0x02, struct pwm_chardev_params)

有关设置应用程序清单以获取对这些 ioctls 的访问权限的详细信息,请参阅高级应用程序中的应用程序清单设置和使用 PVM。

GPIO

标头文件 usr/include/linux/gpio.h 中为 GPIO 公开了以下 ioctls:

  #define GPIOHANDLE_GET_LINE_VALUES_IOCTL _IOWR(0xB4, 0x08, struct gpiohandle_data)
  #define GPIOHANDLE_SET_LINE_VALUES_IOCTL _IOWR(0xB4, 0x09, struct gpiohandle_data)

  #define GPIO_GET_CHIPINFO_IOCTL _IOR(0xB4, 0x01, struct gpiochip_info)
  #define GPIO_GET_LINEINFO_IOCTL _IOWR(0xB4, 0x02, struct gpioline_info)
  #define GPIO_GET_LINEHANDLE_IOCTL _IOWR(0xB4, 0x03, struct gpiohandle_request)
  #define GPIO_GET_LINEEVENT_IOCTL _IOWR(0xB4, 0x04, struct gpioevent_request)

有关设置应用程序清单以获取对 GPI 的这些 ioctls 的访问权限的详细信息,请参阅 应用程序清单设置,并在 高级应用程序中使用 GPIO。

UART

有关为终端和串行线路公开的 ioctls 列表,具体取决于通用异步接收器发送器(UART),请参阅 适用于终端和串行线的 Linux ioctls。

有关设置应用程序清单以获取对这些 UART 的访问权限的详细信息,请参阅高级应用程序中的应用程序清单设置和使用 UART。