수행기록퀘스트3

퀘스트 3/7 - A7/ M4 예제 데모 시현 (LED control, Button detect)
2020. 5. 5 (화) 06:32 최명* 조회 380 좋아요 0 스크랩 0 댓글 0

1. SDK 추출, 생성 결과물 및 설치 결과물에 대한 디렉토리 정보와 함께 컴파일러(arch=armv7ve)의 정보(디렉토리 위치, CC 환경변수) 출력하여 제출 (* Sample screenshot 참고)

 a) 환경설정

     DISTRO=openstlinux-weston MACHINE=stm32mp1 source layers/meta-st/scripts/envsetup.sh

 b) SDK 추출

     bitbake -c populate_sdk st-image-weston

 c) SDK 설치  - 설치시 경로 지정 (./sdk로 입력함)

    ./build-openstlinuxweston-stm32mp1/tmp-glibc/deploy/sdk/st-image-weston-openstlinux-weston-stm32mp1-x86_64-toolchain-2.6-snapshot.sh

 d) 결과확인

     ls ./build-openstlinuxweston-stm32mp1/tmp-glibc/deploy/sdk/

     ls ./sdk       설치시 지정한 경로 

     source ./sdk/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi
     which $CC | xargs ls -alh
     echo $CC

     

 

2) SDK 를 사용하여 빌드 된 executable file 의 정보를 target(DK2 board) 시스템 정보를 함께 출력하여 제출 (* Sample screenshot 참고)

  a) source :  https://wiki.st.com/stm32mpu/wiki/How_to_control_a_GPIO_in_userspace  참고

     mkdir gpio

     cd gpio

     mkdir -p install_artifact install_artifact/usr install_artifact/usr/local install_artifact/usr/local/bin

     gpio.c  소스 작성

#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <unistd.h>

#include <linux/gpio.h>

int main(int argc, char **argv)
{
	struct gpiohandle_request req;
	struct gpiohandle_data data;
	char chrdev_name[20];
	int fd, ret;

	strcpy(chrdev_name, "/dev/gpiochip0");

	/*  Open device: gpiochip0 for GPIO bank A */
	fd = open(chrdev_name, 0);
	if (fd == -1) {
		ret = -errno;
		fprintf(stderr, "Failed to open %s\n", chrdev_name);

		return ret;
	}

	/* request GPIO line: GPIO_A_14 */
	req.lineoffsets[0] = 14;
	req.flags = GPIOHANDLE_REQUEST_OUTPUT;
	memcpy(req.default_values, &data, sizeof(req.default_values));
	strcpy(req.consumer_label, "led_gpio_a_14");
	req.lines  = 1;

	ret = ioctl(fd, GPIO_GET_LINEHANDLE_IOCTL, &req);
	if (ret == -1) {
		ret = -errno;
		fprintf(stderr, "Failed to issue GET LINEHANDLE IOCTL (%d)\n",
			ret);
	}
	if (close(fd) == -1)
		perror("Failed to close GPIO character device file");

	/*  Start led blinking */
	while(1) {

		data.values[0] = !data.values[0];
		ret = ioctl(req.fd, GPIOHANDLE_SET_LINE_VALUES_IOCTL, &data);
		if (ret == -1) {
			ret = -errno;
			fprintf(stderr, "Failed to issue %s (%d)\n",
					"GPIOHANDLE_SET_LINE_VALUES_IOCTL", ret);
		}
		sleep(1);
	}

	/*  release line */
	ret = close(req.fd);
	if (ret == -1) {
		perror("Failed to close GPIO LINEHANDLE device file");
		ret = -errno;
	}
	return ret;
}


     compile : https://wiki.st.com/stm32mpu/wiki/How_to_cross-compile_with_the_Developer_Package#Adding_a_.22hello_world.22_user_space_example 참고 하여 진행
     컴파일
        $CC gpio.c -o ./install_artifact/usr/local/bin/gpio
     다운로드
        scp -r install_artifact/* root@192.168.7.1:/
  b) 터미널에서 실행
      uname -a && lsb_release -a
      file /usr/local/bin/gpio | tr ',' '\n'
      ls -alh

     

 

 

3) MP1 터미널(tty serial, ssh, target terminal등)에서 LED blinking 어플리케이션 실행하면 LED가 깜빡이는 장면 영상 제출
   a) /usr/local/bin/gpio
 

   초록색이 켜진 상태에서 녹화 시작, 5초후 프로그램 실행으로 초록색이 깜빡임

  

 

Virtualbox에서 진행 하고 있는데.. 디스크 용량이 90GB입니다.

128G SSD에 100G할당 했는데.. Quest 3 이후에도 용량을 많이 차지하는 미션이 있으면 큰일이네요..

 

로그인 후
참가 상태를 확인할 수 있습니다.