Overview

WMware Workstation Pro를 이용하여 우분투를 인스톨하였다.

하지만, Host PC인 Window10에서 사용 하던 파일을 VMware의 우분투로 파일로 사용하려니 매번 USB를 사용하는 것도 어려운 일이었다.

그래서 구글링을 하다 보니 파일 공유로 쉽게 이 문제를 해결할 수 있다는 것을 뒤늦게 발견했다.

그 방법은 다음과 같다.

 

Host PC에서 공유 폴더 설정

먼저 Host PC인 Window10에서 공유할 폴더를 하나 만들고 공유 설정을 진행하면 된다.

   1. 공유할 폴더를 선택 후 오른쪽 클릭 그리고 속성으로 진입

   3. 공유 탭으로 이동 후 고급 버튼을 클릭

   6. 선택한 폴더 공유 체크 박스를 체크 하고 권한 버튼을 클릭

   7. 사용권한을 모든권한 허용으로 체크 한 후 적용 버튼과 확인 버튼을 차례로 클릭한다.

 

VMware에서 공유폴더 설정

우분투 구동 전 설정

  1. VMware에서 우분투를 구동하기 전에 메뉴바에서 VM을 선택하고, 그 다음 Settings를 선택한다. 

  2. Options 탭을 선택 후 Shared Folders를 선택 그리고 나서 Folder sharing을 Always enabled로 선택한다.

  3. Floders에서 Add를 누르면 Add shared Folder Wizard가 뜬다. Wizard 창에서 Next를 누른다.

  5. Host path에서 Browser를 눌러서 Host PC 공유 폴더 설정에서 작업한 폴더 경로를 여기서 동일하게 선택하면 된다. Name은 원하는 이름으로 설정하면 된다. 그리고 Next를 누른다.

  6. Enable this share의 체크박스에 체크를 하고 Finish 버튼을 눌러 종료 한다.

  7. OK 버튼을 눌러 설정을 모두 마무리 한다.

우분투 구동 후 설정

  1. 로그인 하기 전에, 우분투를 구동 시킨 탭에서 오른쪽 클릭 후 Reinstall VMware Tools를 선택한다.

  2. 화면 하단에 로그인을 하고 virtual CD drive를 Mount하고 Terminal을 띄워서 tar로 압축 파일을 풀은 후 vmware-install.pl 파일을 실행하라는 문구가 화면 하단에 뜬다. 이것을 확인하고 로그인을 한다.

  3. 로그인 후 파일 탐색기를 열면 CD drive에 VMware Tools가 Mount가 되어 있고, 그곳에 VMwareTools-10.3.10-13959562.tar.gz이 존재하는 것을 확인 할 수 있다. 바로 이 tar.gz 파일을 압축을 풀어야 한다.

4. Terminal을 실행하여 다음과 같은 경로를 타고 tar.gz 파일이 있는 곳 까지 이동을 하여, 압축을 해제한다.

mskim@ubuntu:~$ cd ..
mskim@ubuntu:/home$ cd ..
mskim@ubuntu:/$ cd media
mskim@ubuntu:/media$ ls
floppy  floppy0  mskim
mskim@ubuntu:/media$ cd mskim
mskim@ubuntu:/media/mskim$ ls
VMware Tools
mskim@ubuntu:/media/mskim$ cd VMware\ Tools
mskim@ubuntu:/media/mskim/VMware Tools$ ls
manifest.txt     VMwareTools-10.3.10-13959562.tar.gz  vmware-tools-upgrader-64
run_upgrader.sh  vmware-tools-upgrader-32
mskim@ubuntu:/media/mskim/VMware Tools$ cp VMwareTools-10.3.10-13959562.tar.gz ~/.
mskim@ubuntu:/media/mskim/VMware Tools$ cd ~
mskim@ubuntu:~$ ls
Desktop
Documents
Downloads
examples.desktop
gcc-linaro-6.5.0-2018.12-x86_64_arm-linux-gnueabihf
gcc-linaro-6.5.0-2018.12-x86_64_arm-linux-gnueabihf.tar.xz
Music
Pictures
Public
Templates
u-boot
Videos
VMwareTools-10.3.10-13959562.tar.gz
mskim@ubuntu:~$ tar xzf VMwareTools-10.3.10-13959562.tar.gz
mskim@ubuntu:~$ ls
Desktop
Documents
Downloads
examples.desktop
gcc-linaro-6.5.0-2018.12-x86_64_arm-linux-gnueabihf
gcc-linaro-6.5.0-2018.12-x86_64_arm-linux-gnueabihf.tar.xz
Music
Pictures
Public
Templates
u-boot
Videos
VMwareTools-10.3.10-13959562.tar.gz
vmware-tools-distrib
mskim@ubuntu:~$ cd vmware-tools-distrib
mskim@ubuntu:~/vmware-tools-distrib$ ls
bin  caf  doc  etc  FILES  INSTALL  installer  lib  vgauth  vmware-install.pl

  5. vmware-install.pl 파일을 위에서 제일 마지막에 확인 할 수 있었다. 이것을 쉘로 실행을 한다. 실행 후 중간 중간 Yes/No를 입력하거나 또는 경로를 입력을 해주어야 한다. 본인은 모두 Yes로 했던거 같고, 경로는 예제로 나와있는 경로와 동일하게 입력을 하였다.

mskim@ubuntu:~/vmware-tools-distrib$ sudo ./vmware-install.pl
The installer has detected an existing installation of open-vm-tools packages 
on this system and will not attempt to remove and replace these user-space 
applications. It is recommended to use the open-vm-tools packages provided by 
the operating system. If you do not want to use the existing installation of 
open-vm-tools packages and use VMware Tools, you must uninstall the 
open-vm-tools packages and re-run this installer.
The packages that need to be removed are:
open-vm-tools
Packages must be removed with the --purge option.
The installer will next check if there are any missing kernel drivers. Type yes
if you want to do this, otherwise type no [yes] yes

INPUT: [yes]

Creating a new VMware Tools installer database using the tar4 format.

Installing VMware Tools.

In which directory do you want to install the binary files? 
[/usr/bin] /usr/bin

INPUT: [/usr/bin]

What is the directory that contains the init directories (rc0.d/ to rc6.d/)? 
[/etc] /etc

INPUT: [/etc]

What is the directory that contains the init scripts? 
[/etc/init.d] /etc/init.d

INPUT: [/etc/init.d]

In which directory do you want to install the daemon files? 
[/usr/sbin] /ure/sbin

INPUT: [/ure/sbin]

The path "/ure/sbin" does not exist currently. This program is going to create 
it, including needed parent directories. Is this what you want? [yes] no

INPUT: [no]

In which directory do you want to install the daemon files? 
[/usr/sbin] /usr/sbin

INPUT: [/usr/sbin]

In which directory do you want to install the library files? 
[/usr/lib/vmware-tools] /usr/lib/vmware-tools

INPUT: [/usr/lib/vmware-tools]

The path "/usr/lib/vmware-tools" does not exist currently. This program is 
going to create it, including needed parent directories. Is this what you want?
[yes] yes

INPUT: [yes]

In which directory do you want to install the documentation files? 
[/usr/share/doc/vmware-tools] /usr/share/doc/vmware-tools

INPUT: [/usr/share/doc/vmware-tools]

The path "/usr/share/doc/vmware-tools" does not exist currently. This program 
is going to create it, including needed parent directories. Is this what you 
want? [yes] yes

INPUT: [yes]

The installation of VMware Tools 10.3.10 build-13959562 for Linux completed 
successfully. You can decide to remove this software from your system at any 
time by invoking the following command: "/usr/bin/vmware-uninstall-tools.pl".

Before running VMware Tools for the first time, you need to configure it by 
invoking the following command: "/usr/bin/vmware-config-tools.pl". Do you want 
this program to invoke the command for you now? [yes] yes

INPUT: [yes]


You have chosen to install VMware Tools on top of an open-vm-tools package.  
You will now be given the option to replace some commands provided by 
open-vm-tools.  Please note that if you replace any commands at this time and 
later remove VMware Tools, it may be necessary to re-install the open-vm-tools.

The file /usr/bin/vmware-hgfsclient that this program was about to install 
already exists.  Overwrite? [no] yes

INPUT: [yes]

The file /sbin/mount.vmhgfs that this program was about to install already 
exists.  Overwrite? [no] yes

INPUT: [yes]

The file /usr/bin/vmhgfs-fuse that this program was about to install already 
exists.  Overwrite? [no] yes

INPUT: [yes]

Initializing...


Making sure services for VMware Tools are stopped.

Stopping VMware Tools services in the virtual machine:
   VMware User Agent (vmware-user):                                    done
   Unmounting HGFS shares:                                             done
   Guest filesystem driver:                                            done


The module vmci has already been installed on this system by another installer 
or package and will not be modified by this installer.

The module vsock has already been installed on this system by another installer
or package and will not be modified by this installer.

The module vmxnet3 has already been installed on this system by another 
installer or package and will not be modified by this installer.

The module pvscsi has already been installed on this system by another 
installer or package and will not be modified by this installer.

The module vmmemctl has already been installed on this system by another 
installer or package and will not be modified by this installer.

The VMware Host-Guest Filesystem allows for shared folders between the host OS 
and the guest OS in a Fusion or Workstation virtual environment.  Do you wish 
to enable this feature? [yes] yes

INPUT: [yes]

The vmxnet driver is no longer supported on kernels 3.3 and greater. Please 
upgrade to a newer virtual NIC. (e.g., vmxnet3 or e1000e)


Skipping configuring automatic kernel modules as no drivers were installed by 
this installer.


Skipping rebuilding initrd boot image for kernel as no drivers to be included 
in boot image were installed by this installer.

The configuration of VMware Tools 10.3.10 build-13959562 for Linux for this 
running kernel completed successfully.

Enjoy,

--the VMware team

mskim@ubuntu:~/vmware-tools-distrib$ 

 

이제 모든 설정은 완료가 되었다.

 

Host PC인 Win10에서 공유 폴더 확인 하기

공유 폴더는 처음에 "Host PC에서 공유 폴더 설정" 부분에서 우리가 설정했던 공유 폴더가 되겠다.

 

VMware의 우분투에서 공유 폴더 확인 하기

공유 폴더는 다음과 같이 "Computer → mnt → hgfs" 안에 우리가 이전에 "VMware에서 공유펄더 설정" 항목에서 "우분투 구동 전 설정" 부분의 5번 항목에서 공유 폴더이름을 만들었던 그 이름 그대로 폴더가 존재하는 것을 알수 있다.

 

여기서 추가로, 이 경로까지 들어오기가 만만하지 않기 때문에 이 폴더를 Desktop 폴더로 복사하도록 하겠다.

mskim@ubuntu:/mnt/hgfs$ cp -r Sharefolder ~/Desktop

그러면 바탕화면에 공유 폴더가 복사가 되어, 공유 폴더를 접근하기도 훨씬 용이해 진다.

- 끝

ai-makers-kit-master\python3 폴더 안에는 KT에서 제공하는 예제가 있다.

Python3 폴더 안에 md 파일을 보면 다음과 같은 설명이 있다.

https://github.com/gigagenie/ai-makers-kit/tree/master/python3

 

gigagenie/ai-makers-kit

GiGA Genie AI Makers Kit for Raspberry Pi. Contribute to gigagenie/ai-makers-kit development by creating an account on GitHub.

github.com

GiGA Genie AI Makers Kit을 이용하기 위한 Python 3버전 소스 코드입니다.

1. Prerequisites
Python 3.x를 지원하며 아래 Python 라이브러리 추가 설치가 필요합니다.

gRPC
PyAudio
GiGA Genie 음성호출어('기가지니', '지니야' 등) 이용을 위해 GiGA Genie에서 제공하는 shared library와 Python extension이 필요합니다.

libkwscmdapi.so (Raspberry Pi용)
ktkws Python extension module
2. Quick Start
a) 사용자 인증정보 받기
  AI Makers Kit 이용을 위해서는 KT APILINK 사이트에서 개발자 등록 후
  인증정보(clientid, client key, clientsecret)를 먼저 발급 받아야 합니다.

b) Python3 버전 추가 라이브러리 설치
   $ sudo easy_install3 pip
   $ sudo easy_install3 install/ktkws-1.0.1-py3.5-linux-armv7l.egg
   $ sudo apt install portaudio19-dev
   $ sudo pip3 install grpcio grpcio-tools
   $ sudo pip3 install pyaudio

c) 사용자 인증 정보 입력
   [user_auth.py 파일에 인증정보 입력]
      아래 정보를 기가지니 포털에서 발급 받은 클라이언트 키 정보로 업데이트 하세요.
   [client]
      clientid: YOUR_CLIENT_ID
      clientkey: YOUR_CLIENT_KEY
      clientsecret: YOUR_CLIENT_SECRET

d) 예제 실행(ex1 ~ ex9)
   $ python3 ex1_kwstest.py

3. Usage
a) 기본이 되는 단위 기능별 사용 예제
  ex1) 음성 호출(Keyword Spotting) 이용(code 참조)

import ktkws

ktkws.init(KWSMODELDATA)   # ../data/kwsmodel.pack 이용
ktkws.start()
ktkws.set_keyword(KWSID)   # 0: 기가지니, 1: 지니야(default), 2: 친구야, 3: 자기야
ktkws.detect(AUDIOSTERAM)  # AUDIOSTREAM: PCM 16000Hz, mono, LINEAR16 LE
# ktkws.detect() return value가 1이면 detect
   ex2-6) 음성인식/대화/음성합성 API 이용(code 참조)

gRPC 서비스 정의 : ../data/gigagenieRPC.proto
API
getVoice2Text : 음성인식(Speech-to-text)
getText2VoiceUrl : 음성합성(Text-to-speech) wave file url로 전달
getText2VoiceStream : 음성합성(TTS)을 stream data로 전달
queryByText : Text에 대한 대화해석 결과(기가지니 Dialog Kit 참조)
queryByVoice : STT한 결과에 대한 대화해석 결과(기가지니 Dialog Kit 참조)
  ex7-9) 복합 예제(음성/대화/TTS/Button)

  기타) 기능파일

user_auth.py : 사용자 인증 구현
MicrophoneStream.py : 마이크 스트림 구현
b) gkit을 이용한 예제
sample_keyword.py : 음성호출을 이용한 음성인식/음성합성 이용 예제
sample_button.py : 버튼을 이용한 음성인식/음성합성 이용 예제
sample_led.py : 다양한 애니메이션 효과를 준 LED 이용 예제
main_demo.py : 음성호출/버튼을 함계 이용한 음성인식/음성합성 이용 예제(LED 사용 포함)
sample_keyword.py
# gkit 모듈 준비
import gkit

# KWS 모델데이터를 준비
gkit.kws_start()
# 음성호출에 사용할 키워드 세팅: 지니야(default), 기가지니, 친구야, 자기야
gkit.kws_setkeyword('기가지니')
# kws_detect() 리턴값이 1 이면 음성 호출어가 감지된 것임
if gkit.kws_detect() == 1:
    print ('detected')
sample_button.py
import gkit

# 버튼이 눌러졌을 때 실행되는 callback
def callback():
    print ("Button was pressed")

# 버튼 생성 후 callback 등록
gkit.get_button().on_press(callback)
sample_led.py
import gkit

# LED 객체 생성
led = gkit.get_led()

# LED로 나타낼 상태 애니메이션 설정
led.set_state(gkit.LED.BLINK)
"""
사용 가능한 LED 상태 값
    gkit.LED.OFF
    gkit.LED.ON
    gkit.LED.BLINK
    gkit.LED.BLINK_3
    gkit.LED.BEACON
    gkit.LED.BEACON_DARK
    gkit.LED.DECAY
    gkit.LED.PULSE_SLOW
    gkit.LED.PULSE_QUICK
"""
main_demo.py
import gkit

# 음성호출이나 버튼이 눌러졌을 때 실행되는 callback
def myservice():
    """ Do something: your service ... """
    # for example : Speech-to-text
    stt_text = gkit.getVoice2Text()

# 클라이언트 키 정보 설정
gkit.set_clientkey(CLIENT_ID, CLIENT_KEY, CLIENT_SECRET)

# Detector 객체 생성(음성호출, 버튼에 대한 detection 처리)
detector = gkit.KeywordDetector()
try:
    detector.start(callback = myservice)
except:
    detector.terminate()
Enjoy with AI Makers Kit !

 

예제를 실행하기 전에 다음과 같이 위의 md 파일의 설명 중에 하기 1번 항목에 대해서 먼저 작업이 필요하다.

1. Prerequisites
Python 3.x를 지원하며 아래 Python 라이브러리 추가 설치가 필요합니다.

gRPC
PyAudio
GiGA Genie 음성호출어('기가지니', '지니야' 등) 이용을 위해 GiGA Genie에서 제공하는 shared library와 Python extension이 필요합니다.

libkwscmdapi.so (Raspberry Pi용)
ktkws Python extension module

즉, 설명과 같이 libkwscmdapi.so와 ktkws Python extension module 라이브러리를 설치해야 한다.

그런데 어떻게 설치하는지에 대한 설명이 없다.... !!!

그래서 일단 2번의 하기 항목을 먼저 실행한다. 우선, ai-makers-kit-master\python3 폴더에서 다음의 명령어를 실행한다.

b) Python3 버전 추가 라이브러리 설치
   $ sudo easy_install3 pip
   $ sudo easy_install3 install/ktkws-1.0.1-py3.5-linux-armv7l.egg
   $ sudo apt install portaudio19-dev
   $ sudo pip3 install grpcio grpcio-tools
   $ sudo pip3 install pyaudio

첫번째 행을 다음과 같이 실행.

두번째 행을 다음과 같이 실행.

 

세번째 행을 다음과 같이 실행.

네번째 행을 다음과 같이 실행.

다섯번째 행을 다음과 같이 실행.

자, 이제 모든 설치는 완료가 되었고, 실제 예제를 다음과 같이 실행을 했다. 물론 Python3 폴더 안에 있는 예제이다.

하지만, libkwscmdapi.so 파일이 없어서 Error가 발생했다. libkwscmdapi.so 파일은 하기와 같이 ai-makers-kit-master/lib에 위치해 있다.

libkwscmdapi.so 파일의 경로를 ld.so.conf 파일에 등록을 해주어야 한다.

가장 간단한 방법은 다음의 방법이다.

pi@raspberrypi:~$ LD_LIBRARY_PATH=/home/pi/ai-makers-kit-master/python3/example_apps
pi@raspberrypi:~$ export LD_LIBRARY_PATH

하지만, 매번 cmd창을 새로 열때 마다 설정을 해주어야 하는 단점이 있다.

그래서, 한번만 셋팅하면 끝나는 방법을 찾아야한다.

그럼 다음 기회에....

 

라즈베리파이를 처음 부팅하면, 한글로 표시되는 것들은 모두 사각형으로 깨져서 보인다.

이것은 라즈베리파이 보드에 한글 폰트가 없기 때문이라고 한다. 그래서 한글 폰트를 다음 명령어를 이용해서 인스톨하면 해결된다.

sudo apt install fonts-nanum fonts-nanum-extra

그리고 나서 reboot 하면 한글이 정상적으로 표시될 것이다.

이번에는 키보드 자판을 이용한 한글 입력을 이용하기 위해 fcitx-hangul을 인스톨 해준다.

sudo apt-get install fcitx-hangul

인스톨이 완료되면 하기와 같이 Raspberry Pi Configuration을 선택한다.

그리고 나서 Localisation에서 Set Locale...을 선택한다.

그리고나서, Lagnuage와 Country 그리고 Character Set을 하기와 같이 설정해준다.

OK를 누르고 나면 재부팅하라는 메세지가 나온다. 재부팅을 해주면 된다.

이제 한글을 입력하기 위해서 왼쪽상단에 라즈베리파이 메뉴 버튼을 누르고, "시스템도구→Fcitx"을 순서대로 눌러주면 된다.

그러면, 오른쪽 상단에 키보드 모양 아이콘이 생긴다. 한글을 입력하고자 할때 해당 아이콘을 눌러 태극모양으로 변경하면 한글입력이 정상적으로 동작한다.

인터넷창을 띄우고 키보드 모양 아이콘을 눌렀을때, 하기와 같이 한글입력이되는 것을 확인 할 수 있다.

- 끝

AI-MAKERS-KIT에 올라가는 이미지는 KT API LINK에서 받아서 쉽게 이용할 수 있다.

하지만 여기서는 라즈베리파이 홈페이지에서 Raspian OS를 다운받아서 라즈베리 파이 3B 보드에 설치 후, KT Library를 올려서 KT API LINK의 image와 동일한 상태를 구현하는게 목표이다.

우선 Raspberry(라즈베리) 홈페이지에서 OS를 다운로드 한다. 참고로, 오른쪽에 있는 공식 OS를 받을 것이다.

클릭을 하면 하기와 같이 3가지 종류의 OS를 볼수 있다.

첫번째 "Raspbian Buster with desktop an recommended software" 이미지는 모든 필요한 프로그램까지 다 수록을 한 Full package 버젼이라고 보면 되겠고, 두번째 "Raspbian Buster with desktop" 이미지는 첫번째 이미지에서 필요한 프로그램들을 뺀 경량 버젼이라고 보면 되겠으며, 마지막 "Raspbian Buster Lite"는 대화형 창으로 구동하는 최소 버젼의 image로 보면되겠다.

첫번째 또는 두번째를 받는 것을 추천하는데, 본인은 첫번째 이미지를 다운로드 했다. 하기는 일반적인 다운로드를 할 수 있는 페이지 링크이다.

https://www.raspberrypi.org/downloads/raspbian/

 

Download Raspbian for Raspberry Pi

Raspbian is the Foundation's official supported operating system. You can install it with NOOBS or download the image below.

www.raspberrypi.org

하지만, 우리는 ai-makers-kit-master\driver\AIMakersKit-DriverPackage 폴더 안에 있는 readme.txt 파일을 참고해서 그 파일에 언급된 버젼의 Respberry OS를 Download 한다.

readme.txt
 :
 :

#NOTICE
AI Makers Kit - audio driver add-on package
This package is tested on kernel of "RASPBIAN Stretch 2017-09-07 Version"
Please check RASPBIAN version before installation.

즉, Raspbian stretch 2017-09-07 version으로 다운 받아 사용할 필요가 있다.

다음 링크에서 해당 version을 Download 할 수 있다.

https://downloads.raspberrypi.org/raspbian/images/raspbian-2017-09-08/

 

Index of /raspbian/images/raspbian-2017-09-08

 

downloads.raspberrypi.org

본인이 다운로드한 이미지는 2017-09-07-raspbian-stretch.zip 이다.

다운로드한 이미지는 SD card에 구우면 되는데, 이때 사용하는 Tool은 "balenaEtcher" 프로그램 또는 "Win32DiskImager"를 이용하면 되겠다. 굽는 방법은 이미지를 선택하고 Write를 클릭하여 진행하기만 하면 되므로 Skip 하도록 하겠다.

이미지를 SD card로 구운 다음 Raspberry 3B 보드에 넣은 후 부팅하기만 하면 끝.

다음과 같은 화면을 HDMI 케이블에 연결한 모니터를 통해 볼 수 있다.

자 여기까지는 쉽다면 쉬운데... 이제 KT Library를 설치할 차례다.... 난관이 예상이 되지만 해봐야지.

우선 하기 KT SDK를 공유한 링크에서 파일을 Download 받는다.

https://github.com/gigagenie/ai-makers-kit

 

gigagenie/ai-makers-kit

GiGA Genie AI Makers Kit for Raspberry Pi. Contribute to gigagenie/ai-makers-kit development by creating an account on GitHub.

github.com

여기에서 하기 붉은 네모의 버튼을 클릭하면 AI-MAKER-KIT에 대한 SDK를 다운 받을 수 있다.

본인은 Zip 형태로 압축해서 다운로드 받았는데, 이것을 압축 해제 하고 적당한 위치에 놓았다(/home/pi 경로에 ai-makers-kit-master).

Driver를 우선적으로 설치해야 하므로, ai-makers-kit-master 폴더 안에 Driver 폴더로 진입하여 README_md 파일을 더블 클릭해서 열어본다.

README.md 파일에 Driver를 설치하는 방법이 아래와 같이 잘 설명되어 있으며, CMD 창을 열어서 그대로 따라서 하면 된다.

AI Makers Kit을 이용하기 위해 필요한 드라이버 설치 가이드입니다.

1. 라즈비안 설치 후, 패키지를 적절한 폴더에 풀어줍니다. (ex, /home/pi/install)

	$ gzip -cd AIMakersKit-DriverPackage.tgz | tar xf -

2. 설치 전에 네트워크가 정상적인 지 확인합니다.

3. 패키지 내부에 쉘 스크립트에 실행 퍼미션이 없으면 추가합니다.

	$ chmod a+x aimk-install.sh after-install.sh

4. “aimk-install.sh”파일을 아래와 같이 실행합니다.

	$ ./aimk-install.sh

5. 인스톨이 완료까지 기다리면 재부팅 합니다..

6. 재부팅이 되면 “after-install.sh" 파일을 아래와 같이 실행합니다

	$ ./after-install.sh

실행 완료 후 재부팅이 되면 정상적으로 음성이 출력되는지 확인합니다.

$ sh /home/pi/.genie-kit/bin/CheckAudio.sh

1번을 다음과 같이 실행한다.

해당 폴더에 압축되어 있는 파일이 압축 해제 되어 있음을 확인할 수 있다.

2번의 네트워크와 관련된 부분은 본인의 경우 오른쪽 상단의 와이파이 아이콘을 클릭하여 와이파이를 잡아 주었다.

3번은 다음과 같이 실행을 했다.

우선 압축이 풀린 해당 페이지로 이동.

그 다음 3번에 해당되는 명령어를 실행한다.

4번 명령어를 실행.

pi@raspberrypi:~/ai-makers-kit-master/driver/AIMakersKit-DriverPackage $ ./aimk-install.sh

This script will install everything needed to use
aimakerkit i2s amplifier

--- Warning ---

Always be careful when running scripts and commands
copied from the internet. Ensure they are from a
trusted source.

Do you wish to continue? [y/N] y

Checking hardware requirements...

Adding Device Tree Entry to /boot/config.txt
dtparam=i2s=on
dtparam=i2c_arm=on
dtoverlay=i2s-mmap

Commenting out Blacklist entry in 
/etc/modprobe.d/raspi-blacklist.conf
blacklist snd_bcm2835

Disabling default sound driver
Package install
Get:1 http://archive.raspberrypi.org/debian stretch InRelease [25.4 kB]
Get:2 http://mirrordirector.raspbian.org/raspbian stretch InRelease [15.0 kB]  
Get:3 http://archive.raspberrypi.org/debian stretch/main armhf Packages [220 kB]
Get:4 http://mirrordirector.raspbian.org/raspbian stretch/main armhf Packages [11.7 MB]
Get:5 http://archive.raspberrypi.org/debian stretch/ui armhf Packages [45.0 kB]
Get:6 http://mirrordirector.raspbian.org/raspbian stretch/contrib armhf Packages [56.9 kB]
Get:7 http://mirrordirector.raspbian.org/raspbian stretch/non-free armhf Packages [95.5 kB]
Fetched 12.1 MB in 28s (419 kB/s)                        
Reading package lists... Done
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  libasound2 libasound2-data
Suggested packages:
  libasound2-plugins libasound2-doc
The following NEW packages will be installed:
  libasound2-dev
The following packages will be upgraded:
  libasound2 libasound2-data
2 upgraded, 1 newly installed, 0 to remove and 411 not upgraded.
Need to get 877 kB of archives.
After this operation, 665 kB of additional disk space will be used.
Get:1 http://archive.raspberrypi.org/debian stretch/main armhf libasound2 armhf 1.1.3-5+rpt4 [441 kB]
Get:2 http://archive.raspberrypi.org/debian stretch/main armhf libasound2-data all 1.1.3-5+rpt4 [173 kB]
Get:3 http://archive.raspberrypi.org/debian stretch/main armhf libasound2-dev armhf 1.1.3-5+rpt4 [262 kB]
Fetched 877 kB in 5s (163 kB/s)          
apt-listchanges: Reading changelogs...
(Reading database ... 122683 files and directories currently installed.)
Preparing to unpack .../libasound2_1.1.3-5+rpt4_armhf.deb ...
Unpacking libasound2:armhf (1.1.3-5+rpt4) over (1.1.3-5+rpi3) ...
Preparing to unpack .../libasound2-data_1.1.3-5+rpt4_all.deb ...
Unpacking libasound2-data (1.1.3-5+rpt4) over (1.1.3-5+rpi3) ...
Selecting previously unselected package libasound2-dev:armhf.
Preparing to unpack .../libasound2-dev_1.1.3-5+rpt4_armhf.deb ...
Unpacking libasound2-dev:armhf (1.1.3-5+rpt4) ...
Setting up libasound2-data (1.1.3-5+rpt4) ...
Setting up libasound2:armhf (1.1.3-5+rpt4) ...
Processing triggers for libc-bin (2.24-11+deb9u1) ...
Setting up libasound2-dev:armhf (1.1.3-5+rpt4) ...

DRV and Script
aimk.sh
asoundrc
CheckAudio.sh
CheckWiFi.sh
KT-GenieKit-I2S.ko
LED_Init.py
MiC-CX20921-Init.py
sample_sound.wav
snd-soc-core.ko
snd-soc-simple-card.ko
snd-soc-simple-card-utils.ko
SPK-AD82011-Init.py
start.mp3

System install complete

After rebooting, after-install.sh should be executed!!
Please, execute after-install.sh on Package

Some changes made to your system require
your computer to reboot to take effect.

Would you like to reboot now? [y/N] 

 리부팅을 실시한다. 리부팅이 안되면 수동으로 실시해도 무방한듯.

부팅이 완료되면 작업하던 폴더로 이동을 한다. 본인의 경우는 "/ai-makers-kit-master/driver/AIMakersKit-DriverPackage/" 이다.

6번 명령어를 실행한다.

pi@raspberrypi:~/ai-makers-kit-master/driver/AIMakersKit-DriverPackage $ sudo ./after-install.sh
Update audio system, sound sample will be played!
Configuring sound output
mv: cannot stat '/home/pi/.asoundrc': No such file or directory
Playing WAVE '/home/pi/.genie-kit/bin/sample_sound.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Mono
Simple mixer control 'PCM',0
Simple mixer control 'PCM',0
  Capabilities: volume
  Playback channels: Front Left - Front Right
  Capture channels: Front Left - Front Right
  Limits: 0 - 255
  Front Left: 204 [80%]
  Front Right: 204 [80%]

All done!

System will reboot again

grep: input file ‘/etc/xdg/lxsession/LXDE-pi/autostart’ is also the output

Some changes made to your system require
your computer to reboot to take effect.

Would you like to reboot now? [y/N] 

여기에서도 y를 눌러서 재부팅을 실시해준다.

여기까지가 Driver를 Install 하는 작업이었다.

 

- To be continue...

 

 

KT AI-MAKER_KET 구성품은 다음과 같다.

가장 중요한 Raspberry Pi 3B(3B+를 권장하지만, 본인은 3B를 보유).

그 Spec은 다음과 같다.

https://www.raspberrypi.org/products/raspberry-pi-3-model-b/

 

Buy a Raspberry Pi 3 Model B – Raspberry Pi

The Raspberry Pi 3 Model B is the earliest model of the third-generation Raspberry Pi. It replaced the Raspberry Pi 2 Model B in February 2016. See also the Raspberry Pi 3 Model B+, the latest product in the Raspberry Pi 3 range. Quad Core 1.2GHz Broadcom

www.raspberrypi.org

Specification

The Raspberry Pi 3 Model B is the earliest model of the third-generation Raspberry Pi. It replaced the Raspberry Pi 2 Model B in February 2016. See also the Raspberry Pi 3 Model B+, the latest product in the Raspberry Pi 3 range.

  • Quad Core 1.2GHz Broadcom BCM2837 64bit CPU
  • 1GB RAM
  • BCM43438 wireless LAN and Bluetooth Low Energy (BLE) on board
  • 100 Base Ethernet
  • 40-pin extended GPIO
  • 4 USB 2 ports
  • 4 Pole stereo output and composite video port
  • Full size HDMI
  • CSI camera port for connecting a Raspberry Pi camera
  • DSI display port for connecting a Raspberry Pi touchscreen display
  • Micro SD port for loading your operating system and storing data
  • Upgraded switched Micro USB power source up to 2.5A

BCM2837을 Main Core로 사용하고 있다. BCM2837의 Spec은 다음과 같다.

http://jake.dothome.co.kr/raspberry-hw/

 

Raspberry SoC 스펙

라즈베리 파이 3(Raspberry Pi 3 모델B)  SoC: BCM2837 Silicon die: BCM2710 ARM Core CPU Family: ARM Coretex-A53 (64bit ARMv8-A 아키텍처) Quad-core (1.2Ghz) Spupport 40bit physical address GPU Core BCM VideoCore IV @ 300 MHz L1 Cache Instruction Cache 32KB(VIPT, 2 way, 6

jake.dothome.co.kr

  • SoC: BCM2837
    • Silicon die: BCM2710
    • ARM Core
      • CPU Family: ARM Coretex-A53 (64bit ARMv8-A 아키텍처)
      • Quad-core (1.2Ghz)
      • Spupport 40bit physical address
    • GPU Core
      • BCM VideoCore IV @ 300 MHz
    • L1 Cache
      • Instruction Cache
        • 32KB(VIPT, 2 way, 64 bytes per cache line)
      • Data Cache
        • 32KB(PIPT, 4 way, 64 bytes per cache line) with STB(merging STore Buffer)
        • MOESI cache coherent between cores
    • L2 Cache:
      • Unification(I+D) Cache
        • 512KB for ARM(16 way, 64 bytes per cache line)
    •  TLB
      •  micro-TLB
        • micro I-TLB
          • fully-associative 10 entry
        • micro-D-TLB
          • fully-associative 10 entry
      • Unified Main TLB
        • 4-way 512 entry
        • 4-way 64 entry walk cache
        • 4-way 64 entry IPA(Intermediate Physical Address) cache
  •  RAM
    • 1GB LPDDR2 (GPU랑 공유)

Raspberry Pi 3B 보드는 USB port를 4개나 갖고 있다. 하지만 여분의 키보드나 마우스가 없을때는 좀 난감하다.

이럴때 사용하는 것이 바로 VNC Viewer이다.

참고로, 여기서는 Raspberry Pi 3B와 PC에 VNC Viewer가 인스톨 되어 있는 것을 가정하여 설명한다.

 

Raspberry Pi 3B의 ip를 찾는 방법은 다음 2가지가 있다.

 

1. Raspberry Pi 3B에서 IP 확인하기

Raspberry Pi 3B의 CMD 창을 열고 다음과 같이 입력을 한다.

vncserver -geometry 1280x1024

입력 후 다음과 같이 제일 밑에 IP 주소가 하나 뜬다(참고로, 하기 그림은 다른 IP 설정을 가져온 것이라 참고만하면 된다).

참고로, 하기 붉은색 사각형 안에 숫자가 IP이며, ":2"는 앞의 파란색 raspberrypi:2에서의 2와 같다.

숫자 2의 의미는 VNC Server의 2번째 창이라는 의미로 보여진다.

2. PC에서 CMD창으로 IP 확인하기

이 경우는 Raspberry Pi 3B가 LAN 망에 연결이 되어있어야 한다.

PC에서 CMD창을 열고 하기 명령어를 입력한다.

ping -4 raspberrypi.local

아래와 같이 붉은 상자 안에 IP가 표시되는 것을 알수 있다.

 

이상 위의 2가지 방법 중 하나로 Raspberry Pi 3B의 주소를 찾아내면 된다. 참고로, #2의 방법을 사용하더라도, #1에서의 vncserver를 Raspberry Pi 3B의 CMD 창에 입력하여 vncserver를 실행해줘야한다.

 

찾아낸 Raspberry Pi 3B의 주소이므로, PC에서 VNC View를 실행하여 이 주소를 입력하면 된다.

VNC Viewer를 다운로드 하여 인스톨 하는 방법은 많은 곳에서 설명을 하고 있기 때문에 Pass~

이미 설치한것을 가정하고, VNC Viewer를 실행한다.

그리고 주소창에 아까 확인 했던 Raspberry Pi 3B의 IP 주소를 입력한다. 본인의 경우는 192.168,0.6:1 되시겠다.

그 다음 Enter를 입력하면 "identify Check" 창이 뜨는데 과감히 Continue를 눌러서 진행.

Username과 Password를 입력하는 팝업 창이 뜬다.

Raspberrian을 설치 후 아무 변경도 하지 않았다면, Username과 Password는 디폴트 값인 pi와 raspberry를 입력하면 된다.

정상적으로 아래와 같은 화면이 뜬다.

자, 그 다음 Raspberry Pi 3B가 부팅할때 마다 자동으로 VNC Server를 설정하게 해야 한다. 이 설정을 하지 않으면, 매번 키보드를 연결하여 Raspberry Pi 3B의 CMD에 vncserver("vncserver -geometry 1280x1024"를 입력)를 입력하여 실행해줘야 한다.

vncserver 자동 실행 설정을 위해 하기 명령어를 입력한다.

$ cd /home/pi
$ cd .config
$ mkdir autostart
$ cd autostart
$ nano tightvnc.desktop

그후 tightvnc.desktop 파일에 하기의 내용을 입력한 후 "Ctrl+o"를 입력하여 write 후 "Ctrl+x"를 입력하여 exit하면 된다.

[Desktop Entry]
Type=Application
Name=TightVNC
Exec=vncserver :1
StartupNotify=false

참고로, 4번째 라인의 ":1" 숫자는 위의 "1. Raspberry Pi 3B에서 IP 확인하기" 에서 그림 안의 파란색 사각형 숫자와 동일하게 기입하면 된다.

CMD 창에서 reboot를 입력하고 리부팅을 하면 이후에 PC에서 정상적으로 VNC viewer를 통해 Raspberry Pi 3B를 access 할 수 있다.

- 끝

Prologue

참고로, 이 글은 오래전에 쓴 글인데, 실패한 작업이기에 비공개로 놓아 두었다가, 똑같은 작업을 하고 있는 분들에게 조금이라도 도움(?)을 줄 수 있지 않을까라는 생각에 뒤늦게 공개 전환을 합니다.

BBB에 안드로이드 Pre-image를 쉽게 올려서 성공한 글은 바로 밑에 글을 참고하세요~~~!!!

2019/12/02 - [안드로이드 임베디드/Android for the BeagleBone Black] - Beaglebone Black에 Android 이미지 올리기

 

Beaglebone Black에 Android 이미지 올리기

비글본 블랙에 안드로이드 이미지를 올리겠다. 이 이미지는 http://bbbandroid.sourceforge.net/에서 다운 받을 수 있다. 참고로 첨부 파일로 공유한다. BBBAndroid: A custom Android OS for the BeagleBone Blac..

decdream08.tistory.com

 

BeagleBone Black 안드로이드 Pre-image 올리기 (실패...)

안드로이드 소스를 컴파일 하기 전에, 이미 만들어져 있는 안드로이드 Pre-image를 올려보려고 한다.

http://processors.wiki.ti.com/index.php/BeagleBone-Android-DevKit_Guide#Preparation_of_SD_card

 

BeagleBone-Android-DevKit Guide - Texas Instruments Wiki

What is BeagleBone The BeagleBone is a low-cost, high-expansion hardware-hacker focused BeagleBoard. It is a bare-bones BeagleBoard that acts as a USB or Ethernet connected expansion companion for your current BeagleBoard and BeagleBoard-xM or works stand-

processors.wiki.ti.com

위의 문서를 차근 차근 따라서하면 쉽게 이미지를 얻을 수 있다.

BeagleBone Black용 pre-image는 http://software-dl.ti.com/dsps/dsps_public_sw/sdo_tii/TI_Android_DevKit/TI_Android_GingerBread_2_3_4_DevKit_2_1_1/exports/BeagleBone.tar.gz 

를 통해서 얻을 수 있다.

그렇게 받은 압축 파일을 다음과 같이 압축해제 한 후, mkmmc-android.sh 파일을 실행하면 파티션을 3개로 만든 후 

  1. boot - Boot Images (Boot Loaders, Boot Script and Kernel)
  2. rootfs - File system (Android GingerBread 2.3.4)
  3. data - Media Clips (Audio, Video and Images)

위의 3가지 이미지를 각각의 파티션에 복사하는 일을 한다.

그에 대한 명령어는 다음과 같다.

$ tar -xzvf BeagleBone.tar.gz

$ cd BeagleBone

$ sudo ./mkmmc-android.sh /dev/sd<device>

여기서 <device>는 MicroSD 카드를 끼웠다가 뺐을때 "lsblk" 명령어를 써서 다른 부분을 체크하여 MicroSD에 맞는 device 이름을 넣어주면 된다.

참고로, 본인은 MicroSD 카드가 sdb로 인식이 되기 때문에 다음과 같이 명령어를 완성하여 입력하였다.

$ sudo ./mkmmc-android.sh /dev/sd<device>

그런데 mkmmc-android.sh 파일을 실행할때 다음과 같은 문제점이 발생한다는 것이다.

Error의 내용을 보니 파티션이 제대로 나눠지지 않아서 발생하는 문제이다.

참고로, TI 홈페이지에 본인과 동일한 문제점을 갖고 있던 사람이 Q&A를 한 내용이 있어서 발췌를 해본다.

BegleboardXM용 sh 파일을 사용하여 문제가 해결되었다고 하는데, 나는 왜 안될까? 아마도 SD 카드에 따라서 문제가 발생하는거 같다.

https://e2e.ti.com/support/legacy_forums/embedded/android/f/509/t/72783

 

[Resolved] mkmmc-android.sh invoking error to prerare SD card - Android Forum (Read-Only Archived) - Android (Read-Only) - TI E2

 

e2e.ti.com

그래서 해결점은 단 하나. 직접 MicroSD 카드 파티션을 3개로 나누는 것이다.

각 파티션의 용량은 각 파티션에 들어갈 파일 크기 보다 크게만 잡을 것이다.

다운로드 받은 후 압축을 해제했던 준비된 파일의 용량을 다음과 같이 확인했다.

그리고 이미지를 만들때 사용할 mkmmc-android.sh 파일의 아래 내용을 참고하면 각각의 파티션 sdb1/sdb2/sdb3에 어떤 파일이 적재될 것인지를 판단 할 수 있어서, 그것을 참고로 파티션의 크기를 결정한다.

위의 내용을 통해서 $S2가 Boot_Images/MLO, $S3가 Boot_Images/u-boot.... 임을 확인할 수 있다.

이것을 참고로 mkmmc-android.sh 파일의 하기 내용도 파악하기가 쉽다.

mkmmc-android.sh 파일을 분석하여 다음과 같이 정리가 가능하다.

  1. sdb1 - MLO / u-boot.img / uImage / uEnv.txt 그리고 START_HERE가 저장 되며 전체 용량은 4.7MB이다.
  2. sdb2 - $6(Filesystem/rootfs*)이 추가 되는데 tar jxvf로 압축을 풀고 추가가 된다. 압축해제 후 용량은 88.2MB이다.
  3. sdb3 - Media_Clips가 추가되며 전체 용량은 137.1MB이다.

Window에서 DISKPART를 이용하여 MicroSD 카드의 READONLY 속성을 해제하고 기존에 있던 Partition을 모두 지웠다.

그 다음 Ubuntu에서 CParted라는 프로그램을 이용하여 다음과 같이 MicroSD 카드의 파티션을 나누었다.

작업을 마친후 Terminal에서 lsblk 명령어를 이용하여 다시 한번 확인을 해본다.

정상적으로 MicroSD 내부가 sdb1/sdb2/sdb3... 로 파티션이 잘 나눠진것을 확인 할 수 있다.

이제 mkmmc-android.sh 파일에서 파티션을 나누는 부분과 파일 시스템을 만드는 부분을 삭제하고 실행해 본다.

 

다시 경로를 변경한 후에 sh 파일을 다음과 같이 실행을 하면 정상적(?)으로 copy가 되는 것을 확인 할 수 있다.

위의 umount error는 크게 신경쓰지 않아도 될것 같다.

lsblk 명령어를 이용하여 확인을 해보면 sdb1/sdb2/sdb3이 각각 /media/mskim/boot, /media/mskim/rootfs/, /media/mskim/data로 마운트 되어있다.

실제 해당 폴더로 이동하여 파일이 있는지를 다음과 같이 확인했고, 정상적으로 이미지가 다 들어 있는 것을 확인 했다.

자... 이제 운명의 시간이다.

Beaglebone Black에 MicroSD 카드를 삽입하여 확인을 할 것이다.

그 전에, UART 통신을 하기 위해서 케이블을 보드에 삽입하고, 그 다음 Micro HDMI 케이블을 보드와 TV에 연결을 했다.

MicroSD 카드를 삽입하고 나서 보드 전원을 공급하기 위해 Micro USB 케이블을 PC와 보드사이에 연결을 했다.

 

아니 이게 웬걸... 아무리 기다려도 정상적으로 부팅이 되지 않는다. 그동안 이 작업을 위해 많은 시간을 투자 했건만, 한마디로 실패다.

그나마 배운게 있다면 안드로이드 image는 아래와 같이 구성된다는거..

  1. boot - Boot Images (Boot Loaders, Boot Script and Kernel)
  2. rootfs - File system (Android GingerBread 2.3.4)
  3. data - Media Clips (Audio, Video and Images)

2번까지가 유의미한 것이고, 3번은 테스트를 위해 필요한 데이터들이라고 보면 되겠다.

무엇이 잘못된 것인지 시간이 있을 때 다시 한번 일련의 작업들을 찬찬히 들여다 봐야겠다.

이상한 점이 있다면 #1의 Boot쪽에 Kernel 사이즈가 너무 작다는 거...

 

- 끝.

GPIO 코드 컴파일(Build)

이제 실제 앱을 이용하여 BBB의 GPIO를 컨트롤해보자.

이전 글에서 만들었던 안드로이드 프로젝트 대신에 이미 구현이 되어 있는 첨부 파일을 사용할 것이다.

gpio.zip
1.73MB

이 첨부 파일 안에 라이브러리는 이전 글에서 만들었던 것과 동일한 so 파일이 담겨져 있다. 첨부 파일을 다운로드 받고 적당한 위치에 압축을 풀고 Eclipse ADT를 실행한다.

1. 'File' → 'Import'를 선택하고, 

2. 'Android' → 'Existing Android Code Into Workspace'를 선택 한 후, 'Next'를 누른다.

3. 하기 빨간 네모 안 'Browse'를 선택하여, 압축을 해제한 폴더 'gpio'를 클릭 한 후 '폴더선택' 버튼을 누른다.

4. 'Finish' 버튼을 눌러 끝낸다.

이제 프로젝트를 Build 하기 위해서 "gpio에서 오른쪽 클릭" → 'Run As'  'Android Applicaiton' 선택.

하지만, 보기 좋게 Error 발생.

이 Error에 대해서 검색을 해보니 다음과 같이 해결 방안을 찾을 수 있었다.

https://m.blog.naver.com/kkson50/221208277244

 

[문제해결] Unable to build: the file dx.jar was not loaded from the SDK folder

에러현상Eclipse ADT에서 발생한 에러입니다. Failed to load d:\Android\sdk\build-tools\26.0.2\li...

blog.naver.com

그래서 Eclipse에서 'Window → Android SDK Manager'를 실행.

Android SDK Build-tools 25.0.3을 체크하고 'install 1 package'를 실시.

Accept License를 체크하고 Install 버튼을 누른다.

인스톨을 마친 이후에 Eclipse SDK가 위치한 폴더로 이동 후 build-tools\25.0.3\lib\dx.jar 파일을 복사하여 build-tools\29.0.2\lib\dx.jar 파일을 대체 하도록 덮어 씌우기를 한다.

그 다음 다시 build를 실시하면 정상적으로 build가 완료된다.

그러나 Android Virtual Device(ADB)에서 다음과 같이 문제 발생. 우리가 만든 gpio 앱이 정지되었다.

이 문제는 ADB 설정시 Intel CPU로 셋팅을 해서 발생한 문제이다. 그래서 ARM CPU로 변경하였다.

그리고 다시 build 하면 정상적으로 GPIO 앱이 화면에 display 되는 것을 확인할 수 있다.

여기까지 컴파일(build)한 GPIO 코드가 Emulator에서 잘 동작하는 것을 확인했다.

 

GPIO 앱을 BeagleBone Black에 넣기

이제, BBB에 컴파일 하고 만들어진 앱(apk)를 넣는 일만 남았다.

넣는 방법은 이전에 hacktHAL을 BBB에 넣었던 것과 동일하게 ADB를 사용하는 것이다.

참고로, 하기 글을 참고하면 hacktHAL을 BBB에 어떻게 넣었는지 확인 할 수 있다.

2019/12/12 - [안드로이드 임베디드/Android for the BeagleBone Black] - Window10에서 ADB Tool을 이용하여 PacktHAL files을 동작하는 Beaglebone Black(BBB)에 넣기

 

Window10에서 ADB Tool을 이용하여 PacktHAL files을 동작하는 Beaglebone Black(BBB)에 넣기

지난번에 Ubuntu에 ADB를 인스톨했지만, 웬지 아직까지는 Window가 편한지라 Window를 이용해서 진행을 해보았다. Android Debug Bidge를 이용하여 현재 동작 중인 Beaglebone Black(BBB)에 PacktHAL files을 넣을..

decdream08.tistory.com

다음과 같은 순서로 실행을 하면 BBB에 adb 명령어를 이용하여 생성한 앱 즉, .apk 파일을 BBB에 넣을 수 있다.

1. 컴파일 후 생성된 .apk 파일을 확인한다. 안드로이드 프로젝트 안에 \gpio\bin 폴더 안에 있을 것이다. 본인의 경우는 하기 그림과 같이 확인 가능했다.

2. Window에서 CMD 창을 열고 adb.exe가 있는 파일로 경로를 변경 한다.

3. BBB 보드를 USB로 PC와 연결한 후 정상적으로 연결되어 adb 명령어를 사용할 수 있는지 다음과 같이 adb devices 명령어를 입력하여 확인 한다.

4. 정상적으로 BBBANDROID가 확인이 되었다면, adb install -d 명령어를 이용하여 #1의 경로에 있는 gpio.apk 파일을 BBB의 Android system에 install 한다.

adb install -d D:\02_Dev_Tools\01_Android\eclipse_workspace\gpio\bin\gpio.apk

위와 같이 Success가 보여진다면, 앱이 정상적으로 BBB에 install 되었다는 것이다.

실제로 BBB를 HDMI 케이블을 이용하여 모니터에 연결 하였을때 메인 화면에 gpio 앱이 깔려 있음을 확인 할 수 있었다.

그리고 마우스를 BBB에 연결하여 gpio 앱을 실행을 하면 다음과 같이 보여진다.

실제로 마우스로 Turn light on을 클릭하면 GPIO30인 P9의 11번 핀이 High로, Turn light off를 클릭하면 Low로 변경되는 것을 확인할 수 있었다.

- 끝.

+ Recent posts