车载系统启动流程以及如何去配置一个随系统启动的程序,并实现跨系统通信

启动第一个用户级进程init进程,解析init.rc配置文件

52febd9feec649219b8d8603236f2e1d.png

 init中做了哪些事情:

1.创建和挂载启动所需的文件目录

2.初始化和启动属性服务

3.解析init.rc配置文件并启动zygote进程

Zygote启动时做了哪些事情:

1.创建AppRuntime并调用其start方法,启动zygote

2.创建java虚拟机并为java虚拟机注册JNI方法

3.通过JNI调用ZygoteInit的main函数进入Zygote的Java框架层

4.通过registerZygoteSocket方法创建服务器端Socket,并通过runSelectLoop方法等待AMS的请求来创建新的应用程序进程

5.启动SystemServer进程

SystemServcer中做了那些事情:

1.启动Binder线程池这样就可以与其他进程进行通信

2.创建SystemServiceManager,其用于对系统的服务进行创建,启动和生命周期管理

3.启动各种服务(引导服务:ams,pms等,核心服务:BatteryService,DropBoxManagerService等,其他服务:CameraService,InputManagerService)

init.rc中的group配置用来配置应用所对应的权限用户组(pms会根据不同的权限分配不同的用户组),以自己配置一个service中间件为例:

248649de6f8242e5a08061bfa2c3fad2.png

通过在init.rc中的配置会在系统启动时把xiangxueservice拉起来

这里在xiangxueservice应用程序的group中配置了inet用户组

 应用安装后pms会给分配一个uid可在proc目录下找到对应uid的文件

2b1db1e1af9946ac985e7aa0d8467ae6.png

 给应用声明一个权限后用户组发生变化(以internet为例)

6075f212757e4eaaa0076d19307835d4.png

 与没有声明权限的对比,groups中多了3003用户组:

63bf4908bf754773befa75e0a9208717.png

所以3003代表的是网络权限,但是在group配置是需要的是用户组的名字而不是id,该如何获取:

android_filesystem_config中声明了所有id对应的变量名称

ea6c2cb85db240008bddb3788c458684.png

 然后在platform.xml权限映射文件中配置了每个权限对应的group用户组,所以3003用户组的用户名称是inet:

 c4d74591a1e84dc5b4d29529f09e0df0.png

配置完group之后只是拥有了权限还是无法访问网络因为确实SELinux

 8fbffbefb9ca4678917225b0cc214800.png

 

 不同系统如何通信(车载中android(AAOS)如何与qnx通信?):

两个系统中都需要有中间件,中间件技术用到fdbus,先要建立连接,之后服务端暴露一些接口给客户端,客户端通过接口与服务端进行通信

d326aae298cc4b5cbcf3c387bc2c21a1.png

拓展:

通信一般采用SOA架构(面向服务架构): 

54e86b1e01594b84b8c92a6d52215d47.png

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值