RK3128系统&驱动开发分享——(三)、系统启动

RK3128系统启动大致流程分三个阶段

1、boot启动,即rk3128MiniLoaderAll(L)_V2.31.bin和uboot.img启动

2、linux内核启动,即kernel.img的启动

3、android系统的启动,即ramdisk.img、system.img的启动。

这里讲解第三步。

android系统启动过程是从init进程开始的。(源码在/system/core/init/init.c,linux内核启动完成最后就会跳转到这个文件的main函数里)

Android的init进程主要功能:
1)、分析init.rc启动脚本文件,根据文件内容执行相应的功能;

init会 根据启动脚本中的配置启动各个service进程(入下图)。
2)、当一些关键进程死亡时,重启该进程;
3)、提供Android系统的属性服务;

RK3128系统&驱动开发分享——(三)、系统启动_第1张图片

init.rc脚本是一个初始化的配置文件,非常关键。

因为android采用ramdisk的方式挂载根文件系统,而init.rc文件就放在ramdisk里,所以系统启动后修改init.rc文件是无法保存住的。

可以采用两种方法修改:

(1)   有android源码的话从源码里直接修改,然后重新编译即可,直接修改/system/core/rootdir/init.rc

(2)   将ramdisk.img解包,修改后,再压包

下面详细说明第二种方法的步骤:

(1)       将ramdisk.img拷贝到某个目录下,如tmpdir。

(2)       进入tmpdir将ramdisk.img重命名为ramdisk.img.gz

命令:mv ramdisk.img ramdisk.img.gz

(3)       使用gunzip 解压ramdisk.img.gz

命令:gunzip  ramdisk.img.gz

(4)       在tmpdir目录下建立新目录,如ramdisk

命令:mkdir ramdisk

(5)       进入ramdisk目录

命令:cd ramdisk

(6)       解包

命令:cpio -i -F ../ramdisk.img

(7)       修改init.rc文件,并保存

(8)       打包

命令:cpio -i -t -F ../ramdisk.img > list

命令:cpio -o -H newc -O ../new.img < list

命令:gzip new.img

(9)       重命名new.img

命令:mv new.img ramdisk.img

你可能感兴趣的:(RK3128系统&驱动开发分享,android系统)