1. 개발 방향

- Multi-tasking 되는 MPU의 필요성

- MPU(Memory Protection unit)이 있는 MPU 필요함 : Cortex-A 가능

- Windows는 라이센스 비용 때문에 진입 장벽이 큼

- Linux는 개발 환경 구축이 어려움(그래도 어쩌겠어..)

- Raspberry Pi 수급 어려움

- NXP는 i.MX에서 Yocto Project 로 리눅스 cross compile 지원

- ST는 STM32MP1에서 Yocto Project 로 리눅스 cross compile 지원

 

→ STM32MP1 보드가 있어서 테스트 진행

아무것도 모르는 상태에서 보드 개발과 Linux 돌리는 것까지 얼마나 걸릴까? ㅜㅜ

 
  • MIPI 인터페이스가 있어 MIPI 카메라 연결
  • M4도 같이 있어 부가 회로 구성이 용이
  • 800MHz 속도는 아쉬움
  • LCD 해상도 높음

 

2. STM32MP157F-EV1

MPU with Arm Dual Cortex-A7 800 MHz, Arm Cortex-M4 real-time coprocessor, 3D GPU,

TFT/MIPI DSI displays, FD-CAN, Secure boot and Cryptography

STM32MP157F-EV1 - STMicroelectronics

STM32MP157F-EV1 - Evaluation board with STM32MP157F MPU, STM32MP157F-EV1, STMicroelectronics

www.st.com

STM32MP157F-EV1 특징

 
  • STM32MP157 Arm®-based dual Cortex®-A7 800 MHz 32 bits + Cortex®-M4 32 bits MPU
  • ST PMIC STPMIC1
  • 2 × 4-Gbit DDR3L, 16 bits, 533 MHz
  • 2 × 512-Mbit Quad-SPI Flash memory
  • 32-Gbit eMMC v5.0
  • 8-Gbit SLC NAND, 8 bits, 8-bit ECC, 4-KB PS
  • 1-Gbit/s Ethernet (RGMII) compliant with IEEE-802.3ab
  • USB Host 4-port hub
  • USB OTG HS
  • CAN FD
  • 5.5" TFT 720×1280 pixels with LED backlight, MIPI DSISM interface, and capacitive touch panel
  • SAI audio codec
  • 5-megapixel, 8-bit camera
  • 4 × ST-MEMS digital microphones
  • Smartcard
  • microSD™ card

 

3. Block Diagram

 

4. MCU & MPU

4-1. MCU(마이크로컨트롤러 유닛)

Arm®Cortex-M®와 같은 MMU-less 코어를 중심으로 구축되어 베어 메탈 또는 실시간 운영 체제(RTOS) 맥락에서 결정론적 작업에 매우 효율적. STMicroelectronics STM32 MCU는 많은 애플리케이션에 필요한 충분한 SRAM(정적 RAM)과 플래시 메모리를 내장하고 있으며, 이는 외부 메모리로 완료할 수 있음

 

4-2. MPU(마이크로프로세서 유닛)

Arm® Cortex-A®와 같은 코어에 의존하며, 메모리 관리 유닛(MMU)을 통해 가상 메모리 공간을 관리하므로 Linux®와 같은 풍부한 운영 체제(OS)를 효율적으로 지원 가능. 빠른 상호 연결을 통해 프로세싱 유닛, 고대역폭 주변 장치, 외부 메모리(RAM 및 NVM) 및 일반적으로 GPU(그래픽 프로세싱 유닛) 간의 가교 역할을 함

 

5. Evaluation Board

Evaluation Board는 아래 링크에서 참조

 

 

 
Target
Board
STM32MP157F-EV1(ST)
Host
PC - Ubuntu 22.04
목표
STM32MP1 개발 환경 구축 - hello-world application

아래 링크를 참조하여 진행 한다.

1. 준비

1-1. cross-compilation via SDK

- SDK 환경 설정 스크립트 실행

PC $ source /home/본인PC이름/STM/Developer-package/SDK/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi
 

1-2. Prepare kernel source code

- ST 패치

PC $ for p in `ls -1 ../*.patch`; do patch -p1 < $p; done
 

1-3. Configure kernel source code

- fragment 적용

PC $ make ARCH=arm multi_v7_defconfig "fragment*.config"
 
PC $ for f in `ls -1 ../fragment*.config`; do scripts/kconfig/merge_config.sh -m -r .config $f; done
 
PC $ yes '' | make ARCH=arm oldconfig
 

 

2. Compile kernel source code

2-1. Kernel images 빌드(시간 오래 걸림)

PC $ make ARCH=arm uImage vmlinux dtbs LOADADDR=0xC2000040
 

2-2. Kernel module 빌드(시간 오래 걸림)

PC $ make ARCH=arm modules
 

- Output build artifacts 생성

PC $ mkdir -p $PWD/install_artifact/
PC $ make ARCH=arm INSTALL_MOD_PATH="$PWD/../build/install_artifact" modules_install O="$PWD/../build"
 

 

3. Kernel 배포

3-1. Kernel을 보드에 올리기

PC $ scp arch/arm/boot/uImage root@<board ip address>:/boot
 

3-2. Devicetree를 보드에 올리기

PC $ rm install_artifact/lib/modules/5.15.67/build install_artifact/lib/modules/5.15.67/source
 

3-3. Kernel module 복사

PC $ scp -r install_artifact/lib/modules/* root@<ip of board>:/lib/modules
 

3-4. ttyACM에 붙이려면 ST-LINK/V2-1가 연결 되어 있어야 한다.

PC $ ls /dev/ttyACM*
 

3-5. minicom 을 /dev/ttyACM0에 연결

PC $ minicom -D /dev/ttyACM0
 

3-6. 리셋 버튼을 눌러 보드를 리셋하면 부팅 로그가 미니컴 창에 표시됨

3-7. ip 얻기

Board $ ip addr show eth0
 

3-8. modules.dep, modules.symbols 재생성

Board $ /sbin/depmod -a
 

3-8. 디스크 데이터를 메모리와 동기화

Board $ /sync
 

3-10. 보드 재시작

Board $ reboot
 

 

4. Kernel device driver 수정

4-1. Board에서 로그 정보 확인

Board $ dmesg | grep -i stm_drm_platform_probe
 

4-2. 아래 폴더의 drv.c 수정 하여 메시지 추가 하여 저장

/home/본인PC이름/STM/Developer-package/stm32mp1-openstlinux-5.15-yocto-kirkstone-mp1-v22.11.23/sources/arm-ostl-linux-gnueabi/linux-stm32mp-5.15.67-stm32mp-r2-r0/linux-5.15.67/drivers/gpu/stm/

 

static int stm_drm_platform_probe(struct platform_device *pdev)
{
	struct device *dev = &pdev->dev;
	struct drm_device *ddev;
	int ret;
	[...]

	DRM_INFO("Simple example - %s\n", __func__);

	return 0;
	[...]
}
 

4-3. Kernel 다시 빌드

PC $ make uImage LOADADDR=0xC2000040
 

4-4. Kernel을 보드에 올리기

PC $ scp arch/arm/boot/uImage root@172.xx.xx.xx:/boot
 

4-5. 보드 재시작

Board $ reboot
 

4-6. Board에서 로그 정보 확인

Board $ dmesg | grep -i stm_drm_platform_probe
 
 

 

 

Target
Board
STM32MP157F-EV1(ST)
Host
PC - Ubuntu 22.04
목표
STM32MP1 개발 환경 구축 - hello-world application

 


아래 링크를 참조하여 진행 한다.

1. 폴더 만들기

PC $ mkdir /home/본인PC이름/STM/Developer-package/stm32mp1-openstlinux-5.15-yocto-kirkstone-mp1-v22.11.23/sources/gtk_hello_world_example
 

 

2. 폴더로 이동

PC $ cd /home/본인PC이름/STM/Developer-package/stm32mp1-openstlinux-5.15-yocto-kirkstone-mp1-v22.11.23/sources/gtk_hello_world_example
 

 

3. gtk_hello_world.c 생성

#include <gtk/gtk.h>

static void
print_hello (GtkWidget *widget,
             gpointer   data)
{
  g_print ("Hello World\n");
}

static void
activate (GtkApplication *app,
          gpointer        user_data)
{
  GtkWidget *window;
  GtkWidget *button;
  GtkWidget *button_box;

  window = gtk_application_window_new (app);
  gtk_window_set_title (GTK_WINDOW (window), "Window");
  gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);

  button_box = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL);
  gtk_container_add (GTK_CONTAINER (window), button_box);

  button = gtk_button_new_with_label ("Hello World");
  g_signal_connect (button, "clicked", G_CALLBACK (print_hello), NULL);
  g_signal_connect_swapped (button, "clicked", G_CALLBACK (gtk_widget_destroy), window);
  gtk_container_add (GTK_CONTAINER (button_box), button);

  gtk_widget_show_all (window);
}

int
main (int    argc,
      char **argv)
{
  GtkApplication *app;
  int status;

  app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE);
  g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
  status = g_application_run (G_APPLICATION (app), argc, argv);
  g_object_unref (app);

  return status;
}
 

 

4. Makefile 생성

PROG = gtk_hello_world
SRCS = gtk_hello_world.c

CLEANFILES = $(PROG)

# Add / change option in CFLAGS and LDFLAGS
CFLAGS += -Wall $(shell pkg-config --cflags gtk+-3.0)
LDFLAGS += $(shell pkg-config --libs gtk+-3.0)

all: $(PROG)

$(PROG): $(SRCS)
	$(CC) -o $@ $^ $(CFLAGS) $(LDFLAGS)

clean:
	rm -f $(CLEANFILES) $(patsubst %.c,%.o, $(SRCS))
 

 

5. cross-compile

PC $ make
 

에러나서 구글 검색해 보니 gtk3을 설치하라고 한다.

PC $ sudo apt-get install libgtk-3-dev
 

설치 후 다시 compile

 

6. 실행

보드로 실행 파일 업로드

PC $ scp gtk_hello_world root@172.10.6.98:/usr/local
 

weston으로 실행

Board $ cd /usr/local/
Board $ su -l weston -c "/usr/local/gtk_hello_world" 
 

 

 

Target
Board
STM32MP157F-EV1(ST)
Host
PC - Ubuntu 22.04
목표
STM32MP1 개발 환경 구축

 


1. Distribution Package 다운로드

git으로 다운로드 받아야 한다.

git 이전에 Repo를 설치 해야 한다.

 

2. Repo 설치

PC $ mkdir ~/bin
PC $ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
 

curl이 없다고 나온다. curl을 설치한다.

PC $ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
PC $ chmod a+x ~/bin/repo
PC $ PATH=${PATH}:~/bin
 

아래와 같이 진행 된다.

 

3. STM32 Distribution package 다운로드

PC $ mkdir /home/본인PC이름/STM/Distribution-package
 
PC $ mkdir /home/본인PC이름/STM/Distribution-package/openstlinux-5.15-yocto-kirkstone-mp1-v22.11.23
 
PC $ cd /home/본인PC이름/STM/Distribution-package/openstlinux-5.15-yocto-kirkstone-mp1-v22.11.23
 
PC $ repo init -u https://github.com/STMicroelectronics/oe-manifest.git -b refs/tags/openstlinux-5.15-yocto-kirkstone-mp1-v22.11.23
 

git 설정을 하라고 나온다.

git 설정

PC $ git config --global user.name "your_name"
PC $ git config --global user.email "your_email@example.com"
 
PC $ repo init -u https://github.com/STMicroelectronics/oe-manifest.git -b refs/tags/openstlinux-5.15-yocto-kirkstone-mp1-v22.11.23
 

아래는 시간이 오래 걸림

PC $ repo sync
 

 

4. 환경 변수 등록

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

위와 같이 입력하면 뭐가 없다고 잔뜩 뜬다.

sudo apt-get install 명령어로 전부 설치한다.

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

방향키로 선택하여 설치

 

5. bibake 실행

PC $ bitbake st-image-weston
 

위와 같이 입력하면 python3-distutils를 설치하라고 뜬다. ubuntu22.04는 python이 최소 설치 되있다고 하므로, python3-distutils를 설치한다.

PC $ sudo apt-get install python3-distutils
 

아래는 시간이 오래 걸림(4시간 정도 걸린다)

PC $ bitbake st-image-weston
 

아래 경로에 image 파일 생성

/home/본인PC이름/STM/Distribution-package/openstlinux-5.15-yocto-kirkstone-mp1-v22.11.23/build-openstlinuxweston-stm32mp1/tmp-glibc/deploy/images/stm32mp1

 

아래 경로에 *.tsv 파일 생성

/home/본인PC이름/STM/Distribution-package/openstlinux-5.15-yocto-kirkstone-mp1-v22.11.23/build-openstlinuxweston-stm32mp1/tmp-glibc/deploy/images/stm32mp1/flashlayout_st-image-weston/trusted
 

 

 

 

 
Target
Board
STM32MP157F-EV1(ST)
Host
PC - Ubuntu 22.04
목표
STM32MP1 개발 환경 구축 - Developer Package 실행

Developer Package 실행은 다음과 같다.

1. Linux kernel 빌드

2. U-Boot 빌드

 

설치 과정은 커널 및 U-Boot가 설치된 폴더의 README.HOW_TO.txt를 참조한다.


1. Linux kernel 빌드

1-0. 작업 폴더

/home/본인PC이름/STM/Developer-package/stm32mp1-openstlinux-5.15-yocto-kirkstone-mp1-v22.11.23/sources/arm-ostl-linux-gnueabi/linux-stm32mp-5.15.67-stm32mp-r2-r0/linux-5.15.67

Linux kernel Compile 순서는 다음과 같다.

1-1. Pre-requisite

1-2. Initialize cross-compilation via SDK

1-3. Prepare kernel source code

1-4. Manage kernel source code

1-5. Configure kernel source code

1-6. Compile kernel source code

1-7. Update software on board

1-8. Update Starter Package with kernel compilation outputs

 

1-1. 사전 준비

- OpenSTLinux SDK 설치 되어 있어야 함

- libncurses and libncursesw dev package libyaml-dev

PC $ cd linux-5.15.67/

PC $ sudo apt-get install libncurses5-dev libncursesw5-dev libyaml-dev
 

 

- mkimage 설치

PC $ sudo apt-get install u-boot-tools
 

 

- yaml (check dts) 설치

PC $ sudo apt-get install libyaml-dev
 

 

- git 설치

PC $ sudo apt-get install git-core gitk
 

1-2. cross-compilation via SDK

- SDK 환경 설정 스크립트 실행

PC $ source /home/본인PC이름/STM/Developer-package/SDK/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi
 

 

1-3. Prepare kernel source code

- ST 패치

PC $ for p in `ls -1 ../*.patch`; do patch -p1 < $p; done
 

 

1-5. Configure kernel source code

- fragment 적용

PC $ mkdir -p ../build

PC $ make ARCH=arm multi_v7_defconfig "fragment*.config"
 

- gcc 없다고 에러 메시지

- make 설치

PC $ sudo apt-get install make
 

- gcc 설치

PC $  sudo apt-get install gcc
 

- fragment 적용

PC $ make ARCH=arm multi_v7_defconfig "fragment*.config"
 
PC $ for f in `ls -1 ../fragment*.config`; do scripts/kconfig/merge_config.sh -m -r .config $f; done
 
PC $ yes '' | make ARCH=arm oldconfig
 

 

1-6. Compile kernel source code

- Kernel images 빌드(시간 오래 걸림)

PC $ make ARCH=arm uImage vmlinux dtbs LOADADDR=0xC2000040
 

 

- Kernel module 빌드(시간 오래 걸림)

PC $ make ARCH=arm modules
 

- Output build artifacts 생성

PC $ make ARCH=arm INSTALL_MOD_PATH="$PWD/../build/install_artifact" modules_install O="$PWD/../build"
 
PC $ mkdir -p $PWD/../build/install_artifact/boot/
PC $ cp $PWD/../build/arch/arm/boot/uImage $PWD/../build/install_artifact/boot/
PC $ cp $PWD/../build/arch/arm/boot/dts/st*.dtb $PWD/../build/install_artifact/boot/
 

- 생성 파일 확인


2. U-Boot 빌드

2-0. 작업 폴더

/home/본인PC이름/STM/Developer-package/stm32mp1-openstlinux-5.15-yocto-kirkstone-mp1-v22.11.23/sources/arm-ostl-linux-gnueabi/u-boot-stm32mp-v2021.10-stm32mp-r2-r0/u-boot-stm32mp-v2021.10-stm32mp-r2

U-Boot Compile 순서는 다음과 같다.

2-1. Pre-requisite

2-2. Initialize cross-compilation via SDK

2-3. Prepare U-Boot source code

2-4. Manage of U-Boot source code with GIT

2-5. Compile U-Boot source code

2-6. Update software on board

2-7. Update starter package with U-Boot compilation outputs

 

2-1. 사전 준비

- OpenSTLinux SDK 설치 되어 있어야 함

 

2-2. cross-compilation via SDK

- SDK 환경 설정 스크립트 실행

PC $ source /home/본인PC이름/STM/Developer-package/SDK/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi
 

 

2-3. Prepare U-Boot source code

- ST 패치

PC $ for p in `ls -1 ../*.patch`; do patch -p1 < $p; done
 

 

2-5. Compile U-Boot source code

- 컴파일 환경 설정

PC $ make stm32mp15_defconfig
 

- 빌드

PC $ make DEVICE_TREE=stm32mp157f-ev1 all
 

 

 

Target
Board
STM32MP157F-EV1(ST)
Host
PC - Ubuntu 22.04
목표
STM32MP1 개발 환경 구축 - Developer Package 설치

STM32MP1 Cortex-A에서 실행되는 소프트웨어를 개발하기 위한 Developer Package 설치 순서는 아래와 같다.

 

0. 추가 패키지 설치

1. SDK 다운로드 및 설치

2. SDK 시작

3. OpenSTLinux BSP packages 다운로드 및 설치

4. Linux Kernel 설치

5. gcnano 설치

6. U-Boot 설치

7. TF-A 설치

8. OP-TEE 설치

9. debug symbol files 확인

 

여기까지 하면 작성일 기준으로 아래의 개발 환경이 만들어 진다.

Target Board
STM32mp157F-EV1
STM32 MPU ecosystem release
v4.1.0
Ubuntu
ubuntu-22.04.1-desktop-amd64
yocto version
OpenEmbedded v4.1 (Kirkstone)

 


아래 링크를 참조하여 진행 한다. hello-world application은 개발 환경 설정 후에 하도록 한다.

0. 추가 패키지 설치

basic cross-compilation(Developer Package를 통해)이나 complex cross-compilation(Distribution Package를 통해)를 하려면 추가 우분투 패키지를 설치하라고 한다.

PC $ sudo apt-get update
 
PC $ sudo apt-get install gawk wget git diffstat unzip texinfo gcc-multilib build-essential chrpath socat cpio python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev pylint xterm bsdmainutils libssl-dev libgmp-dev libmpc-dev lz4 zstd
 
PC $ sudo apt-get install make xsltproc docbook-utils fop dblatex xmlto
 
PC $ sudo apt-get install libmpc-dev libgmp-dev
 
PC $ sudo apt-get install build-essential libncurses-dev libyaml-dev libssl-dev 
 

 

지금 부터는 아래 링크를 참조하여 진행한다.

1. SDK 다운로드 및 설치

1-1. 아래 링크에서 'Yocto_SDK(Yocto SDK)' Download

 
en.SDK-x86_64-stm32mp1-openstlinux-5.15-yocto-kirkstone-mp1-v22.11.23.tar.gz

 

1-2. 다운로드 받은 파일 gzip 풀기

PC $ gzip -d en.SDK-x86_64-stm32mp1-openstlinux-5.15-yocto-kirkstone-mp1-v22.11.23.tar.gz
 

1-3. tar 풀기

PC $ tar xvf en.SDK-x86_64-stm32mp1-openstlinux-5.15-yocto-kirkstone-mp1-v22.11.23.tar
 

1-4. 스크립트를 실행 가능하게 하기 위해 권한 변경

PC $ chmod +x st-image-weston-openstlinux-weston-stm32mp1-x86_64-toolchain-4.0.4-openstlinux-5.15-yocto-kirkstone-mp1-v22.11.23.sh
 

1-5. st-image-weston-openstlinux-weston-stm32mp1-x86_64-toolchain-4.0.4-openstlinux-5.15-yocto-kirkstone-mp1-v22.11.23.sh

스트립트를 실행 하여 설치

PC $ ./st-image-weston-openstlinux-weston-stm32mp1-x86_64-toolchain-4.0.4-openstlinux-5.15-yocto-kirkstone-mp1-v22.11.23.sh
 

1-6. 설치 경로는

/home/본인PC이름/STM/Developer-package/SDK

로 지정

Terminal에서 실행하던, X 윈도우에서 실행하던 결과는 동일

1-7. 설치 확인

 

2. SDK 시작

2-1. SDK 환경 설정 스크립트 실행

PC $ source /home/본인PC이름/STM/Developer-package/SDK/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi
 

2-2. 환경 설정 확인

PC $ echo $ARCH
 
PC $ echo $CROSS_COMPILE
 
PC $ $CC --version
 
PC $ echo $OECORE_SDK_VERSION
 

 

3. OpenSTLinux BSP packages 다운로드 및 설치

3-1. 아래 링에서 'STM32MP1Dev(STM32MP1 OpenSTLinux Developer Package)' 다운로드

 
en.SOURCES-stm32mp1-openstlinux-5.15-yocto-kirkstone-mp1-v22.11.23.tar.gz

 

3-2. 다운로드 받은 파일 gzip 풀기

PC $ gzip -d en.SOURCES-stm32mp1-openstlinux-5.15-yocto-kirkstone-mp1-v22.11.23.tar.gz
 

3-3. /home/본인PC이름/STM/Developer-package 설치 경로에다 tar 풀기

PC $ tar xvf en.SOURCES-stm32mp1-openstlinux-5.15-yocto-kirkstone-mp1-v22.11.23.tar
 

 

/home/본인PC이름/STM/Developer-package/stm32mp1-openstlinux-5.15-yocto-kirkstone-mp1-v22.11.23/sources/arm-ostl-linux-gnueabi

폴더로 이동

 

4. Linux Kernel 설치

PC $ cd linux-stm32mp-5.15.67-stm32mp-r2-r0/
 
PC $ tar xvf linux-5.15.67.tar.xz
 
PC $ cd linux-5.15.67/
 

 

5. gcnano 설치

PC $ cd gcnano-driver-stm32mp-6.4.9-stm32mp-r2-r0/
 
PC $ tar xvf gcnano-driver-stm32mp-6.4.9-stm32mp-r2-r0.tar.xz
 
PC $ cd gcnano-driver-6.4.9/
 

 

6. U-Boot 설치

PC $ cd u-boot-stm32mp-v2021.10-stm32mp-r2-r0/
 
PC $ tar xvf u-boot-stm32mp-v2021.10-stm32mp-r2-r0.tar.xz
 
PC $ cd u-boot-stm32mp-v2021.10-stm32mp-r2/
 

7. TF-A 설치

PC $ cd tf-a-stm32mp-v2.6-stm32mp-r2-r0/
 
PC $ tar xvf tf-a-stm32mp-v2.6-stm32mp-r2-r0.tar.xz
 
PC $ cd tf-a-stm32mp-v2.6-stm32mp-r2/
 

 

8. OP-TEE 설치

PC $ cd optee-os-stm32mp-3.16.0-stm32mp-r2-r0/
 
PC $ tar xvf optee-os-stm32mp-3.16.0-stm32mp-r2-r0.tar.xz
 
PC $ cd optee-os-stm32mp-3.16.0-stm32mp-r2/
 

 

9. debug symbol files 확인

/home/본인PC이름/STM/Developer-package/stm32mp1-openstlinux-5.15-yocto-kirkstone-mp1-v22.11.23/images/stm32mp1/

폴더로 이동

 

 

Target
Board
STM32MP157F-EV1(ST)
Host
PC - Ubuntu 22.04
목표
STM32MP1 개발 환경 구축 - Starter Package

STM32MP157F-EV1(ST) Board 개발을 위한 개발 환경 구축을 위한 과정이다.

 

Starter Package 설치 과정은 아래 링크를 참고 하였다.


1. STM32CubeProgrammer 설치

1-1. STM32CubeProgrammer : 이전 단계에서 이미 설치

 

1-2. 환경 변수 등록

PC $ export PATH=$HOME/STMicroelecronics/STM32Cube/STM32CubeProgrammer/bin:$PATH
 

 

1-3. 제대로 설치 되었는지 확인

PC $ STM32_Programmer_CLI --h
 

 

2. USB serail link 설치

2-1. libusb 설치

PC $ sudo apt-get install libusb-1.0-0
 
PC $ cd $HOME/STMicroelecronics/STM32Cube/STM32CubeProgrammer/Drivers/rules
PC $ sudo cp *.* /etc/udev/rules.d/
 

 

3. Starter Package 다운 로드

3-1. 새 폴더 만들기

PC $ mkdir /home/본인PC이름/STM/Starter-package
 
en.SDK-x86_64-stm32mp1-openstlinux-5.15-yocto-kirkstone-mp1-v22.11.23.tar.gz

 

3-2. 다운로드 받은 파일 gzip 풀기

PC $ gzip -d en.FLASH-stm32mp1-openstlinux-5.15-yocto-kirkstone-mp1-v22.11.23.tar.gz
 

 

3-3. tar 풀기

PC $ tar xvf en.FLASH-stm32mp1-openstlinux-5.15-yocto-kirkstone-mp1-v22.11.23.tar
 

 

4. 보드에 image 다운로드

4-1. 스위치를 아래와 같이 설정하고 PC와 CN16/USB_OTG를 연결(커넥터가 micro AB타입)

 

4-2. STM32CubeProgrammer 실행

 

4-3. Connect

 

4-4. 'Open file'

/home/본인PC이름/STM/Starter-package/stm32mp1-openstlinux-5.15-yocto-kirkstone-mp1-v22.11.23/images/stm32mp1/flashlayout_st-image-weston/optee

 

위 경로 폴더로 이동

 

4-5. 'FlashLayout_sdcard_stm32mp157x-ev1-optee.tsv' 선택

 

4-6. Download(시간이 너무 오래 걸려서 실행 시켜놓고 다음날 완료 된것을 확인)

 

 

5. Boot

5-1. 스위치를 아래와 같이 설정하고 보드 전원 켬

5-2. Reset 버튼 누름

5-3. 시간이 좀 걸리고 화면이 뜸

 

6. 기본 명령어 실행

6-1. Serial Terminal(minicom) 설치

 PC $ sudo apt-get install minicom
 

 

6-2. ttyACM에 붙이려면 ST-LINK/V2-1가 연결 되어 있어야 한다.

PC $ ls /dev/ttyACM*
 

 

6-3. minicom 을 /dev/ttyACM0에 연결

PC $ minicom -D /dev/ttyACM0
 

 

6-4. 리셋 버튼을 눌러 보드를 리셋하면 부팅 로그가 미니컴 창에 표시됨

 

6-5. 시스템 정보 표시

root@stm32mp1:~# uname -a
 

6-6. Linux 커널 및 GCC 버전 표시

root@stm32mp1:~# cat /proc/version
 

 

6-7. 디스크 공간 표시

Board $ df -h
 

 

6-8. ssh 연결(이더넷 선이 연결 되어 있어야함)

ip 얻기

Board $ ip addr show eth0
 

컴퓨터에서 ssh를 사용하여 보드에 연결(본인 보드 ip 넣을 것)

 

PC $ ssh root@172.10.6.98
 

 

 

Target
Board
STM32MP157F-EV1(ST)
Host
PC - Ubuntu 22.04
목표
STM32MP1 개발 환경 구축 - STM32CubeMPU Package
 

STM32MP1 Cortex-M을 실행하는 소프트웨어를 개발하기 위한 STM32CubeMPU Package 설치 순서는 아래와 같다.

1. STM32CubeIDE 설치

2. STM32CubeMP1 패키지 설치

3. STM32CubeProgrammer 설치

 

지금 단계에서는 STM32CubeProgrammer만 필요하지만, 나중에 다 필요하므로 지금 설치 한다.

 

설치 과정은 아래 링크를 참고 하였다.

 

 

$ unzip en.st-stm32cubeide_1.11.2_14494_20230119_0724.unsigned_amd64.sh.zip
 

1-3. 압축 푼 폴더로 이동

$ cd en.st-stm32cubeide_1.11.2_14494_20230119_0724.unsigned_amd64.sh/
 

1-4. 스크립트를 실행 가능하게 하기 위해 권한 변경

$ chmod +x st-stm32cubeide_1.11.2_14494_20230119_0724.unsigned_amd64.sh
 

1-5. st-stm32cubeide_1.11.2_14494_20230119_0724.unsigned_amd64.sh

스트립트를 실행 하여 설치

$ ./st-stm32cubeide_1.11.2_14494_20230119_0724.unsigned_amd64.sh
 

1-6. License를 확인 하며 설치

1-7. 설치 확인

 

2-2. 위 다운로드 받은 파일은 아래 경로로 복사

/home/본인PC이름/STM/Developer-package

 

2-3. 다운로드 받은 파일 unzip 풀기

$ unzip en.STM32Cube_FW_MP1_V1.6.0.zip
 

2-4. 파일 확인

 

3. STM32CubeProgrammer 설치

3-1. 아래 링크에서 'STM32CubeMP1'다운로드

3-2. 다운로드 받은 파일 unzip 풀기

$ unzip en.stm32cubeprg-lin-v2-12-0.zip
 

3-3. 압축 푼 폴더로 이동

$ cd en.stm32cubeprg-lin-v2-12-0/
 

3-4. SetupSTM32CubeProgrammer-2.12.0.linux

실행 하여 설치

$ ./SetupSTM32CubeProgrammer-2.12.0.linux
 

3-5. License를 확인 하며 설치

3-6. 설치 확인

 
Target
Board
STM32MP157F-EV1(ST)
Host
PC - Ubuntu 22.04
목표
STM32MP1 개발 환경 구축 - ubuntu(우분투) 설치

 


STM32MP157F-EV1(ST) Board 개발을 위해 아래 링크를 참고 하여 개발 환경을 구축한다.

대표사진 삭제

사진 설명을 입력하세요.

STM32MP157F-EV1 - STMicroelectronics

STM32MP157F-EV1 - Evaluation board with STM32MP157F MPU, STM32MP157F-EV1, STMicroelectronics

www.st.com


STM32MPU Embedded Software Developer Package는 크게 다음과 같이 나뉜다.

출처 :  STM32MP1 Developer Package - stm32mpu

 

1. Starter Package

 

2. Software Developmen Kit

2-1. Arm Cortex-A에서 실행되는 소프트웨어를 개발하기 위한 구성 요소 설치(OpenSTLinux 배포)

- SDK 설치(Arm Cortex-A의 모든 개발에 사용 가능)

- OpenSTLinux BSP packages 설치(리눅스 커널을 수정하려는 경우, 외부 트리 외 리눅스 커널 모듈을 추가하려는 경우, U-Boot, TF-A, OP-TEOS를 수정하려는 경우에만 필수)

- debug symbol files 설치(GDB를 사용하여 Linux® 커널, U-Boot, OP-TEE 또는 TF-A를 디버그하려는 경우에만 실행)

 

2-2. Arm Cortex-M(STM32CubeMPU Package)을 실행하는 소프트웨어 개발을 위한 설치

- STM32CubeIDE 설치(Arm Cortex-M에서 모든 개발에 사용 가능)

- STM32CubeMPU 패키지 설치(STM32Cube 펌웨어를 수정하려는 경우에만 필수)


가장 먼저 Linux - ubuntu를 설치한다.

Linux를 사용하는 방법에는

1. Linux 단일

2. Multi booting

3. 가상 머신(VMware, VirtualBox등)

의 방법이 있는데 1, 2번 사용을 권장한다.

3번으로 사용할 경우 하드웨어 연결이 잘 되지 않는다.

 

여기서는 1. Linux 단일로 사용하며 ubuntu 설치 디스크를 만들어 설치 한다. 멀티 부팅은 Window, Linux 동시에 사용할 수 없고 껐다 켜기 번거롭다.

 

1. ubuntu 다운로드

2. 설치 디스크 만들기(USB 사용)

2-1. Rufus 다운로드(*.iso 파일로 부팅 디스크 만드는 프로그램)

 

2-2. 2번에서 다운로드 받은 *.iso 파일 선택

 

* 부팅 디스크 만들때 모든 데이터가 삭제된다는 메시지가 나오므로 중요한 데이터는 미리 옮겨 놓을 것

 

3. ubuntu 설치

3-1. 3번에서 만든 USB를 꽂고 BIOS에서 USB를 먼저 인식하게 부팅 순서를 바꾸고 재시작

(BIOS 진입하는 key는 제조사 마다 다르므로 확인 필요)

 

3-2. ubuntu 설치

 

3-3. ubuntu 설치 완료

 

 

+ Recent posts