안녕하세요, 타이젠 개발자 윤진입니다.


본 포스팅은 이틀에 걸쳐 졸음과 싸워가며 작성한 포스팅입니다.

오탈자가 있을 수 있으니 너그러운 맘으로 지적질(?) 부탁드립니다;


사실 이전 포스팅에서도 타이젠 개발환경의 핵심툴인 sdb를 언급한 적이 있습니다.

- sdb 설치하기 : [Tizen] 우분투에 타이젠 플랫폼 툴인 gbs & sdb 설치해보기

- sdb 사용하기 with Gear S2 : [Tizen/Gear S2] 타이젠 기어S2와 호스트 PC 연결하기


하지만 하루에도 수십차례 이용하는 sdb의 주요 기능에 대해 다룬 적이 없더군요.

어쩌면 지금 이 시간에도 수많은 타이젠 개발자들이 sdb를 이용하고 있을텐데요.

이 포스팅에서는 타이젠 개발자들이 주로 사용하는 sdb 기능을 설명하도록 하겠습니다.


sdb는 개발시스템과 디바이스(혹은 에뮬)을 연결하여 사용할 수 있도록 도와주는 툴입니다.

개발시스템과 에뮬 혹은 디바이스 혹은 에뮬과 디바이스를 동시에 연결할 수도 있지요.

파일을 주고 받고, 원격 쉘 접속을 위해 sdb를 사용하고 있습니다.


이런 sdb를 사용하기 위해서는 2가지 전제조건이 있습니다.


전제 1. 당연히, sdb를 설치하셔야겠지요.

sdb는 기본적으로 Tizen SDK와 함께 설치됩니다.

따라서 Tizen SDK를 설치하셨다면,

tizen-sdk/tools/sdb를 찾으실 수 있을겁니다.

만약 SDK 없이 sdb 툴만 리눅스환경에서 따로 받고 싶으시면 위에 언급한 포스팅을 참고해주세요.


전제 2. sdb로 붙이려는 디바이스의 debug 모드를 "On" 하셔야합니다.

디바이스에서 debug 모드를 켜놓지 않으면 sdb를 붙일 수 없지요.

타이젠 플랫폼에서는 Home > Settings > Device Info. > USB Debugging에서 설정하고,

타이젠 상품 Gear 시리즈에서는 Apps > Settings > Gear Info. > Debugging에서 설정하며,

타이젠 상품 Z1, Z3에서는 아래 포스팅을 참고해서 debug 모드를 설정하실 수 있습니다.

[Tizen] 타이젠 Z1에 개발자모드 메뉴가 숨겨져 있는 까닭은?


전제조건을 모두 만족하셨다면 이제 sdb 명령어를 살펴볼 차례입니다.

sdb 명령어는 도스나 리눅스 쉘에서 직접 사용할 수 있습니다.


sdb [option] <command> [parameters]


option에는 총 3가지 명령어가 있습니다.

옵션 1. "-d" 디바이스와 연결할 때 사용하는 명령어입니다.

개발시스템과 연결한 장치가 여러개 있을 경우,

그 중 USB와 직접 연결된 디바이스에 -d 옵션으로 접속할 수 있습니다.


옵션 2. "-e" 에뮬레이터와 연결할 때 사용하는 명령어입니다.

개발시스템과 연결한 장치가 여러개 있을 경우,

그 중 에뮬레이터에 -e 옵션으로 접속할 수 있습니다.

   

옵션 3. "-s" 시리얼넘버로 디바이스 혹은 에뮬에 접속할 수 있습니다.

시리얼 넘버는 sdb get-serialno 명령어로 얻을 수 있는데요,

앱개발할 때 사용한 경험이 거의 없군요 :)


위의 명령어 세가지는 말 그대로 옵션입니다.

개발시스템에 에뮬레이터와 디바이스가 모두 연결되어 있고,

둘 중 하나를 번걸아가며 접속할 때 유용하게 사용할 수 있습니다.

에뮬과 디바이스 중 하나만 접속이 되어 있다면,

옵션을 사용하지 않아도 접속된 에뮬 혹은 디바이스에 알아서 접속해줍니다.


command에는 다수의 유용한 명령어가 있습니다.

명령어 1. "root" <on | off>

root 명령어는 sdb로 에뮬 혹은 디바이스에 루트 권한으로 접속하게 해줍니다.

에뮬이나 플랫폼 바이너리가 탑재된 TM1 시료에서 사용할 수 있습니다.

Z1, Z3, Gear1, Gear2와 같은 상품에서는 root 권한을 얻을 수 없습니다.


명령어 2. "connect" <host>[:<port>]

connect는 Gear S2를 연결할 때 사용합니다.

이 명령어는 아래 포스팅을 참고해주세요.

[Tizen/Gear S2] 타이젠 기어S2와 호스트 PC 연결하기


명령어 3. "shell"

shell 명령어는 리모트쉘로 에뮬 혹은 디바이스에 접속할 수 있게 해줍니다.

쉘 명령어로 장치에 접속을 한뒤,

플랫폼에 설치된 다양한 명령어를 사용하여 장치의 상태를 확인할 수 있습니다.

top 혹은 ps를 사용하여 장치상태를 확인해보세요 :)


굳이 리모트 쉘에 접속할 필요없이,

쉘명령어만 한 번 사용하여 결과를 보고 싶다면,

sdb shell <명령어> 형식을 사용하면 됩니다.

예를 들어 ps 상황만 체크하고 싶다면,

sdb shell ps를 치면 쉘없이 ps 내용이 바로 출력됩니다.


명령어 4. "install" <pkg_path>

개발시스템에서 빌드한 패키지를 remote로 복사한 후 설치합니다.

패키지만 가지고 있는 경우,

sdb 명령어를 통해 쉽게 복사 & 설치할 수 있겠네요.


명령어 5. "uninstall" <pkg_id>

remote에서 패키지를 삭제할 때 사용할 수 있습니다.

이 때 pkg_id를 정확하게 알아야합니다.

자신이 삭제할 패키지의 ID는 정확히 알아야겠지요?


명령어 6. "push" <local> <remote>

개발시스템에서 빌드한 패키지를 에뮬 혹은 디바이스에 보낼 때 주로 사용합니다.

패키지 뿐만 아니라 각종 파일을 넘기는데 사용하지요.

<local>에는 개발시스템에서 보낼 파일을 기입합니다.

<remote>에는 파일을 받을 장소를 선택합니다.

만약 파일을 받을 디렉토리가 없다면 제대로 푸시되지 않을 수 있으니 미리 만들어주세요.

# sdb push file_to_push.txt /home/developer

위와 같이 file_to_push.txt 파일을 /home/developer 위치에 넣을 수 있습니다.


명령어 7. "pull" <remote> [<local>]

push와 상반되게 리모트 시스템에 있는 파일을 개발시스템으로 가져올 수 있습니다.

<remote>에는 리모트 시스템에 있는 파일을 절대경로로 적어주면 됩니다.

[<local>]을 적지 않으면 현재 디렉토리로 파일을 가져옵니다.


명령어 8. "kill-server" & "start-server"

sdb로 제대로 접속이 안될 경우,

sdb server를 죽였다가 다시 살립니다.

개발시스템과 에뮬 혹은 디바이스가 대부분 제대로 잘 붙는데요,

아주 간헐적으로 알 수 없는 이유 때문에 잘 안붙을 때가 있습니다.

그럴때 서버를 죽였다가 살려보세요. :)


명령어 9. "get-serialno" & "devices"

현재 접속된 디바이스 혹은 에뮬에 대한 시리얼 넘버를 알려줍니다.

여기서 얻은 값을 보고 위에서 설명드린 -s 옵션과 함께 사용하면 됩니다.


명령어 10. "dlog" [<filter_spec>]

개발시스템에 접속한 리모트장치의 상태를 dlog를 통해 엿볼 수 있습니다.

# sdb dlog

위의 명령어로 쉽게 로그를 출력할 수 있지요 :)


이상과 같이 간단하게 sdb의 명령어를 살펴봤습니다.

그럼 오늘도 즐거운 개발하시길... :)


끝_


안녕하세요, 타이젠 개발자 윤진입니다.


타이젠 플랫폼이 탑재된 기어S2를 구매하여 일주일째 사용하고 있습니다.

가급적이면 소비자의 시각에서 기어S2를 냉철하게 판단하고 싶지만 쉽지 않네요.

앱이 훅 죽어버린다거나 배터리가 광탈하면 심장이 덜컥 내려앉습니다.

결국 참다못해 기어S2를 호스트PC에 연결하여 여러가지 문제상황을 파악해보고자 합니다.


호스트PC와 기어S2를 연결하기 위해서는,

Tizen SDK 2.3.1 버전을 다운로드 받으셔야 합니다.

최종적으로 필요한 툴이 sdb(Smart Development Bridge)인데요,

sdb의 버전이 2.2.67 이후여야 기어S2가 제대로 인식됩니다.


Tizen SDK 2.3 버전인 경우,

sdb의 버전이 2.2.51이기 때문에 기어S2를 인식하지 못합니다.

2.3 환경에서 기어S2와 호스트PC를 연결해도 offline으로 인식하니 괜한 삽질하지 마세요~


Tizen SDK 2.3.1은 여기에서 받으실 수 있습니다.

현재 Tizen SDK 2.4가 최신 플랫폼입니다만,

Gear S2에는 Tizen 2.3.1 플랫폼이 탑재되었기에,

Gear S2용 앱을 개발하시려면 반드시 Tizen SDK 2.3.1을 설치하셔야 합니다.


기어S2는 cradle이나 extension으로 호스트PC와 연결하지 않습니다.

대신 기어S2를 호스트PC와 동일한 네트워크로 묶는 방식으로 연결합니다.

가정용 라우터가 있으면 호스트PC와 기어S2를 함께 연결해주세요.

물론, 기어S2는 무선으로 연결해야하겠지요?


1. 기어S2 디버깅모드 활성화



우선 기어S2의 디버깅 모드를 활성화해야합니다.

기어S2 오른편 하단 버튼을 눌러 Apps를 런칭합니다.

Apps > Settings(설정) > Gear info(Gear 정보) > Debugging(디버깅)

위처럼 진입하여 디버깅 모드를 활성화합니다.

디버깅 모드를 활성화해주어야 sdb를 붙여서 기어S2와 호스트PC를 연결할 수 있습니다.



2. 기어S2 와이파이 연결하기



기어S2를 라우터기에 연결할 차례입니다.

집에 무선 라우터기가 없으면 호스트PC와 연결할 수 없으니,

무선 라우터기가 없으신 분은 이 단계에서 무선을 지원하는 라우터기를 구매해주세요;


무선라우터기에 연결하기 위해서는,

Apps > Settings(설정) > Connections(연결) > Bluetooth(블루투스) > Bluetooth(블루투스)

블루투스를 우선 "비활성화"해주세요.

기어S2는 블루투스를 통해 와이파이를 연결하기 때문에,

블루투스를 꺼야 라우터에 수동으로 접속할 수 있습니다.


그리고,

Apps > Settings(설정) > Connections(연결) > Wi-Fi > Wi-Fi

위처럼 진입하여 Wi-Fi를 활성화해주세요.



Wi-Fi가 활성화되었다면,

Apps > Settings(설정) > Connections(연결) > Wi-Fi > Wi-Fi networks(Wi-Fi 네트워크)

위의 항목에 진입하여 연결된 라우터기를 선택합니다.

세부항목을 내려보면 IP 주소가 나오는데요,

이 주소로 호스트PC에서 접속할 수 있습니다.

위의 이미지 오른편에 보면 192.168.0.74라는 IP 주소가 나오네요.

이제 호스트 PC에서 sdb를 사용하여 기어S2에 연결할 수 있습니다.



우선 sdb 툴의 위치는 Tizen 2.3.1이 설치된 디렉토리 밑에 tools 디렉토리에 있습니다.

위의 예제에서는 기존에 사용하고 있던 sdb server를 죽이고 다시 띄웠는데요,

만약 기어S2에 연결이 안된다면 server를 죽이고 다시 띄운 후 시도해보세요.


$ sdb kill-server
$ sdb start-server


그리고 나서 sdb connect <IP주소>를 넣어 접속해주세요.

그러면 기어S2에 팝업이 하나 뜨는데요,

외부에서 접속하려고 하는데 의도한 접속인지 여부를 묻습니다.

확인버튼을 누르면 unauthorized에서 connected 상태가 됩니다.


자, 이제 연결이 다 되었습니다.

마음껏 탐험을 시작할 시간입니다.

아... root 권한이 아니어서 아음껏 탐험은 안되겠네요.

제한된 탐험이라도 즐겨보세요;


좋은 하루 보내세요~

끝_


* 본문에서 사용한 이미지 출처

http://developer.samsung.com/technical-doc/view.do?v=T000000251


  1. 코코콩 2015.11.19 20:51 신고

    안녕하세요 덕분에 타이젠2.3.1을 설치했네요... 웨어러블 sdk 설치하느라 며칠을 찾아보았는데 ㅎㅎ 감사합니다.
    그리고 문득 든 생각인데 타이젠이 성장하기 위해선 플래그쉽모델도 나와야하지않을까요? 물론 우선 앱생태계가 활성화되어야겠지만 듀얼OS로 지원을 해도 좋겠네요!

    오늘도 포스팅 잘보았습니다. 좋은하루되세요

    • 안녕하세요~ 코코콩님.
      이제 웨어러블의 세계에도 빠져드시겠군요 :)
      세상에 좋은 아이디어를 가진 사람이 많던데,
      웨어러블이라 가능한 재미난 앱을 만들어주세요~ 히힛.
      타이젠 플래그십 모델 출시 같은 큰 그림은 저 같은 일개 개발자 레벨에서는 잘 모르겠습니다. ㅠ_ㅜ
      멋지게 만들어놓으면 좋은 디바이스를 출시할 수 있겠죠~
      그럼 좋은 하루 보내세요~

  2. 전광하 2015.12.02 19:01

    안녕하세요.
    혹시, ip를 이용한 접근 말고, bluetooth 의 연결 상태에서는 sdb devices등의 제어를 할 수 없을까요?
    모단말과 gear s2는 거의 항상 블루투스로 연결되어 있어서, 모단말에서 제어를 해보고 싶은데요..
    궁금해서 문의 드립니다. 항상 감사합니다.

    • 안녕하세요,전광하님.
      현재로서는 ip를 이용하는 방법밖에 없습니다.
      하지만, 안드로이드를 라우터 삼아 웨어러블을 통제하거나,
      안드로이드에 올라가는 앱으로 웨어러블을 컨트롤하는 것도 재미있겠네요.
      좋은 의견 감사드리고 그냥 묻히지 않게 건의해보겠습니다.
      감사합니다.

  3. 보수동 2016.01.25 18:01

    안녕하세요? 타이젠으로 gear s2 에서 nfc app을 개발 중인 사람입니다. 실례가 되지 않는다면 질문을 좀 드리고 싶은데요. 타이젠에서는 nfc.tag feature 를 지원하는데 gear s2에서 지원을 하지 않는 것 같네요. 혹시 gear s2 에서 nfc.tag feature 를 언제 쯤 사용 가능할지 알 수 있을까요?

    • 안녕하세요, 보수동님.
      진심 대답해드리고 싶지만, 상품(Gear S2)의 피쳐에 대해서는 플랫폼 개발자가 알 수가 없어서요.
      지원여부는 http://developer.samsung.com/ 에서 문의하시는게 어떨까요?
      속시원한 답변을 드리지 못해 송구스럽네요.

    • 보수동 2016.01.26 00:09

      빠른 답변 감사합니다!!

    • 아, 넵. 감사합니다. 즐거운 하루 보내세요~!

  4. kykim 2016.01.30 21:23

    error: failed to connect remote target 'IP주소'만 계속 뜨네요...

    기어S2 블루투스, 3G 해제, 디버깅 ON, IP 주소 확인, 컴퓨터와 같은 네트워크 확인, sdb 버전 확인 다 했는데

    혹시 제가 빠트린 게 있을까요?

  5. 안녕하세요~ kykim님.
    같은 네트워크를 물리셨다는게 같은 라우터를 쓰셨다는것이지요?
    기어S2의 설정>네트워크에 들어가서 와이파이를 확인하면 네트워크 주소의 앞 세자리가 같은 라우터에 연결된 컴퓨터의 네트워크 앞 세자리와 동일한거죠?
    그렇다면 기본적으로 안될 이유는 없어보이는데요,

    그래도 아이피를 찾을 수 없다고 하니,
    기어의 와이파이를 다시 설정해보고,
    기어를 재부팅해보고,
    호스트피씨에서 sdb kill-server도 해봐야할 것 같습니다.

    꼭 연결에 성공하시면 좋겠네요.
    윤진 드림.

  6. 안녕하세요 2016.09.07 19:53

    지금 이 방식대로라면 혹여나 사진전송,파일전송같은 행위를 할수 있을까요?

  7. 노마십가 2019.05.03 03:57 신고

    혹시 게시글 대로 했음에도 error: failed to connect to remot tartget 에러가 발생하신다면,
    디버그 모드 킨 이후에는 꼭 디바이스 재부팅 해주세요 ㅠㅜ
    기기 재부팅 하고 나니까 잘붙습니다 흑흑

+ Recent posts