회원 및 비회원 모두 열람이 가능합니다. 최대 업로드 가능한 용량은 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:07:46
*.200.239.234

좋은 자료 감사드립니다.


http://www.aesop.or.kr/?mid=Board_Documents_AndroidAppDev

게시판으로 복사해 놓았습니다.


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:37
*.200.239.234

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


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


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

stshyoung

2011.04.11 19:33:00
*.169.50.208

아 ~ 그렇군요~ ㅎㅎ

 

댓글 감사합니다~~^^*

 

 

stshyoung

2011.04.12 03:09:38
*.169.50.208

오늘 s3c2410_serial1, s3c2410_serial3을 연결 하여 PC와 통신 하는데 성공 했습니다.

(회사 분이   J5쪽 축력 부와 PC와 연결 할 수 있게 회로를 꾸며 주셨내요 ㅎㅎ)

 

Odroid -T J5쪽 전원이 3.3v출력이라고 본거 같은데 실제로 전압을 재보니 2.6v가량 나오더군요.

 

H/W연결은 칩(Level Shifter)과 저항 같은거 쓰고, RS232 연결 짹 2개로 했는데 회로는 잘모르겠네요 ^^;;;

 

 

[WEEDS]하이얀

2011.04.13 05:40:48
*.238.78.61

can-c100 com통신에서 권한문제 때문에 한참 고생했는데 큰 도움이 됬습니다.

감사합니다~!

List of Articles
번호 제목 글쓴이 날짜 조회 수sort
공지 교육 홍보 및 광고는 "교육 및 세미나 홍보" 게시판을 이용해 ... 관리자 2010-07-15 107998

Android 2.1 eclair를 S3C6410에 포팅을 하면서.... [4]

리눅스 커널 3.6 과 쿼드코어 Exynos 4412 [2]

[ffmpeg]찬구는 크리티컬 데미지를 입었습니다. [9]

[뻔뻔] 이제부터 나도 "강남인" ㅎㅎ (뻔뻔스터디 강남 1호점) file [2]

S5PC100용 Android Multimedia Player 결국 직접 만들어야 ... [5]

[안드로이드] 생강빵/Gingerbread 소스가 풀렸습니다. [1]

Android Serial(COM)Port 사용 하기(Odroid -T) file [6]

EXYNOS-4210 초소형 개발 보드 소개 [6]

ODROID 무선랜 MAC address 변환 프로그램 [2]

삼성 S5PV310(Exynos4 series) 저가보드 간단한 사양 [19]

오픈소스 프로젝트와 오드로이드 file [23]

Odroid 동영상플레이어 file [3]

  • skiman
  • 2009-11-11
  • 조회 수 7090

AESOP-S5PV210, SD에 U-boot 쓰기 및 부팅 [2]

우분투 온 엑시노스 file [18]

여러분들은 빌드업 PCB 제작의뢰를 어디에 하시나요? [3]

진저브레드 32bit 에서 build 하려면 다음과 같이 하면 된대요 [5]

[정보] 삼성 스마트폰 M480(미라지)에 안드로이드 올라간 화면 file [2]

축하합니다. :) [1]

Android와 SDL(Simple Direct Layer) library.... [4]

aESOP-S5PC100 Board 리눅스 커널 부팅 로그 입니다. [2]

사용자 로그인