Compartilhar via


Controles de E/S (ioctls)

Importante

Esta é a documentação do Azure Sphere (herdado). O Azure Sphere (herdado) será desativado em 27 de setembro de 2027 e os usuários devem migrar para o Azure Sphere (integrado) até esse momento. Use o seletor de versão localizado acima do sumário para exibir a documentação do Azure Sphere (Integrado).

Este tópico aborda os ioctls do Linux que fazem parte dos arquivos de cabeçalho fornecidos com o SDK do Azure Sphere. Os ioctls do Linux são expostos para conversor analógico-digital (ADC) e periféricos de modulação por largura de pulso (PWM), E/S de uso geral (gpio), receptores-transmissores assíncronos universais (UARTs) e dimensionamento de desempenho de CPU (CPUFreq).

Se você preferir não usar ioctls do Linux, use as APIs disponíveis nas bibliotecas de runtime do Azure Sphere.

Os seguintes caminhos de arquivo são suportados na chamada open() do Linux para criar arquivos e descritores de arquivo para funções de E/S:

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

CPUFreq

O comportamento desse ioctl é equivalente à configuração do atributo de política do regulador de escalabilidade no sysfs. Veja scaling_governor. A azure_sphere_cpufreq_dev_scaling_governor_for_cpu definição de struct pode ser encontrada em 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)

Parâmetros

  • Fd o descritor de arquivo a ser aberto
  • CPUFREQ_SET_SCALING_GOVERNOR_FOR_CPU O pedido
  • &Sgn Detalhes da estrutura

Código de exemplo

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

Os seguintes ioctls de E/S industrial (IIO) expõem o ADC no Azure Sphere e são definidos em 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)

Para obter mais informações, consulte Usar ADCs em aplicativos de alto nível.

PWM

Os seguintes ioctls são expostos para PWM no arquivo de cabeçalho Sysroots/ApiSet/usr/include/linux/pwm.h (sistema operacional Linux):

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

Para obter mais informações sobre como configurar o manifesto do aplicativo para obter acesso a esses ioctls, consulte Configurações do manifesto do aplicativo e Usar PWMs em aplicativos de alto nível.

GPIO

Os seguintes ioctls são expostos para GPIO no arquivo de cabeçalho 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)

Para obter mais informações sobre como configurar o manifesto do aplicativo para obter acesso a esses ioctls para GPIOs, consulte Configurações de manifesto do aplicativo e Usar GPIOs em aplicativos de alto nível.

UART

Para obter a lista de ioctls expostos para terminais e linhas seriais que dependem de UARTs (receptores-transmissores assíncronos universais), consulte os ioctls do Linux para terminais e linhas seriais.

Para obter mais informações sobre como configurar o manifesto do aplicativo para obter acesso a esses ioctls para UARTs, consulte Configurações de manifesto do aplicativo e Usar UARTs em aplicativos de alto nível.