分类: 嵌入式
2011-03-16 10:01:09
调用readyToRun函数用于初始化整个显示系统。
readyToRun()调用过程如下:
(1)执行new DisplayHardware(this,dpy),通过DisplayHardware初始化Framebuffer、EGL并获取OpenGL ES信息。
(2)创建共享的内存控制块。
(3)将EGL与当前屏幕绑定。
(4)初始化共享内存控制块。
(5)初始化OpenGL ES。
(6)显示开机动画。
I/ ( 1650): ServiceManager: 0xa7a0
##是由可执行文件surfaceflinger启动SurfaceFlinger服务的
D/ ( 1650): Main_surfaceflinger.cpp SurfaceFlinger::instantiate();
D/SurfaceFlinger( 1650): SurfaceFlinger.cpp SurfaceFlinger constructor
D/SurfaceFlinger( 1650): SurfaceFlinger.cpp SurfaceFlinger::init()
I/SurfaceFlinger( 1650): SurfaceFlinger is starting
D/SurfaceFlinger( 1650): SurfaceFlinger.cpp SurfaceFlinger::readyToRun() entry
I/SurfaceFlinger( 1650): SurfaceFlinger's main thread ready to run. Initializing graphics H/W...
D/SurfaceFlinger( 1650): DisplayHardware.cpp DisplayHardware constructor
D/SurfaceFlinger( 1650): DisplayHardware.cpp DisplayHardware::init entry
D/FramebufferNativeWindow( 1650): FramebufferNativeWindow.cpp FramebufferNativeWindow constructor entry
##打开framebuffer模块
D/FramebufferNativeWindow( 1650): FramebufferNativeWindow.cpp call framebuffer_open
D/gralloc ( 1650): gralloc.cpp gralloc_device_open entry
D/gralloc ( 1650): gralloc.cpp gralloc_device_open call fb_device_open
D/gralloc ( 1650): Framebuffer.cpp fb_device_open entry
D/gralloc ( 1650): gralloc.cpp gralloc_device_open entry
D/gralloc ( 1650): gralloc.cpp gralloc_device_open exit
D/gralloc ( 1650): Framebuffer.cpp fb_device_open call mapFrameBuffer
D/gralloc ( 1650): Framebuffer.cpp mapFrameBuffer
D/gralloc ( 1650): Framebuffer.cpp mapFrameBufferLocked entry
##打开的是/dev/graphics/fb%u设备
D/gralloc ( 1650): Framebuffer.cpp mapFrameBufferLocked open /dev/graphics/fb%u
##读取FrameBuffer的固定参数,参见内核代码fbmem.c
D/gralloc ( 1650): Framebuffer.cpp mapFrameBufferLocked FBIOGET_FSCREENINFO
##读取FrameBuffer的可变参数, 参见内核代码fbmem.c
D/gralloc ( 1650): Framebuffer.cpp mapFrameBufferLocked FBIOGET_VSCREENINFO
##修改FrameBuffer的可变参数, 参见内核代码fbmem.c
D/gralloc ( 1650): Framebuffer.cpp mapFrameBufferLocked FBIOPUT_VSCREENINFO
##输出配置的FrameBuffer参数
I/gralloc ( 1650): using (fd=8)
I/gralloc ( 1650): id = truly-ILI9327
I/gralloc ( 1650): xres = 240 px
I/gralloc ( 1650): yres = 400 px
I/gralloc ( 1650): xres_virtual = 240 px
I/gralloc ( 1650): yres_virtual = 800 px
I/gralloc ( 1650): bpp = 16
I/gralloc ( 1650): r = 11:5
I/gralloc ( 1650): g = 5:6
I/gralloc ( 1650): b = 0:5
I/gralloc ( 1650): width = 38 mm (160.421051 dpi)
I/gralloc ( 1650): height = 64 mm (158.750000 dpi)
I/gralloc ( 1650): refresh rate = 60.00 Hz
##显示缓冲区到用户空间的映射,参见内核代码fbmem.c
D/gralloc ( 1650): Framebuffer.cpp mapFrameBufferLocked call mmap
D/gralloc ( 1650): Framebuffer.cpp mapFrameBufferLocked exit
D/gralloc ( 1650): Framebuffer.cpp fb_device_open exit
D/gralloc ( 1650): gralloc.cpp gralloc_device_open exit
##打开gralloc模块
D/FramebufferNativeWindow( 1650): FramebufferNativeWindow.cpp call gralloc_open
D/gralloc ( 1650): gralloc.cpp gralloc_device_open entry
D/gralloc ( 1650): gralloc.cpp gralloc_device_open exit
##新建buffers[0]
D/FramebufferNativeWindow( 1650): FramebufferNativeWindow.cpp buffers[0] = new NativeBuffer
##新建buffers[1]
D/FramebufferNativeWindow( 1650): FramebufferNativeWindow.cpp buffers[1] = new NativeBuffer
##buffers[0]分配内存
D/FramebufferNativeWindow( 1650): FramebufferNativeWindow.cpp grDev->alloc buffers[0]
D/gralloc ( 1650): gralloc.cpp gralloc_alloc entry
D/gralloc ( 1650): gralloc.cpp gralloc_alloc set bpp=2
D/gralloc ( 1650): gralloc.cpp gralloc_alloc call gralloc_alloc_framebuffer
D/gralloc ( 1650): gralloc.cpp gralloc_alloc exit
##buffers[1]分配内存
D/FramebufferNativeWindow( 1650): FramebufferNativeWindow.cpp grDev->alloc buffers[1]
D/gralloc ( 1650): gralloc.cpp gralloc_alloc entry
D/gralloc ( 1650): gralloc.cpp gralloc_alloc set bpp=2
D/gralloc ( 1650): gralloc.cpp gralloc_alloc call gralloc_alloc_framebuffer
D/gralloc ( 1650): gralloc.cpp gralloc_alloc exit
D/FramebufferNativeWindow( 1650): FramebufferNativeWindow.cpp FramebufferNativeWindow constructor exit
##并不支持overlay,所以没有它的Log,copybit是公司自己加的
D/SurfaceFlinger( 1650): DisplayHardware.cpp DisplayHardware::init call copybit_open
I/copybit.pnx6715( 1650): ST-Ericsson PNX67xx Copybit IPP, version tag LIBCOPYBIT____VYP1140A____V1.7__E160A__V1.0, driver version 1.0, ready to blit.
##初始化EGL
D/SurfaceFlinger( 1620): DisplayHardware.cpp DisplayHardware::init initialize EGL
D/libEGL ( 1620): libs\egl\egl.cpp egl_init_drivers_locked entry
D/libEGL ( 1620): egl.cfg not found, using default config
D/libEGL ( 1620): libs\egl\egl.cpp egl_init_drivers_locked gEGLImpl[IMPL_SOFTWARE]
D/libEGL ( 1620): Loader.cpp open entry
D/libEGL ( 1620): Loader.cpp open tag=android
D/libEGL ( 1620): Loader.cpp open path=/system/lib/egl/libGLES_android.so
D/libEGL ( 1620): Loader.cpp load_driver entry
D/libEGL ( 1620): loaded /system/lib/egl/libGLES_android.so
D/libEGL ( 1620): Loader.cpp set Function Address of EGL to cnx->egl
D/libEGL ( 1620): Loader.cpp eglGetProcAddress's location is ac413349
##以下是libGLES_android.so里面的EGL库函数
D/libEGL ( 1620): Loader.cpp *api = eglGetDisplay
D/libEGL ( 1620): Loader.cpp curr=abe09a08,it's address is ac4132d5
D/libEGL ( 1620): Loader.cpp *api = eglInitialize
D/libEGL ( 1620): Loader.cpp curr=abe09a0c,it's address is ac413e55
D/libEGL ( 1620): Loader.cpp *api = eglTerminate
D/libEGL ( 1620): Loader.cpp curr=abe09a10,it's address is ac413e95
D/libEGL ( 1620): Loader.cpp *api = eglGetConfigs
D/libEGL ( 1620): Loader.cpp curr=abe09a14,it's address is ac413ef9
D/libEGL ( 1620): Loader.cpp *api = eglChooseConfig
D/libEGL ( 1620): Loader.cpp curr=abe09a18,it's address is ac4148e5
D/libEGL ( 1620): Loader.cpp *api = eglGetConfigAttrib
D/libEGL ( 1620): Loader.cpp curr=abe09a1c,it's address is ac4144e1
D/libEGL ( 1620): Loader.cpp *api = eglCreateWindowSurface
D/libEGL ( 1620): Loader.cpp curr=abe09a20,it's address is ac414849
D/libEGL ( 1620): Loader.cpp *api = eglCreatePixmapSurface
D/libEGL ( 1620): Loader.cpp curr=abe09a24,it's address is ac414795
D/libEGL ( 1620): Loader.cpp *api = eglCreatePbufferSurface
D/libEGL ( 1620): Loader.cpp curr=abe09a28,it's address is ac4146dd
D/libEGL ( 1620): Loader.cpp *api = eglDestroySurface
D/libEGL ( 1620): Loader.cpp curr=abe09a2c,it's address is ac413bd5
D/libEGL ( 1620): Loader.cpp *api = eglQuerySurface
D/libEGL ( 1620): Loader.cpp curr=abe09a30,it's address is ac4144fd
D/libEGL ( 1620): Loader.cpp *api = eglCreateContext
D/libEGL ( 1620): Loader.cpp curr=abe09a34,it's address is ac414315
D/libEGL ( 1620): Loader.cpp *api = eglDestroyContext
D/libEGL ( 1620): Loader.cpp curr=abe09a38,it's address is ac413ec1
D/libEGL ( 1620): Loader.cpp *api = eglMakeCurrent
D/libEGL ( 1620): Loader.cpp curr=abe09a3c,it's address is ac413c25
D/libEGL ( 1620): Loader.cpp *api = eglGetCurrentContext
D/libEGL ( 1620): Loader.cpp curr=abe09a40,it's address is ac4132f1
D/libEGL ( 1620): Loader.cpp *api = eglGetCurrentSurface
D/libEGL ( 1620): Loader.cpp curr=abe09a44,it's address is ac414359
D/libEGL ( 1620): Loader.cpp *api = eglGetCurrentDisplay
D/libEGL ( 1620): Loader.cpp curr=abe09a48,it's address is ac4132f9
D/libEGL ( 1620): Loader.cpp *api = eglQueryContext
D/libEGL ( 1620): Loader.cpp curr=abe09a4c,it's address is ac4144a9
D/libEGL ( 1620): Loader.cpp *api = eglWaitGL
D/libEGL ( 1620): Loader.cpp curr=abe09a50,it's address is ac413315
D/libEGL ( 1620): Loader.cpp *api = eglWaitNative
D/libEGL ( 1620): Loader.cpp curr=abe09a54,it's address is ac413319
D/libEGL ( 1620): Loader.cpp *api = eglSwapBuffers
D/libEGL ( 1620): Loader.cpp curr=abe09a58,it's address is ac413dad
D/libEGL ( 1620): Loader.cpp *api = eglCopyBuffers
D/libEGL ( 1620): Loader.cpp curr=abe09a5c,it's address is ac413f29
D/libEGL ( 1620): Loader.cpp *api = eglGetError
D/libEGL ( 1620): Loader.cpp curr=abe09a60,it's address is ac4133bd
D/libEGL ( 1620): Loader.cpp *api = eglQueryString
D/libEGL ( 1620): Loader.cpp curr=abe09a64,it's address is ac4138f9
D/libEGL ( 1620): Loader.cpp *api = eglGetProcAddress
D/libEGL ( 1620): Loader.cpp curr=abe09a68,it's address is ac413349
D/libEGL ( 1620): Loader.cpp *api = eglSurfaceAttrib
D/libEGL ( 1620): Loader.cpp curr=abe09a6c,it's address is ac413f41
D/libEGL ( 1620): Loader.cpp *api = eglBindTexImage
D/libEGL ( 1620): Loader.cpp curr=abe09a70,it's address is ac413f5d
D/libEGL ( 1620): Loader.cpp *api = eglReleaseTexImage
D/libEGL ( 1620): Loader.cpp curr=abe09a74,it's address is ac413f79
D/libEGL ( 1620): Loader.cpp *api = eglSwapInterval
D/libEGL ( 1620): Loader.cpp curr=abe09a78,it's address is ac413f95
D/libEGL ( 1620): Loader.cpp *api = eglBindAPI
D/libEGL ( 1620): Loader.cpp curr=abe09a7c,it's address is ac413fb1
D/libEGL ( 1620): Loader.cpp *api = eglQueryAPI
D/libEGL ( 1620): Loader.cpp curr=abe09a80,it's address is ac41331d
D/libEGL ( 1620): Loader.cpp *api = eglWaitClient
D/libEGL ( 1620): Loader.cpp curr=abe09a84,it's address is ac41337d
D/libEGL ( 1620): Loader.cpp *api = eglReleaseThread
D/libEGL ( 1620): Loader.cpp curr=abe09a88,it's address is ac413325
D/libEGL ( 1620): Loader.cpp *api = eglCreatePbufferFromClientBuffer
D/libEGL ( 1620): Loader.cpp curr=abe09a8c,it's address is ac414399
D/libEGL ( 1620): Loader.cpp *api = eglLockSurfaceKHR
D/libEGL ( 1620): Loader.cpp curr=abe09a90,it's address is ac413329
D/libEGL ( 1620): Loader.cpp *api = eglUnlockSurfaceKHR
D/libEGL ( 1620): Loader.cpp curr=abe09a94,it's address is ac41332d
D/libEGL ( 1620): Loader.cpp *api = eglCreateImageKHR
D/libEGL ( 1620): Loader.cpp curr=abe09a98,it's address is ac4143b5
D/libEGL ( 1620): Loader.cpp *api = eglDestroyImageKHR
D/libEGL ( 1620): Loader.cpp curr=abe09a9c,it's address is ac413fcd
D/libEGL ( 1620): Loader.cpp *api = eglSetSwapRectangleANDROID
D/libEGL ( 1620): Loader.cpp curr=abe09aa0,it's address is ac413e09
D/libEGL ( 1620): Loader.cpp *api = eglGetRenderBufferANDROID
D/libEGL ( 1620): Loader.cpp curr=abe09aa4,it's address is ac4142dd
D/libEGL ( 1620): Loader.cpp set Function Address of GLESv1_CM to cnx->hooks[GLESv1_INDEX]->gl
D/libEGL ( 1620): Loader.cpp set Function Address of GLESv2 to cnx->hooks[GLESv2_INDEX]->gl
D/libEGL ( 1620): Loader.cpp load_driver exit
D/libEGL ( 1620): Loader.cpp if(dso) in
D/libEGL ( 1620): Loader.cpp open exit
##加载硬件实现,当然会失败的
D/libEGL ( 1620): libs\egl\egl.cpp egl_init_drivers_locked gEGLImpl[IMPL_HARDWARE]
D/libEGL ( 1620): Loader.cpp open entry
##并未实现自己的硬件渲染库
D/libEGL ( 1620): Loader.cpp open tag=(null)
D/libEGL ( 1620): Loader.cpp open exit
D/libEGL ( 1620): libs\egl\egl.cpp egl_init_drivers_locked exit
I/SurfaceFlinger( 1620): EGL informations:
I/SurfaceFlinger( 1620): # of configs : 8
I/SurfaceFlinger( 1620): vendor : Android
I/SurfaceFlinger( 1620): version : 1.4 Android META-EGL
I/SurfaceFlinger( 1620): extensions: EGL_KHR_image EGL_KHR_image_base EGL_KHR_image_pixmap EGL_ANDROID_image_native_buffer EGL_ANDROID_swap_rectangle EGL_ANDROID_get_render_buffer
I/SurfaceFlinger( 1620): Client API: OpenGL ES
I/SurfaceFlinger( 1620): EGLSurface: 5-6-5-0, config=0x1000000
I/SurfaceFlinger( 1620): flags : 00160000
I/SurfaceFlinger( 1620): OpenGL informations:
I/SurfaceFlinger( 1620): vendor : Android
I/SurfaceFlinger( 1620): renderer : Android PixelFlinger 1.3
I/SurfaceFlinger( 1620): version : OpenGL ES-CM 1.0
I/SurfaceFlinger( 1620): extensions: GL_OES_byte_coordinates GL_OES_fixed_point GL_OES_single_precision GL_OES_read_format GL_OES_compressed_paletted_texture GL_OES_draw_texture GL_OES_matrix_get GL_OES_query_matrix GL_OES_EGL_image GL_OES_compressed_ETC1_RGB8_texture GL_ARB_texture_compression GL_ARB_texture_non_power_of_two GL_ANDROID_user_clip_plane GL_ANDROID_vertex_buffer_object GL_ANDROID_generate_mipmap
I/SurfaceFlinger( 1620): GL_MAX_TEXTURE_SIZE = 4096
I/SurfaceFlinger( 1620): GL_MAX_VIEWPORT_DIMS = 4096
D/SurfaceFlinger( 1620): DisplayHardware.cpp DisplayHardware::init exit
D/SurfaceFlinger( 1620): SurfaceFlinger.cpp SurfaceFlinger::readyToRun() exit
##其中创建共享的内存控制块,将EGL与当前屏幕绑定,初始化共享内存控制块,显示开机动画的相关Log没有打印。