Target
Board
Raspberry Pi4
Host
PC - Ubuntu 22.04
목표
Raspberry Pi4 - YOCTO 개발 환경 구축(1)

 


Yocto image build

1. 사전 준비

2. Poky 시스템

3. 빌드 환경 준비

4. QEMU에서 이미지 실행

 

Cross Compile?

- 임베디드 시스템은 매우 제한된 리소스를 가지고 있어 S/W 개발은 호스트 시스템에서 이루어져야 한다.

- Host System의 프로세서와 Embedded System의 프로세서가 서로 다르기 때문에 Host System의 컴파일러로 Embedded의 S/W를 컴파일 할 수 없다.

- 따라서 호스트 시스템에서 작성된 프로그램을 임베디드 시스템에서 수행시키기 위해서는 cross compiler(교차 컴파일러)가 필요하다.

 

bitbake?

- 임베디드 리눅스의 크로스 컴파일 과정을 위한 패키지와 관련 파일들을 빌드하는데 사용되는 툴

- yocto를 최초 설치할 때, bitbake를 입력하여 yocto 설치에 필요한 소스를 가져오고, bb의 SRC_URI에 정의된 패치 파일을 이용하여 빌드한다.

 


1. 사전 설치

PC $ sudo apt update
 
PC $ sudo apt install git git-lfs tar python3 python3-pip gcc 
 

 

1-1. 필수 패키지 설치

PC $ sudo apt invlstall gawk wget git diffstat unzip texinfo gcc build-essential chrpath socat cpio python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev pylint3 xterm python3-subunit mesa-common-dev zstd liblz4-tool 
 

 

1-2. 작업 디렉토리 생성

PC $ mkdir yocto
PC $ cd yocto 
 

 

2. Poky 다운로드

PC $ git clone git://git.yoctoproject.org/poky
PC $ cd poky
PC $ git checkout -b dunfell origin/dunfell
 
 

 

3-1. 빌드 디렉토리 생성(및 환경 설정)

PC $ source oe-init-build-env
 

 

빌드 옵션

core-image-base
타깃 하드웨어를 완전히 지원하는 콘솔 전용 이미지.
core-image-minimal
작은 이미지를 사용하여 디바이스를 부팅
core-image-sato
Sato 지원 이미지, 모바일 환경 및 모바일 디바이스와 연동되는 비주얼 스타일
core-image-clutter
OpenGL 기반의 툴킷 Clutter를 지원하는 이미지
core-image-full-cmdline
보다 풀기능이 탑재된 Linux 시스템 기능이 탑재된 콘솔 전용 이미지

 

3-2. 빌드에 필요한 리소스 가져오기

PC $ bitbake core-image-sato --runall=fetch
 

 

4. 리소스를 가져오면 빌드 시작

PC $ bitbake core-image-sato
 

 

5-1. QEMU 에뮬레이터로 빌드 결과 검증

PC $ runqemu qemux86-64 nographic
 

 

5-2. image 생성 확인

 

 

'Raspberry Pi > YOCTO' 카테고리의 다른 글

Raspberry Pi4 - YOCTO 개발 환경 구축 및 확인(2)  (0) 2025.03.19

 

Target
Board
Raspberry Pi4
Host
PC - Ubuntu 22.04
목표
Raspberry Pi4 - Flutter 개발 환경 구축 확인 A-3

4. Linux PC

- raspberry_test 예제 파일 생성

PC $ flutteer create raspberry_test
 

- build raspberry_test

PC $ cd raspberry test/
 
PC $ flutterpi_tool build --arch=arm64 --release
 

- 생성된 file raspberry로 복사

PC $ rsync -a --info=progress2 ./build/flutter_assets/ id@xxx.xxx.xxx.xxx:/home/pi/dev/raspberry_test
 

- 실행 하여 동작 확인

pi $ flutter-pi --release /home/pi/dev/raspberry_test
 

 

 

 

 
Target
Board
Raspberry Pi4
Host
PC - Ubuntu 22.04
목표
Raspberry Pi4 - Flutter 개발 환경 구축 A-2

2. PC

2-2. Raspberry Pi Imager로 64bit OS SD CARD 생성

 

3. Raspberry Pi4

3-1. Raspberry Pi에서 IP확인 및 SSH open

편하게 작업하기 위해 Linux에서 SSH로 접속한다.

- Raspberry에서 IP 확인

pi $ ifconfig
 

- SSH Open

pi $ sudo raspi-config
 

- reboot

pi $ reboot
 

 

3-2. Linux PC에서 SSH로 Raspberry 접속

- SSH 접속을 위해 keygen

PC $ ssh-keygen
 

- 만든 key copy

PC $ ssh-copy-id id@xxx.xxx.xxx.xxx
 
PC $ ssh id id@xxx.xxx.xxx.xxx
 

- Raspberry Pi 기본 update

pi $ sudo apt update
 

- Raspberry Pi 기본 upgrade

pi $ sudo apt upgrade
 

- flutter engine binaries 설치

pi $ git clone --depth 1 https://github.com/ardera/flutter-engine-binaries-for-arm.git engine-binaries
 
pi $ cd engine-binaries
 
pi $ sudo ./install.sh
 

- cmake, graphics, system libraries, fonts 설치

pi $ sudo apt install cmake libgl1-mesa-dev libgles2-mesa-dev libegl1-mesa-dev libdrm-dev libgbm-dev ttf-mscorefonts-installer fontconfig libsystemd-dev libinput-dev libudev-dev  libxkbcommon-dev
 

- system fonts update

pi $ sudo fc-cache
 

- git clone flutter-pi

pi $ git clone https://github.com/ardera/flutter-pi
 
pi $ cd flutter-pi
 

- Compile flutter-pi

pi $ mkdir build && cd build
 
pi $ cmake ..v
 
pi $ make -j`nproc`
 

- install flutter-pi

pi $ sudo make install
 

 

 

 
Target
Board
Raspberry Pi4
Host
PC - Ubuntu 22.04
목표
Raspberry Pi4 - Flutter 개발 환경 구축 A-1

Qt?

- 주로 사용되는 UI 프레임워크임

- Qt는 다양한 플랫폼을 지원하고, 강력한 기능을 제공하며, 개발이 쉬움

- 상업용으로 Qt를 사용할 경우, Qt Commercial 라이센스를 구매하며 비용이 매우 비쌈

- Qt 오픈 소스 버전을 사용하지만 한계에 다다름

- Qt의 라이센스 비용이 부담스러워 지면서 Flutter가 대안으로 떠오름

 

Flutter?

- 구글에서 개발한 UI 오픈 소스 크로스 플랫폼 개발 프레임워크

- Android, iOS, Web, Desktop 등 다양한 플랫폼을 지원하며, Dart 언어를 사용

 

Target Device를 라즈베리 파이로 지정하고 개발 환경을 구축해 본다.

라즈베리 파이는 ARM 아키텍처를 사용하기 때문에 윈도우나 리눅스에서 라즈베리 파이를 위한 소프트웨어를 개발하려면 크로스 컴파일 환경을 구축해야 한다.

워크플로우 A-1. 윈도우에 크로스 컴파일 환경 구축 방법

- mingw-w64를 사용하여 GCC 크로스 컴파일러 설치

- Visual Studio에서 크로스 컴파일러를 사용하여 빌드

워크플로우 A-2. 리눅스에 크로스 컴파일 환경 구축 방법

- gcc 또는 clang을 사용하여 ARM 아키텍처용 크로스 컴파일러 설치

워크플로우 B. 라즈베리파이에서 직접 개발/실행

- 크로스 컴파일 환경 구축 없이 라즈베리 파이에서 바로 개발 및 실행

리눅스에서 ARM 아키텍처용 크로스 컴파일러가 기본적으로 제공되기 때문에 리눅스에서 크로스 컴파일 환경을 구축하는 것이 더 쉽고 빠르다고 알려져 있다.

지금부터 워크플로우 A : 리눅스에 크로스 컴파일 환경 구축 방법을 설명한다.

리눅스에 크로스 컴파일 환경 구축 하는 방법은 아래 글에서 참조 한다.

 

https://blog.naver.com/engineer4ever/223198674134

 

Raspberry Pi4 크로스 컴파일 환경 구축(1)

라즈베리 파이는 ARM 아키텍처를 사용하기 때문에 윈도우나 리눅스에서 라즈베리 파이를 위한 소프트웨...

blog.naver.com


1. Linux PC

1-1. Linux에 snapd를 이용하여 Flutter 설치

(아래 링크를 참조하여 작성 되었음)

https://docs.flutter.dev/get-started/install/linux

 

 

Choose your first type of app

Configure your system to develop Flutter on Linux.

docs.flutter.dev

 

- Linux 기본 update

PC $ sudo apt update
 

- snapd 설치

PC $ sudo apt install snapd
 
 
PC $ sudo reboot
 
PC $ sudo snap install core
 

- flutter 설치

PC $ sudo snap install flutter --classic
 
PC $ flutter sdk-path
 

- 설치 위치 확인

PC $ which flutter dart
 

압축을 풀면 install-Linux-tar.txt에 설치 방법이 나와있다.

압축 푼 installation/bin에 가서

PC $ ./studio.sh
 

하면 Android Studio가 실행 된다.

- Android SDK Command-line Tools 설치

- Android lincenses 동의

PC $ flutter doctor --android-licenses
 

 

1-3. FlutterPi-Tool 설치

PC $ flutter pub global activate flutterpi_tool
 
PC $ flutter pub global run flutterpi_tool -h
 

- nano 편집기를 이용하여 bashrc 맨 아랫줄에 추가 후 저장

PC $ nano ~/.bashrc
 
export PATH="$PATH":"$HOME/.pub-cache/bin"
 
PC $ source ~/.bashrc
PC $ flutterpi_tool
 

 

 

리눅스(Linux) 기본 명령어 : cd

change directory
내용
cd /
root directory 이동
cd ~/
user directory 이동
cd ./
현재 directory 기준으로 이동 가능

 

1. cd / (root directory 이동)

PC $ cd /
 

 

2. cd ~/ (user directory 이동)

PC $ cd ~/
 

 

3. cd ./ (현재 directory 기준으로 이동 가능)

PC $ cd ./
 

 

 

'리눅스(Linux) > 기본 지식' 카테고리의 다른 글

QEMU(Quick Emulator)  (0) 2025.04.18
MachineWare  (0) 2025.04.18
리눅스(Linux) 기본 명령어(1)  (0) 2025.03.18
리눅스(Linux) 시스템 기본 구조  (0) 2025.03.18

 

리눅스(Linux) 기본 명령어(1)

 
ls
디렉토리 목록 확인
ls -a
숨긴 디렉토리까지 목록 확인
ls -al
디렉토리 세부 정보까지 출력
cd
디렉토리 이동
cp
파일 복사
cp -r
디렉토리 복사
mv
파일이나 디렉토리 이동
pwd
현재 작업중인 위치 확인
uname -a
버전 확인
chmod
권한 설정
clear
화면 지우기
mkdir -p
하위 디렉토리 포함하여 디렉토리 만들기
rm
파일 삭제
rm -r
디렉토리 삭제
rm -f
묻지않고 삭제
head
파일 앞부분을 10줄 보여줌
head - 3
파일 앞부분을 3줄 보여줌
tail
파일 뒷부분을 10줄 보여줌
tail -3
파일 뒷부분을 3줄 보여줌
gzip
압축
tar
압축
vi
에디터

 

 

'리눅스(Linux) > 기본 지식' 카테고리의 다른 글

QEMU(Quick Emulator)  (0) 2025.04.18
MachineWare  (0) 2025.04.18
리눅스(Linux) 기본 명령어(2) - cd  (0) 2025.03.18
리눅스(Linux) 시스템 기본 구조  (0) 2025.03.18

 

Linux?

오픈소스 운영 체제(OS). 운영 체제(Operating System, OS)는 CPU, 메모리, 스토리지처럼 시스템의 하드웨어와 리소스를 직접 관리하는 소프트웨어. OS는 애플리케이션과 하드웨어 사이에서 모든 소프트웨어와 작업을 수행하는 물리적 리소스를 연결

 

Linux는 크게 아래 3가지로 구성 됨

1. 부트로더(Boot loader)

2. 커널(Kernel)

3. 파일 시스템(File system)


 

1. 부트로더(Boot loader)

OS가 시작되기 전 실행되어 커널을 메모리에 올려 OS를 실행 시켜 줌

 

1-1. 부트로더의 기능

- 메모리 초기와

- 하드웨어 초기와

- 네트워크 초기와

- 사용자 인터페이스 기능

 

1-2. 부트로더의 동작

- 압축 되어 있는 커널 이미지를 메모리에 복사

- 커널 이미지의 압축을 품

- 커널을 실행

- 루트 파일시스템을 마운트

- OS 운영에 필요한 프로그램을 실행

 

1-3. 부트로더의 종류

- U-Boot(Universal Bootloadcer)

- LILO(Linux Loader)

- GRUB(GRand Unified Bootloader)

- RedBoot

- BLOB(Boot Loader Object)

 

1-4. U-Boot의 구조

- uboot는 여러개의 디렉토리로 구성 되어 있음

 

 

2. 커널(Kernel)

- 시스템의 자원을 관리해주는 OS의 핵심부

- 컴퓨터 하드웨어솨 소프트웨어를 이어주는 핵심 인터페이스

- 두 가지 관리 리소스 사이에서 최대한 효율적으로 통신

 

2-1. 커널의 기능

OS의 핵심. 메모리에 상주하며 CPU에 명령을 내리는 소프트웨어

커널은 다음과 같은 4가지 기능을 수행

 

- 메모리 관리

: 메모리가 어디에서 무엇을 저장하는데 얼마나 사용되는지 추적

 

- 프로세스 관리

: 어느 프로세스가 CPU를 얼마나 사용할지 결정(스케쥴링)

 

- 장치 드라이버

: 하드웨어와 프로세스 사이에서 중재자/인터프리터 역할을 수행

 

- 시스템 호출 및 보안

: 프로세스의 서비스 요청을 수신

 

2-2. 커널의 종류

- 단일형 커널(Monolithic Kernel)

- 마이크로 커널(Micro Kernel)

- 하이브리드 커널(Hybrid Kernel)

등이 있다.

 

2-3. 시스템 콜(System Call)

- 사용자가 접근할 수 없는 커널 메모리, 커널 데이터 등을 대신해서 접근해 주는 인터페이스

- Application Program은 user mode에서 수행 되며 하드웨어 직접 접근과 메모리에 대한 허용되지 않는 접근이 제한됨

- open(), read(), write(), close() 등이 있음

 

 

3. 파일 시스템(File system)

파일 시스템은 OS에서 파일 또는 자료에 쉽게 접근할 수 있도록 보관하거나 조직하는 체계

저장장치의 많은 파일을 관리하는 방법이 파일 시스템

 

- ex4

: ex4는 1EB까지 지원. ex3은 16TB까지 지원(TB(테라) < PB(페타) < EB(엑사)

 

- swap

: swap 공간으로 사용되는 파일 시스템

 

- xfs

: 64bit 고성능 저널링 파일 시스템

 

- iso9660

: DVD/CD-ROM을 위한 표준 파일 시스템으로 읽기만 가능

 

- nfs(network file system)

: 원격 서버에서 파일 시스템을 마운트 할 때 사용

 

 

'리눅스(Linux) > 기본 지식' 카테고리의 다른 글

QEMU(Quick Emulator)  (0) 2025.04.18
MachineWare  (0) 2025.04.18
리눅스(Linux) 기본 명령어(2) - cd  (0) 2025.03.18
리눅스(Linux) 기본 명령어(1)  (0) 2025.03.18

 

1. Yocto Project(욕토 프로젝트)

Yocto Project는 하드웨어 아키텍처에 관계없이 임베디드 장치를 위한 리눅스 기반 시스템을 만들기 위한 빌드 시스템 이다. 오픈 임베디드 빌드 시스템을 기반으로 하며, 자체적으로 비트베이크 도구를 기반으로 한다.

 

Yocto 프로젝트는 사용자 정의 리눅스 이미지를 구축하는 데 사용할 수 있는 표준 레시피와 클래스 세트 및최종 이미지를 빌드, 사용자 지정 및 임베디드 장치에 배포하기 위한 도구 세트를 제공한다. 이를 통해 개발자는 필요한 패키지만 포함하고 장치의 리소스 사용을 최적화함으로써 최종 이미지를 더 많이 제어할 수 있다.

 

Yocto 프로젝트의 주요 장점 중 하나는 재현 가능한 빌드를 만드는 데 사용할 수 있다는 것이다. 즉, 동일한 빌드 환경과 구성을 사용하여 여러 개의 동일한 이미지를 만들 수 있다. 이는 여러 장치에 배포하거나 다른 테스트 시나리오에 사용하기 위해 동일한 이미지를 여러 개 만들어야 하는 임베디드 개발 환경에서 유용할 수 있다.

 

 

Embedded Linux와 관련된 검증된 오픈 소스 도구 및 구성 요소를 구축하고 유지 관리하는 오픈 소스 프로젝트를 포괄한다라고 정의 하고 있다. 환경 셋업, 빌드, 패키징 등 여러 개의 작업을 하나의 작업 경로 내에서 모두 처리 할 수 있는 형상 관리 Tool의 일종이다.

 

2. WORKFLOW

출처 :  Software – Yocto Project

 

3. 개발 환경 설정

- 리눅스 설치

- Yocto Proejct를 위한 환경 설정

-Yocto Project 설치

- 작업 환경 설정

- 이미지 빌드

와 같은 순서로 이뤄진다.

 

4. Mega Manual 참고

https://docs.yoctoproject.org/5.1.3/singleindex.html

 

The Yocto Project ® 5.1.3 documentation

The OpenEmbedded build system creates the Build Directory when you run the build environment setup script oe-init-build-env. If you do not give the Build Directory a specific name when you run the setup script, the name defaults to build/. For subsequent p

docs.yoctoproject.org

 

 

Python을 이런 저런 방법으로 설치, 삭제를 하다 보니 VSCode에서 Python 인터프리터를 못찾는다는 에러가 나올때가 있다. VSCode 인터프리터에서 구버전의 파이썬이 설정 되어 있기 때문이다.

 

VSCode에서 인터프리터 버전 설정

- 내 VSCode에서 왼쪽의 Python을 눌러보면 최신 버전(3.11.1)과 구 버전(3.10.9) 두개가 뜬다.

 

- command창을 열어(Ctrl + Shift + P)

Python: Select Interprete - Enter interpreter path...를 눌러 최신 버전 Python.exe를 지정

 

그래도 과거 버전이 필요 없을 경우 지우고 싶다면 아래와 같이 하면 된다.

- 설정 - 앱 - 앱 및 기능

- python 검색

 

- 구 버전 선택 후 제거

 

- 구 버전이 삭제 되었다.

 

 

'파이썬(Python) > VSCode' 카테고리의 다른 글

파이썬(Python) 설치 및 사용  (0) 2025.03.18

 

Python(파이썬)은 네덜란드 출신의 프로그래머인 귀도 반 로섬(Guido van Rossum)이 1989년에 개발한 프로그래밍 언어이다. 파이썬은 문법이 어렵지 않아서 코드를 쉽게 작성하고 읽을 수 있다. Interpreter에서 바로 실행하여 그 결과를 빠르게 확인할 수 있다. 다양한 플랫폼에서 사용이 가능하며 요즘은 웹프로그래밍과 머신러닝, 사물 인터넷과 데이터 분석을 위한 다양한 분야에서 활용되고 있다.

C와 구분되는 가장 큰 특징은 C는 컴파일러(Compiler) 방식, Python은 인터프리터(Interpreter) 방식 이다. Python을 사용함에 있어 Interpreter 라는 단어가 계속 나오는데 C에서 Compiler라고 생각하면 된다. C와 Python과 차이는 극명 한데, 이 문제는 따로 자세히 적어보겠다.

 
Compiler
Interpreter
전체 파일을 스캔하여 한 번에 번역
→ 초기 시간이 오래 걸리지만 한 번 만들면 빠름
프로그램 실행 시 한 번에 한 문장씩 번역
→ 실행시간이 컴파일러 보다 더 걸림
오류 메시지를 생성할 때 전체 코드를 검사한 후에 오류 메시지를 생성
→ 실행 전에 오류 검출 가능
한 문장씩 번역될 때 오류를 발생하면
바로 프로그램을 중지
→ 프로그램을 실행시켜야 오류 검출 가능
대표 언어 : C, C++, java
대표 언어 : Python, java, Javascript, (Visual Basic)

 

https://www.python.org/

 

Welcome to Python.org

The official home of the Python Programming Language

www.python.org


1. Python 설치

https://www.python.org/downloads/windows/

 

Python Releases for Windows

The official home of the Python Programming Language

www.python.org

 

 

(1) Windows embeddable package (64-bit) 를 다운로드 받으면 설치 없이 바로 실행 할 수 있다.

하지만 이렇게 사용할 것이 아니므로 아래 버전을 설치한다.

 

(2) Windows installer (64-bit) 설치

- Add python.exe to PATH 체크 필수

- Customize installation 클릭

 

- 체크 박스 모두 체크

 

- Customize install location 지정

사용 편의성을 위해 설치 주소를 아래와 같이 쉽게 찾을 수 있는 주소로 변경할 것

 

 

 

Python 프로그램을 편하게 작성하기 위해서는 인터프리터보다는 에디터를 이용해서 작성하는 것이 편리하므로, Visual Studio Code를 설치하고 그 안에서 사용하도록 한다.

 

2. Visual Studio Code 설치(이하 VSC)

 

- VSC 실행

 

- 좌측 Extensions 클릭

 

- Python 검색

 

- Python Extension Pack Install

 

- 좌측 Explorer에서 Open Folder 클릭 후 직전에 설치한 Python 폴더 Open

 

- Yes, 모든 사용자에 신뢰

 

- New File... 클릭하고 이름 작성 및 확장자를 *.py로 하여 새 File 생성

 

- 아래와 같이 생성 확인

 

- 코드 작성

 

- Run Python File in Teminal 클릭 하여 제대로 실행 되는지 확인

 

 

 

'파이썬(Python) > VSCode' 카테고리의 다른 글

파이썬(Python) 구버전 삭제  (0) 2025.03.18

+ Recent posts