Dela via


I/O-kontroller (ioctls)

Viktigt!

Det här är dokumentationen om Azure Sphere (Legacy). Azure Sphere (Legacy) upphör den 27 september 2027 och användarna måste migrera till Azure Sphere (integrerad) vid den här tiden. Använd versionsväljaren ovanför TOC för att visa dokumentationen om Azure Sphere (integrerad).

Det här avsnittet beskriver Linux-ioctls som ingår i huvudfilerna som levereras med Azure Sphere SDK. Linux-ioctls exponeras för analog-till-digital konverterare (ADC) och pulsbredd modulering (PWM) kringutrustning, generell användning I/O (gpio), universella asynkrona mottagare-sändare (UART) och CPU-prestanda skalning (CPUFreq).

Om du föredrar att inte använda Linux-ioctls använder du de API:er som är tillgängliga i Azure Sphere-körningsbiblioteken.

Följande filsökvägar stöds i Linux open() -anropet för att skapa filer och filbeskrivningar för I/O-funktioner:

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

CPUFreq

Beteendet för denna ioctl motsvarar att ange attributet för skalningsprincip för guvernör i sysfs. Se scaling_governor. Struct-definitionen azure_sphere_cpufreq_dev_scaling_governor_for_cpu finns i 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)

Parametrar

  • Fd filbeskrivningen som ska öppnas
  • CPUFREQ_SET_SCALING_GOVERNOR_FOR_CPU begäran
  • &Sgn struct-information

Exempelkod

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

Följande industriella I/O-ioctls (IIO) exponerar ADC i Azure Sphere och definieras i 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)

Mer information finns i Använda ADC:er i högnivåprogram.

PWM

Följande ioctls exponeras för PWM i huvudfilen 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)

Mer information om hur du konfigurerar programmanifestet för att få åtkomst till dessa ioctls finns i Programmanifestinställningar och Använda PWM:er i högnivåprogram.

GPIO

Följande ioctls exponeras för GPIO i huvudfilen 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)

Mer information om hur du konfigurerar programmanifestet för att få åtkomst till dessa ioctls för GPIOs finns i Programmanifestinställningar och Använda GPIOs i program på hög nivå.

UART

Listan över ioctls som exponeras för terminaler och serielinjer som förlitar sig på universella asynkrona mottagarsändare (UART) finns i Linux-ioctls för terminaler och serielinjer.

Mer information om hur du konfigurerar programmanifestet för att få åtkomst till dessa ioctls för UART finns i Programmanifestinställningar och Använda UART i högnivåprogram.