android系统启动
recovery升级模式:启动recovery分区内核和文件系统
正常启动模式: 引导内核和启动Android系统
android系统由uboot启动:
1、输入模式,输入了recover命令,重启uboot就会引导recover分区,
2、uboot启动的过程中会等待 按键输入,如电源 + 音量上键 进入recover模式
3、系统正常重启后,点击了系统升级,重启就会启动recover模式,升级下载的安装包
三种不满足就boot正常启动。
升级2种升级方式:
差量包升级
完整包升级
当升级完后,就会擦除掉recovery模式。
Android init 进程(系统守护进程)
在系统源码位置: system/core/init/init.c
当编译生成系统后,会放在文件系统根目录: /init,这里我链接自己手机输入:
adb root
adb devices
adb shell
ls -l
ps -A // 查看所有进程
在手机根目录可看到init,它是init.c生成的执行文件,ps -A查看系统的进程可以看到init进程为1。
下图为 init主要做的事情:
init的启动log信息也在 根目录/proc/kmsg中
cat /proc/kmsg
查看cpu的一些信息
cat /proc/cpuinfo
获得环境变量信息:
getprop ro.hardware
getprop ro.revision
内核启动参数
cat /proc/cmdline
默认环境变量
cat default.prop
Init进程消息处理
1、根据系统中消息设置或者shell设置系统的prop
2、守护系统服务 如果系统退出,重启系统服务
创建socket套接字服务:
设置prop
设置和处理prop消息流程图
例子
adb root
adb shell
getprop // 查看所有prop设置
setporp propName value //向 propoty sevice sockt发生消息,调用setProp 设置prop参数
守护服务
init中signal_init_action 函数init时,触发sigchld_handler 的信号函数,同时创建
signal_fd 、signale_recv_fd 2个sokect ,并监听这2个socket。 通过 这2个套接字 init进程和子进程通信,重启服务。