I/O 컨트롤(ioctls)
이 항목에서는 Azure Sphere SDK와 함께 제공되는 헤더 파일의 일부인 Linux ioctls에 대해 설명합니다. Linux ioctls는 ADC(아날로그-디지털 변환기) 및 PWM(펄스 너비 변조) 주변 장치, gpio(범용 I/O), UART(범용 비동기 수신기-송신기) 및 CPUFreq(CPU 성능 크기 조정)에 대해 노출됩니다.
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
다음 IIO(산업용 I/O) 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
헤더 파일 Sysroots/ApiSet/usr/include/linux/pwm.h(Linux OS)의 PWM에 대해 다음 ioctls가 노출됩니다.
#define PWM_APPLY_STATE _IOW(0xf7, 0x01, struct pwm_chardev_params)
#define PWM_GET_STATE _IOWR(0xf7, 0x02, struct pwm_chardev_params)
이러한 ioctls에 액세스하기 위해 애플리케이션 매니페스트를 설정하는 방법에 대한 자세한 내용은 애플리케이션 매니페스트 설정 및 상위 수준 애플리케이션에서 PWM 사용을 참조하세요.
Gpio
헤더 파일 usr/include/linux/gpio.h에서 GPIO에 대해 다음 ioctls가 노출됩니다.
#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)
GPIO에 대한 이러한 ioctls에 액세스하기 위해 애플리케이션 매니페스트를 설정하는 방법에 대한 자세한 내용은 애플리케이션 매니페스트 설정 및 상위 수준 애플리케이션에서 GPIO 사용을 참조하세요.
Uart
UART(유니버설 비동기 수신기 송신기)를 사용하는 터미널 및 직렬 라인에 대해 노출된 ioctls 목록은 터미널 및 직렬 라인에 대한 Linux ioctls를 참조하세요.
UART에 대한 이러한 ioctls에 액세스하기 위해 애플리케이션 매니페스트를 설정하는 방법에 대한 자세한 내용은 애플리케이션 매니페스트 설정 및 상위 수준 애플리케이션에서 UART 사용을 참조하세요.