JetPack 6.x에서 Jetson Orin Nano GPIO 제어 문제 해결
Jetson Orin Nano에 JetPack 6.x를 설치했는데, GPIO 제어가 안 된다? 저도 처음에 당황했었는데요. 이 글에서는 Jetson Orin Nano에서 GPIO 제어 문제를 어떻게 해결했는지 공유하려고 합니다.
1. 기존 제어 코드로 제어 시도
우선, Jetson Orin Nano에서 GPIO를 제어하려고 가장 기본적인 코드를 사용했습니다:
import Jetson.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(7, GPIO.OUT)
GPIO.output(7, GPIO.LOW)
하지만 코드를 실행하자마자 다음과 같은 오류가 발생했습니다:
Exception: Could not determine Jetson model
2. JetPack 6.2로 업그레이드한 새로운 환경에서 에러
JetPack 6.2로 업그레이드한 Jetson Orin Nano에서 Jetson.GPIO 라이브러리를 사용하여 GPIO 제어를 시도했지만 실패했습니다.
첫 번째 디버깅 시도
환경 변수를 설정하여 해결을 시도했습니다:
export JETSON_MODEL_NAME=JETSON_ORIN_NANO
하지만 설정 후에도 (에러 메세지는 달랐지만) GPIO 제어에 여전히 실패했습니다.
3. 문제 원인: 기존 sysfs 방식 지원 중단
알고 보니 JetPack 6.x 버전부터는 기존 sysfs 방식이 deprecated 되었습니다. Jetson.GPIO 라이브러리는 기존 sysfs 방식을 사용하고 있어 호환성 문제가 발생한 것입니다.
대신, JetPack 6.x 이상에서는 libgpiod 기반 툴을 사용해야 합니다. 기존 방식으로는 제어가 불가능하므로 주의가 필요합니다.
4. JetPack 6.2의 GPIO 제어 부분 커스텀 패치 후 flash
https://blog.naver.com/mdstec_nvidia/223816316693
[NVIDIA 스터디] Jetpack 6 GPIO 설정 방법 총정리 (Orin Nano/NX/AGX Orin 대응)
Jetpack 6에서 GPIO 제대로 쓰는 법 , 알고 계신가요? 봄이 무르익는 4월의 첫날, 새로운 프로젝트를 ...
blog.naver.com
MDStech에서 제공하는 가이드를 따라 커스텀 패치를 시도했습니다. 하지만 압축을 푸는 과정에서 문제가 발생했습니다:
tar (child): cannot run bzip2: 그런 파일이나 디렉터리가 없습니다
해결책은 간단했습니다. 압축 도구를 설치했습니다:
sudo apt-get install bzip2
Flash 시도
sudo ./flash.sh jetson-orin-nano-devkit internal
압축이 풀린 후 flash를 시도했으나 또 다른 문제가 발생했습니다:
Error: probing the target board failed.
터미널에서 직접 flash 명령으로 시도할 때는 보드 인식을 못 하는 문제가 있었습니다.
또, 어떤 xml 파일을 찾지 못해 flash를 진행할 수 없다는 에러 메세지도 있었습니다.
5. SDKManager를 통한 설치로 성공
터미널에서 직접 flash하는 방식으로는 실패하여 SDKManager를 사용했습니다.
SDKManager 설치 방법
- SDKManager를 우분투OS 데스크탑PC설치하고 실행합니다.
- Jetson Orin Nano를 리커버리 모드로 부팅(보드 하단 핀헤더에서 FC REC핀과 그 다음 GND핀 점퍼 연결 후 부팅)하고,
- 우분투OS의 데스크탑PC와 USB로 연결합니다. (제 경우, Jetson C to A Desktop)
- SDKManager를 통해 JetPack 6.2를 설치합니다. (이때, 다운로드 후 나중에 설치한다는 옵션 체크! 커스텀 패치 진행해야 하므로 꼭!)
- 다운로드가 완료되면, 다시 MDStech에서 제공하는 가이드 따라 (단, SDKManager가 사용할 새로운 경로로) 패치를 진행하여 flash할 파일을 살짝 손댑니다.
- 그리고 SDKManager를 통해서 설치를 진행합니다.
이렇게 설치했지만, 처음의 `Could not determine Jetso model` 에러는 여전했습니다.
이번에는 일시적인 환경 변수 설정이 유지되도록 설정하겠습니다.
환경 변수 설정
설정 완료 후 bashrc 파일에 환경 변수를 추가하여 설정을 유지합니다:
vim ~/.bashrc
파일 제일 아래에 다음 내용을 추가:
export JETSON_MODEL_NAME=JETSON_ORIN_NANO
수정 후에는 다음 명령으로 저장하고 종료합니다:
:wq
변경 사항을 즉시 적용하려면:
source ~/.bashrc
만약 적용되지 않으면 재부팅하여 반영합니다.
그리고 다시 처음의 그 제어코드를 실행하는 순간, 7번 핀이 토글되면서, 연결 기기 제어에 성공할 수 있었습니다!
정리
JetPack 6.2로 업그레이드하면서 기존 방식으로는 GPIO 제어가 안되었습니다. 패치로 쉽게 해결하나 했지만, 진행하는 동안 여러 어려움을 겪었습니다. 그래도 새로운 경험을 했습니다:
- 우분투OS 설치. 패치 및 flash를 위해서는 윈도우OS는 지원하지 않아, 같은 PC에 우분투OS를 같이 설치했습니다. 다행히 이런 설치 지원이 잘되어 있었습니다. (파티션도 설치하는동안 설정으로 쉽게 나눌 수 있었음)
- 리커버리 모드 부팅을 했습니다. 핀헤더에서 쇼트나 연결만으로 신호가 되어 소프트웨어가 달리 동작하는 첫경험은 신기했습니다.
여러분은 저같은 어려움 없이, Jetson Orin Nano GPIO 제어에 성공하길 바랍니다. 도움이 필요하시면, 댓글로 남겨주세요! 😊
'개발 > Jetson' 카테고리의 다른 글
Jetson Orin Nano 개발자 키트 GPIO 핀맵 정리 – 40핀 확장 헤더 완전 해설 (0) | 2025.04.24 |
---|---|
[Jetson Orin Nano] 라즈베리파이 카메라가 인식되지 않을 때: IMX219/IMX708 세팅 방법 (2) | 2025.04.11 |
JetPack6로 업그레이드하기. (NVIDIA Jetson Nano Orin Developer Kit) (0) | 2025.03.29 |