1 Tizen 실습예제 : Remote Key Framework 시스템소프트웨어특론 (2014 년 2 학기 ) Sungkyunkwan University
Contents 2 Motivation and Concept Requirements Design Implementation Virtual Input Device Driver 제작 Tizen Service 개발절차 Github에공개하기
Motivation 3 ODROID-U3 와 ODROID-VU 에는 home key, back key, menu key 로사용할수있는버튼이없어서기기를조작하기매우불편함?
Concept 4 Android 스마트폰으로원격으로 Tizen 장치를조종하는프레임워크제작
Requirements 5 Android 장치와 Tizen 장치를무선으로연결 Bluetooth, RFCOMM 프로토콜 Android 과 Tizen 의 Bluetooth framework 사용 Tizen 장치에키입력생성 input device driver 제작 Tizen Service 로제작 Systemd 설정변경 손쉬운 Debugging Dlog 사용 Pacakge 로손쉽게배포가능해야함 RPM package 로묶기
Design 6 Client (Android Application) UI for end users, Tizen 장치와 Bluetooth 연결 Server Service (Tizen Framework Service) Android 장치와 Bluetooth 연결, virtual input D/D 에명령 Virtual Input Device Driver (Kernel Module) Server Service 로부터명령이들어오면 key code 생성 Android Phone Client Application Bluetooth/ RFCOMM ODROID-U3 (Tizen) Applications Framework Message Server Service Framework X11 & EFL Kernel Kernel Virtual Input Device Driver evdev
Virtual Input Device Driver 제작 7 Input Device Driver platform device 로 hostlevel device driver 제작 host driver 가 evdev (event device driver) 와연결 evdev 가 udev 에 event 전송 udev 에서 xinput 으로 device event 전송 xinput 에서확인가능
Host Device Driver 8 Platform Device 등록 Input device 구조체할당 Sysfs event 등록 Keymap 등록및 bus type, name 등록 evdev 에 input device 등록
Host Device Driver (cont) 9 Input device 에 KEY_XFER (key 147) input event 발생시킴. Input sync 를통해 input event sync sysfs 에등록된 homekey device 에입력값을전송할수있도록함.
Tizen Service 개발절차 (1/7) 10 1. Git repository 만들기 2. 각종설정파일만들기 1. RPM package specification 파일 2. 빌드설정파일 (CMakelists.txt) 3. Pkgconfig 설정파일 4. SMACK manifest 파일 5. Systemd service 파일 3. 코딩 4. 빌드 5. 패키지설치
Tizen Service 개발절차 (2/7) 11 1. Git repository 만들기 Tizen 소스코드중, framework/system 이가장적합한위치라고판단 1. $ cd ~/tizen-platform/framework/system 2. $ mkdir remote-key-framework 3. $ cd remote-key-framework 4. $ git init Initialized empty Git repository in /home/user/repository/tizen/2.2/framework/system/remote-key-framework/.git/
Tizen Service 개발절차 (3/7) 12 2. 각종설정파일만들기 Tizen project 들은최소한다음파일들이필요 AUTHORS: 제작자목록 LICENSE: 라이선스명세 CMakeLists.txt: cmake 설정파일 ( 전반적인빌드설정 ) <project-name>.manifest: SMACK manifest 파일 packaging <project-name>.manifest: SMACK manifest 파일 <project-name>.spec: RPM package specification 파일 <sub project 1>: 세부디렉토리 CMakeLists.txt: cmake 설정파일 ( 이디렉토리의빌드설정 ) include 헤더파일들 src 소스코드파일들 <sub project 2>, <sub project 3>,
Tizen Service 개발절차 (4/7) 13 Remote Key Service Project 의경우 : AUTHORS: 제작자목록 LICENSE: 라이선스명세 CMakeLists.txt: cmake 설정파일 ( 전반적인빌드설정 ) remote-key-framework.manifest: SMACK manifest 파일 packaging remote-key-framework.manifest: SMACK manifest 파일 remote-key-framework.spec: RPM package specification 파일 remote-key-framework.service: Systemd service 설정파일 server: 세부디렉토리 CMakeLists.txt: cmake 설정파일 ( 이디렉토리의빌드설정 ) include common.h: 공통헤더파일 src main.cpp: 메인소스코드 common.cpp: DLog 관련매크로소스코드
Tizen Service 개발절차 (5/7) 14 3. 코딩 Project 디렉토리내에여러 sub-project 디렉토리를만들어서코딩 기존 Tizen framework 의 source code 를참고하면많은도움이됨. Remote Key Service Framework 에서참고한 project: Bluetooth Native API (framework/api/bluetooth) Android 와동일하게 RFCOMM/Bluetooth 지원 API 가명시된 header 파일들 (framework/api/bluetooth/include) Test case 코드 (framework/api/bluetooth/test): 실제로 API 를사용하는예제를보여줌 Bluetooth WRT API (framework/web/wrt-plugin-tizen/bluetooth) Bluetooth Framework (framework/connectivity/bluetooth-frwk)
Tizen Service 개발절차 (6/7) 15 4. 빌드 Commit 하지않은 working directory 를즉시빌드 $ gbs build -A armv7l --include-all Git repository 에 commit 한소스코드를빌드 $ gbs build -A armv7l
Tizen Service 개발절차 (7/7) 16 5. 패키지설치 빌드후, 다음경로에 rpm 패키지가나옴 ~/GBS-ROOT/local/repos/tizen2.2/armv7l/RPMS/remote-key-framework-1.0.1.rpm (binary package) ~/GBS-ROOT/local/repos/tizen2.2/armv7l/SRPMS/remote-key-framework-src-1.0.1.rpm (source package) $ sdb root on $ sdb push ~/GBS-ROOT/local/repos/tizen2.2/armv7l/ RPMS/remote-key-framework-1.0.1.rpm / $ sdb shell rpm -ivh --nodeps --force remote-keyframework-1.0.1.rpm $ sdb shell reboot -f
Github 에공개하기 (1/4) 17 1. Github 에 git repository 만들기 1. http://github.com 접속 2. New repository 클릭
Github 에공개하기 (2/4) 18 3. reposisotry 이름과세부설명기입
Github 에공개하기 (3/4) 19 2. Git repository 등록하기 1. 내가작업한 project 폴더로이동 2. $ git remote add origin https://github.com/<username>/<project-name>.git ex. $ git remote add origin https://github.com/redcarrottt/remote-key-framework.git
Github 에공개하기 (4/4) 20 3. Git repository 로업로드 1. $ git push <remote name> <remote branch> 1. ex. $ git push origin master Local repository 에있는현재 branch 의모든내용이 remote repository 의 master branch 로업로드됨.
Remote Key FW 소스코드주소 Android Client Application https://github.com/redcarrottt/remote-keyframework-client Tizen Remote Key Server Service https://github.com/redcarrottt/remote-keyframework-service Tizen Virtual Key Device Driver https://github.com/wangmir/virtual_inputdevice