Mstar理论及实践篇(7)

2020-04-03 12:16

Android/v8.log

上面三个红色标示的目录比较常用,建议用source insight建立好工程。

Android应用系统启动流程

上一节提到内核在最后加载根目录下的/init外部程序,从而离开kernel进入Android应用系统,/init的实现代码在system/core/init/init.c,入口函数是main(),这也是Android第一个启动进程和第一个用户进程/init,用它来完成引导。/init进程会读取init.rc, init_xxx.rc(跟制造商有关,MSD6A608是init_eagle.rc), 按照脚本引导。引导完毕之后init并不退出,继续负责property service的工作。

在脚本文件init.rc和init.eagle.rc里包含action和service,service通过fork()创建为一个个进程,如下图所示几个重量级进程:

servicemanager

ServiceMananger从名字上就可以看出来它是用来管理系统中的service,比如:tvservice、ActivityManagerService等。在ServiceManager中有两个比较重要的方法:add_service、check_service。系统的service需要通过add_service把自己的信息注册到ServiceManager中,当需要使用时,通过check_service检查该service是否存在。

servicemanager的代码在目录:

ics/frameworks/base/cmds/servicemanager

从它的主函数代码开始:

从main函数中可以看出,它主要做了三件事情:

1.打开/dev/binder设备,并在内存中映射128K的空间。 2.通知Binder设备,把自己变成context_manager

3.进入循环,不停的去读Binder设备,看是否有对service的请求,如果有的话,就去调用svcmgr_handler函数回调处理请求。

再来看看ServiceManager中是怎么样去注册服务的。当有对service的请求时,调用回调函数svcmgr_handler:

在该回调函数中会判断Service有什么需要,如果是请求注册service,那么就执行:

这样在ServiceManager中就完成了服务的注册和查找。来看下ServiceManager的功能图:

Svcmgr handler svclist Binder Looper ServiceManager

Binder Open

Binder块设备 system server system server用于启动各种系统服务线程,大部分系统服务都在该进程中运行,常见的比如WindowManagerServer(Wms)、ActivityManagerSystemService(AmS)、 PackageManagerServer(PmS)等,这些系统服务都是以一个线程的方式存在于SystemServer进程中。

system server的代码在目录:

\\ics\\frameworks\\base\\services\\java\\com\\android\\server

从init2()函数开始:

该函数首先创建了一个ServerThread对象,该对象是一个线程,然后直接运行该线程,从ServerThread的run()方法内部开始真正启动各种服务线程。

Android IR按键处理流程

按键分为两种,虚拟按键和物理按键。IR按键属于物理按键的范畴,IR要作为输入设备,必须经过kernel驱动层注册为输入设别,这里主要是调用到kernel\\drivers\\input\\input.c里面的input_register_device函数去实现,如下:

@kernel\\drivers\\mstar\\ir\\mdrv_ir.c

@kernel\\drivers\\input\\input.c

Kernel负责处理按键,然后通过设备文件的方式提供给framework。frameworks/base/services/input定义各功能模块实现按键处理:

EventHub.cpp:实现对设备进行扫描并且判断是哪种设备; InputReader.cpp:对原始数据进行读取; InputDispatcher.cpp:实现数据的派发;

InputManager.cpp:按键事件处理的核心,通过创建两个线程InputReader和InputDispatcher,实现管理功能;

如果有输入法存在,则按键交给pinyinIME.java的onKeyDown处理;否则会判断是否是system key,如果是system key,交由PhoneWindwoManager.java和MstarTvServiceServerImpl.java处理,如果不是system key,交由具体activity处理。特别说明一下,hotkey的处理在MstarTvServiceServerImpl.java的onKeyDown函数。


Mstar理论及实践篇(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:[解析版]全国普通高等学校2017届高考数学二模试卷(文科)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: