소스 분석중 system_server 와 mediaserver 의 코드는 동일한 동작을 보이고 있습니다.
그래서 저번 스터디시에 혼동이 있었는데요. 훓어 보니 동일한 동작이 아니였습니다.
타겟의 ps 로 보면, mediaserver 가 system_server 보다 빨리 시작되었다는 것을 알 수 있는데, 저희는 zygote 를 따라 가다 보니 system_server 를 먼저 분석하게 되었지요.
우선 이번주 스터디를 위해서 각각의 역할을 클리어 하게 정의 되어야 할 것 같다.
프로세스의 상태를 보면 아래와 같습니다.
root 1 0 280 192 c00bd90c 0000c8dc S /init
:
root 1783 1 69252 19788 c00bd90c afe0c584 S zygote
media 1784 1 16232 3620 ffffffff afe0c45c S /system/bin/mediaserver
system 1807 1783 185064 26652 ffffffff afe0c45c S system_server
mediaserver 는 init 에 의해서 생성 되었고,
system_server 는 zygote 에 의해서 생성 되었다.
코드를 분석하면, 먼저 system_server 를 저번 주에 보았습니다.
자세히 보면, system_server 는 SurfaceFlinger::instantiate(); 만 실행하도록 되어 있습니다. proc->supportsProcesses() 는 true 를 리턴하도록 되어 있기 때문이지요.
이로서 저번 시간에 왜 동일한 동작을 할까에 대한 부분은 해결 되었습니다.
proc->supportsProcesses() 를 false 로 되는 환경이 있나 봅니다.
// frameworks/base/cmds/system_server/library/system_init.cpp
:
if (strcmp(propBuf, "1") == 0) {
// Start the SurfaceFlinger
SurfaceFlinger::instantiate();
}
// On the simulator, audioflinger et al don't get started the
// same way as on the device, and we need to start them here
if (!proc->supportsProcesses()) {
// Start the AudioFlinger
AudioFlinger::instantiate();
// Start the media playback service
MediaPlayerService::instantiate();
// Start the camera service
CameraService::instantiate();
}
:
실제로 mediaserver 에서 아래 서비스 provider 들이 시작 될 것입니다.
AudioFlinger::instantiate();
MediaPlayerService::instantiate();
CameraService::instantiate();
// frameworks/base/media/mediaserver/main_mediaserver.cpp
int main(int argc, char** argv)
{
sp<ProcessState> proc(ProcessState::self());
sp<IServiceManager> sm = defaultServiceManager();
LOGI("ServiceManager: %p", sm.get());
AudioFlinger::instantiate();
MediaPlayerService::instantiate();
CameraService::instantiate();
ProcessState::self()->startThreadPool();
IPCThreadState::self()->joinThreadPool();
}
'안드로이드 > 플랫폼' 카테고리의 다른 글
Goldfish-emulator용 커널 빌드 (0) | 2009.10.20 |
---|---|
ADB 사용 (0) | 2009.10.18 |
결과물 (0) | 2009.09.30 |
service_manager 흐름 (0) | 2009.08.25 |
init 분석 open 하는 디바이스 - null, kmsg (0) | 2009.08.18 |