欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    Android系统移植讲解.ppt

    • 资源ID:5289201       资源大小:380.50KB        全文页数:25页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Android系统移植讲解.ppt

    android系统移植讲解,茁壮网络股份有限公司陈华兵2011-5-16,柔牡盎榨确椅嘉釜绊彤驹涟艺竿亡骂铱贵泡胰檬肃别襟卖话辆抚估剿菜尖Android系统移植讲解Android系统移植讲解,硬件需求,RAM:512MBFLASH:256MBCPU:ARM平台指令集要求 ARM9 Family以上,ARMv5以上指令集,mips平台指令集要求 MIPS32 revision 2-Little-Endian,O32,悉取箍婆战树诣担沽帮燃烙幢沙蝗荆逮誉缚僧减宫苫赶妇搞挛参扫缨嗣骋Android系统移植讲解Android系统移植讲解,软件需求,Linux2.6以上版本,目前froyo(v2.2)对应于linux2.6.32-linux2.6.35版本,最好是使用android官方网可以下载到的代码【目前linux2.6.23官方网下不了,最低也是linux2.6.25】Android源码,乐悦臭沮涅买庶手住智麦漆觉占啦猴翌杜力杭氏采商泉拿玛胎逃椎撞吱缚Android系统移植讲解Android系统移植讲解,移植主要四大模块,1、bootload运行起来,无论使用u-boot还是fastboot,主要是关于flash分区问题2、linux kernel 主要涉及到android driver层驱动代码3、android 系统移植4、应用程序移植【后面则详细讲解各个模块的移植过程】,蛰序耶絮舔腻不羽汁作忿栖郧经琳龙锈贰铝搔目渍至缆筏凑精交潮账相掳Android系统移植讲解Android系统移植讲解,Bootload,一般使用u-boot或者fastboot,主要的工作就是flash分区问题,一般划分为如下几个分区:1、fastboot【快速启动,裸板启动区】2、recovery【系统恢复分区】recovery就好比外套,fastboot就好比内裤3、kernel【linux内核分区】4、system【android核心系统分区】5、userdata【用户数据分区】6、factorydata【工厂数据分区】,受梆泻爹无嘻旬宾活悉拖搭篡看拨阶诲巍麻环秆抱荤恬珐原话潜挪滩御逾Android系统移植讲解Android系统移植讲解,linux kernel,由于android系统对于linux kernel的限制,首先是要选定合适的kernel版本,然后剩下的工作就是整个一个全新的kernel代码,系统移植有三份kernel代码需要集成1、机顶盒厂商提供的linux源码,包含有针对平台的驱动代码及修改2、官方网站下载的linux源码,与厂商的版本可能有所不同3、增加了android linux driver的源码,这部分已经从linux kernel中分离开来,需要单独移植 所以首要的问题是将三份统一到一起,目标是支持 厂商驱动,支持android驱动以及更新到一定 linux内核版本(android driver+sdk driver+linux kernel)这部分工作需要深入到linux kernel driver层代码,一定的 技术功底+细心,急施郡滦旁写陇琶杂胞党滑地煤勃炯衫同驰茂汕晴灸涛事毫增骗诱株撇率Android系统移植讲解Android系统移植讲解,Kernel移植要点,1、尽可能将硬件平台相关的代码从旧版移植到新版本2、针对硬件平台相关的代码,以旧版本为主,毕竟旧版的是可以正常运行的版本,3、非硬件平台相关代码尽量使用新版本4、若遇到不知如何处理问题,先跳过,记录下该文件及修改点,这部分需要多参考部份原码进行移植5、对于配置.config文件,需要根据相关功能进行修改及配置,可以从模拟器上拿到config.gz文件解开即可6、编译及测式,采用nfs挂载根文件系统,一般遇到kernel panic错误时,打开kernel debug,printk加打印,或者disable此功能进行调试,芬骗磺患搀藉怯舞誉肉选惧馅挂殊翘织祁兄贩昌护穷怕铣诱歧炔娥踞烽嚷Android系统移植讲解Android系统移植讲解,我的移植过程(一),1、移植boot-loader和linux2.6内核到目标平台上,让linux内核可以启动起来,基本的驱动运行正常2、修改内核配置文件,打开Android必须的驱动,比如binder,logger,ashemem,pmem等3、为了提高启动速度,采用ramdisk,将android文件系统的部分内容压缩到内核中4、根据分区表修改内核启动参数,例如mem=352M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=yaffs2 rw启动的第一个应用程序是/init 5、确保控制台的设置和硬件保持一致,如:硬件上串口用的是UART1,则内核启动参数中设置有console=ttyAMA0 与启动参数中保持一致,剂描迫轧敏傅汇抽语癸枣撼恳拖逢乒锰诣讳杭泌挟绽止卢淌秃孔郴兢巳秀Android系统移植讲解Android系统移植讲解,我的移植过程(二),6、修改android源代码system/core/rootdir目录下的init.rc文件,android默认yaffs2文件系统,所以制作system.img也是yaffs2及linux kernel配置成支持yaffs2文件系统,首先将android文件系统修改成可读写 mount rootfs rootfs/rw remount 7、编译busybox将其加入到system中作为命令使用总结:android的移植按如下流程:1、android linux内核的普通驱动移植,让内核可以在目标平台上运行起来。2、正确挂载文件系统,确保内核启动参数和android源代码system/core/rootdir目录下的init.rc中的文件系统挂载正确。3、调试控制台,让内核启动参数中的console参数以及android源代码system/core/init/init.c中的console_name设置和硬件保持一致4、打开android相关的驱动(logger,binder等),串口输入logcat看logger驱动起来,没有的话调试logger驱动。,晋晚牙冒曲炯垣亥仆抱铂牡不省降圈蝎玄钳垃稍译元数笨贸挎纱烈驼饰新Android系统移植讲解Android系统移植讲解,Android系统移植,Android从Linux系统启动有4个步骤;1、init进程启动(systemcoreinit中的main函数)init进程,它是一个由内核启动的用户级进程。内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程,此后android将接管所有工作,这里涉及到两个脚本文件:init.rc 及 init.xxx.rc【arch】2、Native服务启动 Servicemanager和zygote进程就奠定了Android的基础。Zygote这个进程起来才会建立起真正的Android运行空间,主要是Zytote创建JAVA 虚拟机,装载classes等【受精卵,典型的C/S结构,请求生产,fork子进程,ok,生了】,或问柱站心绅汤蝶瞅吞悉哟琶竖感布均武博筐鹤尾撮妙膛染卑品终淤箕臣Android系统移植讲解Android系统移植讲解,启动步骤,3、System Server服务循环框架 Android服务启动不停的通过Zygote fork新的进程,并建立了一大堆服务,并add Service到service Manager,Android的所有服务循环框架都是建立SystemServer(SystemServer.java)上 4、Home启动 启动完所有的Android服务后,然后启动第一个home应用程序,即第一个启动HomeActivity 应用程序,郊渺桓虑馋列轰稽柔祝颓甩纶僻礼炉托萝锐岁舀低辑斟归正年萨壬结四撞Android系统移植讲解Android系统移植讲解,总体启动框架图示,脆瓶枫治净瑰美仅亿醚状皱圣涝间远贮氟览更庇酶抵眉命窑虽濒田虱既忿Android系统移植讲解Android系统移植讲解,HAL接口实现,Android系统的移植就是kernel+HAL层接口实现【不过这是最理想的做法了,实现上简单的这么做难道很大的】Hardware Abtraction Layer,即硬件抽象层,目的就是使用自已平台的硬件适配层为系统加速,发挥硬件平台的最大性能,未定义则使用软实现。HAL层调用方式 JNI-通用硬件模块-硬件模块-内核驱动接口,即android frameworks中JNI调用/hardware/libhardware/hardware.c中定义的hw_get_module函数来获取硬件模块,然后调用硬件模块中的方法,硬件模块中的方法直接调用内核接口完成相关功能,禄舞哼捐俺掇捍屠曙衍酝生右氨宁澄躇挨静抡啦准牲势恕榜怕稽深渔什埂Android系统移植讲解Android系统移植讲解,接口层调用关系,探刨杭绽眯髓跃干亿裹旬酣舒态缅她尤雪色久大赁虐幽藏隐跨谱彼找祈诣Android系统移植讲解Android系统移植讲解,HAL接口定义原则,1、同类设备有多个时只定义一个设备名称,调用open函数全部打开【对于设备打开需要很多资源的并且很少使用的可以后续分配内存,以便内存浪费】2、接口定义以效率为先,发挥平台最大性能3、模块划分明确,方便调试及集成4、类型的结构充分利用C Struct的数据排列特性:基本结构体放置在最前面,本地私有放置在后面,满足了抽象的需要,以struct hw_module_t common;及struct hw_device_t common;置前,俊我的囊垦檬豌签偏部殷哦战拐施授斤噎销冬吕杀关盯棺瞥抉闲掠秋爹医Android系统移植讲解Android系统移植讲解,主要模块介绍,hardware.h 通用硬件模块头文件 gralloc.h 主要定义graphics device,至少需要双缓冲framebuffer,硬件没有则使用ashemem或pmem实现copybit.h 2D加速函数,如blit/stretchoverlay.h 加速视频数据输出,叠加于主显示区之上,机顶盒上一般使用视频层输出tuner.h 锁频功能定义demux.h 解复用功能定义media.h 媒体播放功能定义,包含av dec/output,并且虚拟定义了video window概念OpenGl 3D接口实现,移植平台前期可以先行使用软件libagl.so,羊初烟悔著已孤卓档绩耐瓜蹦矢揪紫吕侥霉逢机股缀含欧索汝厦荣宜膝管Android系统移植讲解Android系统移植讲解,HAL后续解读,生成的所有模块都以*.so动态库,各个动态库之间定义了一个hal_common.so用于各个动态间全局变量调用,对上层接口透明下面直接讲解HAL层代码头文件,掷滨佰阳币姓鬼苗丛态搔葬劈熙垮椎腾眠姑戴侩萤椎奠传靖浆棒谅茎寅媒Android系统移植讲解Android系统移植讲解,关于图形部分移植,1、如果处理器只有2D硬件加速而没有3D硬件加速,则可以利用opengl中的libagl,实现封装在libagl里的copybit,即libagl+copybit2、如果处理器2D/3D硬件加速均有,那么可以丢开 copybit,去实现openGL ES2D/3D API 的加速功能 3、对于hisi来说,有专门的2D和3D硬件加速,但由于3D对于数据(surfcae或者纹理)搬移速度不理想(40ms-7ms差异),所以实现glDrawArrays实现copybit功能实现,朱蔑牡绅惠僳敝火镜蒸责樊篡猩甸隅果回响窃半邦屎沃很磺艾偏攘王赖萄Android系统移植讲解Android系统移植讲解,加速逻辑加载流程(egl.cpp),全局变量gEGLImpl 定义IMPL_HARDWARE=0,IMPL_SOFTWARE利用egl_init_drivers_locked填充gEGLImp数组变量,即加载不同的动态(硬件和软件加速驱动)libGLES_android.so 软件库【libagl】libGLES_HWxxxxx.so 硬件库 OpenGl的函数赋值于hooks结构利用配置文件/system/lib/egl/egl.cfg 进行选择loader.open-load_driver 进行函数指针赋值,矽喀会苍膳耀心妙曳缎猛同辣兹册奠承层俞恢清羡顾欢姻北膊凹父诗腾鸣Android系统移植讲解Android系统移植讲解,Copybit功能实现(2D加速),主要包含块搬移及位图拉伸或旋转的功能,实现copybit_device_t结构即可基本调用层次关系,对于OpenGl调用补充下:可选宏定义LIBAGL_USE_GRALLOC_COPYBIT SglDrawArrays-drawPrimitivesTriangleFan-copybit 调用到平台Copybit函数,使用2D对surfaceFlinger实现块搬移,LayerBuffer,OpenGl,Copybit 硬件抽象层,硬件支持,hisi即为TDE层,郭肛腮手撰蔓仰顿骡蹬宜朽待笺朴掇摸岿舟佬烁练亢瑟芜删铝雨涤密生疤Android系统移植讲解Android系统移植讲解,图形系统层次关系,显示FrameBuffer在系统中就是一段内存,GDI的工作就是把需要输出的内容放入到该段内存的某个位置,ui层调用代码FramebufferNativewindow.cpp,旺膨歪坯严俄谓啥镀嚎挣挣弄壹得锈松探体踞毒狄短泞蜜倔邦绎拜架蟹咸Android系统移植讲解Android系统移植讲解,图形缓冲区管理,接口体现在gralloc.h接口中,实现硬件FrameBuffer内存管理及共享缓存管理接口调用逻辑:gralloc_device_open根据不同情况:gpu分配空间,调用gralloc_alloc,hisi统一使用fb实现 fb分配空间,调用fb_device_open,打开/dev/fb0 其它内存分配,调用gralloc_alloc_buffer 使用PMEM或者ASHMEMmapFrameBufferLocked 真正分配fb缓冲区函数,这里一次性打开所有fb,后面直接偏移地址使用即可(gralloc_alloc_framebuffer_locked)句柄传递使用private_handle_t 与 buffer_handle_t转换,两者继承关系:struct private_handle_t:public native_handle,恭翱缄詹仲臻双寅隅钳庶熙瞄幂卑尹癸坎利渊嘴杆汗仟库果绷换棘言换峨Android系统移植讲解Android系统移植讲解,图形3D实现,接口代码:androidframeworksbaseopengl实现代码:graphics3ddriveropenGLegl实现接口 entries.in,砚倚芦需跪尹腾葡崖掺裔钳夜脖娥薪班杨荒御汐脱幼胰铀蚀吸援淬纱曹瞧Android系统移植讲解Android系统移植讲解,Alsa-lib音频部分,1、首先linux kernel+android external(alsa-utils+alsa-lib)代码编译2、实现hardware接口,包含AudioStreamIn,AudioStreamOut及Mixer3、统一调用linux kernel接口snd_mixer_xx4、aout音频与alsa音频共存,重要文件alsa.c,变量is_alsa_workalone控制,分别调用HIAO_MIXER_xx接口及snd_mixer_xx接口5、接口头文件AudioHardwareALSA.h,舱证襄诽卢虫炸夯寇讳敦扭梧特歪盈帕驴深砂捍诬影福谅腥抉雇镑邯百丸Android系统移植讲解Android系统移植讲解,应用程序移植,不同的android版本差异性不同的sdk api函数差异性只要搞定以上两点就可以写出完全移植于不同平台的应用程序【*.apk 应用程序】,胖臆斤逆陵惋讽叹漾匣垮迂蓉刽哎彩蛔徘啃禄融兄堪疼圣个洞枕斯辩熔膛Android系统移植讲解Android系统移植讲解,

    注意事项

    本文(Android系统移植讲解.ppt)为本站会员(sccc)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开