嵌入式Android系统启动基本分析

news2024/12/24 2:17:26

目录

第一:Android系统架构图:

第二:Android 系统启动流程如下:

第三:Android 层级分析

第四:案例分析

第五:Android 权限问题

 

上一篇我们讲了 Linux 系统的启动流程,本文讲解一下 Andorid 系统的启动流程。

linux专题:嵌入式linux系统启动流程基础分析_ST小智的博客-CSDN博客

Andorid 系统是在嵌入式行业中广泛应用的系统,手机、平板、机器人、汽车中控系统都有使用安卓系统的,在应用方面的优势是安卓系统自带 UI,使用 Linux 需要自己用 QT 开发界面,并且界面没那么好看。

第一:Android系统架构图:

由此图可知,Android 系统基于 Linux 内核。

Linux 之上有一个 HAL 层,这一层出现的原因:Linux 是开源的,基于它的修改也必须开源,所以 Andorid 在这里加了一个 HAL 层,这样硬件厂商可以不公布自己的代码。

Native 层由 C++ 语言实现,Framework 层和 app 层由 java 语言实现,也就是说,你想搞懂 Android 系统需要精通三种语言:C、C++、java。

上一篇文章分析了Linux 系统的启动流程,Android 系统的启动流程和 Linux 相似,只是 init 进程起来后,做了不一样的事情。

第二:Android 系统启动流程如下:

1)Boot ROM 是固化在硬件中的一段代码,它一般是固定的,它的作用是检测基本的硬件是否存在,比如检测 EMMC 是否存在,存在的话,把 bootloader 从EMMC 拷贝到 SRAM ,启动系统,后面交给 bootloader 。

2)Andorid 系统的启动引导程序 bootloader 不是 uboot,是 LK(little kernel),专门用来启动安卓系统。

3)bootloader 初始化完成后跳转到 Linux 内核的 start_kernel 函数,此函数最后产生了 kernel_init 和 kthreadd,kernel_init 后面会从内核空间跳转到用户空间,变成用户空间的 init 进程,PID=1,而 kthreadd(PID=2)是内核进程,专门用来监听创建内核进程的请求,它维护了一个链表,如果有创建内核进程的需求,就会在链表上创建。

当然你可以看到图中还有一个swapper(PID=0)进程,它是系统中唯一一个不使用 fork 创建的进程,kernel_init 和 kthreadd 就是由它创建的,swapper 也叫 idle 进程,空闲进程,它运行的时候就是系统处于空闲状态的时候。

4)当 kernel_init 转变为用户空间的 init 进程以后,会在 Andorid 系统中创建一个最重要的进程:Zygote,此进程会创建安卓所需要的所有进程。

第三:Android 层级分析

这个图中 kernel 和 native 层的通信是 syscall,这个大家都很熟悉,就是系统调用,毕竟 C++ 调用 C 语言还是很简单的。

而 FrameWork 层和 Native 层通信就比较复杂了,java 如何调用 C++ 语言,这里会有一个 JNI 机制,JNI 有特定的语法,类似于 C 语言但又不是 C 语言,他可以实现 java 调用 C++的函数,这个过程需要 Android Runtime(ART) 安卓虚拟机的配合。

在 Native 层中,有很多 C++ 写的系统服务,供上层使用,比如最重要的ServiceManager,管理所有其他服务的服务。

第四:案例分析

手机 app 想要控制喇叭、LED 等硬件,要从 app 传递到 kernel,操作硬件,这个流程要比 Linux 的应用程序复杂得多。并且方式不止一种,举例:

1、app 通过直接读写 kernel 节点,向其写入数据,这就类似于在 Linux 命令行直接 echo,这是最简单的方式。因为 java 本身也有文件读写函数,有按字节读写和字符串读写两种方式。

2、app 的 java 语言调用 JNI 文件,JNI 调用 C 语言,在 C 函数中去操作节点。 

3、也可以用 C++ 写一个 Native 服务,APP 通过 binder 通信访问这个服务,在这个服务中操作节点。当然 socket 通信也可以。

第五:Android 权限问题

当然,以上所有的操作都需要权限,安卓系统的权限限制的比较严格,防止黑客破解。

如果你有 root 权限,那么你可以在安卓系统命令行中输入 setenforce 0 来关闭Android 系统的 SELinux 检查机制,那基本上你所有操作都可以被允许。

在 Linux 系统中,安全机制是:我是 root,我派出去的程序访问任何东西也应该是 root 权限,没有人可以阻止我。

在 Andorid 系统中,安全机制是:不管你是谁,做任何事情都要提前申请,否则会被 SELinux 检查,没有提前申请的行为都会被拒绝,看 log 会发现很多 avc deny。

举个形象一点的例子:一个公司老板,派他的儿子去自己的公司上班,按理来说是应该类似于 root 权限,谁能挡我?实际上呢,到公司上班可以,因为老板提前说了,但是去卫生间要申请权限,用电脑要申请权限,用打印机要申请权限,除了过来上班,其余任何没有提前说明的行为都会被拒绝。

这就是 Andorid 系统严格的安全机制,防止了黑客破解 root 权限以后乱搞你的手机,比如:内置一个程序,定期访问你的 xxx 文件,然后通过网络发出去。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/560301.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QTableWidget样式设置

QTableWidget的样式分为几个部分: 分别是: 外框:QTableWidget 表头:QHeaderView 表头字段:QHeaderView::section 表格:QTableWidget::item 选中的表格:QTableWidget::item::selected 水平滚动条…

课时七—进程同步(一)

1、同步与互斥的基本概念 1)临界资源 (1)临界资源:是一次仅允许一个进程使用的共享资源。各进程采取互斥的方式,实现共享的资源称作临界资源。属于临界资源的硬件有,打印机,磁带机等;软件有消息…

javase个人小结

一、数据类型 二、运算符(需要注意的) /:如果是int类型,那么会保留整数,舍去余数 列如:10/3 3 优先级:拿不准就加括号,括号优先级最高 三、类和对象 什么是封装,继承…

连接器信号完整性仿真教程 三

本文将讲解CST边界(Boundary)、背景(Background)的概念及背景材料与边件设置。边界与背景是CST仿真电磁的基础,有必要了解它,并掌握其设置方法与步骤。并以两个实例演示了具体设置的操作。 一 背景、边界与…

深度学习—目标检测标注数据集

深度学习之目标检测 PASCAL数据集 PASCAL VOC挑战赛(The PASCAL Visual Object Classes)是一个世界级的计算机视觉挑战赛,PASCAL全称:Pattern Analysis,Statical Modeling and Computational Learning,是…

磐维数据库应用案例荣获2022年度杭州商用密码应用优秀案例二等奖

2023年5月8日上午,在2023西湖论剑数字安全大会商用密码应用论坛上发布了2022年度杭州商用密码应用优秀案例,其中由中国移动通信集团浙江有限公司和中移动信息技术有限公司联合申报的 《基于磐维数据库的CRM营销系统商用密码应用案例》荣获二等奖。 20…

Linux下gdb基础命令演示,及命令汇总图

提示:本文主要介绍了什么是gdb,以及gdb指令及其具体使用案例 ————故不积跬步,无以至千里;不积小流,无以成江海。 文章目录 一、gdb模式下命令一览。1.1基本命令:1.2 断点命令:1.3 数据命令…

实时频谱分析-2.3实时频谱分析

实时频谱分析 频谱分析要想归入实时类别中,必须没有间隙地、不确定地处理关心的频宽内包含的所有信息。RSA 必须获得时域波形中包含的全部信息,把信息转换成频域信号。实时完成这一点必须满足多个重要的信号处理要求: 1)提供足够…

【计算思维题】少儿编程 蓝桥杯青少组计算思维真题及详细解析第3套

少儿编程 蓝桥杯青少组计算思维题及详细解析第3套 1、浩浩的左手边是 A、兰兰 B、贝贝 C、青青 D、浩浩 答案:B 考点分析:主要考查小朋友们的观察能力,从给定的图中可以看到:浩浩的左手边是贝贝,所以答案B 2、2 时 30 分,钟面上时针和分针形成的角是什么角 A、钝角…

与vCenter无法通讯时更改虚拟机的网络配置

客户的VCSA由于虚拟机的配置问题导致无法启动,需要通过重新创建VCSA的虚拟机配置的方式来恢复。但是,由于ESXi主机上的所有物理网口都已分配给了分布式网络交换机,在重建虚拟机配置时不能指定标准交换机的端口组来配置网络。而如果将虚拟机的…

找C++程序员工作被卡学历怎么办?我来分享一下实用的方法

当学历低的程序员找C程序员工作时,最担心的问题就是学历卡关。但只有资深的人力资源经理才知道那个行业内的潜规则。对于学历低的程序员来说,这是简直是很难逾越的关卡。 企业招聘程序员时,对学历的要求几乎全是本科及以上学历。这让学历低的…

C++11 列表初始化initializer_list

引子 C11,是继C98后的一次有力更新,引进了很多好用的语法,STL也添加了几个新容器,也解决了很多的问题。本篇博客就学习一下C11列表初始化的新语法和 initializer_list 文章目录 引子一. 列表初始化二. initializer_list结束语 一…

接口测试的流程?怎么设计接口测试用例?两张图给你讲的明明白白

目录 一、简介 二、接口测试的流程 三、为什么要写用例 四、接口用例设计 一、简介 在开始接口测试之前,我们想一下,接口测试的流程是什么?说到这里,有些人就会产生好奇和疑问,心里mmp:接口测试要什么流…

详细的谈谈,软件测试定义、目的及原则。

1.软件测试定义 软件测试就是在产品上线前,对软件需求、设计方案和编码实现的核查。软件测试的定义 软件测试是为了发现错误而执行程序的过程使用人工或自动方式来运行并测试某个系统,以此来检验系统是否满足规定的需求并确定预期结果与实际结果的差异 …

WEB安全:深入反射式dll注入技术

一、前言 dll注入技术是让某个进程主动加载指定的dll的技术。恶意软件为了提高隐蔽性,通常会使用dll注入技术将自身的恶意代码以dll的形式注入高可信进程。 常规的dll注入技术使用LoadLibraryA()函数来使被注入进程加载指定的dll。常规dll注入的方式一个致命的缺陷…

你不会还不知道如何用Python写一个切水果的小游戏吧

目录 引言 一、需要导入的包 二、窗口界面设置 三、随机生成水果位置 四、绘制字体 五、玩家生命的提示 六、游戏开始与结束的画面 七、游戏主循环 引言 水果忍者的玩法很简单,尽可能的切开抛出的水果就行。 今天小五就用python简单的模拟一下…

linux centos 安装zookeeper服务

一、进入官网:Apache ZooKeeper 二、下载安装包 可以使用wget 下载,我这里服务器的原因就不使用了,直接在网页使用http下载,然后通过xftp上传到服务器 下载完成后通过xftp上传到linux服务器 三、解压 tar -zxvf apache-zookeepe…

520中国劲酒携手撒贝宁直播探厂,共同见证健康跑活动启幕

5月20日是“网络情人节”,每年一度的 520,所有人都沉在真爱告白的浓情氛围当中,对于全中国的劲酒爱好者来说,520 却有着不一样的意义,每年 520 劲粉节,中国劲酒以爱之名,号召和鼓励劲粉们培养持之以恒的健康生活方式。      520 当日,总台央视主持人撒贝宁来到了湖北大冶市…

新手要学网络安全应该从哪学起?

写在开篇 本人10 年工作经验, 擅长 Web 安全攻防、渗透领域, 在金融领域的安全有丰富的实战经验。从事在线教育 3 年多培养学员过万,讲解清晰透彻,课程干货内容多,辅导学员耐心细致 我为啥说自学黑客&网络安全&a…

SSM框架学习之Mybatis

SSM Spring SpringMVC Mybatis,这是一种常用的Java Web开发框架组合。Spring是一个轻量级的IoC和AOP容器框架,SpringMVC是基于Spring的MVC框架,Mybatis是一种ORM(Object Relational Mapping)框架,用于在Java应用中管理数据库。…