Kontrolki we/wy (ioctls)
Ważne
Jest to dokumentacja usługi Azure Sphere (starsza wersja). Usługa Azure Sphere (starsza wersja) zostanie wycofana 27 września 2027 r., a użytkownicy muszą przeprowadzić migrację do usługi Azure Sphere (zintegrowanej) do tej pory. Użyj selektora wersji znajdującego się powyżej spisu treści, aby wyświetlić dokumentację usługi Azure Sphere (zintegrowaną).
W tym temacie opisano terminy systemu Linux, które są częścią plików nagłówkowych dostarczanych z zestawem SDK usługi Azure Sphere. Ioctls systemu Linux są widoczne dla przetworników analogowych do cyfrowych (ADC) i modulacji szerokości impulsu (PWM), urządzeń peryferyjnych ogólnego przeznaczenia we/wy (gpio), uniwersalnych asynchronicznych nadajników odbiorników (UART) i skalowania wydajności procesora CPU (CPUFreq).
Jeśli wolisz nie używać ioctls systemu Linux, użyj interfejsów API dostępnych w bibliotekach środowiska uruchomieniowego usługi Azure Sphere.
Następujące ścieżki plików są obsługiwane w wywołaniu open() systemu Linux do tworzenia plików i deskryptorów plików dla funkcji we/wy:
/dev/gpiochip<number>
/dev/tty<affix><number>
/dev/pwm<number>
/dev/adc<number>
Procesor CPUFreq
Zachowanie tego elementu ioctl jest równoważne ustawieniu atrybutu zasad zarządcy skalowania w systemach sysfs. Zobacz scaling_governor.
Definicję azure_sphere_cpufreq_dev_scaling_governor_for_cpu
struktury można znaleźć w pliku 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)
Parametry
Fd
deskryptor pliku do otwarciaCPUFREQ_SET_SCALING_GOVERNOR_FOR_CPU
żądanie&Sgn
szczegóły struktury
Przykładowy kod
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
Następujące przemysłowe operacje we/wy (IIO) uwidaczniają usługę ADC w usłudze Azure Sphere i są zdefiniowane w pliku 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)
Aby uzyskać więcej informacji, zobacz Use ADCs in high-level applications (Używanie kontrolerów ADCs w aplikacjach wysokiego poziomu).
PWM
Następujące wartości ioctls są uwidocznione dla programu PWM w pliku nagłówkowym Sysroots/ApiSet/usr/include/linux/pwm.h (System operacyjny Linux):
#define PWM_APPLY_STATE _IOW(0xf7, 0x01, struct pwm_chardev_params)
#define PWM_GET_STATE _IOWR(0xf7, 0x02, struct pwm_chardev_params)
Aby uzyskać więcej informacji na temat konfigurowania manifestu aplikacji w celu uzyskania dostępu do tych elementów ioctls, zobacz Ustawienia manifestu aplikacji i Używanie programu PWM w aplikacjach wysokiego poziomu.
GpIO
Następujące wartości ioctls są uwidocznione dla gpIO w pliku nagłówka 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)
Aby uzyskać więcej informacji na temat konfigurowania manifestu aplikacji w celu uzyskania dostępu do tych obiektów zasad grupy, zobacz Ustawienia manifestu aplikacji i Używanie obiektów zasad grupy w aplikacjach wysokiego poziomu.
UART
Aby uzyskać listę ioctls uwidocznionych dla terminali i linii szeregowych opartych na uniwersalnych asynchronicznych nadajników odbiorników (UARTs), zobacz ioctls systemu Linux dla terminali i linii szeregowych.
Aby uzyskać więcej informacji na temat konfigurowania manifestu aplikacji w celu uzyskania dostępu do tych aoctls dla UARTs, zobacz Ustawienia manifestu aplikacji i Używanie UARTs w aplikacjach wysokiego poziomu.