라즈베리파이, 아두이노

라즈베리파이 UART 활성화와 /dev/serial0 확인 방법

포도알77 2026. 7. 20. 11:07

본문 중간의 쿠팡 추천 상품 구매시 쿠팡 파트너스에서 일정액의 수수료를 제공받습니다.

라즈베리파이에서 UART를 쓰려면 단순히 핀에 선만 연결해서 끝나지 않는다. Raspberry Pi OS Bookworm 기준으로는 UART 하드웨어를 켜는 설정과, 로그인 셸이 같은 포트를 점유하지 않도록 하는 설정을 함께 봐야 한다. 여기에 모델별로 /dev/serial0이 가리키는 실제 장치가 달라질 수 있어 ttyAMA0ttyS0를 바로 고정해서 쓰는 것보다 심볼릭 링크를 먼저 확인하는 편이 안전하다.

2026년 7월 20일 확인 기준으로 Raspberry Pi 공식 문서는 대부분의 하드웨어 프로젝트에서 serial console은 끄고 serial port hardware는 켜라고 안내한다. 또 UART는 모두 3.3V 레벨이므로 5V 장치와 직접 연결하면 안 된다.

무엇을 먼저 구분해야 할까

라즈베리파이 문서에서 serial 관련 설정은 두 가지로 나뉜다. 하나는 UART 핀 자체를 쓰게 하는 Serial Port이고, 다른 하나는 부팅 메시지와 로그인 셸을 UART로 내보내는 Serial Console이다. 센서, MCU, USB-serial 어댑터와 통신하려는 목적이라면 보통 전자는 켜고 후자는 끈다.

항목 의미 일반적인 선택
Serial Port GPIO 14/15 쪽 UART 하드웨어 사용 여부 외부 장치와 통신할 때 켠다
Serial Console 부팅 로그와 login shell을 UART로 노출할지 디버그 콘솔이 필요할 때만 켠다

실무에서 가장 흔한 실수는 둘 다 켜 둔 상태로 MCU와 통신하려는 경우다. 이 상태에서는 커널 메시지나 로그인 프롬프트가 같은 라인으로 흘러 들어와 데이터가 섞일 수 있다.

Bookworm에서 켜는 절차

Raspberry Pi 공식 문서 기준으로는 데스크톱의 Control Centre와 raspi-config 둘 다 지원한다. Bookworm에서 GUI를 쓰면 Preferences > Control Centre > Interfaces에서 Serial PortSerial Console 토글을 따로 바꿀 수 있다.

터미널 환경이라면 sudo raspi-config 실행 후 3 Interface Options > I6 Serial Port로 들어간다. 여기서 Would you like a login shell to be accessible over serial? 질문에는 보통 No, 이어지는 Would you like the serial port hardware to be enabled? 질문에는 Yes를 선택한다. 설정 후 재부팅이 필요하다.

어떤 장치 파일을 확인하면 될까

애플리케이션에서 바로 /dev/ttyAMA0 또는 /dev/ttyS0를 고정하는 것은 보드별 차이에 약하다. Raspberry Pi OS는 주 UART를 가리키는 /dev/serial0 심볼릭 링크를 제공하므로, 사용자 공간에서는 이 경로를 먼저 확인하는 방식이 가장 무난하다.

경로 의미 메모
/dev/ttyS0 mini UART 모델에 따라 primary UART가 될 수 있다
/dev/ttyAMA0 첫 번째 PL011 Bluetooth와 역할이 바뀌는 모델이 있다
/dev/serial0 primary UART 심볼릭 링크 모델별 차이를 흡수할 때 우선 추천
/dev/serial1 secondary UART 심볼릭 링크 Bookworm 이후 기본적으로 없을 수 있다

Raspberry Pi 5에서는 /dev/serial0/dev/ttyAMA10을 가리킨다. 반대로 일부 이전 모델에서는 /dev/serial0/dev/ttyAMA0 또는 /dev/ttyS0를 가리킨다. 그래서 튜토리얼이나 예제 코드를 그대로 가져올 때는 현재 보드에서 ls -l /dev/serial0 결과를 먼저 확인하는 편이 좋다.

 

 

enable_uart는 언제 신경 써야 할까

공식 config.txt 문서에 따르면 enable_uart=1은 커널이 serial console을 만들도록 요청하는 설정과 연결돼 있다. 또 primary UART가 ttyAMA0 같은 PL011이면 기본값이 켜져 있지만, mini UART가 primary인 경우에는 기본적으로 꺼질 수 있다. 이 차이는 동적 주파수 변화가 mini UART 동작에 영향을 줄 수 있기 때문이다.

실무 기준으로는 먼저 Control Centre나 raspi-config에서 UART를 활성화하고, 그다음에 실제로 어느 장치가 primary로 연결됐는지 확인하는 흐름이 안전하다. config.txt를 수동으로 직접 만져야 하는 경우는 Bluetooth와 UART 배치를 바꾸거나 추가 UART overlay를 적용할 때가 많다.

Bluetooth와 충돌을 의심해야 하는 경우

Raspberry Pi 3, 4 계열처럼 Bluetooth가 기본 UART 배치에 관여하는 모델에서는 UART0과 mini UART의 역할이 고정돼 있지 않을 수 있다. Raspberry Pi 공식 문서는 첫 번째 PL011인 UART0을 primary UART로 확보하려면 dtoverlay=disable-bt 또는 경우에 따라 miniuart-bt overlay를 사용하라고 설명한다.

다만 이것은 모든 프로젝트의 기본 절차는 아니다. 단순히 외부 장치와 115200bps UART 통신만 하려는 경우에는 먼저 기본 배치에서 /dev/serial0가 원하는 포트인지 확인하고, 부족할 때만 Bluetooth 재배치를 검토하는 편이 부작용이 적다.

추가 UART가 필요한 경우

Raspberry Pi 4 계열은 추가 PL011 UART들을 기본적으로 비활성화한 상태로 두며, Raspberry Pi 5 계열도 여러 UART를 기본 비활성 상태로 제공한다. 공식 문서는 이런 경우 Device Tree overlay로 uart2, uart3 같은 추가 UART를 켤 수 있다고 안내한다. Compute Module은 기본적으로 모든 UART가 비활성화돼 있어 overlay 기반 설정이 더 자주 필요하다.

즉, 단일 시리얼 연결만 필요하면 /dev/serial0 중심으로 보면 되고, 복수 UART가 필요하면 overlay와 핀 매핑까지 함께 봐야 한다.

확인 순서 요약

  1. 배선 전에 상대 장치가 3.3V UART인지 확인한다.
  2. Bookworm에서 Serial Port=On, Serial Console=Off로 맞춘다.
  3. 재부팅 후 /dev/serial0가 어떤 실제 장치를 가리키는지 확인한다.
  4. 기본 포트가 기대와 다르면 Bluetooth overlay 또는 추가 UART overlay 필요 여부를 검토한다.
  5. 애플리케이션 설정은 가능하면 /dev/serial0 기준으로 시작한다.

FAQ

Q. UART를 켰는데 통신 데이터 대신 로그인 프롬프트가 보이면?

serial console이 아직 활성화돼 있을 가능성이 크다. UART 하드웨어와 serial console은 별개 설정이므로, console만 끄고 다시 부팅해야 한다.

Q. 왜 /dev/ttyAMA0 대신 /dev/serial0를 먼저 보라고 할까?

라즈베리파이 모델마다 primary UART에 배정되는 실제 장치가 다를 수 있기 때문이다. /dev/serial0는 그 차이를 감싸는 심볼릭 링크라서 보드 교체 시 수정 범위를 줄이기 쉽다.

Q. Bookworm에서 /dev/serial1가 안 보이는 것은 이상한가?

공식 문서 기준으로 Bookworm 이후에는 /dev/serial1가 기본적으로 존재하지 않을 수 있다. secondary UART가 꼭 필요할 때만 관련 config.txt 설정을 추가로 검토하면 된다.

반응형
페이스북으로 공유카카오톡으로 공유카카오스토리로 공유트위터로 공유URL 복사