首页 HAL代码组织结构v01

HAL代码组织结构v01

举报
开通vip

HAL代码组织结构v01·文件夹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、li...

HAL代码组织结构v01
·文件夹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输入层Javaandroid.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/audio?libandroid_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.cpp?libcamerastub.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_PROXIMITY8层:HAL、1.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.h颜色格式Egl窗口:实现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.cpp:BT·.1、HAL层+Native层:Bt的HAL和Native是混合在一起的。blueznet/Bluetooth/内核部分的实现external/bluez/若干动态库和可执行程序libbluetooth:公共库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_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_supplicant守护进程的通信,提供给框架使用实现非常简单:wifi_command()和wifi_wait_for_event()接口2、Native层:暂无3、JNI层:frameworks/base/core/jni/android_net_wifi_Wifi.cpp·MultiMedia:1、HAL层:由输入/输出环节实现无直接联系。多媒体部分设计到音视频输入输出的HAL环节:surfaceflinger、audioflinger、cameraservice以及音频输入输出的HAL环节。2、Native层:由PacketVideo的openCore实现多媒体本地框架libmediaframeworks/base/include/media/frameworks/base/media/libmedia/libmediaplayerserviceframworks/base/media/libmediaplayerservice/frameworks/base/media/mediaserver/多媒体实现:external/opencore/继承了media库中定义的接口,提供多媒体播放器和记录器部分。3、JNI层:libmedia_jni.sorameworks/base/media/jni·Other(hardware_legacy):1、power2、RPC3、vibrator4、uevent5、telephonyservice6、winmanagerservice
本文档为【HAL代码组织结构v01】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_072127
暂无简介~
格式:doc
大小:26KB
软件:Word
页数:0
分类:
上传时间:2019-09-18
浏览量:0