HAL代码组织结构v_第1页
HAL代码组织结构v_第2页
HAL代码组织结构v_第3页
免费预览已结束,剩余2页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、-文件夹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、libover

2、lay7、librpc-Audio:0、层次:media库提供audio本地部分接口audioFlinger是audio的中间层audio硬件抽象层提供底层支持audio接口通过JNI提供给上层调用Audio管理环节Audio输出Audio输入Java层android.media.AudioSystemAndroid.media.AudioTrackAndroid.media.AudioRecorder本地框架层AudioSystemAudioTrackAudioRecorderAudioFlingerIAudioFlingerIAudioTrackIAudioRecorderHALAudio

3、HardwareInterfaceAudioStreamOutAudioStreamIn1、HAL层(AudioFlinge和Audio的硬件接口):hardware/msm7k/libaudio-qsd8k在这里,在msm7k的根目录下的Android.mk中描述了如何选择对应平台的库,如果平台是qsd8k的,则会直接选择libaudio-qsd8k而不是libaudio原始库,这部分就是平台特定的代码。在该文件中进行打开设备文件、ioctl等操作。该HAL的调用起点是:createAudioHardware(),由该函数实现audio的HAL实例化,并提供给AudioFlinger进行调用

4、。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

5、) 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的一部

6、分android_media_AudioRecordAudioSystemAudioTrack-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对上层的接

7、口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_cam

8、era.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支持的

9、传感器类型:传感器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_TEM

10、PERATURE7接近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/ril

11、d: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层:In

12、put/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可以进

13、行参考对于不同硬件,只需要写出不同的按键布局文件即可,目的是让驱动程序中的整数值对应到android按键名称上。增加或者减少android的按键码,相当于更改android系统的api,降低了兼容性。2、Native层:libui(+libpixelflinger):框架集成库,显示的中枢,GUI中枢;定义了颜色格式:PixelFormat.hPoint.hRegion.hRect.hDisplayInfo.hEgl窗口:实现egl_native_window_t类,头:EGLNativeSurface.hEGLDisplaySurface.hEGLNativeWindowSurface.h按

14、键和事件处理: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是需要下层继承

15、和实现的接口ISurface.h中的接口可以给本地程序进行调用,实现图形数据的输出。libpixelflinger(+libcutils)system/core/include/pixelflinger/system/core/libpixelflinger/libsurfaceflinger(+libui)继承了libui的头文件提供的类而实现framework/base/libs/surfaceflinger/surfaceflinger支持图形层创建、叠加、混合等功能,这些功能依赖于的显示设备是由DisplayHardware目录中的DisplayHardware.cpp实现的,它调用了

16、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_vie

17、w_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.cpp-BT:1、HAL层+Native层:Bt的HAL和Native是混合在一起的。blueznet/Bluetooth/内核部分的实现external/bluez/若干动态库和可执行程序libbluet

18、ooth:公共库libhcid:主机接口实现liba2dp:蓝牙立体声服务。bluez适配libbluedroidsystem/Bluetooth/bluez使用DBUS和上层交互,因此适配层简单,封装了蓝牙开关和射频开关2、JNI层:frameworks/base/core/jni/android_bluetooth_*.cpp-GPS:1、HAL层+Native层:GPS定位适配层:关键接口:GpsInterfaceGpsLocationhardware/libhardware_legacy/gps/hardware/libhardware_legacy/include/hardware_

19、legacy/gpslibloc_apihardware/qcom/gps/loc_api/libloc_apilibloc_api-rpc(+librpc)hardware/qcom/gps/loc_api/libloc_api-rpc2、JNI层:frameworks/base/core/jni/android_location_GpsLocationProvider.cpp直接和适配层交流,访问适配层定义的GpsInterface,并实现自己的GpsCallback供GPS适配层进行回调。-Wifi:1、HAL层:wpa_supplicant程序external/wpa_supplicantwpa_supplicant适配层hardware/libhardware_legacy/wifi/libhardware_legacy的一部分封装wpa_supplic

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论