일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- URLSession
- builder
- dart
- WebSocket
- AppleDeveloper
- flutter
- embedded-swift
- philipshue
- EventLoop
- SwiftUI
- SampleApp
- uikit
- isolate
- dartz
- chartsorg
- network
- GIT
- raspberrypi5
- dgcharts
- OpenAI
- designpattern
- Architecture
- swift
- tuist
- iot
- 문법
- weatherkit
- LifeCycle
- Xcode
- WWDC24
Archives
- Today
- Total
Jaebi의 Binary는 호남선
[WWDC 2024] Embedded Swift - 찍먹 본문
목차 Open
Embedded Swift
- Swift의 새로운 컴파일 모드
- Apple은 이미 Secure Enclave Processor에서 Embedded Swift를 사용
- Swift 언어의 특징(값/참조 타입, 옵셔널, 클로저, 제너릭 등)을 사용할 수 있음
- 사용 불가:
Mirror
API,metatype
및any
타입
- 사용 불가:
- 현재 ARM 및 RISC-V (32/64 비트)를 지원, nightly toolchain을 사용화면 실험 가능
- 더 자세한 내용은 Embedded Swift User Manual 참고
Embedded Swift 사용 - 사전 준비
- MacOS
- Xcode 최신 버전 ('25.03.03부 16.2)
- Swift Nightly Toolchain
Swift Nightly Toolchain 다운로드
- Swift.org 다운로드 페이지에 들어가 main branch의 툴체인 다운로드

- Terminal로 설치된 Toolchain 확인 (
~/Library/Developer/Toolchains/
경로에 있음)

- toolchain identifier 확인
.xctoolchain
안에서plutil -extract CFBundleIdentifier raw -o -Info.plist
커맨드

- 해당 toolchain identifier를 TOOLCHAINS 전역 변수에 넣고 swift --version으로 확인

- Shell Environment 세팅하기
export TOOLCHAINS=org.swift.{toolchain identifier}
를 하면swift --version
이 다른 버전을 사용함 확인

Swift 예제 프로그램 빌드
swift-embedded-examples/rpi5-blink at main · apple/swift-embedded-examples
A collection of example projects using Embedded Swift - apple/swift-embedded-examples
github.com
요구 사항
- 라즈베리파이 5
- 라즈베리파이 OS가 설치된 SD 카드
- LLVM
MacOS에 LLVM 설치
brew install llvm
로 llvm 설치- echo 'export PATH="/opt/homebrew/opt/llvm/bin:$PATH"' >> ~/.zshrc 로 path variable에
llvm
추가 CMake
또는Make
와 같은 빌드 도구를 사용하려면 특정 환경변수를 업데이트 해야함 - 아래 변수들을.zshrc
/.bashrc
에 추가,source ~/.zshrc
(.bashrc
)로 적용
export PATH="/opt/homebrew/opt/llvm/bin:$PATH"
export LDFLAGS="-L/opt/homebrew/opt/llvm/lib"
export CPPFLAGS="-I/opt/homebrew/opt/llvm/include"
- clang --version 으로 맞는 llvm 버전이 적용되었는지 확인

예제 프로그램 빌드
- 예제 코드 클론, LED 동작을 바꾸고 싶으면 바꿔봄 (예시 코드)
@main
struct Main {
static func main() {
setLedOutput()
while true {
// 3초 동안 3번 깜빡이기
let blinkDuration = 3_000_000 // 3초 Loop count
for _ in 0..<3 {
ledOn()
for _ in 1..<500000 {} // 0.5초
ledOff()
for _ in 1..<500000 {} // 0.5초
}
// 3초 동안 켜있기
ledOn()
for _ in 1..<blinkDuration {} // 3초 Delay
// 3초 동안 꺼있기
ledOff()
for _ in 1..<blinkDuration {} // 3초 Delay
}
}
}
- 해당 디렉토리에서
make

- 성공하면
kernel8.img
가 디렉토리에 생성됨 cp kernel8.img /Volumes/bootfs
로 kernel 이미지를 SD 카드에 copyrm /Volumes/bootfs/kernel_2712.img
로 kenerl 이미지를 지워서kernel8.img
가 사용되게 함- SD카드를 Raspberry Pi 5에 넣고 재부팅
'IoT' 카테고리의 다른 글
[IoT] Mac에 라즈베리파이5 설정 (0) | 2025.02.24 |
---|---|
[IoT] 라즈베리5 정리 (0) | 2025.02.24 |