I/O 控件 (ioctls)
重要
這是 Azure Sphere (舊版) 檔。 Azure Sphere(舊版)將於 2027 年 9 月 27 日淘汰,且使用者此時必須移轉至 Azure Sphere(整合式)。 使用位於 TOC 上方的版本選取器來檢視 Azure Sphere (整合式) 檔。
本主題涵蓋Linux ioctls,屬於隨附於 Azure Sphere SDK 的頭檔。 Linux ioctls 公開用於類比數位轉換器 (ADC) 和脈衝寬度調節 (PWM) 周邊、一般用途 I/O (gpio)、通用異步接收器傳輸器(UART)和 CPU 效能調整(CPUFreq)。
如果您不想使用 Linux ioctls,請使用 Azure Sphere 執行時間連結庫中可用的 API。
Linux open() 呼叫支援下列檔案路徑,以建立 I/O 函式的檔案和檔案描述項:
/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
下列 ioctls 會在頭檔 Sysroots/ApiSet/usr/include/linux/pwm.h 中公開 PWM:
#define PWM_APPLY_STATE _IOW(0xf7, 0x01, struct pwm_chardev_params)
#define PWM_GET_STATE _IOWR(0xf7, 0x02, struct pwm_chardev_params)
如需設定應用程式指令清單以取得這些ioctls存取權的詳細資訊,請參閱高階應用程式中的應用程式指令清單設定和使用PVM。
GPIO
下列 ioctls 會在頭文件 usr/include/linux/gpio.h 中公開 GPIO:
#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)
如需設定應用程式指令清單以取得 GPI 的這些 ioctls 存取權的詳細資訊,請參閱 應用程式指令清單設定,以及在 高階應用程式中使用 GPO。
UART
如需針對終端機和序列線路公開的ioctls清單,並依賴通用異步接收器傳輸器 (UART),請參閱 終端機和序列線路的Linux ioctls。
如需設定應用程式指令清單以存取這些 UART 之 ioctls 的詳細資訊,請參閱高階應用程式中的應用程式指令清單設定和使用 UART。