Skip to content

Installing gcc and tensorflow lite on Tizen_odroid xu4

taekyu Yun edited this page May 6, 2018 · 1 revision
  • boot sd카드 만드는 과정은 이전이랑 거의 같다. 대신 rootfs의 공간이 rootfs.img의 크기에 딱 맞춰지는 문제가 있기 때문에 img파일의 크기를 수정해 주고 다시 fusing을 진행해야한다.
sudo dd if=/dev/zero of =/dev/sdx2 bs=1M count=3072
# sdx2 파티션 포멧
sudo dd if=/dev/zero of=rootfs.img count=0 bs=1M seek=3072
e2fsck -f rootfs.img
resize2fs rootfs.img
# rootfs.img 파일 리사이징
sudo dd if=./rootfs.img of=/dev/sdx2 bs=1M count=3072
# rootfs.img 를 sdx2에 fusing
# ubuntu 상에서 properties를 확인해서 3기가로 인식이 되는지 확인
  • 수정한 sd카드를 이용해서 odroid를 부팅시키고 root/tizen으로 로그인한다.
  • tizen의 초기 상태는 루트 디렉토리가 read only로 설정되어 있기때문에 다시 마운트를 해줘야함
mount -o rw,remount /
# rw,remount 옵션으로 루트폴더를 mount해준다.
  • odroid-xu4(armv7l)에 맞는 rpm파일을 구해야 하는데 일반적인 구글링으로 나오는 rpm들은 redhat이나 centOS용이고 target 프로세서도 i386, arm64 이다. 더군다나 패키지 관리 툴인 apt와 yum은 당연히 쓸 수 없다. 따라서 개발에 필요한 vim, gcc, gdb등을 설치해주기 위해서 download.tizen.org에서 armv7l 버전으로 컴파일된 rpm 파일을 찾아야함
  • rpm 파일을 odroid로 옮겨주기 위해서 usb를 사용한다. ubuntu와 tizen 모두 linux 커널이기때문에 usb를 ext4로 포멧해주는 것이 좋다. tizen에 다른 형식으로 포멧 된 usb를 꽂았을 때 계속 umount가 제대로 되지 않았다는 에러메세지가 출력되는 경우가 있기 때문
mount /dev/sda1 ./usb
# 현제 디렉토리에 usb 폴더를 만들어주고 그곳에 usb를 mount 해주면
# usb에 담긴 파일을 tizen에서도 읽어 올 수 있다.
  • 사용한 rpm파일들 github에 모두 업로드 해놓음
  1. vim 설치하기, https://download.tizen.org/releases/2.2/latest/repos/tizen-main/armv7l/packages/armv7l/ 여기서 vim 으로 검색해서 나오는 파일 중에 enhanced를 제외한 세 가지가 필요하다. 찾아보면 인터넷에서는 네 가지를 전부 설치해야 한다고 하는데 enhanced는 dependency 때문에 설치가 안되고 세가지만으로 vi 사용가능
rpm -Uvh vim-*
# -Uvh 는 해당 패키지가 존재하면 업데이트를 하고 없는경우 인스톨하는 옵션
# 세 파일 중에 dependency에 걸리지 않는 것 부터 설치를 해주어도 되고 한번에 해줘도 됨
  1. gcc설치 http://download.tizen.org/releases/2.4/2.4-base/tizen-2.4-base_20151027.1/repos/standard/packages/armv7l/ odroid에 올라간 타이젠에 일단 glibc 2.20이 설치되어 있기 때문에 해당 glibc를 포함하고 있는 tizen ropo에서 gcc관련 dependncy 파일들을 다운로드 해주었다. 일단 gcc 부터 설치를 해서 어떤 파일이 필요한지 체크를 해준다.
$  rpm -Uvh gcc-4.9.2-2015.02.1.11.armv7l.rpm         
error: Failed dependencies:                                                     
        binutils >= 2.19.51.0.14 is needed by gcc-4.9.2-2015.02.1.11.armv7l     
        cpp = 4.9.2-2015.02.1.11 is needed by gcc-4.9.2-2015.02.1.11.armv7l     
        glibc-devel is needed by gcc-4.9.2-2015.02.1.11.armv7l                  
        libasan >= 4.9.2-2015.02.1.11 is needed by gcc-4.9.2-2015.02.1.11.armv7l
        libasan.so.1 is needed by gcc-4.9.2-2015.02.1.11.armv7l                 
        libatomic >= 4.9.2-2015.02.1.11 is needed by gcc-4.9.2-2015.02.1.11.armv7l 
        libatomic.so.1 is needed by gcc-4.9.2-2015.02.1.11.armv7l               
        libgcc >= 4.9.2-2015.02.1.11 is needed by gcc-4.9.2-2015.02.1.11.armv7l 
        libgomp >= 4.9.2-2015.02.1.11 is needed by gcc-4.9.2-2015.02.1.11.armv7l
        libgomp.so.1 is needed by gcc-4.9.2-2015.02.1.11.armv7l                 
        libitm >= 4.9.2-2015.02.1.11 is needed by gcc-4.9.2-2015.02.1.11.armv7l 
        libitm.so.1 is needed by gcc-4.9.2-2015.02.1.11.armv7l                  
        libubsan >= 4.9.2-2015.02.1.11 is needed by gcc-4.9.2-2015.02.1.11.armv7l                                                                               
        libubsan.so.0 is needed by gcc-4.9.2-2015.02.1.11.armv7l
  • 이어서 아래 순서대로 설치를 해주자
$ rpm -Uvh glibc-headers-2.20-2014.11.1.10.armv7l.rpm glibc-2.20-2014.11.1.10.armv7l.rpm --nodeps --force

# 기존의 glibc를 우리가 설치하려는 gcc에서 못 읽기 때문에 새로 설치를 해줘야 하는데
# eglib을 추가로 요구하는 데다가 conflict 때문에 --nodeps --force 옵션으로 glibc를 새로 설치

$ rpm -Uvh glibc-devel-2.20-2014.11.1.10.armv7l.rpm
$ rpm -Uvh libasan-4.9.2-2015.02.1.11.armv7l.rpm
$ rpm -Uvh libatomic-4.9.2-2015.02.1.11.armv7l.rpm
$ rpm -Uvh libgcc-4.9.2-2015.02.1.11.armv7l.rpm
$ rpm -Uvh libgomp-4.9.2-2015.02.1.11.armv7l.rpm
$ rpm -Uvh libitm-4.9.2-2015.02.1.11.armv7l.rpm
$ rpm -Uvh libubsan-4.9.2-2015.02.1.11.armv7l.rpm
$ rpm -Uvh info-4.13a-1.6.armv7l.rpm
$ rpm -Uvh binutils-2.25.0-2015.01.1.8.armv7l.rpm
$ rpm -Uvh gcc-4.9.2-2015.02.1.11.armv7l.rpm

# gcc 설치 완료

# g++을 사용하기 위해 필요한 라이브러리와 test.cpp를 컴파일하기 위해 필요한 해더파일 설치

$ rpm -Uvh libstdc++-4.9.2-2015.02.1.11.armv7l.rpm
$ rpm -Uvh libstdc++-devel-4.9.2-2015.02.1.11.armv7l.rpm
$ rpm -Uvh gcc-c++-4.9.2-2015.02.1.11.armv7l.rpm
$ rpm -Uvh kernel-headers-3.4.91-1.1.armv7l.rpm
  1. gbs를 통해서 빌드했던 tensorflow-lite-devel-dev_preview-1.armv7l.rpm 설치

  2. 필요한 패키지 설치 끝. g++을 이용해서 test.cpp를 컴파일 해주면 된다.

$ rpm -qa | grep tensor

# 텐서플로 설치 확인

$ rpm -qs 텐서플로 패키지명

# 해당패키지가 설치한 파일들을 살펴보면 libtensorflow-lite.a 라는 파일을 찾을 수 있다.
# shared object파일인 .so 파일을 통해서 linking을 해줘야 하는데 gbs로 빌드한 tensorflow-lite 
# 패키지가 .a파일을 결과로 내놓아서 g++에 알려줘야하므로 아래 방법으로 컴파일을 해준다.

$ g++ -std=c++11 test.cpp -ltensorflow-lite -ldl -pthread

컴파일 끝!

Clone this wiki locally