IT/RaspberryPi

[Raspberry Pi 4B] Python으로 시리얼 번호 깔끔하게 얻는 법 (feat. vcgencmd)

심량 2023. 7. 25. 09:29

Raspberry Pi 4B에서 장치 고유 식별자인 시리얼 번호를 얻는 방법을 정리했습니다.
Python을 사용하면 ssh에서도 훨씬 깔끔하고 명확하게 처리할 수 있습니다.

라즈베리파이에서 시리얼 번호를 얻는 대표적인 방법은 /sys, /proc, 그리고 vcgencmd를 활용하는 세 가지가 있습니다.


1. /sys 경로 접근 방법 (추천)

cat /sys/firmware/devicetree/base/serial-number | tr -d '\0'
  • null 문자 제거 안 하면 다음과 같은 경고가 뜰 수 있습니다:
    -bash: warning: command substitution: ignored null byte in input
  • tr -d '\0'을 뒤에 붙이면 깔끔하게 출력됩니다.

2. /proc/cpuinfo 활용 (전통 방식)

grep Serial /proc/cpuinfo | awk -F '[: ]' '{print $3}'

또는

grep Serial /proc/cpuinfo | cut -d ' ' -f 2
  • 예전부터 자주 쓰던 방식이지만, ssh 명령 전송 시 따옴표/특수문자 처리 귀찮음
  • 예:
    ssh pi@192.168.0.10 "grep Serial /proc/cpuinfo | awk -F '[: ]' '{print \$3}'"

3. vcgencmd 명령 사용 (OTP 영역 확인)

vcgencmd otp_dump | grep 28:

출력 예시:

28:00000000abc12345
  • 00000000abc12345가 시리얼 번호입니다.
  • vcgencmd가 없으면 아래로 설치 가능:
    sudo apt install libraspberrypi-bin

4. Python으로 깔끔하게 추출하기 (추천)

from pathlib import Path

def get_serial():
    path = Path('/sys/firmware/devicetree/base/serial-number')
    return path.read_text().replace('\x00', '').strip()

print(get_serial())

ssh에서도 한 줄로 실행 가능:

ssh pi@host "python3 -c 'from pathlib import Path; print(Path(\"/sys/firmware/devicetree/base/serial-number\").read_text().replace(\"\\x00\", \"\"))'"

사실 ssh 보다는 이 값을 가져오는 기능 구현시 함수 버전 참고하면 좋습니다. :)


🔍 요약

  • /sys + Python 조합이 요즘 기준 가장 깔끔함
  • /proc 방식은 여전히 동작하지만, ssh 처리할 때 귀찮음
  • vcgencmd는 보조 수단으로 좋지만 기본 설치 안 돼 있을 수도 있음


혹시 /boot, udevadm, DMI 등 다른 방식으로도 추출해보신 분 있다면 댓글로 공유 부탁드립니다 😊