본문 바로가기

전체 글

(385)
[Linux] 세마포어 설정 #include int sem_init(sem_t *sem, int pshared, unsigned int value);int sem_wait(sem_t * sem);int sem_trywait(sem_t * sem);int sem_post(sem_t * sem);int sem_getvalue(sem_t * sem, int * sval);int sem_destroy(sem_t * sem); sem_init : 세마포어 객체를 value 값으로 초기화. pshared = 0 : 현재 프로세스에서 사용pshared != 0 : 여러 프로세스 간에 공유* 현재 Linux는 세마포어가 여러 프로세스 간에 공유되는 것을 지원하지 않음 sem_wait : 세마포어의 값을 1 줄이고, 세마포어의 값이 0인 경우 대기..
OpenCore Codec 연동 안드로이드 플랫폼의 코덱은 패킷비디오사의 opencore 플랫폼으로 구현되어있고, 코덱 연동을 위해 openmax il 인터페이스 규약을 사용한다. 이전에 포스팅한 오픈맥스 코덱연동은오픈코어 프레임워크상에서 오픈맥스를 구현하는 내용을 다루고 있었다. 단순 코덱만을 연동하고자 할때, 굳이 오픈코어 플랫폼 위에서 오픈맥스를사용해야 하는 것은 아니다. 그러기 위해서 openmax il이 존재하는 것이니...(oscl, pv_omx 등 신경쓸것이 많이지기도 한다..) 코덱만을 동적 로드해 연동하는것은 OpenCore와 분리해 적용하기는 불가능하다.각 코덱도 몇가지 인터페이스를 노출하고 있기는 하지만 oscl_uuid 와 같은 특정 값을 통해로드되도록 이루어져 있기 때문이다. OpenCore를 배제하기 위해서는 ..
GDB 기본환경 1. 에뮬레이터 tcp 리다이렉션 설정호스트에서 텔넷으로 에뮬로 접속한다. 열려진 초기 기본 텔넷 포트는 5554 $ telnet localhost 5554 에뮬레이터로 telnet 접속이 되는데, 몇가지 명령을 줄 수 있다.우린 리다이렉션 설정을 해야 하므로 아래와 같이 입력하낟. redir add tcp:1234:1234 tcp 포트 1234 를 1234로 리다이렉션 한다~ exit 로 telnet 종료 2. gdbserver 를 에뮬레이터에 복사한다.각 툴체인 디렉토리를 보면 플랫폼별로 디렉토리가 구분되어 있는 것을 볼 수 있다. android/prebuilt/android-arm/gdbserver/ 디렉토리에 gdbserver 바이너리가 보인다.요넘을 에뮬레이터에 밀어 넣는다. $ cd ~/and..
오픈코어 코덱 연동 시퀀스 향후 정리가 끝나면 포스팅할 예정이지만 대략적인 절차에대해서만 기술해 둔다~ 현재는 opencore node 쪽을 살펴보느라 진도가나가질 않는다...쩝 베이스 코드는 /external/opencore/codecs_v2/omx/omx_testapp 오픈코어에 포함된 omx il 은 패킷 비디오 오픈맥스 관련 인터페이스로래핑되어 있다.따라서, 실제 사용하는 omx_core 함수들과 약간 차이가 있고,추가적인 구조체 등을 정의해 사용하는 경우도 있다. OMX_Master~ 류로 시작되는 메쏘드들은 OMX_Core.h가 아닌 pv_omxcore.h 에 정의된메쏘드 들이다. 하지만 결국 하는일은 openmax il 규격의 omx_core 관련 메쏘드를호출하게 된다. 일단 전체 내용은 추후 기술하고, 필요한 함수명..
오픈코어~오픈맥스 디코더 추가 오픈코어에서 OpenMax 관련 오브젝트가 등록되는 흐름을 대략 살펴본다.이미 포함되어 있는 mp3 코덱에 대해 어떤 모습으로 프로젝트가 구성되어 있는지확인하면 좋을듯 싶다~ 단순히 openmax 1. UUID 만들기 ANDROID_PATH/exernal/opencore/codecs_v2/omx/omx_common/include/pv_omxcore.h파일을 열어 uuid를 등록한다. 파일에 #if USE_DYNAMIC_LOAD_OMX_COMPONENTS 부분에 보면가 uuid 를 define 하고 있는데, 여기에 등록할 새 코덱의 uuid 를 등록해 준다. 2. 디코더 라이브러리 추가 및 인터페이스 헤더 추가ANDROID_PATH/external/opencore/codecs_v2/ 폴더아래 폴더를 만들고..
안드로이드 플랫폼 포팅~holloworld 샘플 2 * 안드로이드 플랫폼 helloworld 예제 2 *helloworld 예제 2는 c++ 클래스 사용방법을 보여주며, 예제 1과 마찬가지로안드로이드 플랫폼 소스를 사용해 빌드한다. > Helloworld.cpp#include #include #include "test.h" int main(int argc, char** argv) {CMyTest *temp=NULL;temp = new CMyTest();temp->testSample();delete temp;temp = NULL; return 0;} > Test.h#pragma once class CMyTest {public:CMyTest();~CMyTest();void testSample(); }; > Test.cpp#include #include #in..
안드로이드 플랫폼 동적 링크 설정 공유 라이브러리 링크 포함시키기~ & 바이너리 실행 오류~ 기존에 작성한 안드로이드 플랫폼 HelloWorld 예제 는 기본적인 c, c++ 라이브러리만 포함시켜빌드, 링크 했었다. 이런경우는 크게 문제될게 없는데.. 안드로이드의 공유라이브러리들을 사용하고자하는 경우에는 슬금슬금 문제점이 많아지기 시작한다.static 라이브러리는 빌드 시점에 링크되어 포함되지만 dynamic(shared) 라이브러리는실행시점에 링크되어야 한다. 공유 라이브러리를 사용해 빌드하면 정상적으로 바이너리가 생성되나 실제 안드로이드에넣어보면 해당 바이너리는 실행되지 않고, 찾을 수 없다는 메시지만 나타난다. # ./helloworld# helloworld: not found 그리고, arm 링커 관련해 링크 정의가 되지 않는 경..
안드로이드 플랫폼 HelloWorld * HelloWorld 안드로이드 포팅 * 작성한 어플리케이션을 안드로이드에 포함시키기 위해서는 arm-eabi 툴체인과 안드로이드 헤더/라이브러리들이 필요하다. 툴체인 및 헤더, 라이브러리는 ndk를 사용해도 되나,플랫폼 소스에도 NDK가 포함되어 있으니 플랫폼 소스를 사용해 빌드하도록 한다. 0. 안드로이드 플랫폼 소스 다운로드0. 관련 PATH 정보( 1.6 donut 기준이며, 플랫폼 소스위치가 ~/donut/ 인 경우 )INCLUDE = ~/donut/development/ndk/build/platforms/android-4/arch-arm/usr/includeLIB = ~/donut/development/ndk/build/platforms/android-4/arch-arm/usr/lib 0. ..