포럼 회원으로 등록하신분만 다운로드가 가능합니다. 최대 업로드 가능한 용량은 20MB 입니다.

Android Serial(COM)Port 사용 하기(Odroid -T)


1) Serial Program 받기
        http://code.google.com/p/android-serialport-api/
         Serial Port 관련 정보을 얻을 수 있습니다.
         JNI로 개발 형태로 되어 있습니다.


         Source는 http://android-serialport-api.googlecode.com/svn/trunk/android-serialport-api/
         에서 하나씩 Download 했습니다 . 한번에 받는게 어찌 하는건지 원 ㅠㅠ)

 

2) Cygwin을 통해 포함된 "SerialPort.c"를 컴파일
        Cygwin  ( http://www.cygwin.com/ )
        Android NDK  (http://developer.android.com/sdk/ndk/index.html)

 

        NDK를 받으시면 최신 "android-ndk-r5b"를 받게 되실껍니다.(android-ndk-r5b-windows.zip)
         이전 버전과 컴파일 방식이 약간 다르더군요.
         해당 Project에 jni 폴더에서 "ndk-build -B"를 실행 해야 합니다.
         (ex:"/home/AnNDK/android-ndk-r5/ndk-build -B")
         Cygwin.jpg
3) Eclipse로 앱 컴파일 및 실행
         다운로드 받은 Serial Program을 Eclipse에 로딩(Import)
        Android 시뮬래이터로 연결(혹은 보드로 바로 연결)
        (보드로 바로 연결시에는 adb Driver가 모두 깔릴 상태에서는 자동으로 잡힙니다)


여기까지는 일반적인 JNI 개발및 설정을 하는것입니다.
        (저처럼 처음 하시는 분들은 여러 문서들이 잘 올라와 있으니 잘 찾아보세요.)
        (설정할것도 많고 찾아 봐야 할것도 많고....ㅠㅠ)

        샘플 프로그램도 포함되어있으니 Test도 해보시고 하면 될껍니다.


Program 준비가 완료되었고 실행만 하면 됩니다.

1) 권한 Error
         "You do not have read/write permission to the serial port"

2) 권한 해결-1

         system/cor/init/devices.c에서 
         다음과 같이 추가 하여 권한변경하였습니다.

         { "/dev/s3c2410_serial0",       0777,   AID_ROOT,       AID_ROOT,      0 },
         { "/dev/s3c2410_serial1",       0777,   AID_ROOT,       AID_ROOT,      0 },
         { "/dev/s3c2410_serial2",       0777,   AID_ROOT,       AID_ROOT,      0 },
         { "/dev/s3c2410_serial3",       0777,   AID_ROOT,       AID_ROOT,      0 },
         { "/dev/ttyS0",       0777,   AID_ROOT,       AID_ROOT,      0 },
         { "/dev/ttyS1",       0777,   AID_ROOT,       AID_ROOT,      0 },
         { "/dev/ttyS2",       0777,   AID_ROOT,       AID_ROOT,      0 },
         { "/dev/ttyS3",       0777,   AID_ROOT,       AID_ROOT,      0 },

         /dev/s3c2410_serial0~3은 Odroid-T에서 사용 하는 시리얼 포트입니다.

 

        * ttySAC와 ttyS0의 차는 잘 모르겠내요.. ^^;;;

        시리얼 포트 앱을 실행 하면 Serial Port가 검색 됩니다.
         (저는 총 8개가 잡혀서 모두 777권한으로 바꿨습니다.)
         권한 관련 검색해보시면 많은 자료가 나옵니다.(너무 많다 ㅠㅠ)

 

2) 권한 해결-2
        Superuser 권한 받기 일명 Rooting하기.
        Root Me : Fail
        Universal Androot :  Fail
        SuperOneClickv1.7-ShortFuse : Sucess


         저는 여러가지 돌려 봤는디 "SuperOneClick"로 성공 했습니다.
         (Root Me와 Universal Androot는 앱형태로 Rooting을 하고,
         SuperOneClick는 adb연결로 Rooting을 합니다.


        * Serial Port Program중 public SerialPort()함수를 보면 이런 부분이 있습니다.

                          Process su;
                           su = Runtime.getRuntime().exec("/system/bin/su");
                           String cmd = "chmod 666 " + device.getAbsolutePath() + "n" + "exitn";
                           su.getOutputStream().write(cmd.getBytes());
         Superuser 권한으로 권한을 바꾸는 부분입니다.(su -> superuser라는 말 ^^;;)

 

         1번 형태로 권한을 풀경우 요부분이 없어야겠죠? ㅎㅎ

         저는 1번 2번 모두 적용 했습니다.

 

3) 그럼 권한문제는 모두 해결 Program 실행 
         "The serial port can not be opend for an unknown reason." 라는 문구와 함께 Open 중단.
         "IOException"에 걸려서 더이상 진행이 안되는군요.

         http://code.google.com/p/android-serialport-api/에서 확인한결과 (찾는데 올래 걸렸음 ㅠㅠ)
         SerialPort.c파일에서 open Function에서

         fd = open(path_utf, O_RDWR | O_DIRECT | O_SYNC); ====>>> fd = open(path_utf, O_RDWR | O_SYNC);

         O_DIRECT를 빼면 된다는군요. 
         빼내고 다시 컴파일.

         

        *O_DIRECT는 아래링크에 설명이 있내요. (뭔소리인지 원~ ㅡ,.ㅡ;;;)

         http://www.ezdoum.com/upload/2/20020718010518/AArcangeli-o_direct.htm

 

4) 자~ 그럼 다시 확인 Go Go

        우선 "/dev/s3c2410_serial2"를 Open하여 PC쪽과 통신 하니 주고 받고 잘하내요.

         Odroid T에서 /dev/s3c2410_serial2를 Debugging용으로 연결 할 수 있어서 Test에 사용
 
        차후에는 /dev/s3c2410_serial1, /dev/s3c2410_serial3을 주로 사용할 예정입니다.
        (추가 3.3v->12v(15v) 변환 레밸쉬푸터를 더 달고요.)

 

====================================================================

 

아~ 모든게 초행길이라(ㅡ.,ㅡ) 돌인지 떵인지 구별이 안되내요....

/dev/s3c2410_serial1 , /dev/s3c2410_serial3번 연결해서

시리얼 모니터링 앱을 만든후에 1차 Serial Port사용을 마물 해야 겠네요.

앱개발도 공부 할겸~.

 

아 ~

ttyS0 이랑 ttySAC에 대해 아시는분 알려주세요~ ^^* (정말 궁굼함 ㅡ.,ㅡ;;)

 

ttyS0가 리눅스에서는 Serial Port라고 하던데.........
여전히 ttyS0~3은 "IOException"에 걸려서 통신이 안되는군요 (ㅎㅎ)

O_DIRECT 를 사용 못하는 이유도 궁굼하구요.

 

문제 해결에 도움주신 분들게 감사 드립니다.

(제 질뭉에 답변글 올려주신 부들께도 감사 드립니다. *^^*)

 

 

 

 


이제현

2011.04.11 00:22:08
*.90.137.102

직렬 통신 드라이버가 필요한 많은 분들께 도움이 되는 좋은 자료 감사합니다.


ttyS0~ttyS3는 실제 UART 하드웨어가 존재하는 device node가 아닙니다.

리눅스/유닉스에서 사용되던 포트가 그냥 형식적으로 파일만 남아 있다고 보시면 됩니다.


물론 범용 리눅스 소스들을 그 대로 사용하고 싶다면, 삼성 시리얼 디바이스 드라이버 소스를 수정해서 s3c2410_serial0~3 대신에 ttyS0~ttyS3가 활성화 되도록 적용해도 좋겠고요.

관리자

2011.04.11 03:08:06
*.200.239.234

좋은 자료 감사드립니다.


1. ttyS0 ~ 3 은 PC용 serial device 이름입니다.

리눅스에 Embedded가 포함되면서 많은 칩벤더들이 UART들에 다르게 이름을 붙이기 시작했습니다.


리눅스 2.6 공식 시리얼 디바이스 이름은 반드시 /dev/tts/0 ~ 3 이런식으로 붙이도록 되어 있습니다만

칩벤더들이 맘대로 붙여서 사용합니다.


삼성의 경우는 s3c2410_serial0 ~ 3 으로 보시면 되고, 리눅스 공식으로 맞추기 위해서는 소프트 링크를

/dev/tts/0~3 으로 걸어줘야 합니다.


리눅스에서 시리얼 디바이스는 터미널 개념이기 때문에 Android의 경우 외에는 반드시 /dev/tts/0 와

같은 방식으로 해 주셔야 합니다.


해서 s3c2410_serial0~3은 터미널 디바이스입니다. 즉, printf 가 나오는 곳이라는 얘기입니다.


2. ttySAC0 ~ 3은 console device입니다. 1번과는 틀린 개념으로 원격으로 접속할 수 없는 디바이스입니다.

간단하게는 kernel console이라고 보시면 되고요. printk가 나오는 곳이라는 얘기입니다.


^^


관리자

2011.04.11 03:09:18
*.200.239.234

참 소스를 한꺼번에 받는 방법은 리눅스나 아니면 windows용 svn client 프로그램을 사용하셔야 합니다(ex> tortoise svn)


리눅스에서는 다음과 같이 하시면 됩니다.


svn checkout http://android-serialport-api.googlecode.com/svn/trunk/ android-serialport-api-read-only

관리자

2011.04.11 03:12:24
*.200.239.234

또 하나, O_DIRECT는 아마도 cache를 하지말고, 바로 송/수신 하라는 얘기일 듯 합니다.


좀 더 자세하게 읽어봐야 하긴 하지만요

안드로맨

2011.04.21 06:03:49
*.81.151.185

su -> switch user

근영이

2011.06.27 05:42:57
*.115.230.191

이제 공부를 시작한 학생입니다.


system/cor/init/devices.c


이파일이 정확히 어떤파일인지 알수 있을까요?

아무리 찾아도 찾을수가 없어서요..ㅠㅠ

List of Articles
번호 제목 글쓴이 날짜 조회 수
34 안드로이드 멀티미디어(Android Multimedia) 간단한 정리 사이트 고도리 2020-01-19 227
33 iperf-2.0.4 for android file 고도리 2013-01-23 4582
» Android Serial(COM)Port 사용 하기(Odroid -T) file [6] stshyoung 2011-04-08 18449
31 흔들어서 전화 받기 file [2] 루비아빠 2011-02-18 10607
30 안드로이드용 skype 어플리케이션 정식버전. file 유형목 2010-10-07 11272
29 안드로이드 choosecombo howto [4] 최규호 2010-05-15 14556
28 구글 안드로이드 오픈코어 S/W 분석 사이트 링크 ... 장석원 2010-03-27 13381
27 The dedexer disassembler file [2] 최종환 2010-03-02 12810
26 Understanding the Dalvik bytecode with the Dedexer tool file [1] 최종환 2010-03-02 12956
25 Android Key Generate 프로그램 file 최종환 2010-03-02 12398
24 droiddraw.org 라는 싸이트가 있네요 전호철 2010-02-26 12117
23 Android 포팅 및 개발방법 개요 file [24] 고도리 2010-02-22 22732
22 AndroidOptimizationStudies file [4] 최종환 2010-02-22 11434
21 Developing for Android file [6] 최종환 2010-02-22 11933
20 Android Doom~ file [10] 최종환 2010-02-09 13336
19 구글 크롬 OS 다운로드 [1] 김충헌 2009-11-21 21863
18 Google Chrome OS 다운이 가능 한거같군요 [1] 최종환 2009-11-21 12515
17 Google Chrome OS vmware 이미지 돌려 본것입니다. file 최종환 2009-11-21 13214
16 Android Binder Examples file 김재훈 2009-04-09 17466
15 Apress - Android Essentials (2008) file 김재훈 2009-04-08 11862

사용자 로그인