기간 : 2015년 2월 2일 ~ 2015년 2월 16일


내용 :

 - CPU 80x86 계열 16비트 및 32비트 레지스터

 - 어셈블리어 지시어 및 기초명령, 디버깅

 - EMU8086을 사용해서 어셈블리 구동 및 실습

 - qemu를 이용한 x86 가상 머신 부트로더 개발 소스 분석

 - 기타 활용


참고 문헌 및 참고 사이트 :

 - http://www.drpaulcarter.com/pcasm/

 - http://programminggroundup.blogspot.kr/2007/01/programming-from-ground-up.html

 - http://gurugio.kldp.net/wiki/wiki.php/asm_basic

 - http://opentutorials.org/module/1087












저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'STUDY > asm_basic' 카테고리의 다른 글

어셈블리 15일 끝내기  (2) 2015.02.02
  1. BlogIcon 갓이뇽 2015.02.02 09:23 신고 Addr Modify Reply

    허얼~이걸 15일에?

Comment







 삼성 기어 개발을 위한 authentication certificate 인증서 요청


 

Author haruting

 

 

Keywords:  wearable TIZEN, authentication certificate

 

 

Abstract

Wearable TIZEN 개발을 할 때, Bluetooth 통신이나 Media Player 등 여러 Policy를 사용하기 위해서는 Wearable TIZEN authentication certificate 가 필요하다. 

이 문서는 authentication certificate 를 인증 받기 위한 절차에 대한 내용을 다루고 있다.












1. 서론

  최근 들어 차세대 스마트 기기로써 Wearable Device가 주목을 받고 있다. 사실 Wearable Device는 이전부터 많은 시도들과 시제품들이 선보였던 분야이다. 하지만 사람들이 일상생활 속에서 사용하기에는 부족한 수준 이였다. 그래도 많은 시행착오와 기술의 발전을 통해 드디어 일반 사용자를 대상으로 사용이 가능한 시기까지 오게 되었다.

  비즈니스 인사이더에 따르면 Wearable Device 출하량은 매년 가파르게 증가를 거듭, 약 5년뒤 2018년에는 3억대에 이를 것으로 예측하고 있다. 2017년 스마트폰 예상 출하량이 15억대 정도인 것을 감안한다면, 약 15~20%에 달하는 엄청난 숫자이다.

  웨어러블 디바이스가 더욱 매력적인 것은 스마트 폰을 통해 겪었던 다양한 경험 때문이다. 이러한 기반 경험 없이 고객이 스마트 폰을 건너뛰어 웨어러블 디바이스를 바로 수용하기에는 어려울 것이라고 생각된다.

  현재 N사의 퓨얼 밴드(Fuel Band) 와 같은 피트니스를 위한 밴드형 디바이스부터 Smart Phone과 연계 통신이 가능한 시계인 Smart Watch도 다량 출시되고 있다. 삼성전자도 최근 바르셀로나에서 열린 MWC2014에서 SAMSUNG UNPACK 2014를 진행하여 삼성 기어2와 삼성 기어2 네오, 그리고 삼성 기어 핏(Fit)을 공개하였다.

  하지만 여러 개발자들이 이러한 삼성 웨어러블 디바이스를 개발하는데 앞서 여러 API를 사용하기 위한 Policy authentication certificate 획득에 다소 힘들어 하고 있다.

이 문서에서는 Wearable TIZEN 개발에 필요한 authentication certificate의 인증서 획득에 필요한 것들을 자세히 소개하고자 한다.

 

 

2. 본론

  삼성 Smart Watch의 OS인 Wearable TIZEN에서 개발을 하기 위해서는 authentication certificate가 필요하다. 이 certificate는 개발자가 자신의 App을 테스트하고, 나아가 GLAXY Apps Seller Office에 등록하기 위해 반드시 가지고 있어야 한다. 이 인증서를 얻기 위해 PGP로 인증서 요청 파일을 생성 한 뒤, PGP로 암호화 하여 개발자 센터로 보내 인증 절차를 밟아야 한다.

 

2.1 Generate Certificate Request 등록

  먼저 타이젠 Generate Certificate Request 등록에 앞서 개발하기 위한 Device Unique Identifier(DUID)를 알아야 한다. [그림 1]과 같이 삼성 기어를 데스크톱 PC에 연결하면 DUID를 얻을 수 있다.



[그림 1] 삼성 기어 DUID 등록 정보

 

  다음 방법처럼 삼성 기어의 정보를 보면 DUID에 대한 정보를 알 수 있으며, 이 DUID로 Generate Certificate Request를 등록하여야 한다.

  그 후, Generate Certificate Request를 등록 하기 위해 [그림 2]처럼 Tizen IDE for Wearable에서 다음 버튼을 눌러 인증서를 작성한다.

  만약, 여러 개의 기어로 개발을 하고자 한다면 여러 개의 DUID를 모두 등록해 주어야 한다.

 


[그림 2] Generate Certificate Request 등록

 

[그림 2]에서 Privilege Level은 Public, Partner, Platform 세 가지 등급으로 분류된다.

 


[그림 3] Privilege Level (public, partner, platform)

 

  플랫폼이나 사용자에게 민감한 데이터를 Handling 하는 API경우 개인정보, 보안, 안정성 등에 대한 문제점을 가진다. partner와 platform은 인증을 받는데 public 보다 어려운 점이 있으니 보통의 경우에는 public으로 하면 된다.

  해당 내용의 상세 정보를 보고 싶을 경우에는 참고문헌 [2]를 참고하길 바란다.

  해당 Generate Certificate Request를 작성 완료 한 후, success가 뜨면 해당 Request에 대한 파일을 PGP로 암호화 하여야 한다.

 

2.2 PGP 암호화 작업

  개발자의 운영체제가 Window일 경우 GPG-4win (http://www.gpg4win.org)에서 설치하여 사용하면 되고, Ubuntu일경우 기본 프로그램인 Passwords and Keys application을, Mac OS인 경우에는 GPG Suite (http://gpg4win.org)에서 파일을 설치하여 사용하면 된다. 이 문서에서는 가장 많이 사용하고 있는 Windows를 대상으로 설명하겠다.

 

  GPG-4win파일을 설치하여 GPA를 실행 후, 상단 메뉴에서 Keys->New key… 를 실행해 개발자 이름과 이메일 등 정보를 기입한다. Generate Key를 생성할 때, “Do you want to create a backup copy”에서 “Do it later”를 선택 한다.



[그림 4] GPA에서 new key 생성된 모습

 

  다음은 PGP key server에서 시리얼을 받아야 하는데 http://keyserver.pgp.com 으로 들어가서 요청을 받을 수 있다. 해당 홈페이지에서 Search For Keys에 gear2.sec@samsung.com 혹은 key ID (4D8CE45C)를 입력 한 뒤, 검색을 하게 되면 asc파일을 받을 수 있게 된다.

 

[그림 5] asc 파일 다운로드

 

  그 후, GPA 프로그램에서 Keys -> import Keys 를 실행하여 받은 파일을 찾아 import 시키면 데이터가 적용되게 된다. 마지막으로 아까 타이젠 IDE에서 만들어 놓은 certificate-request.xml까지 추가시키면 인증서 요청하기 위한 준비가 완료되게 된다. Windows -> File Manager 을 실행시켜 certificate-request.xml를 open 하게 되면 암호화를 시킬 수 있다. certificate-request 파일은 c:\tizen-wearable-sdk-data/keystore에 있으며, 해당 파일은 숨김 폴더로 설정되어 있을 수 있으니, 숨김 폴더 보기 설정을 해야 한다.

 


[그림 6] Encrypt Key File in File Manager

 

 

  그 후,  Windows->Clipboard에 들어가 Encrypt 버튼을 눌러 Gear2 Samsung을 누르게 되면 [그림 7]과 같은 화면이 나오며 내용이 나오게 된다.

 

[그림 7] Encrypt Key File in clipboard

 

2.3 인증 요청 파일 전송

  해당 파일이 추출 되면 gear2.sec@samsung.org 주소로 certificate-request.xml.gpg 파일과 clipboard 안의 message 내용을 함께 보내게 되면 certificate-registration.xml을 받을 수 있다.

 

2.4 wearable TIZEN IDE에 certificate-registration.xml 등록

  Wearable TIZEN IDE 등록은 IDE에서 IDE > Help > Help Contents > Getting Started with Tizen Wearable > Tizen SDK for Wearable > Certificates 에 들어가 등록정보를 확인 할 수 있다.

 

 

3. 결론

  차세대 스마트 기기로 각광받고 있는 스마트 워치 개발에 있어서 필요한 인증 권한 획득에 대해 알아보았다. 다른 디바이스의 개발에 비해 Wearable TIZEN 개발 환경 구축이 다소 힘든 면이 있다. 하지만 한번의 인증으로 GLAXY Apps Seller Office 등록까지 할 수 있으니, 개발환경만 구축한다면 손쉽게 개발할 수 있을 것이다.

  본 문서를 참고하여 개발 환경을 손쉽게 구축하고, 스마트 폰과 연계 통신을 통해 안드로이드 스토어뿐만 아니라 Wearable gear store에도 많은 Application이 나올 수 있도록 기원하며 이 문서를 마친다.

 

 

4. 참고 문헌


  1. http://developer.samsung.com/samsung-gear
  2. https://developer.tizen.org/dev-guide/2.2.1/org.tizen.native.apireference/privlevel.html

 

저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
  1. 서현철 2015.03.16 16:25 신고 Addr Modify Reply

    인증이 이렇게 복잡한줄 몰랐네요.

    제너레이트 써티피 위에 사진 보면

    빨간색 훈장모양에 빨간색 네모가 되어 있잖아요.

    그리고 옆에 두개가 더있고..

    제 타이젠 2.2.1 에는 3개가 다 없는데..

    어떻게 만들수 있나요?

Comment

The following code example is taken from the book
The C++ Standard Library - A Tutorial and Reference
by Nicolai M. Josuttis, Addison-Wesley, 1999
© CopyrightNicolai M. Josuttis 1999


// myalloc.hpp

#include
 <limits>

#include <iostream>

 

namespace MyLib {

       template <class T> class MyAlloc {

       public:

             // type definitions

             typedef T        value_type;

             typedef T*       pointer;

             typedef const T* const_pointer;

             typedef T&       reference;

             typedef const T& const_reference;

             typedef std::size_t    size_type;

             typedef std::ptrdiff_t difference_type;

 

             // rebind allocator to type U

             template <class U> struct rebind {

                    typedef MyAlloc<U> other;

             };

 

             // return address of values

             pointer address (reference value) const {

                    return &value;

             }

             const_pointer address (const_reference value) const {

                    return &value;

             }

 

             /* constructors and destructor

             * - nothing to do because the allocator has no state

             */

             MyAlloc() throw() { }

             MyAlloc(const MyAlloc&) throw() { }

             ~MyAlloc() throw() { }

             template <class U> MyAlloc (const MyAlloc<U>&) throw() {}

 

             // return maximum number of elements that can be allocated

             size_type max_size () const throw() {

                    return std::numeric_limits<std::size_t>::max() / sizeof(T);

             }

 

             // allocate but don't initialize num elements of type T

             pointer allocate (size_type num, const void* = 0) {

                    // print message and allocate memory with global new

                    std::cerr << "allocate " << num << " element(s)"

                           << " of size " << sizeof(T) << std::endl;

                    pointer ret = (pointer)(::operator new(num*sizeof(T)));

                    std::cerr << " allocated at: " << (void*)ret << std::endl;

                    return ret;

             }

 

             // initialize elements of allocated storage p with value value

             void construct (pointer p, const T& value) {

                    // initialize memory with placement new

                    new((void*)p)T(value);

             }

 

             // destroy elements of initialized storage p

             void destroy (pointer p) {

                    // destroy objects by calling their destructor

                    p->~T();

             }

 

             // deallocate storage p of deleted elements

             void deallocate (pointer p, size_type num) {

                    // print message and deallocate memory with global delete

                    std::cerr << "deallocate " << num << " element(s)"

                           << " of size " << sizeof(T)

                           << " at: " << (void*)p << std::endl;

                    ::operator delete((void*)p);

             }

       };

 

       // return that all specializations of this allocator are interchangeable

       template <class T1, class T2>

       bool operator== (const MyAlloc<T1>&, const MyAlloc<T2>&) throw() {

                    return true;

       }

       template <class T1, class T2>

       bool operator!= (const MyAlloc<T1>&, const MyAlloc<T2>&) throw() {

                    return false;

       }

}

 

// myalloc.cpp

#include
 <vector>

#include "myalloc.hpp"

 

int main()

{

       // create a vector, using MyAlloc<> as allocator

       std::vector<int,MyLib::MyAlloc<int> > v;

 

       // insert elements

       // - causes reallocations

       v.push_back(42);

       v.push_back(56);

       v.push_back(11);

       v.push_back(22);

       v.push_back(33);

       v.push_back(44);

}


저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

Comment



티스토리 툴바