·文件夹Hardware/Broadcom/Wlan/Ti/Wlan/Omap3/Msm7k/Libhardware_legacy/Libsensors/Qcom/Ril/RildRilreferenceLibrilInclude由此可见分为三类:1、第三方厂商部分,包括msm、broadcom、ti等2、老式硬件抽象层方案:libhardware_legacy3、独立的硬件抽象设备:libsensors、ril、qcom(gps)等Msm7k是高通提供的一些文件:1、libaudio2、libcamera3、libcopybit4、libgralloc5、liblights6、liboverlay7、librpc·Audio:0、层次:media库提供audio本地部分接口audioFlinger是audio的中间层audio硬件抽象层提供底层支持audio接口通过JNI提供给上层调用Audio管理环节Audio输出Audio输入Java层android.media.AudioSystemAndroid.media.AudioTrackAndroid.media.AudioRecorder本地框架层AudioSystemAudioTrackAudioRecorderAudioFlingerIAudioFlingerIAudioTrackIAudioRecorderHALAudioHardwareInterAudioStreamOutAudioStreamInface1、HAL层(AudioFlinge和Audio的硬件接口):hardware/msm7k/libaudio-qsd8k在这里,在msm7k的根目录下的Android.mk中描述了如何选择对应平台的库,如果平台是qsd8k的,则会直接选择libaudio-qsd8k而不是libaudio原始库,这部分就是平台特定的代码。在该文件中进行打开设备文件、ioctl等操作。该HAL的调用起点是:createAudioHardware(),由该函数实现audio的HAL实例化,并提供给AudioFlinger进行调用。android的AudioHAL可以基于linux标准的ALSA或者OSS实现,或基于私有的Audio驱动接口实现。HAL的主体是:AudioHardwareInterface类,HAL主要实现方式:实现AudioHardwareInterface、AudioStreamOut和AudioStreamIn三个类的继承。HAL的实现:(1)AudioHardwareStub.cpp是一个HAL的模拟实现,不操作实际硬件,涉及到的输入输出都为空操作。(2)AudioHardwareGeneric.cpp是通用Audio抽象层,需要android的一种特殊声音驱动支持(/dev/eac)。(3)AudioDumpInterface.cpp提供带有dump功能的HAL。(4)自行设计的HAL,需要完成的工作和上面三个类似(比如基于OSS或者ALSA),对于有多个Audio设备的情况,可以HAL的setRouting函数设定。2、Native层:libaudioflingerframework/base/libs/audioflingerlibmediaframework/base/include/mediaframework/bse/media/libmedia3、JNI层:framework/base/core/jni/audiolibandroid_runtime.so的一部分android_media_AudioRecord\AudioSystem\AudioTrack…·Video-Camera(2.2已经从ui库中把camera剥离出来):1、HAL层:高通已实现:hardware/msm7k/libcamera/接口在frameworks/base/include/camera/CameraService.h中定义桩实现:CameraHardwareStub.cpp和FakeCamera.cpplibcamerastub.a2、Native层:framework/base/libs/camera/…libui:提供camera的框架部分Camera.h对上层的接口ICameraClient.hICamera.hICameraService.h中间层实现框架CameraService继承libui,提供中间层支持(通过调用HAL实现),无对外的APIframework/base/camera/libcameraservice/实现ICameraService和ICamera两个类在该service中,是否使用overlay是通过读取cameraHAL的usOverlay实现的,如何使用overlay也是由cameraHAL完成。CameraClient3、JNI层:framework/base/core/jni/android_hardware_camera.cpp·Video-Overlay:注:overlay系统和其他系统的不同,其他系统一般只需要HAL即可,overlay则不仅需要HAL,而且还要在其他地方主动使用之,主要使用的地方为:视频播放器实现部分的输出环节和camera的HAL。1、HAL层:libhardware/include/hardware/overlay.hhardware/libhardware/modules/overlay/2、Native层:libui:提供overlay的框架部分surfaceflinger:提供overlay中间层3、JNI层:overlay无JNI·Sensor:0、android支持的传感器类型:传感器Java名称本地名称数值加速度TYPE_ACCELEROMETERSENSOR_TYPE_ACCELEROMETER1磁场TYPE_MAGNETIC_FIELDSENSOR_TYPE_MAGNETIC_FIELD2方向TYPE_ORIENTATIONSENSOR_TYPE_ORIENTATION3陀螺仪TYPE_GYROSCOPESENSOR_TYPE_GYROSCOPE4光线(亮度)TYPE_LIGHTSENSOR_TYPE_LIGHT5压力TYPE_PRESSURESENSOR_TYPE_PRESSURE6温度TYPE_TEMPERATURESENSOR_TYPE_TEMPERATURE7接近TYPE_PROXIMITYSENSOR_TYPE_PROXIMITY81、HAL层:hardware/libhardware/include/hardware/sensor.h模拟实现:development/emulator/sensors2、Native层:暂无3、JNI层:frameworks/base/core/jni/android_hardware_SensorManager.cpp·RIL:1、HAL层:hardware/ril/include:RIL头文件hardware/ril/libril:RIL库,libril.sohardware/ril/rild:RIL守护进程,rildhardware/ril/reference-ril:RIL参考库,libreference-ril.solibril.so是辅助功能库,被libreference-ril.so和rild使用。ReferenceRIL是RIL的实现库2、Native层:暂无3、JNI层:Java层和RIL的接口使用rild的socket。·GUI(HAL和Native混合,2.2中的libui部分有了较大变化):0、2.2对于1.6的提升:·在native层,将camera部分从ui中分离。·在native层,将surfaceflinger_client从ui库中分离1、HAL层:Input/Output和硬件接口(本属于HAL层,但linux中fb和标准input驱动的原因,本部分在libui中使用标准方式实现)·显示输出的硬件接口需要实现egl_native_window_t,是OpenGL结构,提供给libEGL使用的。在EGLDisplaySurface.cpp中mapFrameBuffer()实现对驱动的操作(1.6)·输入的硬件接口:目的是统一向上层提供按键码(KeyCode),这部分2.2也有了较大改变,输入处理目前认为是在libui中统一进行处理。EventHub.cppKeyCodeLabel等development/emulator/keymaps可以进行参考对于不同硬件,只需要写出不同的按键布局文件即可,目的是让驱动程序中的整数值对应到android按键名称上。增加或者减少android的按键码,相当于更改android系统的api,降低了兼容性。2、Native层:libui(+libpixelflinger):框架集成库,显示的中枢,GUI中枢;定义了颜色格式:PixelFormat.hPoint.hRegion.hRect.hDisplayInfo.hEgl窗口:实现egl_native_window_t类,头:EGLNativeSurface.hEGLDisplaySurface.hEGLNativeWindowSurface.h按键和事件处理:EventHub.hKeycodeLabel.hKeyCharacterMap.hsurface:surfaceFlingeroverlay:用于视频输出,实现于surfaceflinger中,头文件:IOverlay.hOverlay.hcamera:CameraService实现frameworks/base/include/ui/frameworks/base/libs/ui/Surface.h和SurfaceComposerClient.h为上层提供调用接口ISurface.hISurfaceFlingerClient.hISurfaceComposer.h是需要下层继承和实现的接口ISurface.h中的接口可以给本地程序进行调用,实现图形数据的输出。libpixelflinger(+libcutils)system/core/include/pixelflinger/system/core/libpixelflinger/libsurfaceflinger(+libui)继承了libui的头文件提供的类而实现framework/base/libs/surfaceflinger/surfaceflinger支持图形层创建、叠加、混合等功能,这些功能依赖于的显示设备是由DisplayHardware目录中的DisplayHardware.cpp实现的,它调用了EGL的HAL部分。·2D图形系统库skiaexternal/skia/libcorecg.so:核心图形库libligsgl.so:skia图形库libskiagl.so:和opengl相关的库src/gl/对上层的接口:src/core/SkCanvans.cpp图形编解码接口:include/image/·3D图形系统库:framework/base/opengl/libGLESv1_CM.so:openGLES库的封装libEGL.so:openGLES库的封装libagl.so:openGL软件实现库3、JNI层:framework/base/core/jni/android_view_Surface.cpp·2D图形系统库skia:framework/base/core/jni/android/graphic/·3D图形系统库:framework/base/core/jni/com_google_android_gles_jni_GLImpl.cppframework/base/core/jni/com_google_android_gles_jni_EGLImpl.