Andorid 系统是在嵌入式行业中广泛应用的系统,手机、平板、机器人、汽车中控系统都有使用安卓系统的,在应用方面的优势是安卓系统自带 UI,使用Linux 需要自己用 QT 开发界面,并且界面没那么好看。
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,此进程会创建安卓所需要的所有进程。
全部0条评论
快来发表一下你的评论吧 !