jdk100 with nano, xavier nx | flash (초기화)

mrzjo·2022년 8월 1일
0

jdk100을 사용할 때 초기상태로 되돌리고 싶다거나 실수로 filesystem을 날렸다거나 했을 때 부팅 가능한 상태로 만들어 주는 방법을 공유한다.

L4T archive

  • Jetson으로 뭔가를 개발할 때 중요한 버전이 세가지 있다.

    1. Linux for Tegra(L4T) : Linux kernel + device tree + root filesystem
    2. Jetpack : L4T + nvidia libraries(CUDA, cuDNN, TensorRT, ...)
    3. Linux kernel
  • Jetpack을 받아 모든 것을 다 설치할 수도 있지만 eMMC 버전을 사용하는 경우 Linux for Tegra를 이용하여 직접 flash를 할 수 있는 것이 좋다.

Release page

  • 위의 Jetson Linux Archive에서 원하는 버전을 클릭해서 release page로 들어가면 아래 페이지를 볼 수 있다.

  • Xavier, TX2 계열은 왼쪽, nano, tx1계열은 오른쪽이다.

  • 여기서 지금 필요한 주요 링크는 아래와 같다.

    1. BSP (Board Support Package)
    2. Sample Root Filesystem
  • Developer Guide는 뭐가 안된다 싶으면 여기부터 뒤져보는게 가장 빠르다.

install on host

host

  • ubuntu 18.04

BSP

  • 적당한 폴더에 bsp file을 받고 압축을 푼다.
  • release page의 BSP link를 오른쪽 클릭하여 링크주소를 복사한 뒤 터미널에서 wget으로 받는다.
  • 압축을 풀면 Linux_for_Tegra 폴더가 생성되어 있다.
    • nano
      wget https://developer.nvidia.com/embedded/l4t/r32_release_v7.1/t210/jetson-210_linux_r32.7.1_aarch64.tbz2
      tar xpf jetson-210_linux_r32.7.1_aarch64.tbz2
    • xavier nx, tx2 nx
      wget https://developer.nvidia.com/embedded/l4t/r32_release_v7.1/t186/jetson_linux_r32.7.1_aarch64.tbz2
      tar xpf jetson_linux_r32.7.1_aarch64.tbz2

rootfs

  • Linux_for_Tegra를 ${L4T}로 가정.
  • 위와 같이 사용할 모듈의 sample root filesystem 링크주소를 복사하여 원하는 폴더에서 받는다.
  • 이건 압축을 풀 때 주의해야 한다. 압축을 이대로 풀지 않으면 권한문제로 삽질을 하게 되니 푸는 위치와 순서 모두 유의한다.
    1. 적당한 경로에 root filesystem을 받는다.
    2. 위에서 풀어놓은 ${L4T}/rootfs로 들어간다.
      cd ${L4T}/rootfs
    3. 압축해제 (sudo 주의)
    • nano
      sudo tar xpf {아까 root filesystem 받아놓은 경로}/tegra_linux_sample-root-filesystem_r32.7.1_aarch64.tbz2
    • xavier nx, tx2 nx
      sudo tar xpf {아까 root filesystem 받아놓은 경로}/tegra_linux_sample-root-filesystem_r32.7.1_aarch64.tbz2

필수 바이너리 설치

cd ${L4T}
sudo ./apply_binaries.sh

사용자 등록

  • 이걸 안하면 jetson으로 최초 부팅할 때 사용자를 등록하는 과정을 거침.
cd ${L4T}/tools
#sudo ./l4t_create_default_user.sh -u {username} -p {password} -n {hostname} -a --accept-license
sudo ./l4t_create_default_user.sh -u nvidia -p nvidia -n jdk100 -a --accept-license

device tree 준비

  • jdk100 carrier board를 사용하는 경우 아래 링크의 파일이 필요하며 다른 캐리어보드를 사용시 그에 맞는 dtb file이 필요하다.

    • nano
      jdk100.dtb

         cd ${L4T}
         wget -O kernel/dtb/jdk100.dtb https://gitlab.com/telelian_public/l4t/jdk100/uploads/b74889c252296faaf7e38a2884690512/jdk100.dtb
    • xavier nx

      • xavier nx의 경우 flash 하기 전에 jdk100용 cfg 파일도 제 위치에 있어야 한다.

      jdk100-xaviernx.dtb
      tegra19x-mb1-pinmux-p3668-a01.cfg

       cd ${L4T}
        cp bootloader/t186ref/BCT/tegra19x-mb1-pinmux-p3668-a01.cfg bootloader/t186ref/BCT/tegra19x-mb1-pinmux-p3668-a01.cfg.org 
        wget -O bootloader/t186ref/BCT/tegra19x-mb1-pinmux-p3668-a01.cfg https://gitlab.com/telelian_public/l4t/jdk100-xaviernx/uploads/d1741c3bcfddc723fc8ceff6d67da0b9/tegra19x-mb1-pinmux-p3668-a01.cfg
        wget -O kernel/dtb/jdk100-xaviernx.dtb https://gitlab.com/telelian_public/l4t/jdk100-xaviernx/uploads/a088620adbffdce432e77f98a5f01f2c/jdk100-xaviernx.dtb

flash

recovery mode

  1. jdk의 recovery USB port를 host PC에 연결한다.
  2. 전원 연결 후 리커버리 버튼을 누른 상태로 리셋 버튼을 눌렀다 떼고
    2~3초 후에 리커버리 버튼에서 손을 뗀다.
  3. lsusb로 모드에 제대로 진입했나 확인한다.
  • nano

    • 제대로 설정됐다면 ID 0955:7f21 보인다.
    • ID가 안 보이면 2번을 다시 수행한다.
    lsusb
    
    Bus 001 Device 010: ID 0955:7f21 NVIDIA Corp. APX
  • xavier nx

    • 제대로 설정됐다면 ID 0955:7e19 보인다.
    • ID가 안 보이면 2번을 다시 수행한다.
    lsusb
    
    Bus 001 Device 010: ID 0955:7e19 NVIDIA Corp. APX

flash to board

  • nano

    • rootfs 전체를 다운로드
      cd ${L4T}
      sudo ./flash.sh -d kernel/dtb/jdk100.dtb jetson-nano-emmc mmcblk0p1
    • dtb(device tree)만 다운로드
      cd ${L4T}
      sudo ./flash.sh -k DTB -d kernel/dtb/jdk100.dtb jetson-nano-emmc mmcblk0p1
  • xavier nx

    • rootfs 전체를 다운로드
      cd ${L4T}
      sudo ./flash.sh -d kernel/dtb/jdk100-xaviernx.dtb jetson-xavier-nx-devkit-emmc mmcblk0p1
    • dtb(device tree)만 다운로드
      cd ${L4T}
      sudo ./flash.sh -k kernel-dtb -d kernel/dtb/jdk100-xaviernx.dtb jetson-xavier-nx-devkit-emmc mmcblk0p1
profile
telelian

0개의 댓글