Contrôles d’E/S (ioctls)
Important
Il s’agit de la documentation Azure Sphere (héritée). Azure Sphere (hérité) prend sa retraite le 27 septembre 2027 et les utilisateurs doivent migrer vers Azure Sphere (intégré) pour l’instant. Utilisez le sélecteur de version situé au-dessus du TOC pour afficher la documentation Azure Sphere (intégrée).
Cette rubrique traite des ioctls Linux qui font partie des fichiers d’en-tête fournis avec le Kit de développement logiciel (SDK) Azure Sphere. Les ioctls Linux sont exposés pour les périphériques de convertisseur analogique à numérique (ADC) et de modélisation de largeur d’impulsion (PWM), les E/S à usage général (gpio), les émetteurs de récepteurs asynchrones universels (UART) et la mise à l’échelle des performances du processeur (CPUFreq).
Si vous préférez ne pas utiliser les ioctls Linux, utilisez les API disponibles dans les bibliothèques de runtime Azure Sphere.
Les chemins d’accès aux fichiers suivants sont pris en charge dans l’appel Open() Linux pour la création de fichiers et de descripteurs de fichiers pour les fonctions d’E/S :
/dev/gpiochip<number>
/dev/tty<affix><number>
/dev/pwm<number>
/dev/adc<number>
CPUFreq
Le comportement de ce ioctl équivaut à définir l’attribut de stratégie du gouverneur de mise à l’échelle dans sysfs. Voir scaling_governor.
La définition de azure_sphere_cpufreq_dev_scaling_governor_for_cpu
struct est disponible dans 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)
Paramètres
Fd
descripteur de fichier à ouvrirCPUFREQ_SET_SCALING_GOVERNOR_FOR_CPU
la demande&Sgn
Détails du struct
Exemple de 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);
}
ADC
Les ciotls industriels suivants exposent ADC dans Azure Sphere et sont définis dans 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)
Pour plus d’informations, consultez Utiliser des ADC dans des applications de haut niveau.
PWM
Les ioctls suivants sont exposés pour PWM dans le fichier d’en-tête Sysroots/ApiSet/usr/include/linux/pwm.h (système d’exploitation Linux) :
#define PWM_APPLY_STATE _IOW(0xf7, 0x01, struct pwm_chardev_params)
#define PWM_GET_STATE _IOWR(0xf7, 0x02, struct pwm_chardev_params)
Pour plus d’informations sur la configuration du manifeste d’application pour accéder à ces ioctls, consultez les paramètres du manifeste d’application et utiliser des PWM dans des applications de haut niveau.
GPIO
Les ioctls suivants sont exposés pour GPIO dans le fichier d’en-tête 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)
Pour plus d’informations sur la configuration du manifeste d’application pour accéder à ces ioctls pour les GPIOs, consultez les paramètres du manifeste d’application et utilisez des GPIO dans des applications de haut niveau.
UART
Pour obtenir la liste des ioctls exposés pour les terminaux et les lignes série reposant sur des émetteurs de récepteurs asynchrones universels (UART), consultez les ioctls Linux pour les terminaux et les lignes série.
Pour plus d’informations sur la configuration du manifeste d’application pour accéder à ces ioctls pour les UART, consultez les paramètres du manifeste d’application et utiliser les UART dans les applications de haut niveau.