AVS200 플래시 가이드 — L4T R36.4.4 · 3세대(gen3) MFI 번들
이 문서는 MFI 번들(Massflash Image) 하나로 AVS200 에 OS 를 설치(플래시)하는 방법을 설명합니다. 번들에는 굽기에 필요한 이미지와 도구가 모두 들어 있어 소스 트리나 인터넷 없이(의존 패키지 설치 제외) 여러 대를 동시에 구울 수 있습니다.
| 항목 | 값 |
|---|---|
| 릴리스 | r36.4.4-20260916 |
| 소프트웨어 | L4T R36.4.4 · JetPack 6.2.1 · Ubuntu 22.04 · 커널 5.15.148-tegra · CUDA 12.6 · DeepStream 7.1 |
| 대상 모듈 | AGX Orin 32GB (P3701-0004) · 64GB (P3701-0005) — 모듈별로 번들이 다릅니다 |
| 캐리어 | gcam-rgbir-r1 |
| 기본 카메라 | gmsl-4x2-3g-sg3s-isx031c (8채널) — 플래시 후 jetson-io 로 변경 가능 |
| 저장장치 | 외장 NVMe (첫 부팅에 디스크 전체로 자동 확장) |
32GB 모듈이고 JetPack 7.2(Ubuntu 24.04 · MAXN_SUPER)가 필요하면 → 플래시 가이드 (JetPack 7.2)
다운로드 페이지에서 모듈 용량에 맞는 번들과 그 옆의 .sha256 을 받습니다.
🔴 32GB 와 64GB 는 번들이 다릅니다.
3세대부터는 카메라를 extlinux.conf 의 OVERLAYS 한 줄로 고르고, 보드에서 jetson-io 로 바꿉니다.
이전 판은 트리 패키지 + flash_avs200.sh --camera 와 /etc/default/avs200-camera 를 썼습니다.
보드가 어느 쪽인지는 ls /boot/makeoverlay_rootfs 로 확인합니다 — 파일이 없으면 3세대입니다.
이전 판 절차가 필요하면 공급사(telelian)로 문의하세요.
32GB 와 64GB 는 번들이 다릅니다(파일 이름의 -32g- / -64g-). 보드에서 tr -d '\0' < /proc/device-tree/model 로 확인하세요.
캐리어는 gcam-rgbir-r1 전용입니다 — 다른 캐리어는 그 구성용 번들이 따로 필요하고, 캐리어는 보드 DTB 에 고정돼 플래시 후에 바꿀 수 없습니다. Industrial 모듈도 별도입니다.
빠른 시작 (Quick Start) 페이지에 0~6단계 명령을 한 덩어리로 모아 뒀습니다. 처음이시면 아래를 순서대로 보세요.
1. 준비물
| 필요한 것 | 내용 |
|---|---|
| 호스트 PC | Ubuntu 20.04 / 22.04 / 24.04 · x86_64 |
| 디스크 여유 | 32GB 판(gen3a) 약 17GB (번들 8GB + 푼 것 9GB) · 64GB 판(gen3) 약 45GB (번들 17GB + 푼 것 26GB) |
| 번들 | mfi_avs200-agx-orin-<32g|64g>-gcam-rgbir-r1_…_r36.4.4-20260916_….tar.gz 와 .sha256 — 다운로드에서 받습니다 |
| USB 케이블 | 보드의 플래시용 USB-C ↔ 호스트 USB. 여러 대면 USB 허브 |
| 대상 보드 | AVS200 (AGX Orin 32GB 또는 64GB) |
1-1. 번들 무결성 확인
sha256sum -c mfi_avs200-agx-orin-*g-gcam-rgbir-r1_*.tar.gz.sha256
# → "OK" 가 나와야 합니다. FAILED 면 삭제 후 다시 받으세요.
1-2. 번들 풀기 (권한 보존 필수)
sudo sh -c 'pigz -dc mfi_avs200-agx-orin-*g-gcam-rgbir-r1_*.tar.gz | tar xpf -' # pigz 가 있으면 약 2분
# pigz 가 없으면
sudo tar xpzf mfi_avs200-agx-orin-*g-gcam-rgbir-r1_*.tar.gz
cd mfi_avs200-agx-orin # 🔴 64GB 번들은 mfi_avs200-agx-orin-64g
sudo + tar xpf(p = 권한 보존)권한이 깨지면 굽기가 실패하거나 부팅된 보드의 보안 권한이 틀어집니다.
풀고 나면 rootfs/ 디렉터리가 있어야 합니다. 보드가 굽는 동안 이 디렉터리를 네트워크(NFS)로 연결해 사용하므로 지우면 안 됩니다.
32GB 판(gen3a)의 rootfs/ 는 약 40 MB, 64GB 판(gen3)은 약 18 GB 입니다.
gen3a 는 굽기에 쓰이지 않는 파일을 덜어낸 판이라 작습니다 — 디렉터리가 있고 비어 있지 않으면 정상입니다.
비어 있으면 mount: /mnt/proc: mount point does not exist 로 굽기가 멈춥니다. 그때만 1-2 대로 다시 푸세요.
1-3. 의존 패키지 설치 (최초 1회, 인터넷 필요)
sudo ./tools/l4t_flash_prerequisites.sh
굽기 도구는 USB 네트워크(IPv6) 위의 NFS 를 씁니다. 방화벽(ufw 등)이 NFS 를 막으면 굽는 도중 멈춥니다.
또 굽는 동안 호스트의 nfs-kernel-server 가 재시작되므로, 다른 NFS 공유를 쓰는 중이면 피해서 진행하세요.
2. 보드를 리커버리(RCM) 모드로 연결
리커버리(RCM, Recovery Mode)는 보드의 부트ROM 이 USB 로 넘어오는 이미지를 받는 상태입니다. 이 상태여야 굽기가 시작됩니다.
2-1. 케이블 연결
보드의 플래시용 USB-C 포트와 호스트 PC 의 USB 포트를 데이터용 케이블로 연결합니다. 여러 대를 구우려면 USB 허브를 씁니다.
리커버리(RCM)는 규격상 USB 2.0 입니다. 링크가 480M 으로 보여도 문제가 아닙니다.
2-2. 리커버리로 들어가기
두 가지 방법이 있습니다. ①을 먼저 시도하세요 — 케이스를 열지 않아도 됩니다.
① 명령으로 (권장) — 케이스를 열지 않습니다
OS 가 부팅돼 있고 SSH 가 되면 이 한 줄로 끝납니다.
ssh avs@<보드IP> 'sudo reboot forced-recovery' # 몇 초 뒤 RCM 으로 들어갑니다
AVS200 은 리커버리·리셋 스위치가 케이스 안쪽에 있습니다(아래 ②). 보드가 켜져 있고 네트워크로 닿을 수 있다면 이 명령만으로 리커버리에 들어가므로, 케이스를 분해할 이유가 없습니다. 플래시를 반복하는 작업이라면 이 방법을 쓰세요.
--force 를 붙이면 리커버리로 안 들어갑니다sudo reboot --force forced-recovery 는 그냥 재부팅됩니다.
--force 가 systemd 종료 절차를 건너뛰어 forced-recovery 인자가 전달되지 않기 때문입니다.
반드시 sudo reboot forced-recovery 로, --force 없이 실행하세요.
② 버튼으로 — 전면 패널을 탈거해야 합니다
OS 가 안 올라오거나 SSH 가 안 될 때 씁니다.
RECOVERY 스위치와 RESET 버튼은 전면 패널을 탈거해야 손이 닿습니다.
①(sudo reboot forced-recovery)이 가능한 상황이면 탈거하지 마세요.
- 보드 전원을 끄고 전면 패널을 탈거합니다.
- RECOVERY 스위치를 누른 채 전원을 넣고, 2초 뒤에 뗍니다. (전원이 이미 들어와 있으면 RECOVERY 를 누른 채 RESET 을 짧게 누르고, 2초 뒤 RECOVERY 를 뗍니다.)
- 아래 2-3 으로 확인한 뒤 굽습니다. 굽기가 끝나면 패널을 다시 조립합니다.

패널을 떼면 보이는 위치 — 왼쪽이 RESET, 그 옆이 RECOVERY, 오른쪽 아래가 리커버리용 USB 포트입니다.
리커버리로 넣고 한참 두면 전송 중 might be timeout in USB write 로 실패합니다.
전원을 껐다 켜고 리커버리로 다시 넣으세요. USB 불량이 아닙니다.
2-3. 호스트에서 확인
lsusb -d 0955:7223 # 구울 보드 수만큼 줄이 나와야 합니다
| USB ID | 뜻 |
|---|---|
0955:7223 | RCM — 구울 준비 완료 (USB 2.0 480M 로 보이는 것이 정상) |
0955:7035 | 굽는 중 |
0955:7020 | 굽기가 끝나 OS 가 부팅된 상태 |
굽기 도구는 0955: 로 시작하는 USB 장치를 전부 대상으로 모읍니다. 포트를 지정해 하나만 고르는 방법은 없습니다.
다른 Jetson(개발 키트 포함)이 같은 호스트에 꽂혀 있으면 그 보드까지 건드릴 수 있습니다.
lsusb -d 0955: # 구울 보드 외에 다른 줄이 없어야 합니다
아무것도 안 잡힐 때 — ① 케이블이 데이터용인지(충전 전용 케이블은 안 됩니다) ② 플래시용 USB-C 포트가 맞는지
③ 2-2 ①(sudo reboot forced-recovery)이 되는 상황인지 ④ 전원을 완전히 껐다가 2-2 를 다시 — 순서로 확인합니다.
3. 굽기
mfi_avs200-agx-orin 디렉터리 안에서 실행합니다.
sudo ./flash.sh # 1대
sudo ./flash.sh 4 # 4대 동시
flash.sh 는 ① 선검사(root 권한 · rootfs/ · NFS · RCM 대수 = 지정 대수) → ② 굽는 구성 표시 → ③ 굽기 → ④ 판정 순서로 진행합니다.
1대 기준 약 5분 걸립니다.
성공 판정
화면 마지막이 아래처럼 나와야 성공입니다.
[flash] ✅ 2 대 전부 'Flash is successful'
[flash] ✅ 완료 — 콜드 부팅으로 켠다.
NVIDIA 굽기 스크립트는 실패해도 0 을 돌려주는 경우가 있고, 여러 대를 구울 때는 보드별 결과가 화면이 아니라 로그 파일로만 남습니다.
flash.sh 가 보드별 로그(initrdlog/flash_*.log)의 Flash is successful 을 대수만큼 세어 판정합니다.
굽는 동안 진행은 읽기만 하세요.
tail -f initrdlog/flash_*.log
lsusb -d 0955:
ip link set … up/down/mtu 등은 굽기 데이터 경로를 끊습니다.
4. 굽고 난 뒤
- 콜드 부팅 — 전원을 완전히 내렸다 넣습니다. 웜 리셋(
reboot)은 리커버리로 돌아올 수 있습니다. - 첫 부팅에 약 1분간 자동 작업이 돕니다: rootfs 디스크 전체로 확장 · docker 설치.
- 확인합니다.
systemctl list-jobs # 비어 있으면 첫 부팅 작업 완료
. /etc/avs-release && echo "$AVS_RELEASE" # r36.4.4-20260916
df -h / # 디스크 전체 크기로 늘어났는지
avs-camera show # 지금 부팅된 카메라 구성
5. 카메라 바꾸기 — jetson-io
sudo /opt/nvidia/jetson-io/jetson-io.py
# Configure Jetson for compatible hardware → 카메라 선택
# Save and reboot to reconfigure pins
- 한 번에 하나만 고릅니다.
jetson-io는OVERLAYS줄을 선택한 것으로 덮어씁니다. jetson-io는/boot/extlinux/extlinux.conf에LABEL JetsonIO항목을 새로 만들고DEFAULT를 그쪽으로 바꿉니다. 출하 구성은LABEL primary에 남아 있으므로, 되돌리려면DEFAULT primary로 고치고 재부팅합니다.- 현재 부팅된 카메라는
avs-camera show로 확인합니다./etc/avs-release의CAMERA_IMAGE_DEFAULT는 굽는 시점의 기본값일 뿐 현재값이 아닙니다. - 카메라를 바꾼 뒤에는 보드 전원을 완전히 껐다 켭니다. 보조전원을 쓰는 RGBIR 카메라는 보드와 카메라 보조전원을 동시에 내려야 합니다.
- GMSL 카메라는 부팅할 때만 인식합니다. 카메라를 나중에 연결했다면 재부팅 후
ls /dev/video*로 확인하세요.
이 번들에 들어 있는 AVS200 카메라 오버레이 (jetson-io 메뉴 항목)
tegra234-avs200-camera-gmsl-4x2-3g-sg3s-isx031c-overlay.dtbo ← 기본값
tegra234-avs200-camera-gmsl-3x2-3g-sg3s-isx031c-overlay.dtbo
tegra234-avs200-camera-gmsl-3x2-3g-sg3s-isx031c-1x2-6g-atech-rgbir-overlay.dtbo
tegra234-avs200-camera-gmsl-3x2-6g-am03ss-isx031-overlay.dtbo
tegra234-avs200-camera-gmsl-3x2-6g-am03ss-isx031-1x2-6g-atech-rgbir-overlay.dtbo
tegra234-avs200-camera-gmsl-2x2-6g-am03ss-isx031-1x2-3g-sg3s-isx031c-1x2-6g-atech-rgbir-overlay.dtbo
tegra234-avs200-camera-gmsl-1x2-3g-sg3s-isx031c-1x2-6g-am03ss-isx031-1x2-3g-sg3s-isx031c-overlay.dtbo
tegra234-avs200-camera-gmsl-3x2-6g-acc02ong-overlay.dtbo
tegra234-avs200-camera-gmsl-3x2-6g-sg8-ox08bc-overlay.dtbo
tegra234-avs200-camera-gmsl-3x2-6g-sg8-isx028-overlay.dtbo
tegra234-avs200-camera-gmsl-3x2-6g-sg2-imx390-overlay.dtbo
tegra234-avs200-camera-gmsl-3x2-6g-astra-s36-overlay.dtbo
tegra234-avs200-camera-gmsl-3x2-6g-atech-stereo-overlay.dtbo
tegra234-avs200-camera-gmsl-4x2-tn-ar0234-overlay.dtbo
tegra234-avs200-camera-gmsl-4x2-tn-ar0234-fsync-pwm-overlay.dtbo
tegra234-avs200-camera-gmsl-1x2-tn-ar0234-fsync-overlay.dtbo
tegra234-avs200-camera-gmsl-1x2-6g-tn-ar0234-yuv-overlay.dtbo
tegra234-avs200-camera-gmsl-1x1-6g-sg8-ox08d-overlay.dtbo
tegra234-avs200-camera-gmsl-2x1-3g-ov2311-overlay.dtbo
tegra234-avs200-camera-gmsl-1x2-zedx-overlay.dtbo
tegra234-avs200-camera-eocam-overlay.dtbo
tegra234-avs200-camera-dummy-overlay.dtbo
tegra234-avs200-camera-dummy-mipi-overlay.dtbo
오버레이 이름의 3g/6g 는 GMSL 링크 속도입니다. 카메라 벤더가 다르면 링크 속도가 달라(예: Sensing ISX031 = 3G, Atech ISX031 = 6G) 잘못 고르면 전 채널이 인식되지 않습니다.
6. 문제 해결
| 증상 | 원인 | 조치 |
|---|---|---|
No devices to flash | RCM 에 연결되지 않았거나, 이전 실패로 보드가 0955:7035 에 머물러 있음 | 전원을 껐다 켜고 리커버리로 다시 진입 |
보드 읽기 직후 might be timeout in USB write | 오래 방치한 RCM 세션 | 전원을 껐다 켜고 리커버리로 다시 진입 |
chmod: cannot access '…/rootfs' | rootfs/ 가 없음 | 1-2 대로 다시 풀기 |
mount: /mnt/proc: mount point does not exist | rootfs/ 가 비어 있음 | 1-2 대로 다시 풀기 |
| 굽는 중 NFS 관련 오류로 멈춤 | 방화벽 또는 다른 NFS 공유와 충돌 | 1-3 의 방화벽·NFS 안내 확인 |
flash.sh 가 RCM 대수가 다르다며 중단 | 지정 대수와 실제 RCM 보드 수가 다름 | lsusb -d 0955:7223 줄 수와 맞추기 |
| 굽고 나서 켜지지 않음 | 웜 리셋으로 리커버리에 들어감 | 전원을 완전히 내렸다 넣기 |
| 부팅 실패가 반복됨 | 여러 원인 | 벽돌이 아닙니다 — 리커버리로 넣고 다시 구우면 복구됩니다 |