次の方法で共有


I/O コントロール (ioctls)

このトピックでは、Azure Sphere SDK に付属するヘッダー ファイルの一部である Linux ioctl について説明します。 Linux ioctl は、アナログ/デジタル コンバータ (ADC) およびパルス幅変調 (PWM) 周辺機器、汎用 I/O (gpio)、ユニバーサル非同期レシーバートランスミッタ (UART)、CPU パフォーマンス スケーリング (CPUFreq) 用に公開されています。

Linux ioctls を使用しない場合は、Azure Sphere ランタイム ライブラリで使用できる API を使用します。

I/O 関数のファイルとファイル記述子を作成するための Linux open() 呼び出しでは、次のファイル パスがサポートされています。

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

Cpufreq

この ioctl の動作は、sysfs でスケーリング ガバナー ポリシー属性を設定することと同じです。 「scaling_governor」を参照してください。 構造体の定義は azure_sphere_cpufreq_dev_scaling_governor_for_cpu 、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)

パラメーター

  • Fd 開くファイル記述子
  • CPUFREQ_SET_SCALING_GOVERNOR_FOR_CPU 要求
  • &Sgn 構造体の詳細

サンプル コード

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

次の産業用 I/O (IIO) ioctls は、Azure Sphere で ADC を公開し、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)

詳細については、高度な アプリケーションでの ADC の使用に関するページを参照してください。

Pwm

次の ioctl は、ヘッダー ファイル Sysroots/ApiSet/usr/include/linux/pwm.h (Linux OS) で PWM 用に公開されます。

 #define PWM_APPLY_STATE _IOW(0xf7, 0x01, struct pwm_chardev_params)
 #define PWM_GET_STATE _IOWR(0xf7, 0x02, struct pwm_chardev_params)

これらの ioctl にアクセスできるようにアプリケーション マニフェストを設定する方法の詳細については、「 アプリケーション マニフェストの設定 」および「 高レベル アプリケーションでの PWM の使用」を参照してください。

Gpio

ヘッダー ファイル usr/include/linux/gpio.h では、GPIO に対して次の ioctl が公開されます。

  #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)

これらの ioctl for GPO にアクセスできるようにアプリケーション マニフェストを設定する方法の詳細については、「 アプリケーション マニフェストの設定」および「 高度なアプリケーションで GPO を使用する」を参照してください。

Uart

ユニバーサル非同期レシーバトランスミッタ (UART) に依存する端末およびシリアル回線用に公開されている ioctl の一覧については、 ターミナルとシリアル回線の Linux ioctl を参照してください。

これらの ioctl for UART にアクセスするためのアプリケーション マニフェストの設定の詳細については、「 アプリケーション マニフェストの設定 」および「概要アプリケーション での UART の使用」を参照してください。