본문 바로가기

전체 글571

안드로이드 하드웨어 서비스 03 텔레포니 프레임워크 (3) 3G 이동톤신까지 CDMA와 GSM 사업자가 공존하였으나 CDMA 계열이 새로운 기술의 전화를 포기함으로써 대부분의 CDMA 이동통신 사업자는 4G 네트워크 방식으로 GSM 계열의 LTE 통신 방식을 동비하고 있음. 기존의 CDMA 이동통신 사업자가 CDMA 네트워크뿐만 아니라 GSM 계열의 LTE 네트워크를 지원할 수 있도록 CDMALTEPhone, CdmaLteServiceStateTracker 등과 같은 새로운 클래스가 추가됨. 이동통신 네트워크를 지원하지 않는 안드 디바이스를 고려하여 텔레포니 프레임워크 소스 위치를 frmeworks/vvase/telephony에서 frameworks/op/telephony로 이동함 3.3 텔레포니 프레임워크의 초기화 3.3.1 Phone 애플리케이션의 생성 안드.. 2021. 5. 26.
안드로이드 하드웨어 서비스 03 텔레포니 프레임워크 (2) 3.2.3 PhoneProxy 클래스 폰프록시 클래스의 주요 역할은 폰 제어를 위한 Phone API를 제공하며 RAT에 상관없이 공통적인 폰 제어 방법을 제공하는 것임. RAT가 스위칭되면 해당 폰 객체 또한 스위칭되므로 텔레포니 프레임워크는 공통의 폰 제어 API를 제공하기 어려움. 따라서 폰 앱이 하부 RAT에 의존하지 않고 공통의 폰 제어 방법을 사용할 수 있도록 PhoneProxy 클래스가 필요함. 프록시 패턴의 장점은 실제 객체와 동일한 인터페이스를 구현한 프록시를 통해 접근하여 클라이언트로부터 최적화와 세부적인 구현 내용을 감추어 코드를 단순화하게 함. 3.2.4. Phone 인터페이스 registerForIncomingRing()는 EVENT_INCOMING_RING 이벤트와 같은 서비스 .. 2021. 5. 26.
안드로이드 하드웨어 서비스 03 텔레포니 프레임워크 (1) 텔레포니 프레임워크는 다른 하드웨어 서비스와 달리 폰 앱에 의해서 초기화되며 폰 앱 내에서 실행됨. 폰 앱과 텔레포니 프레임워크가 하나의 프로세스에서 실행되도록 구현된 이유는 네트워크의 특성상 네트워크로부터 전달되는 응답이 올 시점을 예측하기 어려우므로 비동기 통신 방식을 사용하기 때문임. 3.1.1 텔레포니 프레임워크의 기능 TelephonyManager를 통해 한정적인 네트워크 정보를 제공함. 텔레포니 프레임워크는 유닉스 도메인 소켓을 통해 릴 데몬과 통신함. 보통 모뎀은 모뎀 크래쉬가 발생하면 크래쉬의 원인을 규명하기 위해 크래쉬 직전의 레지스터와 스택 메모리의 덤프를 저장함. 안드는 일반적인 SDK앱에 TelephonyManger를 통해 제한적으로 가입자 정보와 네트워크 정보를 제공함 3.1.2 .. 2021. 5. 26.
안드로이드 하드웨어 서비스 02 RIL (2) 2.3 RIL 데몬의 구조 2.3.3 RIL 이벤트 스케줄러 릴 데몬은 외부 또는 내부로부터 발생되는 RIL 이벤트를 처리해야 함. hardware/ril/libril/ril_event.cpp에 ril_event_add()함수 분석. 2.4 릴 데몬 초기화 릴 데몬이 실행되면 가장 먼저 벤더 릴을 동적으로 로딩하고 벤더 릴은 릴 데몬으로부터 릴 resp와 릴 ind를 처리할 수 있는 Radio 응답 함수의 함수 포인터를 얻음. 릴 데몬이 모뎀을 제어하기 위해 필수적으로 벤더 릴이 필요함. 벤더 릴은 공유 라이브러리 형태로 존재함 릴 데몬은 모뎀을 제어하기 위해 벤더릴을 동적으로 로딩함. 2.4.4 릴 에빈트 스케줄러 생성 2.4.5 벤더 RIL 초기화 릴 데몬의 콜백 함수를 벤더 릴에 설정, mainLo.. 2021. 5. 25.
Jenkins를 활용한 SW 통합 및 배포 관리 개념 (2) CPP 빌드를 위한 Item 생성1 소스코드 관리 빌드를 이해 소스코드 저장소에서 소스코드를 가져오는 설정. Git의 경우 Granch 지정이 중요함. 빌드를 언제 수행할 것인지 지정. Build periodically와 Poll SCM의 일정 지정은 cron 표기법을 사용함. CppCheck - 정적분석 도구 연동1 안좋은 방식이라 알려진 코드의 발견. 컴파일 에러는 아니지만, 나중에 문제를 발생시킬 수 있는 코드 탐지. 룰 코드 정적 분석. 예를 들어 Connection 열었으면 명시적으로 닫았는지, int i 의미없는 변수 이름을 생성하여 사용하고 있는지. 매개변수를 많이 사용하였는지. case 마다 break; 문을 잘 사용했는지, final에서 return 금지했는지, 빈 if 문장은 피했는지 .. 2021. 5. 22.
Jenkins를 활용한 SW 통합 및 배포 관리 개념 (1) 지속 통합 도구 - Jenkins 웹 기반 오픈소스 CI 도구 점유율 약 70% 버전관리 도구에서 최신 리비전을 체크아웃 받아, 주어진 명령대로 빌드하여, 결과를 게시/전달함 Jenkins 운영을 위한 서버 준비 Azure로 window10을 원격접속으로 접속함 자바 설치, Tomcat 8, git, visual studio 2019용 Build Tools 환경 변수 path에 추가함 Jenkins 설치 port 8080 -> 8081 FIrwall Exception : jenkins JENKINS_HOME value 를 변경함 Service : Jenkins -> restart localhost:8081 으로 웹접속 가능함 was상에 jenkins war파일을 실행하는 방식 WAR 사용 1. jenki.. 2021. 5. 22.
안드로이드 하드웨어 서비스 02 RIL (1) RIL은 크게 릴 데몬과 벤더 릴 라이브러리로 구성되어 있음. 릴 데몬은 벤더 릴을 동적으로 로딩하여 모뎀을 제어하고 모뎀으로부터 응답을 수신함. 안드로이드 릴 구조, 릴 데몬의 초기화, 릴 이벤트 스케줄러의 릴 이벤트 처리 메커니즘에 대해서 소개함. 안드로이드 RIL은 텔레포니 프레임워크와 모뎀 간의 HAL을 제공함. 모뎀의 프로토콜 스택 관련 구현 사항은 모뎀 벤더에 따라 다르며 모뎀 벤더의 고유 자산이므로 공개되지 않는다. 2.1.3 AP와 모뎀 간의 통신 : RIL 명령 RIL은 AP가 모뎀을 제어하기 위해 RIL 명령을 제공함. 초장기 버전인 컵케익의 경우 Solicited RIL 명령은 103개, Unsolicited RIL 명령은 29개임. 텔레포니 프레임워크는 모뎀에 서비스를 요청할 때 위.. 2021. 5. 19.
안드로이드 하드웨어 서비스 01 안드로이드 하드웨어 서비스 (3) 1.4 ITC(Inter Thread Communication) 쓰레드의 공유 객체를 이용하는 방법. UI 작업은 main 쓰레드에서 그 이외의 시간이 오래 걸리는 작업은 worker 쓰레드에서 처리하여 main 쓰레드가 블록 상태에 빠져 ANR이 발생하는 것을 방지함. 쓰레드는 프로세스의 자원을 공유하지만, 독립적으로 실행되므로 여러 가지 작업이 동시에 실행되어야 하는 경우 각 작업을 쓰레드에 분담시켜 동시에 처리할 수 있음. 안드로이드의 자바 앱은 멀티 쓰레드를 지원함. 멀티 쓰레드 간 통신을 위해 핸들러와 루퍼를 제공함. 루퍼 기반의 핸들러를 이용하여 통신할 수 있음. 하나의 핸들러는 하나의 루퍼에 연결될 수 있음. 루퍼는 여러 개의 핸들러를 가질 수 있으며 메시지를 정확하게 목적지 핸들러에 전달할.. 2021. 5. 19.
안드로이드 하드웨어 서비스 01 안드로이드 하드웨어 서비스 (2) 1.2 IPC(Inter Process Communication) 프로세스는 독립된 실행 객체로 서로 다른 프로세스는 서로 다른 주소 공간에서 실행됨. 프로세스 간에 영향을 받지 않는 장점이 있지만 주소 공간이 독립되어 있는 만큼 별도의 프로그래밍 장치가 없이 서로 간의 통신이 어려움. 안드로이드 네이티브 데몬 서비스에서 주로 사용하는 리눅스 커널 IPC인 파이프와 유닉스 도메인 소켓을 소개하고. ppid가 1인 프로세스는 init 프로세스에 의해 생성된 데몬 프로세스임. 데몬 프로세스는 init 프로세스가 fork(), exec() 호출하여 새로운 데몬 프로세스를 만들음. Zygote 프로세스는 시스템 서버를 생성하고 각종 자바 앱을 생성함. 유닉스와 리눅스에서 새로운 프로세스를 만드는 함수는 fork.. 2021. 5. 19.