导航:首页 > 源码编译 > hal看不看源码

hal看不看源码

发布时间:2024-02-08 04:17:33

Ⅰ 请教关于android移植的问题

一、概述

移植的工作一般的主要不外乎做以下这些事情:

A、有的现成好的直接选配

这个工作主要是熟悉该源码编译系统,就是源码自动化编译是怎么组织的。Linux环境下不外乎是Makefile及脚本。所以得熟悉这两个方面的知识。

B、有的不好的代码修改好后选配

这个工作不仅仅是要熟悉编译系统,还要熟悉别人的代码结构。一般牛X的软件架构也牛X,所以主要是学习牛X的人设计的代码结构,所谓的框架。框架懂了,再熟悉里面的细节,就可以改了。

C、添加新代码并选配

这个工作同样要熟悉编译系统及源码结构。这个时候对框架可能不能仅仅限于知道,而且要深刻理解,按照牛人的思路来设计代码。

所以Android的移植就可以简单的说成有以下方面的工作:

A、熟悉android的编译系统

主要是.mk文件的规则,这个官网及源码中有文档说明(development/Ndk/Docs/android-mk.txt),得好好研究清楚。

就源码中的脚本,譬如:build/envsetup.sh

B、熟悉android的源码目录结构

system:根文件系统相关的一些代码

packages:android的一些APP的源码

frameworks:framework层代码,不改动android源码的话,主要就是app层调用hal层代码的接口实现的源码

hardware:hal层代码

devices和vendor:厂商定制代码

build:编译系统的一些mk文件

out:是编译输出目录

主要的一些目录就是上面了,对于初学的话,差不多就足够了。当然所有的都熟悉是最好了。

C、三个层次的代码

要向android添加代码的话,一般主要熟悉三个层次的代码就差不多了。

APP<--->framework<--->HAL

APP:应用程序层次,主要是java代码,通过跨平台的java编写的代码来完成需求逻辑对系统提出功能性要求,让系统去完成相应的动作。

framework:cpp代码,主要是提供给java调用的接口,这些接口通常是去调用到hal层的代码。

HAL:登记一组供framework回调的函数,来完成一定的功能。

Ⅱ 拿到Android 项目源码后,如何才能以最高效的速度看懂

1.显然Eclipse不是阅读Android源码的好工具,不流畅,搜索低效,继承性关系/调用关系都无法有效查看。推荐Source Insight,在这个工具帮助下,你才可以驾驭巨大数量的Android 源码,你可以从容在Java,C++,C代码间遨游,你可以很快找到你需要的继承关系。
顺便,我们公司一直是Windows+Linux+Samba的工作模式。
2.宏观上看,Android源码分为功能实现上的纵向,和功能拓展上的横向。在阅读源码时需要把握好着两个思路。
譬如你需要研究音频系统的实现原理,纵向:你需要从一个音乐的开始播放追踪,一路下来,你发现Jni调用解码库,共享内存的创建和使用,路由的切换,音频输入设备的开启,音频流的开始。
3.Android的功能模块绝大部分是C/S架构,你心里一定需要有这个层级关系,你需要思路清晰地找到Server的位置,它才是你需要攻破的城。然后你才能发现HAL和Kernel一层层地剥离。
我大概在三个月前阅读完Android UI系统的源码,这是Android最复杂的部分,没有之一。
我需要先找一个开头,和UI有直接关系的就是最常见的Activity了吧,我就从它开始解剖。
我从Activity的创建入手,寻找Activity真正的创建位置,setContentview这个方法很明显和UI有关,这两方面一结合,我发现了ViewRoot和WindowManager的身影,沿着WM和WMS我发现了Surface,以及draw的函数,它居然在Activity 创建时出现的DeCorView上画东西。借助Source Insight我总结了UI Java层的横向静态图。
完成这个静态UML,我觉得我可以开始功能实现上追踪了,这部分主要是C++的代码(这也是我坚定劝阻的放弃Eclipse的原因),我沿着draw函数,看到了各个层级的关系,SurfaceSession的控制和事务处理,SharedBuffer读写控制,彪悍的SurfaceFlinger主宰一切,OpenGL ES的神笔马良。FrameBuffer和FrameBufferDevice的图像输出。一气呵成的完成了。

阅读全文

与hal看不看源码相关的资料

热点内容
如何从爱思服务器注销游戏账号 浏览:941
幼儿编程教育培训多少钱 浏览:404
经常生气有什么东西能解压 浏览:901
代理服务器地址和端口可以怎么填 浏览:63
unity5手游编译模型 浏览:265
安卓无人机app源码 浏览:809
pl1编程语言 浏览:801
台达plc编程换算指令大全 浏览:174
手机上的编程游戏 浏览:108
服务器密码机有什么用 浏览:477
dos磁盘命令 浏览:955
单片机cpu52的功能 浏览:691
opc服务器怎么开发 浏览:373
觅喜是个什么app 浏览:402
加密cd机 浏览:946
社保用什么app缴纳 浏览:313
nodevlinux 浏览:582
腾讯tt服务器怎么登录密码 浏览:898
windows命令提示符 浏览:352
win7管理员权限命令 浏览:729