지금까지는 라즈베리파이의 전원이 인가된 이후, 시스템이 어떤 순서로 설정값을 불러오고 초기화되어 우리가 하드웨어 자원을 활용할 수 있는 환경이 구성되는지를 살펴보았다.
이제부터는 본격적으로 센서 제어 및 다양한 인터페이스를 사용하는 방법에 대해 학습해보고자 한다.
이전까지는 라즈베리파이 4 모델 B를 기반으로 실습을 진행했지만, 앞으로는 더 많은 기능과 확장된 인터페이스를 제공하는 라즈베리파이 5를 활용해 학습을 이어갈 예정이다.
라즈베리파이4 와 라즈베리파이5 비교 / Raspberry Pi Compare
라즈베리파이4 와 라즈베리파이5 비교 [서론] Raspberry Pi 5의 최신 릴리스는 Raspberry Pi 4 출시 후 4년 만에 마침내 데뷔했으며, 성능 향상과 PCIe 2.0 지원을 추가하는 내부 실리콘을 모두 60달러의 시
www.leocom.kr
라즈베리파이4와 5의 인터페이스 구성에 대해서는 위 글에서 아주 자세히 설명되어져 있다. 간단히 정리해보자면 MIPI, PCIe 인터페이스 유/무, 디버그 전용 UART 포트의 유/무로 볼 수 있을 것 같다.
라즈베리파이4 | 라즈베리파이5 | |
MIPI CSI/DSI | 2-lane | 4-lane |
MIPI 포트 수 | 각 1개 | 총 2개 (겸용) |
PCIe 인터페이스 | 미지원 | PCIe 2.0 x1 지원 |
확장성 | 제한적 | 고속 저장장치 및 다양한 장치 연결 가능 |
UART | 6개 | 6개 + 전용 디버그 UART(ttyAMA10) |
단순히 디바이스 트리를 확인해봐도 차이를 느낄 수 있는데, 라즈베리파이5는 하드웨어 I/O 리소스가 라즈베리파이4보다 훨씬 많기 때문에, 이를 관리하고 설정하기 위한 디바이스 트리 노드의 수도 자연스럽게 더 많은 것을 확인할 수 있다.
라즈베리파이5에서는 config.txt에서 UART를 별도로 활성화하지 않아도 디버그용 UART인 ttyAMA10이 기본적으로 활성화되어 /dev 폴더에서 확인할 수 있지만, 라즈베리파이4는 해당 UART 핀이 존재하지 않기 때문에, 동일한 설정 상태에서는 /dev에서 ttyAMA10을 찾을 수 없는 것을 확인할 수 있다.
uart 사용을 위해서 config.txt를 수정했을 때에도 차이점이 확연히 드러나는데, "enable_uart=1"로 uart를 활성화 했을 때 차이를 아래에서 확인할 수 있다.
Raspberry Pi 4 | Raspberry Pi 5 | |
기본 UART 디바이스 | ttyS0 (Mini UART) | ttyAMA10 (PL011 디버깅용 UART) |
/dev/serial0 → | ttyS0 | ttyAMA10 |
Serial Console | ttyS0에 할당됨 | ttyAMA10에 할당됨 |
Serial Port | 사용 가능 (단, Console 점유 시 충돌 위험) | 기본적으로 사용자용 포트 없음 |
GPIO 연결 | GPIO14 (TXD), GPIO15 (RXD) | 기본값으로는 연결 안 됨 (Device Tree 설정 필요) |
용도 | 범용 UART로 사용 가능 | 디버깅 전용 UART에 Console 전용 배정됨 |
Serial Console | UART를 Linux 콘솔 출력으로 사용하는 옵션 전원 켤 때부터 UART로 부팅 로그, 로그인 프롬프트가 출력 |
Serial Port | 사용자 애플리케이션이 UART를 통해 외부 기기(센서, MCU 등)와 통신할 수 있도록 UART 포트를 활성화 |
결국 위의 내용을 정리하자면, 단순히 enable_uart=1만으로는 부족하며, serial port와 serial console의 분리, GPIO 핀 매핑, udev 링크 재설정, 커널 로그 제거 등 세부적인 설정을 각각의 모델에 맞게 해야 외부 기기와 안정적인 UART 통신이 가능하다는 것이다.
📌 라즈베리파이 4의 경우
- 기본적으로 ttyS0가 serial0으로 설정되어 있으며, GPIO 14/15(UART0)가 외부 UART로 사용 가능.
- enable_uart=1만으로 대부분의 경우 외부 통신이 가능.
- 다만, serial console이 활성화되어 있으면 UART가 커널 메시지를 출력하는 용도로 사용되므로 충돌 가능 → console=serial0,115200 제거 필요.
📌 라즈베리파이 5의 경우
- 기본 UART는 디버깅 용도인 ttyAMA10이 serial0으로 지정되어 있음 → 외부 기기와의 통신 불가.
- 외부 UART를 사용하려면 다음 추가 설정 필요:
- dtparam=uart0=on → GPIO 14/15에 UART0 매핑
- /boot/firmware/config.txt 또는 /boot/config.txt에서 serial0이 ttyAMA0을 가리키도록 Udev rule 수정 또는 dtoverlay=uart0 적용
- console=serial0,... 같은 콘솔 설정 제거
아니면 기본 UART는 Console용으로 할당 하고, 다른 UART를 사용는 방법도 있다. 라즈베리파이는 SoC 내에 여러 개의 UART를 제공하며, 이를 활성화하고 핀에 할당하면 ttyAMA0, ttyAMA1, ttyAMA2 등의 이름으로 사용할 수 있다.
'Linux > Embedded Linux (Rpi)' 카테고리의 다른 글
리눅스 시스템 구조와 부트 과정 이해(5) - 디바이스 트리 (0) | 2025.05.04 |
---|---|
리눅스 시스템 구조와 부트 과정 이해(4) - Bootloader (0) | 2025.05.03 |
리눅스 시스템 구조와 부트 과정 이해(3) - 시스템 콜 (0) | 2025.05.03 |
리눅스 시스템 구조와 부트 과정 이해(2) - 임베디드 리눅스에서의 UART (0) | 2025.05.03 |
리눅스 시스템 구조와 부트 과정 이해(1) - dmesg, 부트로더 (0) | 2025.04.20 |