Controlli di I/O (IOCTL)I/O Controls (ioctls)

Questo argomento illustra le IOCTL Linux che fanno parte dei file di intestazione forniti con il Azure Sphere SDK.This topic covers Linux ioctls that are part of the header files shipped with the Azure Sphere SDK. Le IOCTL di Linux sono esposte per le periferiche di conversione da analogico a digitale (ADC) e Pulse Width Modulation (PWM), utilizzo generico di I/O (GPIO), Universal Asynchronous Receiver-Transmitters (UART) e CPU performance scaling (CPUFreq).The Linux ioctls are exposed for analog-to-digital converter (ADC) and pulse-width modulation (PWM) peripherals, general purpose I/O (gpio), universal asynchronous receiver-transmitters (UARTs), and CPU performance scaling (CPUFreq).

Se si preferisce non usare IOCTL Linux, usare le API disponibili nelle librerie di runtime Azure Sphere.If you prefer to not use Linux ioctls, use the APIs available in the Azure Sphere runtime libraries.

I percorsi di file seguenti sono supportati nella chiamata di Linux Open () per la creazione di file e descrittori di file per le funzioni di I/O:The following file paths are supported in the Linux open() call for creating files and file descriptors for I/O functions:

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

CPUFreqCPUFreq

Il comportamento di questo IOCTL equivale a impostare l'attributo di criteri di ridimensionamento Governor in sysfs.The behavior of this ioctl is equivalent to setting the scaling governor policy attribute in sysfs. Vedere scaling_governor.See scaling_governor. La azure_sphere_cpufreq_dev_scaling_governor_for_cpu definizione struct si trova in usr/include/Linux/cpufreq_dev. hThe azure_sphere_cpufreq_dev_scaling_governor_for_cpu struct definition can be found in 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)

ParametriParameters

  • Fd descrittore di file da aprireFd the file descriptor to open
  • CPUFREQ_SET_SCALING_GOVERNOR_FOR_CPU la richiestaCPUFREQ_SET_SCALING_GOVERNOR_FOR_CPU the request
  • &Sgn Dettagli struct&Sgn struct details

Codice di esempioSample code

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);
}

ADCADC

I seguenti IOCTL di I/O industriale (IIO) espongono ADC in Azure Sphere e sono definiti in usr/include/Linux/IIO/IOCTL. h:The following industrial I/O (IIO) ioctls expose ADC in Azure Sphere, and are defined in 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)

Per altre informazioni, vedere usare gli ADC nelle applicazioni di alto livello.For more information, see Use ADCs in high-level applications.

PWMPWM

Le IOCTL seguenti sono esposte per PWM nel file di intestazione / sysroot/usr/include/Linux/PWM.h (sistema operativo Linux):The following ioctls are exposed for PWM in the header file 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)

Per altre informazioni sulla configurazione del manifesto dell'applicazione per ottenere l'accesso a tali IOCTL, vedere impostazioni del manifesto dell'applicazione e usare PWMs nelle applicazioni di alto livello.For more information on setting up the application manifest to gain access to these ioctls, see Application manifest settings and Use PWMs in high-level applications.

GPIOGPIO

Le IOCTL seguenti sono esposte per GPIO nel file di intestazione usr/include/Linux/GPIO. h:The following ioctls are exposed for GPIO in the header file 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)

Per ulteriori informazioni sull'impostazione del manifesto dell'applicazione per ottenere l'accesso a tali IOCTL per GPIO, vedere impostazioni del manifesto dell'applicazionee utilizzare GPIO nelle applicazioni di alto livello.For more information on setting up the application manifest to gain access to these ioctls for GPIOs, see Application manifest settings, and Use GPIOs in high-level applications.

UARTUART

Per l'elenco di IOCTL esposte per terminali e linee seriali che si basano su Universal Asynchronous Receiver-Transmitters (UART), vedere le IOCTL Linux per i terminali e le linee seriali.For the list of ioctls exposed for terminals and serial lines relying on universal asynchronous receiver-transmitters (UARTs), see the Linux ioctls for terminals and serial lines.

Per altre informazioni sulla configurazione del manifesto dell'applicazione per accedere a tali IOCTL per UART, vedere impostazioni del manifesto dell'applicazione e usare UART nelle applicazioni di alto livello.For more information on setting up the application manifest to gain access to these ioctls for UARTs, see Application manifest settings and Use UARTs in high-level applications.