Controlli I/O (ioctls)
Importante
Questa è la documentazione di Azure Sphere (legacy). Azure Sphere (legacy) viene ritirato il 27 settembre 2027 e gli utenti devono eseguire la migrazione ad Azure Sphere (integrato) entro questo periodo. Usare il selettore di versione posizionato sopra il sommario per visualizzare la documentazione di Azure Sphere (integrata).
Questo argomento illustra ioctls Linux che fanno parte dei file di intestazione forniti con Azure Sphere SDK. I ioctls Linux sono esposti per le periferiche di I/O (GPIO), convertitore analogico-digitale (ADC) e modulatore a larghezza di impulso (PWM), I/O per utilizzo generico (gpio), trasmettitori ricevitori asincroni universali (UART) e ridimensionamento delle prestazioni della CPU (CPUFreq).
Se si preferisce non usare ioctls Linux, usare le API disponibili nelle librerie di runtime di Azure Sphere.
I percorsi di file seguenti sono supportati nella chiamata open() di Linux per la creazione di file e descrittori di file per le funzioni di I/O:
/dev/gpiochip<number>
/dev/tty<affix><number>
/dev/pwm<number>
/dev/adc<number>
CPUFreq
Il comportamento di questo ioctl equivale all'impostazione dell'attributo dei criteri di scaling governor in sysfs. Vedere scaling_governor.
La azure_sphere_cpufreq_dev_scaling_governor_for_cpu
definizione dello struct è disponibile 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)
Parametri
Fd
descrittore di file da aprireCPUFREQ_SET_SCALING_GOVERNOR_FOR_CPU
la richiesta&Sgn
Dettagli struct
Codice di esempio
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 I/O industriali seguenti espongono ADC in Azure Sphere e sono definiti 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 i controller di dominio di Azure nelle applicazioni di alto livello.
PWM
I seguenti ioctls vengono esposti per PWM nel file di intestazione Sysroots/ApiSet/usr/include/linux/pwm.h (sistema operativo Linux):
#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 questi ioctls, vedere Impostazioni del manifesto dell'applicazione e Usare PWM nelle applicazioni di alto livello.
GPIO
I seguenti ioctls sono esposti per GPIO nel file di intestazione 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 altre informazioni sulla configurazione del manifesto dell'applicazione per ottenere l'accesso a questi ioctls per gli oggetti Criteri di gruppo, vedere Impostazioni del manifesto dell'applicazione e Usare oggetti Criteri di gruppo nelle applicazioni di alto livello.
UART
Per l'elenco di ioctls esposti per terminali e linee seriali che si basano su trasmettitori ricevitori asincroni universali (UART), vedere gli ioctls Linux per terminali e linee seriali.
Per altre informazioni sulla configurazione del manifesto dell'applicazione per ottenere l'accesso a questi ioctls per le route definite dall'utente, vedere Impostazioni del manifesto dell'applicazione e Usare UART nelle applicazioni di alto livello.