Поделиться через


Элементы управления ввода-вывода (ioctls)

Внимание

Это документация по Azure Sphere (устаревшая версия). Служба Azure Sphere (устаревшая версия) выходит на пенсию 27 сентября 2027 г., и к этому времени пользователи должны перейти в Azure Sphere (интегрированная). Используйте селектор версий, расположенный над toC, чтобы просмотреть документацию по Azure Sphere (интегрированная).

В этом разделе рассматриваются ioctls Linux, которые являются частью файлов заголовков, поставляемых с пакетом SDK Для Azure Sphere. Ioctls Linux предоставляются для периферийных периферийных устройств с аналоговым и цифровым преобразователем (ADC) и импульсно-ширинных модуляций (PWM), операций ввода-вывода общего назначения (gpio), универсальных асинхронных приемников-приемников (UARTs) и масштабирования производительности ЦП (CPUFreq).

Если вы предпочитаете не использовать ioctls Linux, используйте API, доступные в библиотеках среды выполнения Azure Sphere.

Следующие пути к файлам поддерживаются в вызове Linux open() для создания файлов и дескрипторов файлов для функций ввода-вывода:

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

CPUFreq

Поведение этого объекта ioctl эквивалентно настройке атрибута политики регулятора масштабирования в системных файлах. См . 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

Следующие промышленные ioctls ioctls предоставляют ADC в Azure Sphere и определяются в 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)

Дополнительные сведения см. в разделе "Использование ADCs" в высокоуровневых приложениях.

ШИМ

Следующие ioctls предоставляются для PWM в файле заголовка Sysroots/ApiSet/usr/include/linux/pwm.h (ОС Linux):

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

Дополнительные сведения о настройке манифеста приложения для получения доступа к этим ioctls см. в разделе "Параметры манифеста приложения" и использование PWM в высокоуровневых приложениях.

GPIO

Следующие ioctls предоставляются для GPIO в файле заголовка usr/include/linux/gpio.h:

  #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)

Дополнительные сведения о настройке манифеста приложения для получения доступа к этим ioctls для GPIOs см. в разделе "Параметры манифеста приложения" и использование GPIOs в высокоуровневых приложениях.

UART

Список ioctls, предоставляемых для терминалов и серийных линий, основанных на универсальных асинхронных приемниках-приемниках (UARTs), см . в ioctls Linux для терминалов и серийных линий.

Дополнительные сведения о настройке манифеста приложения для получения доступа к этим ioctls для UARTs см. в разделе "Параметры манифеста приложения" и использование UARTs в высокоуровневых приложениях.