5/27/2019

JetPack 4.2 설치

1. JetPack 4.2 설치 

기존에 사용하던 JetPack3.3 에서 JetPack 4.2으로 변경을 하기위해서 아래와 같이 Download한 후 설치를 진행한다.

JetPack 4.2 Download
  https://developer.nvidia.com/embedded/jetpack

JetPack 설치방법
  https://docs.nvidia.com/sdk-manager/download-run-sdkm/index.html
  https://docs.nvidia.com/jetson/jetpack/install-jetpack/index.html#how-to-install-jetpack


설치방법은 이전보다 더 간단하며, 설치하기도 너무 쉽다.
우선 Host PC에서 SDKManager 를 설치하고 실행하자

  • SDKManager 설치 
$ cd ~/Downloads   // 설치장소는 맘대로 
$ sudo dpck -i sdkmanager_0.9.11-3405_amd64.deb 
or 
$ sudo apt install ./sdkmanager-[version].[build#].deb  

$ sudo dpkg -l | grep sdkmanager   // 설치확인 
ii  sdkmanager                                      0.9.12-4180                                  amd64        NVIDIA SDK Manager


1.1  SDK Manager  실행 

처음 한번 실행된 장소 기준으로 Pakcage를 Download를 하며, 이 정보를 매번 기억을 하고 있다.
그러므로, 설치 중에 Package 설치 장소 및 NVIDIA SDK 장소는 확인하자.
SDKManager도 JetPack 3.3 처럼 Jetson TX2의 microUSB 와 HostPC와 연결된 상태에서 진행해야한다.

  • SDKManager 실행 

$ sdkmanager  // GUI 설치 진행 

  1. Developer Zone — developer.nvidia.com (site에서 가입)
  2. NVOnline — partners.nvidia.com (3rt Party를 위함)
  3. Offline — to install SDKs that were previously downloaded, .. see Offline Install

  • Offiline 진행시 Manual
  https://docs.nvidia.com/sdk-manager/offline-install/index.html


Developer Zone 설치를 진행하면, 아래와 같이 시작을 하며, 데이타 정보를 Google Analictics 로 수집을 하고 이를 다 동의하고 설치를 진행한다.
상위사이트에서 먼저 가입을 하고 진행을 해야한다.


본인의 Target Hardware 에 맞게 설정하고 설치 진행
  1. P2888 ( Jetson AGX Xavier)
  2. P3310 ( Jetson TX2)
  3. P3489 ( Jetson TX2i)
  4. P3448 ( Jetson Nano)


JETPACK 4.2의 Host에 설치되는 항목들을 살펴보면,
  1. NVIDIA Nsight Graphics:  아직 사용을 못해봄 
  2. NVIDIA Nsight Systems:  이전에는 C++만 지원을해서 빌드만 하고 Target 후 Debug까지 했으나, 현재 거의 사용 안함.   
일단 상위 Host Developer Tools이 Upgrade가 많이 되었으며, Graphics 의 기능도 궁금하다.



  • SDK Manager 설치환경
참고로 STEP2에서 라이센스 동의부분에
Download & INSTALL OPTIONS 부분으로 설치위치 변경가능


Target 인 Jetson에 설치될 항목들을 살펴보자.
Jetson OS 와 각 Jetson SDK 항목들이 존재한다.


Target은 우선 CuDA Upgrade 되었으며, TensorRT는 5.0 부터 Python이 지원가능하다고 한다.
나머지는 눈으로 직접 다 확인을 자세히 하자.


  • STEP 3

Jetson TX2 선택 후 Flash할 방법 선택
  1. AutoSetup : USB CDC 통신기반으로 Upgrade진행  ( 처음실패함)
  2. ManualSetup: Force Recovery Mode 로 진입하여 진행 

  • Force Revoery Mode 진입방법  
  1. Disconnect/Connect AC Power 
  2. Press Power Button 
  3. Press Revoery Button and Reset Button
  4. Release Reset Button  after 2 secs 
  5. Release Recovery Button 

RECOVERY과 REST BUTTON을 2초 간 누르고, RESET을 먼저 버튼에서 손을 놓는다.

  • AutoSetup
USB CDC로 SSH로 접속하여 자동으로 잡아서 진행을 하며,자동으로 Recovery Mode로 가면서  Writing을 하는 것 같다.
나의 경우는 처음에 실패를 해서, Manual Setup으로 진행


  • Manual Setup 
Force Revoery Mode 진입 Host에서 lsusb를 하면 Nvidia가 나오며 진행




둘다 진행을 하면 아래와 같이 진행됨
OS가 Flash가 되고, USB Mass Storage가 자동 Mount되고 나서 OS는 완전히 Flash 되고 Reboot


상위를 진행을 했다면, Jetson OS 부분은 진행이 되고, Ubuntu는 동작이 된다.
하지만, Jetson SDK Component를 추가로 더 설치를 진행해야한다.

1.2 Jetson SDK Component 설치 

Jetson에서 Ubuntu가 동작이 되면서 초기화를 진행을 해야 아래의 메세지를 진행이 가능하다.

  • Jetson SDK Component 를 설치 Message ( USB 문제사항)
아래의 "Install SDK components on your Jetson TX2"  메세지를 확인
아래의 메세지가 나오면 USB의 SSH가 동작되지 않으며, USB CDC가 잡히질 않고 진행이 되지 않는다. 이유는 Ubuntu의 기본 시스템을 설정하지 않아, 이를 설정해야 한다.

  • Jetson TX2의 Ubuntu 설정 
  1. Jetson TX2를 HDMI로 연결 (만약 화면이 잡힐지 않는다면, 재연결 및 마우스움직임) 
  2. 라이센스를 동의
  3. 언어/키보드/지역설정
  4. System Configuration 설정 ( Username 과 Password 설정 및 Jetson Name )
  5. USB 동작가능 ( Host에서 Mass Stroage 잡히는 것을 확인 )

  • HOST에서 USB CDC 확인 (옵션)
$ lsusb -t  // 상위 설정 후 확인 
.......
   |__ Port 6: Dev 40, If 4, Class=Mass Storage, Driver=usb-storage, 480M
    |__ Port 6: Dev 40, If 2, Class=Communications, Driver=cdc_acm, 480M
    |__ Port 6: Dev 40, If 0, Class=Communications, Driver=rndis_host, 480M
    |__ Port 6: Dev 40, If 5, Class=Communications, Driver=cdc_ether, 480M
    |__ Port 6: Dev 40, If 3, Class=CDC Data, Driver=cdc_acm, 480M
    |__ Port 6: Dev 40, If 1, Class=CDC Data, Driver=rndis_host, 480M
    |__ Port 6: Dev 40, If 6, Class=CDC Data, Driver=cdc_ether, 480M
    |__ Port 9: Dev 3, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 2: Dev 26, If 0, Class=Vendor Specific Class, Driver=usbfs, 12M
        |__ Port 3: Dev 32, If 0, Class=Mass Storage, Driver=usb-storage, 480M
.....
$ ifconfig

enp0s20f0u6 Link encap:Ethernet  HWaddr ce:a6:cc:57:fb:cf  
          inet addr:192.168.55.100  Bcast:192.168.55.255  Mask:255.255.255.0
          inet6 addr: fe80::2082:92ec:3a25:daf2/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:294 errors:0 dropped:0 overruns:0 frame:0
          TX packets:233 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:48429 (48.4 KB)  TX bytes:54113 (54.1 KB)
..............






  • Target에 Jetson SDK Components 설치진행 

상위에서 Jetson의 설정이 끝났다면, 상위에서 SSH  ID/PW로 입력후  설치진행  
나의 경우는 ID/PW (jetsontx2/nvidia) 설정했지만, 다시 설치해서  nvidia/nvidia로 다 변경을 했다. (다른 소스와 호환성을 위해서 ) 


  • Jetson SDK Components 설치사항들 
  1. CUDA (CUDA Toolkit 10.0)
  2. AI  (cuDNN, TensorRT)
  3. Computer Vision (OpenCV , VisionWorks)
  4. Multimedia (Multimedia API)

이 부분이 설치가 되어야 실제 Jetson SDK Components가 설치가 되며,  추후 Jetson에서 Sample 예제도 확인가능하다.


상당한 시간이 걸리며, 설치후 아래의 Completed Successfully 확인



2. SDK Manager 로 설치후 확인 

상위 SDK Manager 설치환경을 확인하고, 각각의 디렉토리를 확인하자.

  • NVIDIA SDK 설치된 위치 

$ tree -L 2 ~/nvidia/nvidia_sdk/

/home/jhlee/nvidia/nvidia_sdk/     //Jetson TX2 OS 관련 BSP 
├── JetPack_4.2_Linux
│   └── documentations                 // Jetpack 4.2 문서 확인하자 
└── JetPack_4.2_Linux_P3310
    └── Linux_for_Tegra         // flash command 


  • SDKManger가 Download 한 Package들 
 $ tree -L 2 ~/Downloads/
/home/jhlee/Downloads/         // sdkmanager 설치 진행 한 곳  
├── nvidia
│   └── sdkm_downloads
└── sdkmanager_0.9.11-3405_amd64.deb

$ ls ~/Downloads/nvidia/sdkm_downloads/            // 설치된 Package 사항확인, Jetson SDK component 
Jetson_Linux_R32.1.0_aarch64.tbz2
NVIDIA_Nsight_Graphics_2018.7.L4T.25921359.deb
NsightSystems-linux-public-2019.3.2.12-510a942.deb
Tegra_Linux_Sample-Root-Filesystem_R32.1.0_aarch64.tbz2
Tegra_Multimedia_API_R32.1.0_aarch64.tbz2
cuda-repo-cross-aarch64-10-0-local-10.0.166_1.0-1_all.deb
cuda-repo-l4t-10-0-local-10.0.166_1.0-1_arm64.deb
cuda-repo-ubuntu1604-10-0-local-10.0.166-410.62_1.0-1_amd64.deb
devtools_docs.zip
graphsurgeon-tf_5.0.6-1+cuda10.0_arm64.deb
libcudnn7-dev_7.3.1.28-1+cuda10.0_arm64.deb
libcudnn7-doc_7.3.1.28-1+cuda10.0_arm64.deb
libcudnn7_7.3.1.28-1+cuda10.0_arm64.deb
libnvinfer-dev_5.0.6-1+cuda10.0_arm64.deb
libnvinfer-samples_5.0.6-1+cuda10.0_all.deb
libnvinfer5_5.0.6-1+cuda10.0_arm64.deb
libopencv-dev_3.3.1-2-g31ccdfe11_arm64.deb
libopencv-python_3.3.1-2-g31ccdfe11_arm64.deb
libopencv-samples_3.3.1-2-g31ccdfe11_arm64.deb
libopencv_3.3.1-2-g31ccdfe11_arm64.deb
libvisionworks-repo_1.6.0.500n_arm64.deb
libvisionworks-sfm-repo_0.90.4_arm64.deb
libvisionworks-tracking-repo_0.88.2_arm64.deb
python-libnvinfer-dev_5.0.6-1+cuda10.0_arm64.deb
python-libnvinfer_5.0.6-1+cuda10.0_arm64.deb
python3-libnvinfer-dev_5.0.6-1+cuda10.0_arm64.deb
python3-libnvinfer_5.0.6-1+cuda10.0_arm64.deb
sdkmanager_0.9.12-4180_amd64.deb
sdkml3_jetpack_l4t_42.json
tensorrt_5.0.6.3-1+cuda10.0_arm64.deb
uff-converter-tf_5.0.6-1+cuda10.0_arm64.deb

상위에서 arm64기반의 package를 중심으로 확인
  https://developer.nvidia.com/embedded/downloads

2.1  Host 와 Jetson TX2 의 설정 및 설치 

  • Host에서 Jetson TX2로 SSH 연결 
$ ssh -X jetsontx2@192.168.55.1  // SSH로 편하게 접속 

아래 에러 발생시, 
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

$ ssh-keygen -R 192.168.55.1  // Key 재발행 후 재접속 


Ubuntu Package 설치전에, LAN을 연결한 후 Internet 연결 확인

  • Ubuntu 기본 Package Update & Upgrade 
jetsontx2@jetsontx2-desktop:~$ sudo apt update
jetsontx2@jetsontx2-desktop:~$ sudo apt upgrade 

시간이 무지 많이 오래 걸리므로, 다음에는 반드시 Backup Image을 만들고 작업을 해야겠다.

3. 다른 방법으로 Jetson TX2 Flash 방법 

Jetpack3.3 처럼 flash.sh command가 존재하며, 사실 sdkmanager도 내부적으로 동일하게 사용을 한다.

3.1 SDKManager Command  사용 

sdkmanager 사용법
  https://docs.nvidia.com/sdk-manager/sdkm-command-line-install/index.html

Jetson TX2 
$ ./sdkmanager --cli install --user john.doe@example.com --logintype devzone
--product Jetson --version 4.2 --targetos Linux --host 
--target P2888 --flash all  

상위방법은 별도로 시도를 해보지를 않았고,  무슨 장점이 있는 지 모르겠다.
일단 만약 시도를 한다면, 상위  target은 p3310으로 변경하고, 본인의 email을 넣어야 할 것 같다.
세부내용은 sdkmanager --help를 보자.

3.2  Flash Command 사용 

이전 Jetpack 3.3 과 동일하게 지원이 가능하며, 현재 OS와 기본 Package 설치되는 것으로 알고 있다. (Jetson SDK Components는 별도로 설치해야함)



  • Force Recovery Mode



  • Host PC에서 USB 연결확인 
$ lsusb  // Host 에서 USB 로 Jetson TX2 연결 후 Connection 확인
.....
Bus 001 Device 036: ID 0955:7020 NVidia Corp. 

만약 상위와 같이 잡히지 않는다면,  Force Recovery Mode로 진입 후 다시 확인

  • Flash 방법 ( Host 와 Jetson 과 USB 연결)
$ cd ~/nvidia/nvidia_sdk/JetPack_4.2_Linux_P3310/Linux_for_Tegra   // for Jetson TX2 
$ sudo ./flash.sh jetson-tx2 mmcblk0p1 // For Jetson TX2

상위대로 한다면, 기본설치만되고, NVIDIA에서 제공해주는 Jetson SDK components는 설치가 되지 않으므로 주의하자.

Jetson SDK components는 상위 nvidia/sdkm_downloads/  에 별도로 package로 존재

  • 기타 다른 보드 
- sudo ./flash.sh jetson-tx2i mmcblk0p1 // For Jetson TX2i
- sudo ./flash.sh jetson-xavier mmcblk0p1 // For Jetson Xavier
- sudo ./flash.sh jetson-nano-qspi-sd mmcblk0p1 // For Jetson Nano

상위로 진행 한 후 Jetson과 HDMI로 모니터로 연결하고, 관련 기본 설정을 해주자.


  • APP Partition Backup 후 이를 적용
 $ ls bootloader/system.img*   // 존재하는 system.img 확인 
bootloader/system.img  bootloader/system.img.raw      //  ( system.img 4G, system.img.raw 28G)

$ lsusb // 반드시 Jetson 연결 확인 후, Recovery Mode 변경 
Bus 001 Device 040: ID 0955:7020 NVidia Corp.

$ sudo ./flash.sh -r -k APP -G clone.img jetson-tx2 mmcblk0p1    // Jetson TX2의 APP Partition Image를 Backup  (clone.img) ( Filesystem)  

//다음 에러가 발생하면, Recovery Mode 변경 
[sudo] password for jhlee: 
###############################################################################
# L4T BSP Information:
# R32 (release), REVISION: 1.0, GCID: 14531094, BOARD: t186ref, EABI: aarch64, 
# DATE: Wed Mar 13 07:41:08 UTC 2019
###############################################################################
Error: probing the target board failed.
       Make sure the target board is connected through 
       USB port and is in recovery mode.

//제대로 실행된 경우 시간이 많이 걸림
###############################################################################
# L4T BSP Information:
# R32 (release), REVISION: 1.0, GCID: 14531094, BOARD: t186ref, EABI: aarch64, 
# DATE: Wed Mar 13 07:41:08 UTC 2019
###############################################################################
# Target Board Information:
# Name: jetson-tx2, Board Family: t186ref, SoC: Tegra 186, 
# OpMode: production, Boot Authentication: NS, 
###############################################################################
./tegraflash.py --chip 0x18 --applet "/home/jhlee/nvidia/nvidia_sdk/JetPack_4.2_Linux_P3310/Linux_for_Tegra/bootloader/mb1_recovery_prod.bin" --skipuid --cmd "dump eeprom boardinfo cvm.bin" 
Welcome to Tegra Flash
version 1.0.0
Type ? or help for help and q or quit to exit
Use ! to execute system commands
............. 

$ ls  // 새로 생성된 clone.img 확인 
clone.img  clone.img.raw

$ mkdir jhleeback

$ cp bootloader/system.img* jhleeback/                                      // 반드시 bootloader/system.img bakcup  

$ sudo cp clone.img.raw bootloader/system.img             //  bootloader/system.img 교체 

$ sudo ./flash.sh -r -k APP jetson-tx2 mmcblk0p1             // 적용된 이미지로 Flash



  • Target Filesystem 정보 확인
이전과 동일하게, Host PC에서 mount하여, Target의 Filesystem 정보확인이 가능하다.

$ cd jhleeback

$ mkdir test  //mount 디렉토리 

$ ls
system.img  system.img.raw  test

$ sudo mount -t ext4 -o loop ./system.img.raw ./test 

$ ls test/    // Target Filesystem 확인 
README.txt  bin  boot  dev  etc  home  lib  lost+found  media  mnt  opt  proc  root  run  sbin  snap  srv  sys  tmp  usr  var

$ ls ./test/usr/local/       // CUDA 설치확인, 미설치 
bin  etc  games  include  lib  man  sbin  share  src

$ ls ./test/usr/src/         // tensorrt 설치확인 , 미설치 (/usr/src/tensorrt/bin/   , /usr/src/tensorrt/samples/)
linux-headers-4.9.140-tegra-linux_x86_64  linux-headers-4.9.140-tegra-ubuntu18.04_aarch64  nvidia

$ sudo umount test   // 정보확인 후 반드시 unmount 

  • Jetson TX2에서 Partition 확인 
$ sudo gdisk -l /dev/mmcblk0
[sudo] password for nvidia: 
GPT fdisk (gdisk) version 1.0.3

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/mmcblk0: 61071360 sectors, 29.1 GiB
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 00000000-0000-0000-0000-000000000000
Partition table holds up to 31 entries
Main partition table begins at sector 2 and ends at sector 9
First usable sector is 4104, last usable sector is 61071327
Partitions will be aligned on 8-sector boundaries
Total free space is 1 sectors (512 bytes)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            4104        58724359   28.0 GiB    0700  APP              // UBUNTU FileSYSTEM 
   2        58724360        58732551   4.0 MiB     0700  mts-bootpack
   3        58732552        58740743   4.0 MiB     0700  mts-bootpack_b
   4        58740744        58741767   512.0 KiB   0700  cpu-bootloader
   5        58741768        58742791   512.0 KiB   0700  cpu-bootloader_b
   6        58742792        58743815   512.0 KiB   0700  bootloader-dtb
   7        58743816        58744839   512.0 KiB   0700  bootloader-dtb_b
   8        58744840        58750983   3.0 MiB     0700  secure-os
   9        58750984        58757127   3.0 MiB     0700  secure-os_b
  10        58757128        58761223   2.0 MiB     0700  eks
  11        58761224        58769415   4.0 MiB     0700  adsp-fw
  12        58769416        58777607   4.0 MiB     0700  adsp-fw_b
  13        58777608        58778815   604.0 KiB   0700  bpmp-fw
  14        58778816        58780023   604.0 KiB   0700  bpmp-fw_b
  15        58780024        58781023   500.0 KiB   0700  bpmp-fw-dtb
  16        58781024        58782023   500.0 KiB   0700  bpmp-fw-dtb_b
  17        58782024        58786119   2.0 MiB     0700  sce-fw
  18        58786120        58790215   2.0 MiB     0700  sce-fw_b
  19        58790216        58802503   6.0 MiB     0700  sc7
  20        58802504        58814791   6.0 MiB     0700  sc7_b
  21        58814792        58818887   2.0 MiB     0700  FBNAME
  22        58818888        59081031   128.0 MiB   0700  BMP
  23        59081032        59343175   128.0 MiB   0700  BMP_b
  24        59343176        59408711   32.0 MiB    0700  SOS
  25        59408712        59474247   32.0 MiB    0700  SOS_b
  26        59474248        59605319   64.0 MiB    0700  kernel
  27        59605320        59736391   64.0 MiB    0700  kernel_b
  28        59736392        59737415   512.0 KiB   0700  kernel-dtb
  29        59737416        59738439   512.0 KiB   0700  kernel-dtb_b
  30        59738440        60262727   256.0 MiB   0700  CAC
  31        60262728        61071326   394.8 MiB   0700  UDA


최근에 위키에 생김
  https://elinux.org/Jetson/TX2_Cloning

  • 세부사항 아래참고 및 Jetpack 3.3 부분참고
  https://devtalk.nvidia.com/default/topic/1050477/jetson-tx2/jetpack4-2-flashing-issues-and-how-to-resolve/
  https://ahyuo79.blogspot.com/2019/01/jetson-tx2.html