Android cold boot process

合集下载

android启动流程

android启动流程

android启动流程Android启动流程:Android是一款广泛使用的移动操作系统,其启动流程是一个相对复杂的过程,涉及到多个模块的加载和启动。

下面将详细介绍Android的启动流程。

1、开机自检(Boot)当手机开机时,首先进行开机自检。

在这个阶段,系统会检测硬件设备的状态,包括电池是否齐全、屏幕是否正常等。

如果硬件设备通过了自检,系统将会开始启动。

2、引导加载程序(Bootloader)开机自检完成后,系统会加载引导加载程序(Bootloader)。

引导加载程序是硬件平台的一部分,其主要作用是启动操作系统。

在加载引导加载程序的过程中,系统会自动检测手机的存储器设备,确定存储设备中是否有可用的引导文件。

3、Linux内核加载一旦引导加载程序找到可用的引导文件,系统将会加载Linux内核。

Linux内核是Android系统的核心组件,负责管理内存、文件系统、驱动程序等。

4、文件系统加载一旦Linux内核加载完成,系统将会加载文件系统。

Android系统使用的是基于Linux的文件系统,在这个过程中,系统会加载并初始化各个文件系统,包括根文件系统、系统文件系统、数据文件系统等。

5、初始化进程(Init)一旦文件系统加载完成,系统将会启动初始化进程(Init)。

初始化进程是Android系统的第一个进程,其作用是启动系统的各个进程和服务。

6、启动用户空间(System Server)在初始化进程启动后,系统会启动用户空间,加载系统的用户界面等组件。

7、启动应用程序一旦用户空间加载完成,系统将会启动应用程序。

应用程序是Android系统的核心功能,包括系统应用程序和用户安装的应用程序。

系统应用程序包括电话、短信、浏览器等,而用户安装的应用程序则是用户根据自己的需求下载和安装的。

8、应用程序启动完成一旦应用程序启动完成,系统将进入正常运行状态,用户可以通过界面操作手机。

总结:Android系统的启动流程是一个复杂而严密的过程,经过开机自检、引导加载程序、Linux内核加载、文件系统加载、初始化进程、启动用户空间、启动应用程序等多个步骤,最终实现用户界面的显示和应用程序的运行。

Android开机画面制作(Bootloader阶段)

Android开机画面制作(Bootloader阶段)

Android开机画面制作(Bootloader阶段)Android开机画面由四部分组成,第一部分在bootloader启动时显示;第二部分在Linux系统启动时(就是那小企鹅);第三部分是在Android平台启动初始化时,出现“A N D R I O D”文字字样画面;第四部分是在平台图形系统启动后,出现含闪烁的ANDROID字样的动画。

在bootloader阶段,aboot_init函数中,调用了display_init完成显示的初始化动作后,接着调用display_image_on_screen,在该函数中涉及开机画面的显示。

原理比较简单,开机画面已被转换为可以直接用于显示的RGB数据,存放在一个常量数组中,需要显示时,定义显示的区域,直接将这些数据拷贝到Buffer中。

这里说一下如何将一般的图片(jpg、png、bmp等)转换得到bootloader开机画面所需的显示数据,其中有些细节需要注意的。

一、得到png文件大多数格式的图片,都可以通过photoshop转换成png格式。

注意的是,bootloader需要的png必须是256色且不带alpha(透明度)通道的。

首先,打开需要转换的文件,比如android.jpg,然后选择“文件”菜单下的“存储为Web和设备所用格式”。

注意设置页面右上角红色框内的选项,必须选择PNG-8格式,颜色为256,不勾选透明度。

设置完毕,保存为png文件,如android.png。

二、转换成raw文件这里要用到一个开源工具ImageMagick,可以到网上下载,有windows版本和Linux版本,其官方网站是。

但是,无论是windows还是Linux版本,格式转换的操作都只支持命令行操作方式。

使用下面的命令,得到可进一步利用的raw文件:convert *.png –depth 8 rgb:*raw比如上面的android.png,执行:convert android.png –depth 8 rgb:android.raw三、使用rgb2565Android自带了一个可将raw转换成直接用于显示的RGB数据的工具,在out/host/linux-x86/bin/目录下。

升级后开机就提示“android.process.acore”停止执行--分析解决方式

升级后开机就提示“android.process.acore”停止执行--分析解决方式

升级后开机就提⽰“android.process.acore”停⽌执⾏--分析解决⽅式OTA升级的,升级引发的全部问题都是能够解释的,有的能解决,有的不能解决。

⼀个项⽬报了这个问题。

升级后开机就提⽰“android.process.acore”停⽌执⾏抓取 adb log 看到了以下的这个 fatal 的log11-06 14:40:33.633 3827 3827 E AndroidRuntime: FATAL EXCEPTION: main11-06 14:40:33.633 3827 3827 E AndroidRuntime: Process: android.process.acore, PID: 382711-06 14:40:33.633 3827 3827 E AndroidRuntime: ng.RuntimeException: Unable to get providercom.android.providers.contacts.CallLogProvider: android.database.sqlite.SQLiteException: Can't downgrade database from version 851 to 85011-06 14:40:33.633 3827 3827 E AndroidRuntime: at android.app.ActivityThread.installProvider(ActivityThread.java:5043)11-06 14:40:33.633 3827 3827 E AndroidRuntime: at android.app.ActivityThread.installContentProviders(ActivityThread.java:4614)11-06 14:40:33.633 3827 3827 E AndroidRuntime: at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4547)11-06 14:40:33.633 3827 3827 E AndroidRuntime: at android.app.ActivityThread.access$1500(ActivityThread.java:151)11-06 14:40:33.633 3827 3827 E AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1402)11-06 14:40:33.633 3827 3827 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:110)11-06 14:40:33.633 3827 3827 E AndroidRuntime: at android.os.Looper.loop(Looper.java:193)11-06 14:40:33.633 3827 3827 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5324)11-06 14:40:33.633 3827 3827 E AndroidRuntime: at ng.reflect.Method.invokeNative(Native Method)11-06 14:40:33.633 3827 3827 E AndroidRuntime: at ng.reflect.Method.invoke(Method.java:515)11-06 14:40:33.633 3827 3827 E AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:829) 11-06 14:40:33.633 3827 3827 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:645)11-06 14:40:33.633 3827 3827 E AndroidRuntime: at dalvik.system.NativeStart.main(Native Method)从log能够看到 om.android.providers.contacts 联系⼈模块的数据库出问题了。

Android 开机启动流程

Android 开机启动流程

Android的开机流程1. 系统引导bootloader1) 源码:bootable/bootloader/*2) 说明:加电后,CPU将先执行bootloader程序,此处有三种选择a) 开机按Camera+Power启动到fastboot,即命令或SD卡烧写模式,不加载内核及文件系统,此处可以进行工厂模式的烧写b) 开机按Home+Power启动到recovery模式,加载recovery.img,recovery.img包含内核,基本的文件系统,用于工程模式的烧写c) 开机按Power,正常启动系统,加载boot.img,boot.img包含内核,基本文件系统,用于正常启动手机(以下只分析正常启动的情况)2. 内核kernel1) 源码:kernel/*2) 说明:kernel由bootloader加载3. 文件系统及应用init1) 源码:system/core/init/*2) 配置文件:system/rootdir/init.rc,3) 说明:init是一个由内核启动的用户级进程,它按照init.rc中的设置执行:启动服务(这里的服务指linux底层服务,如adbd提供adb支持,vold提供SD卡挂载等),执行命令和按其中的配置语句执行相应功能4. 重要的后台程序zygote1) 源码:frameworks/base/cmds/app_main.cpp等2) 说明:zygote是一个在init.rc中被指定启动的服务,该服务对应的命令是/system/bin/app_processa) 建立Java Runtime,建立虚拟机b) 建立Socket接收ActivityManangerService的请求,用于Fork应用程序c) 启动System Server5. 系统服务system server1) 源码:frameworks/base/services/java/com/android/server/SystemServer.java2) 说明:被zygote启动,通过System Manager管理android的服务(这里的服务指frameworks/base/services下的服务,如卫星定位服务,剪切板服务等)6. 桌面launcher1) 源码:ActivityManagerService.java为入口,packages/apps/launcher*实现2) 说明:系统启动成功后SystemServer使用xxx.systemReady()通知各个服务,系统已经就绪,桌面程序Home就是在ActivityManagerService.systemReady()通知的过程中建立的,最终调用()启launcher7. 解锁1) 源码:frameworks/policies/base/phone/com/android/internal/policy/impl/*lock*2) 说明:系统启动成功后SystemServer调用wm.systemReady()通知WindowManagerService,进而调用PhoneWindowManager,最终通过LockPatternKeyguardView显示解锁界面,跟踪代码可以看到解锁界面并不是一个Activity,这是只是向特定层上绘图,其代码了存放在特殊的位置8. 开机自启动的第三方应用程序1) 源码:frameworks/base/services/java/com/android/server/am/ActivityManagerService.java2) 说明:系统启动成功后SystemServer调用ActivityManagerNative.getDefault().systemReady()通知ActivityManager启动成功,ActivityManager会通过置变量mBooting,通知它的另一线程,该线程会发送广播android.intent.action.BOOT_COMPLETED以告知已注册的第三方程序在开机时自动启动。

安卓进程android process media一直占用CPU、发热问题解决方法

安卓进程android process media一直占用CPU、发热问题解决方法

关于安卓系统android.process.media进程一直占用CPU、消耗电池电量、手机发热、异常停止等的解决方案一、现象:手机开机一段长时间后,操作反应仍然巨慢,近似死机。

平时1分钟内完全开机,尔后操作会很顺畅,偶尔会有小卡,但不会完全卡死。

开启“设置->开发者选项->监控->显示CPU使用情况”后,发现android.process.media一直在占用cpu。

通过Watchdog Task Manager和SystemTuner查看其CPU占用率,维持在60%以上。

即使重启也一样卡死。

(android 4.1.2)二、分析:1.“受DRM保护的内容的存储、下载管理器、下载内容、媒体存储”在同一个进程中,即android.process.media。

开机后,进程android.process.media会运行一段时间后停止并转为后台(扫描时间因数据量而定,我的11G数据要扫描10分钟左右才停止,不过优先级比较低),其服务是一个MediaScannerService。

android.process.media包括“受DRM保护的内容的存储、下载管理器、下载内容、媒体存储”等软件包。

2.系统升级、刷机后或数据出错,很容易出现android.process.media异常停止或一直占用CPU的情况。

3.某些程序开机启动,对系统进行扫描动作。

三、解决方案:1.如果出现android.process.media一直占用CPU的情况,在“系统设置->应用->全部->下载管理器”中选择“清除数据”。

2.如果出现“andrioid.proces.media已停止”,在“设置->应用程序->管理应用程序->全部->媒体储存”中,选择“清除数据”。

3.有Root的手机,尽量安装管理软件,禁止一些不必要开机启动的软件。

PS:在保留用户数据而进行升级或刷机时,一些软件会出现异常停止的情况,也可以先尝试进入“管理应用”清除其数据。

引导加载程序

引导加载程序

引导加载程序引导加载程序引导加载程序是供应商专有的映像,负责在设备上启动内核。

它会监护设备状态,负责初始化以及绑定其信任根。

引导加载程序由许多部分组成,包括启动画⾯。

要开始启动,引导加载程序可能会直接将⼀个新映像刷写到相应的分区中,也可能会使⽤recovery开始重新刷写过程,该过程与 OTA 的操作过程⼀致。

⼀些设备制造商会创建多部分引导加载程序,然后将它们组合到⼀个 bootloader.img ⽂件中。

在刷写时,引导加载程序会提取各个引导加载程序并刷写所有这些引导加载程序。

最重要的是,引导加载程序会在将执⾏⼯作移到内核之前先验证 boot 分区和 recovery 分区的完整性,并显⽰部分中指定的警告。

规范化启动原因Android 9 对引导加载程序启动原因规范进⾏了以下更改。

引导加载程序使⽤专⽤的硬件和内存资源来确定设备重新启动的原因,然后将androidboot.bootreason=<reason>添加到⽤于启动设备的 Android 内核命令⾏中,以传达这⼀决定。

然后,init会转换此命令⾏,使其传播到 Android 属性bootloader_boot_reason_prop (ro.boot.bootreason) 中。

之前的 Android 版本中指定的启动原因格式如下:不使⽤空格,全部为⼩写字母,只有⾮常少的要求(例如报告kernel_panic、watchdog、cold/warm/hard),并且允许其他特殊原因。

这种宽松的规范导致出现了成百上千个⾃定义启动原因字符串(有时毫⽆意义),进⽽造成了⽆法管理的情况。

到⽬前最新的 Android 版本发布之前,引导加载程序提交的近乎⽆法解析或毫⽆意义的内容急剧增加已经为bootloader_boot_reason_prop造成了合规性问题。

在开发 Android 9 版本中,Android 团队发现旧的bootloader_boot_reason_prop中内容会急剧增加,并且⽆法在系统运⾏时重写。

详解Android(安卓)手机系统启动过程

详解Android(安卓)手机系统启动过程

最近打算自己移植MIUI,所以自学了不少东西,分享一下,recovery刷机模式中启动到过程吧,一下所有内容均有我略读相关源码得到和总结得来,不一定完全正确,不对之处还望海涵:当我们只是按下电源键开机时,会进入正常启动模式。

Secondary stage bootloader 会从boot 分区开始启动。

Boot 分区的格式是固定的,首先是一个头部,然后是Linux 内核,最后是用作根文件系统的ramdisk。

当Linux 内核启动完毕后,就开始执行根文件系统中的init 程序,init 程序会读取启动脚本文件(init.rc 和init.goldfish)。

现在就来说一下,init.rc到底在做些什么,我会在附件上传有关init_rc脚本语法和自己阅读是坐下到笔记,希望对各位有所帮助。

1.on boot-pause2. exec sbin/chargerlogo #运行sbin/chargerlogo(此运行在内核目录下)3.4.on early-init5. start ueventd #调用sbin/uventd链接所指的可执行程序,其源码位于system/core/init/ueventd.c,为设备赋予权限6.7.on init #源码位于system/core/init/init.c8.#主要完成一下的工作9.#清空umask、创建并挂载一些基本的目录(/dev-设备、/proc-系统信息、/sys-系统信息、/dev/pts-终端控制字,用于执行adb、/dev/socket)10.11.sysclktz 0 #把硬件时钟当成本地时间(GMT时区)12.13.loglevel 3 #讲系统LOG设置成可见,0为(NONE)14.15. write /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor"performance"16.17.# setup the global environment 设置全局变量18. export PATH /sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin#PATH变量19. export LD_LIBRARY_PATH /vendor/lib:/system/lib #库20. export ANDROID_BOOTLOGO 121. export ANDROID_CACHE /cache #cache目录22. export ANDROID_ROOT /system #安卓系统root分区-->/system23. export ANDROID_ASSETS /system/app #安卓系统可访问到-->/system/app(这就是为什么没有root权限不能删除/system/app下到文件)24. export ANDROID_DATA /data #安卓data区25. export DOWNLOAD_CACHE /cache/download #下载缓存为/cache/download26. export EXTERNAL_STORAGE /mnt/sdcard #附加存储-->sdcard卡27. export ASEC_MOUNTPOINT /mnt/asec #asec根文件目录28. export LOOP_MOUNTPOINT /mnt/obb29. export SD_EXT_DIRECTORY /sd-ext #sdcard挂载格式30. export BOOTCLASSPATH/system/framework/core.jar:/system/framework/bouncycastle.jar:/system/f ramework/ext.jar:/system/framework/framework.jar:/system/framework/andr oid.policy.jar:/system/framework/services.jar:/system/framework/core-ju nit.jar #bootclasspath31. export DSP_PATH /system/lib/dsp #dsp(数字信号处理器) path32. export DEFAULT_BASEIMAGE /system/lib/dsp/baseimage.dof33. export QOSDYN_FILE /system/lib/dsp/qosdyn_3430.dll64P34.35.# Backward compatibility #反向兼容,确保对以前版本到兼容?(不缺定)36. symlink /system/etc /etc #在/etc下创建链接到/system/etc到链接37. symlink /sys/kernel/debug /d38.39.# Right now vendor lives on the same filesystem as system,40.# but someday that may change.41. symlink /system/vendor /vendor42.43.# create mountpoints44. mkdir /mnt 0775 root system45. #给system赋予0775的权限,也就是rwx-rwx-rw-现在详细解释如下46. #此权限数值对应为:47. #u(用户):r(读)-w(写)-x(执行)48. #g(群组):r(读)-w(写)-x(执行)49. #0(其他):r(读)-w(写)-50. #对应到2进制数值为:51. #1 1 1 :111 ---752. #1 1 1 :111 ---753. #1 1 0 :110 ---554. #55. mkdir /mnt/sdcard 0000 system system56.57.# Create cgroup mount point for cpu accounting #为cpu创建58. mkdir /acct59. mount cgroup none /acct cpuacct60. mkdir /acct/uid61.62.# Backwards Compat - XXX: Going away in G*63. symlink /mnt/sdcard /sdcard64.65. mkdir /system66. mkdir /data 0771 system system67. mkdir /cache 0771 system cache68. mkdir /config 0500 root root69.70. mkdir /sqlite_stmt_journals 01777 root root71. mount tmpfs tmpfs /sqlite_stmt_journals size=4m72.73. # Directory for putting things only root should see.#创建用于存放root用户才能可见到文件夹74. mkdir /mnt/secure 0700 root root75.76. # Directory for staging bindmounts #伺服器根文件目录77. mkdir /mnt/secure/staging 0700 root root78.79. # Directory-target for where the secure container80. # imagefile directory will be bind-mounted81. mkdir /mnt/secure/asec 0700 root root82.83. # Secure container public mount points.84. mkdir /mnt/asec 0700 root system85. mount tmpfs tmpfs /mnt/asec mode=0755,gid=100086.87. # Filesystem image public mount points.88. mkdir /mnt/obb 0700 root system89. mount tmpfs tmpfs /mnt/obb mode=0755,gid=100090.91. mkdir /sd-ext 0771 system system92.93. write /proc/sys/kernel/panic_on_oops 194. write /proc/sys/kernel/hung_task_timeout_secs 095. write /proc/cpu/alignment 496. write /proc/sys/kernel/sched_latency_ns 1000000097. write /proc/sys/kernel/sched_wakeup_granularity_ns 200000098. write /proc/sys/kernel/sched_compat_yield 199. write /proc/sys/kernel/sched_child_runs_first 0100.101.# Create cgroup mount points for process groups102. mkdir /dev/cpuctl103. mount cgroup none /dev/cpuctl cpu104. chown system system /dev/cpuctl105. chown system system /dev/cpuctl/tasks106. chmod 0777 /dev/cpuctl/tasks107. write /dev/cpuctl/cpu.shares 1024108.109. mkdir /dev/cpuctl/fg_boost110. chown system system /dev/cpuctl/fg_boost/tasks111. chmod 0777 /dev/cpuctl/fg_boost/tasks112. write /dev/cpuctl/fg_boost/cpu.shares 1024113.114. mkdir /dev/cpuctl/bg_non_interactive115. chown system system /dev/cpuctl/bg_non_interactive/tasks 116. chmod 0777 /dev/cpuctl/bg_non_interactive/tasks117. # 5.0 %118. write /dev/cpuctl/bg_non_interactive/cpu.shares 52119.120.#[LGE_start] hyunwoong.ahn121. mkdir /dvp 0771 system system122. mkdir /dvp/hwkey 0771 system system123. mkdir /dvp/userdata 0771 system system124.#[LGE_end] hyunwoong.ahn125.126. chown system system /sys/class/leds/lcd-backlight/als 127.128. # Increase readahead buffers on MMC devices129. write /sys/block/mmcblk0/bdi/read_ahead_kb 1024130. write /sys/block/mmcblk1/bdi/read_ahead_kb 1024131.132.on fs133.# mount mtd partitions134. # Mount /system rw first to give the filesystem a chance to save a checkpoint135. mount ext4 /dev/block/mmcblk0p8 /system ro noatime barrier=1 wait 136. # We chown/chmod /data again so because mount is run as root + defaults 137. mount ext4 /dev/block/mmcblk0p9 /data nosuid nodev noatime barrier=1 wait138. chown system system /data139. chmod 0771 /data140.141.#[LGE_star]Hyunwoong.ahn^M142. mount ext3 /dev/block/mmcblk0p6 /dvp/hwkey nosuid nodev143. chown system system /dvp/hwkey144. chown system divxdrm /dvp/hwkey/key.hw145. chmod 0660 /dvp/hwkey/key.hw146. mount ext3 /dev/block/mmcblk0p6 /dvp/userdata nosuid nodev147. chown system divxdrm /dvp/userdata148. chmod 0770 /dvp/userdata149. chown system system /dev/block/mmcblk0p5150. chown system system /dev/block/mmcblk0p12151. chmod 0777 /dev/block/mmcblk0p5152. chmod 0777 /dev/block/mmcblk0p12153.154. mount ext4 /dev/block/mmcblk0p10 /cache nosuid nodev noatime barrier=1 wait155.156. mkdir /lgdrm 0770 lgdrm lgdrm_acc157. mount ext3 /dev/block/mmcblk0p5 /lgdrm nosuid nodev158.159.160.161.162.163.on post-fs164.165. # once everything is setup, no need to modify /166. mount rootfs rootfs / ro remount167.168. # We chown/chmod /data again so because mount is run as root + defaults 169. chown system system /data170. chmod 0771 /data171.172. # Mount compressed filesystems173. mount squashfs loop@/system/lib/modules/modules.sqf/system/lib/modules ro174. mount squashfs loop@/system/xbin/xbin.sqf /system/xbin ro175.176. # Create dump dir and collect dumps.177. # Do this before we mount cache so eventually we can use cache for 178. # storing dumps on platforms which do not have a dedicated dump partition.179.180. mkdir /data/dontpanic181. chown root log /data/dontpanic182. chmod 0750 /data/dontpanic183.184. # Collect apanic data, free resources and re-arm trigger185. copy /proc/apanic_console /data/dontpanic/apanic_console186. chown root log /data/dontpanic/apanic_console187. chmod 0640 /data/dontpanic/apanic_console188.189. copy /proc/apanic_threads /data/dontpanic/apanic_threads190. chown root log /data/dontpanic/apanic_threads191. chmod 0640 /data/dontpanic/apanic_threads192.193. write /proc/apanic_console 1194.195. # Same reason as /data above196. chown system cache /cache197. chmod 0771 /cache198.199. # This may have been created by the recovery system with odd permissions 200. chown system cache /cache/recovery201. chmod 0770 /cache/recovery202.203. #change permissions on vmallocinfo so we can grab it from bugreports 204. chown root log /proc/vmallocinfo205. chmod 0440 /proc/vmallocinfo206.207. #change permissions on kmsg & sysrq-trigger so bugreports can grab kthread stacks208. chown root system /proc/kmsg209. chmod 0440 /proc/kmsg210. chown root system /proc/sysrq-trigger211. chmod 0220 /proc/sysrq-trigger212.213.# create basic filesystem structure214. mkdir /data/misc 01771 system misc215. mkdir /data/misc/bluetoothd 0770 bluetooth bluetooth216. mkdir /data/misc/bluetooth 0770 system system217. mkdir /data/misc/keystore 0700 keystore keystore218. mkdir /data/misc/vpn 0770 system system219. mkdir /data/misc/systemkeys 0700 system system220. mkdir /data/misc/vpn/profiles 0770 system system221. # give system access to wpa_supplicant.conf for backup and restore 222. mkdir /data/misc/wifi 0770 wifi wifi223. chmod 0770 /data/misc/wifi224. chmod 0660 /data/misc/wifi/wpa_supplicant.conf225. mkdir /data/local 0771 shell shell226. mkdir /data/local/tmp 0771 shell shell227. mkdir /data/local/download 0771 system cache228. mkdir /data/data 0771 system system229. mkdir /data/app-private 0771 system system230. mkdir /data/app 0771 system system231. mkdir /data/property 0700 root root232.233. mkdir /cache/download 0771 system cache234.235. # create dalvik-cache and double-check the perms236. mkdir /data/dalvik-cache 0771 system system237. chown system system /data/dalvik-cache238. chmod 0771 /data/dalvik-cache239.240. mkdir /cache/dalvik-cache 0771 system system241. chown system system /cache/dalvik-cache242. chmod 0771 /cache/dalvik-cache243.244. # create the lost+found directories, so as to enforce our permissions 245. mkdir /data/lost+found 0770246. mkdir /cache/lost+found 0770247.248. # double check the perms, in case lost+found already exists, and set owner249. chown root root /data/lost+found250. chmod 0770 /data/lost+found251. chown root root /cache/lost+found252. chmod 0770 /cache/lost+found253.254. # allow net_raw to have access to /dev/socket directory255. chown root net_raw /dev/socket256. chmod 0775 /dev/socket257.258. # allow system to modify cpufreq control files259. chown root system/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor260. chmod 0664 /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor 261. chown root system/sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq262. chmod 0664 /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq 263. chown root system/sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq264. chmod 0664 /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq 265.266. chmod 0777 /data/misc/wifi/config_mac267. mkdir /data/misc/wifi/sockets 0770 wifi wifi268. mkdir /data/misc/dhcp 0777 dhcp dhcp269. setprop wifi.supplicant_scan_interval 20270. setprop wifi.interface wlan0271.272.on boot273.# basic network init274. ifup lo275. hostname localhost276. domainname localdomain277.278.# set RLIMIT_NICE to allow priorities from 19 to -20279. setrlimit 13 40 40280.281.# Define the oom_adj values for the classes of processes that can be 282.# killed by the kernel. These are used in ActivityManagerService. 283. setprop ro.FOREGROUND_APP_ADJ 0284. setprop ro.VISIBLE_APP_ADJ 1285. setprop ro.PERCEPTIBLE_APP_ADJ 2286. setprop ro.HEAVY_WEIGHT_APP_ADJ 3287. setprop ro.SECONDARY_SERVER_ADJ 4288. setprop ro.BACKUP_APP_ADJ 5289. setprop ro.HOME_APP_ADJ 6290. setprop ro.HIDDEN_APP_MIN_ADJ 7291. setprop ro.EMPTY_APP_ADJ 15292.293.# Define the memory thresholds at which the above process classes will 294.# be killed. These numbers are in pages (4k).295. setprop ro.FOREGROUND_APP_MEM 2048296. setprop ro.VISIBLE_APP_MEM 3072297. setprop ro.PERCEPTIBLE_APP_MEM 4096298. setprop ro.HEAVY_WEIGHT_APP_MEM 4096299. setprop ro.SECONDARY_SERVER_MEM 6144300. setprop ro.BACKUP_APP_MEM 6144301. setprop ro.HOME_APP_MEM 6144302. setprop ro.HIDDEN_APP_MEM 7168303. setprop ro.EMPTY_APP_MEM 8192304.305.# Write value must be consistent with the above properties.306.# Note that the driver only supports 6 slots, so we have combined some of 307.# the classes into the same memory level; the associated processes of higher 308.# classes will still be killed first.309. write /sys/module/lowmemorykiller/parameters/adj 0,1,2,4,7,15310.311. write /proc/sys/vm/overcommit_memory 1312. write /proc/sys/vm/min_free_order_shift 4313. write /sys/module/lowmemorykiller/parameters/minfree 2048,3072,4096,6144,7168,8192314.315. # Set init its forked children's oom_adj.316. write /proc/1/oom_adj -16317.318. # Tweak background writeout319. write /proc/sys/vm/dirty_expire_centisecs 200320. write /proc/sys/vm/dirty_background_ratio 5321.322. # Permissions for System Server and daemons.323. chown radio system /sys/android_power/state324. chown radio system /sys/android_power/request_state325. chown radio system /sys/android_power/acquire_full_wake_lock 326. chown radio system /sys/android_power/acquire_partial_wake_lock 327. chown radio system /sys/android_power/release_wake_lock328. chown radio system /sys/power/state329. chown radio system /sys/power/wake_lock330. chown radio system /sys/power/wake_unlock331. chmod 0660 /sys/power/state332. chmod 0660 /sys/power/wake_lock333. chmod 0660 /sys/power/wake_unlock334. chown system system /sys/class/timed_output/vibrator/enable335. chown system system /sys/class/leds/keyboard-backlight/brightness 336. chown system system /sys/class/leds/lcd-backlight/brightness 337. chown system system /sys/class/leds/button-backlight/brightness 338. chown system system /sys/class/leds/jogball-backlight/brightness 339. chown system system /sys/class/leds/red/brightness340. chown system system /sys/class/leds/green/brightness341. chown system system /sys/class/leds/blue/brightness342. chown system system /sys/class/leds/red/device/grpfreq343. chown system system /sys/class/leds/red/device/grppwm344. chown system system /sys/class/leds/red/device/blink345. chown system system /sys/class/leds/red/brightness346. chown system system /sys/class/leds/green/brightness347. chown system system /sys/class/leds/blue/brightness348. chown system system /sys/class/leds/red/device/grpfreq349. chown system system /sys/class/leds/red/device/grppwm350. chown system system /sys/class/leds/red/device/blink351. chown system system /sys/class/timed_output/vibrator/enable352. chown system system /sys/module/sco/parameters/disable_esco353. chown system system /sys/kernel/ipv4/tcp_wmem_min354. chown system system /sys/kernel/ipv4/tcp_wmem_def355. chown system system /sys/kernel/ipv4/tcp_wmem_max356. chown system system /sys/kernel/ipv4/tcp_rmem_min357. chown system system /sys/kernel/ipv4/tcp_rmem_def358. chown system system /sys/kernel/ipv4/tcp_rmem_max359. chown root radio /proc/cmdline360.361.# Define TCP buffer sizes for various networks362.# ReadMin, ReadInitial, ReadMax, WriteMin, WriteInitial, WriteMax, 363. setprop net.tcp.buffersize.default4096,87380,110208,4096,16384,110208364. setpropnet.tcp.buffersize.wifi 4095,87380,110208,4096,16384,110208365. setpropnet.tcp.buffersize.umts 4094,87380,110208,4096,16384,110208366. setprop net.tcp.buffersize.edge 4093,26280,35040,4096,16384,35040 367. setpropnet.tcp.buffersize.hspa 4094,87380,110208,4096,16384,110208368. setprop net.tcp.buffersize.gprs 4092,8760,11680,4096,8760,11680 369.370. chmod 0660 /sys/class/rfkill/rfkill0/state371. chmod 0660 /sys/class/rfkill/rfkill0/type372. chmod 0660 /sys/class/rfkill/rfkill1/state373. chmod 0660 /sys/class/rfkill/rfkill1/type374. chmod 0666 /sys/devices/platform/bd_address/bdaddr_if375. chown bluetooth bluetooth /sys/class/rfkill/rfkill0/state376. chown bluetooth bluetooth /sys/class/rfkill/rfkill0/type377. chown bluetooth bluetooth /sys/class/rfkill/rfkill1/state378. chown bluetooth bluetooth /sys/class/rfkill/rfkill1/type379. write /sys/class/rfkill/rfkill0/state 0380.381. chown system system /sys/devices/platform/motion_sensor/accel_onoff 382. chown system system /sys/devices/platform/motion_sensor/accel_delay 383. chown system system /sys/devices/platform/motion_sensor/compass_onoff 384. chown system system /sys/devices/platform/motion_sensor/compass_delay 385. chown system system /sys/devices/platform/motion_sensor/tilt_onoff 386. chown system system /sys/devices/platform/motion_sensor/tilt_delay 387. chown system system /sys/devices/platform/motion_sensor/gyro_onoff 388. chown system system /sys/devices/platform/motion_sensor/gyro_delay 389. chown system system /sys/bus/i2c/drivers/hub_proxi/3-0044/onoff 390. chown system system /sys/bus/i2c/drivers/hub_proxi/3-0044/delay 391. chown system system /sys/devices/platform/motion_sensor/shake_onoff 392. chown system system /sys/bus/i2c/drivers/kxtf9/3-000f/shake_onoff 393. chown system system /sys/devices/platform/motion_sensor/snap_onoff 394. chown system system /sys/bus/i2c/drivers/kxtf9/3-000f/snap_onoff 395. chown system system /sys/devices/platform/motion_sensor/flip_onoff 396. chown system system /sys/bus/i2c/drivers/kxtf9/3-000f/flip_onoff 397. chown system system /sys/devices/platform/motion_sensor/tap_onoff 398. chown system system /sys/bus/i2c/drivers/kxtf9/3-000f/tap_onoff 399. chown system system/sys/devices/platform/motion_sensor/yawimage_onoff400. chown system system/sys/devices/platform/i2c-gpio.7/i2c-adapter/i2c-7/7-001c/checkresult 401. chown system system/sys/devices/platform/i2c-gpio.7/i2c-adapter/i2c-7/7-001c/checkopmode 402. chmod 0666 /sys/devices/platform/motion_sensor/accel_onoff403. chmod 0666 /sys/devices/platform/motion_sensor/accel_delay404. chmod 0666 /sys/devices/platform/motion_sensor/compass_onoff 405. chmod 0666 /sys/devices/platform/motion_sensor/compass_delay 406. chmod 0666 /sys/devices/platform/motion_sensor/tilt_onoff407. chmod 0666 /sys/devices/platform/motion_sensor/tilt_delay408. chmod 0666 /sys/devices/platform/motion_sensor/gyro_onoff409. chmod 0666 /sys/devices/platform/motion_sensor/gyro_delay410. chmod 0666 /sys/bus/i2c/drivers/hub_proxi/3-0044/onoff411. chmod 0666 /sys/bus/i2c/drivers/hub_proxi/3-0044/delay412. chmod 0666 /sys/devices/platform/motion_sensor/shake_onoff413. chmod 0666 /sys/bus/i2c/drivers/kxtf9/3-000f/shake_onoff414. chmod 0666 /sys/devices/platform/motion_sensor/snap_onoff415. chmod 0666 /sys/bus/i2c/drivers/kxtf9/3-000f/snap_onoff416. chmod 0666 /sys/devices/platform/motion_sensor/flip_onoff417. chmod 0666 /sys/bus/i2c/drivers/kxtf9/3-000f/flip_onoff418. chmod 0666 /sys/devices/platform/motion_sensor/tap_onoff419. chmod 0666 /sys/bus/i2c/drivers/kxtf9/3-000f/tap_onoff420. chmod 0666 /sys/devices/platform/motion_sensor/yawimage_onoff 421. chmod 0666/sys/devices/platform/i2c-gpio.7/i2c-adapter/i2c-7/7-001c/checkresult 422. chmod 0666/sys/devices/platform/i2c-gpio.7/i2c-adapter/i2c-7/7-001c/checkopmode 423.424. chmod 0666 /sys/devices/platform/omapdss/display0/name425. chmod 0666 /sys/devices/platform/omapdss/display1/name426. chmod 0666 /sys/devices/platform/omapdss/display0/enabled427. chmod 0666 /sys/devices/platform/omapdss/display1/enabled428. chmod 0666 /sys/devices/platform/omapdss/display0/timings429. chmod 0666 /sys/devices/platform/omapdss/display1/timings430. chmod 0666 /sys/devices/platform/omapdss/overlay0/manager431. chmod 0666 /sys/devices/platform/omapdss/overlay1/manager432. chmod 0666 /sys/devices/platform/omapdss/overlay2/manager433. chmod 0666 /sys/devices/platform/omapdss/overlay0/zorder434. chmod 0666 /sys/devices/platform/omapdss/overlay1/zorder435. chmod 0666 /sys/devices/platform/omapdss/overlay2/zorder436. chmod 0666 /sys/devices/platform/omapdss/overlay0/enabled437. chmod 0666 /sys/devices/platform/omapdss/overlay1/enabled438. chmod 0666 /sys/devices/platform/omapdss/overlay2/enabled439. chmod 0666 /sys/devices/platform/omapdss/manager0/display440. chmod 0666 /sys/devices/platform/omapdss/manager1/display441. chmod 0666 /sys/devices/platform/omapdss/manager0/trans_key_enabled 442. chmod 0666 /sys/devices/platform/omapdss/manager1/trans_key_enabled 443. chmod 0666 /sys/devices/platform/omapdss/manager0/trans_key_type 444. chmod 0666 /sys/devices/platform/omapdss/manager1/trans_key_type 445. chmod 0666 /sys/devices/platform/omapdss/manager0/trans_key_value 446. chmod 0666 /sys/devices/platform/omapdss/manager1/trans_key_value 447. chmod 0666/sys/devices/platform/omapdss/manager0/alpha_blending_enabled448. chmod 0666/sys/devices/platform/omapdss/manager1/alpha_blending_enabled449. write /sys/devices/platform/omapdss/manager0/alpha_blending_enabled 1450.451.# MMS: Create log directory for fw3a_core452. mkdir /data/log/fw3A 0775 root root453.454.# change permissions for alsa nodes455. symlink /dev/snd/pcmC0D0c /dev/pcmC0D0c456. symlink /dev/snd/pcmC0D0p /dev/pcmC0D0p457. symlink /dev/snd/controlC0 /dev/controlC0458. symlink /dev/snd/timer /dev/timer459. chmod 0777 /dev/pcmC0D0c460. chmod 0777 /dev/pcmC0D0p461. chmod 0777 /dev/controlC0462. chmod 0777 /dev/timer463.464. chmod 0664/sys/devices/platform/i2c_omap.2/i2c-2/2-0060/leds/lcd-backlight/als 465. chown system system/sys/devices/platform/i2c_omap.2/i2c-2/2-0060/leds/lcd-backlight/als 466.467. # Batt gauge error detection468. chmod 0666/sys/bus/platform/drivers/twl4030_bci/twl4030_bci/gauge_if469.470. # Enabling sleep in idle path471. write /sys/power/sleep_while_idle 1472.473. # Enabling Off mode474. write /sys/power/enable_off_mode 1475.476. # Enabling voltage off while idle477. write /sys/power/voltage_off_while_idle 1478.479. # Permissions for setting the DSP Frequency480. chown media root /sys/power/dsp_freq481. chown media system /sys/devices/platform/omap3isp/isp_reserve 482.483.# Include extra init file484. import /system/etc/init.local.rc485.486.# gps permissions487. chown system system /sys/devices/platform/hub_gps_gpio/poweron 488. chown system system /sys/devices/platform/hub_gps_gpio/reset 489. mkdir /data/gps490. chmod 777 /data/gps491. mkdir /data/gps/var492. chmod 777 /data/gps/var493. mkdir /data/gps/var/run494. chmod 777 /data/gps/var/run495. mkdir /data/gps/log496. chmod 777 /data/gps/log497. mkdir /data/cache498. chmod 777 /data/cache499.500. ## Torch perms501. chown system camera /sys/class/leds/rt8515/brightness502. chmod 0660 /sys/class/leds/rt8515/brightness503.504. ## liblights505. chown system system /sys/class/leds/lcd-backlight/brightness 506. chown system system /sys/class/leds/lcd-backlight/onoff 507. chown system system/sys/devices/platform/i2c_omap.2/i2c-2/2-001a/led_brightness 508. chown system system/sys/devices/platform/i2c_omap.2/i2c-2/2-001a/led_onoff509. chown system system/sys/devices/platform/i2c_omap.2/i2c-2/2-001a/led_sync510. chown system system/sys/devices/platform/i2c_omap.2/i2c-2/2-001a/blink_enable511. chown system system/sys/devices/platform/i2c_omap.2/i2c-2/2-001a/0x06512. chown system system/sys/devices/platform/i2c_omap.2/i2c-2/2-001a/0x07513. chown system system/sys/devices/platform/i2c_omap.2/i2c-2/2-001a/0x0D514. chown system system/sys/devices/platform/i2c_omap.2/i2c-2/2-001a/0x0E515. chown system system/sys/devices/platform/i2c_omap.2/i2c-2/2-001a/0x10 516. chown system system/sys/devices/platform/i2c_omap.2/i2c-2/2-001a/0x11 517. chown system system/sys/devices/platform/i2c_omap.2/i2c-2/2-001a/0x03 518. chown system system/sys/devices/platform/i2c_omap.2/i2c-2/2-001a/0x04 519. chown system system/sys/devices/platform/i2c_omap.2/i2c-2/2-001a/0x09 520. chown system system/sys/devices/platform/i2c_omap.2/i2c-2/2-001a/0x0A 521. chown system system/sys/devices/platform/i2c_omap.2/i2c-2/2-001a/0x13 522. chown system system/sys/devices/platform/i2c_omap.2/i2c-2/2-001a/0x14 523.524.# Run sysinit525. exec /system/bin/sysinit526.527. class_start default528.529.## Daemon processes to be run by init.530.##531.service ueventd /sbin/ueventd532. critical533.534.service prb /sbin/prb535. user root536. disabled537. oneshot538. keycodes 114 116539.540.service console /system/bin/sh541. console542. disabled543. user shell544. group log545.546.on property:ro.secure=0547. start console548.549.# adbd is controlled by the persist.service.adb.enable system property 550.service adbd /sbin/adbd551. disabled552.553.# adbd on at boot in emulator554.on property:ro.kernel.qemu=1555. start adbd556.557.on property:persist.service.adb.enable=1558. start adbd559.560.on property:persist.service.adb.enable=0561. stop adbd562.563.service pvrsrvinit /system/bin/pvrsrvinit564. user root565. oneshot566.567.# load DSP firmware 防火墙568.service baseimage /system/bin/cexec.out /system/lib/dsp/baseimage.dof 569. user root570. group audio571. oneshot572.573.service fw3a /system/bin/fw3a_core --dbgport=6660 --dbgremote --dbgpath=/data/log/fw3A574. user root575. group root576.577.service servicemanager /system/bin/servicemanager578. user system579. critical580. onrestart restart zygote581. onrestart restart media582.583.service vold /system/bin/vold584. socket vold stream 0660 root mount585. ioprio be 2586.587.service netd /system/bin/netd588. socket netd stream 0660 root system589. socket dnsproxyd stream 0660 root inet590.591.service debuggerd /system/bin/debuggerd592.593.service ril-daemon /system/bin/rild594. socket rild stream 660 root radio595. socket rild-debug stream 660 radio system596. user root597. group radio cache inet misc audio sdcard_rw net_admin net_raw 598.599.service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server600. socket zygote stream 666601. onrestart write /sys/android_power/request_state wake602. onrestart write /sys/power/state on603. onrestart restart media604. onrestart restart netd605.606.service media /system/bin/mediaserver607. user media608. group system audio camera graphics inet net_bt net_bt_admin net_raw 609. ioprio rt 4610.611.service bootanim /system/bin/bootanimation612. user graphics613. group graphics614. disabled615. oneshot616.617.service dbus /system/bin/dbus-daemon --system --nofork618. socket dbus stream 660 bluetooth bluetooth619. user bluetooth620. group bluetooth net_bt_admin621.622.service bluetoothd /system/bin/bluetoothd -n623. socket bluetooth stream 660 bluetooth bluetooth624. socket dbus_bluetooth stream 660 bluetooth bluetooth625. # init.rc does not yet support applying capabilities, so run as root and626. # let bluetoothd drop uid to bluetooth with the right linux capabilities 627. group bluetooth net_bt_admin misc628. disabled629.630.service hfag /system/bin/sdptool add --channel=10 HFAG631. user bluetooth。

Android手机开机问题分析流程

Android手机开机问题分析流程

Android手机开机问题分析流程本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:一、如何抓取开机问题Log一、如何抓取开机问题Log当我们遇到开机问题时候,不同阶段,我们需要不同的Log分析,这样才可以快速方便的解决开机问题,如果没有Log,我们几乎很难分析解决开机问题。

开机问题抓取 Log 流程如下:如何抓取开机问题Log二、开机问题Log 分析流程通过不同阶段的Log,我们进行不同的重点分析。

开机问题Log 分析流程如下:开机问题Log分析流程三、 kernel Log 搜索关键字 fs_mgr在 kernel Log 中搜索关键字 fs_mgr 初步分析定位分区问题。

1. fs_mgr: __mount(source=/dev/block/dm-0,target=/system,type=ext4)=-1System分区mount失败debug方法•a.Kernel log中有emmc “I/O error” ,需要检查emmc相关供电,替换物料交叉实验•b.Log中没有I/O error,回读system分区对比正常机器system.img看文件是否被破坏2.fs_mgr: __mount(source=/dev/block/dm-0,target=/data,type=ext4)=-1Data分区mount失败debug方法a.一般加密的情况/userdata分区会先出现 mount fail情况,然后才解密节点/dev/block/dm-0 or dm-1 , target=/data mount成功,正常userdata mount失败,可能是分区数据毁损,请先readback img, 然后手动进recovery mode 做factory reset 看能否恢复Readback 的userdata img可以对比正常机器看是哪个文件毁损3. init: fs_mgr_mount_all returned an errorDm-verity配置错误引起user版本开不了机(eng版本正常)同步打开/kernel-3.18/arch/arm/configs/${project}_defconfig 中如下两个定义:1.CONFIG_DM_VERITY=y2.CONFIG_DM_VERITY_FEC=y4.fs_mgr: Error loading verity table (Invalid argument) 跳转至3四、uart log中搜索关键字 SBC,是否存在error/ fail/ assert五、开始时间长的问题分析方法1. MTK 平台开机时间保存的文件a.手机中(/proc/bootprof)mobile Log中的bootprof文件。

Android开机启动流程

Android开机启动流程

Android启动流程
• 第四步 Home启动
在ServerThread@SystemServer.java后半段,我们可以看到系统在启 动完所有的Android服务后,做了这样一些动作: (1) 使用xxx.systemReady()通知各个服务,系统已经就绪。 (2) 特别对于ActivityManagerService.systemReady(回调) Widget.wallpaper,imm(输入法)等ready通知。 Home就是在ActivityManagerService.systemReady()通知的过程中建 立的。下面是ActivityManagerService.systemReady()的伪代码: systemReady()@ActivityManagerService.java resumeTopActivityLocked() startHomeActivityLocked();//如果是第一个则启动HomeActivity。 startActivityLocked(。。。)CATEGORY_HOME
Android启动流程
• 第二步 Zygote
Servicemanager和zygote进程就奠定了Android的基础。Zygote这个进程起来才会建立起真正的 Android运行空间,初始化建立的Service都是Navtive service.在.rc脚本文件中zygote的描述: service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server 所以Zygote从main(…)@frameworks/base/cmds/app_main.cpp开始。 (1) main(…)@frameworks/base/cmds/app_main.cpp 建立Java Runtime runtime.start("com.android.internal.os.ZygoteInit", startSystemServer); (2) runtime.start@AndroidRuntime.cpp 建立虚拟机 运行:com.android.internal.os.ZygoteInit:main函数。 (3)main()@com.android.internal.os.ZygoteInit//真正的Zygote。 registerZygoteSocket();//登记Listen端口 startSystemServer(); 进入Zygote服务框架。 经过这几个步骤,Zygote就建立好了,利用Socket通讯,接收ActivityManangerService的请求, Fork应用程序。

android手机启动过程与刷机简单分析

android手机启动过程与刷机简单分析

android手机启动过程与刷机简单分析这几天看了一些嵌入式linux系统和智能手机android系统的资料,琢磨了一下安卓手机的启动过程,虽然每种手机的CPU、主板和存储器有差别,但大致过程相似。

分享一下:手机按下电源开关键后:1、主板上电,CPU芯片加载自身片上的一小段引导代码bootloader(代码的作用:告诉CPU到哪里去寻找系统启动程序,比如到NAND flash接口去读用户程序);2、CPU按扇区方式将NAND FLASH第一个block内的SPL(Second Program Loader二次引导程序即fastboot)加载到RAM,读取分区表,加载基本设备驱动,读取boot分区的linux内核系统;由于SPL对usb设备的支持,所以我们在手机开机时通过按开机键+音量键(不同手机可能按键组合不同),可以进入fastboot工程模式,在这种模式下能通过电脑、USB线对手机进行底层操作。

3、由linux内核加载sysytem分区内的安卓系统程序;第一段引导代码bootloader很小,cpu出厂前已经固化在芯片上了,也叫onchip引导代码,不可人工改写。

二次引导程序SPL是利用JTAG仿真器固化在Nand flash的最前端或后端,我们刷机时能进入fastboot工程模式就是它的功劳。

手机厂商对这段引导程序一般都会加锁,防止用户修改,如果这段代码被破坏,手机就成砖了,只能靠专用设备烧录或返厂维修。

只要手机能进fastboot工程模式,刷recovery、root和刷Rom都是以后的事情了,基本上不会破坏以上两段引导程序。

只要固化的引导程序完好,即使刷机时手机不能进入系统,只要能显示第一屏,一般来说都有挽救的希望,不要变砖。

刷recovery就是在recovery分区安装类似于电脑上ghost一键恢复的程序。

刷Rom包就更简单了,跟电脑装系统一样,就是将安卓系统文件覆盖进手机的system分区。

android系统启动过程(1)

android系统启动过程(1)

1Android系统的启动过程1.1启动过程Android系统完整的启动过程,可分为Linux系统层、Android系统服务层、Zygote进程模型三个阶段,从开机到启动Home Launcher完成具体的任务细节可分为七个步骤。

1.启动BootLoader2.加载系统内核3.启动Init和其它重要守护进程4.启动Zygote进程5.启动Runtime进程,初始化Service Manager。

Service Manager用于binder通讯,负责绑定服务的注册与查找。

6.启动SystemService7.启动Home Laucher8.启动其它应用程序1.1.1BootLoaderAndroid 系统是基于Linux操作系统的,所以它最初的启动过程和Linux一样。

当设备通电后首先执行BootLoader引导装载器,BootLoader是在操作系统内核运行之前运行的一段小程序。

通过这段小程序初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境引导进入合适的状态,以便为最终调用操作系统内核准备好正确的运行环境。

1.1.2启动Init和守护进程当系统内核加载完成之后,会首先启动Init守护进程,它是内核启动的第一个用户级进程,进程号永远是1。

当Init进程启动后,如(图1-1)它还负责启动其他的一些重要守护进程,主要包括:Usbd进程(USB Daemon):USB连接后台进程,负责管理USB连接。

adbd 进程(Android Debug Bridge Daemon):ADB连接后台进程,负责管理ADB连接。

debuggerd 进程(Debugger Daemon) :调试器后台进程,负责管理调试请求及调试过程。

rild进程(Radio Interface Layer Daemon):无线接口层后台进程,负责管理无线通信服务。

图1-1 Init和其它重要守护进程的启动,图片来源:http://www-igm.univ-mlv.fr/~dr/XPOSE2008/android/fonct.html1.1.3启动Zygote进程如(图1-2)所示,当Init进程和一些重要的守护进程启动完成之后,将启动Zygote 进程。

Android启动过程

Android启动过程

1. Boot系统初始化,具体过程参见(system\core\init\Init.c)中的main函数,这时候,手机或者模拟器出现的画面是一个console,显示“ANDROID”msg。

2. 初始化成功后,就开始mounting系统,具体参见(system\core\mountd\Mountd.c) 中的main 函数。

3.接下来运行ndroidRuntime,并开始启动java虚拟机dalvikvm。

4. Java虚拟机启动成功后,开始系统初始化。

系统初始的第一步是用JNI方式实现的,对应java代码为(frameworks\base\services\java\com\android\server\SystemServer.java) init1(Native)函数,对应的JNI C++代码为(frameworks\base\core\jni\server\com_android_server_SystemServer.cpp),而实现的C++代码为(frameworks\base\cmds\system_server\library\ System_init.cpp) 中的system_init()函数。

5. system_init调用SurfaceFlinger,SurfaceFlinger的readyToRun()函数用BootAnimation来实现开机动画,这时候手机或者模拟器显示是一副背景图加一个动态的小机器人。

6. 系统初始化的第二步,将启动ServerThread进程,参见SystemServer.init2()。

ServerThread 将启动各种系统服务,如Power Manager、Activity Manager等等,具体参见ServerThread的run函数,ServerThread同在SystemServer.java中。

7.这之后的事,应该就是进入系统了。

Android系统启动过程-uBoot+Kernel+Android

Android系统启动过程-uBoot+Kernel+Android

Android系统启动过程-uBoot+Kernel+Android摘要:本⽂是参考⼤量⽹上资源在结合⾃⼰查看源代码总结出来的,让⾃⼰同时也让⼤家加深对Android系统启动过程有⼀个更加深⼊的了解!再次强调,本⽂的⼤多数功劳应归功于那些原创者们,同时⼀些必要的参考链接我会⼀⼀附上。

注:由于本⼈采⽤Exynos4412开发板学习,所以本⽂⼤部分资料都是基于此处理器的简介:对于整个Android系统的启动总的来说分为三个阶段: BootLoader引导即uBoot.bin linux内核启动即zImage Android系统启动即ramdisk.img与system.img 以上四个⽂件都是经过⾃⼰编译后⽣成的且通过烧写测试,接下来开始说这三⼤部分的启动过程。

⽬录:⼀、BootLoader的启动 1.汇编部分 2.c部分 ⼆、Kernel的启动 1.zImage解压缩 2.kernel的汇编启动阶段 3.kernel的c启动阶段 三、Android的启动 1.init进程 2.init启动的各种服务 3.android启动图⽰第⼀部分:BootLoader的启动流程 uBoot的第⼀条指令从cpu/arm920t/start.S⽂件开始 1. 设置CPU进⼊SVC模式(系统管理模式),cpsr[4:0]=0xd3。

1 #include <common.h>2 #include <config.h>34/*5 *************************************************************************6 *7 * Jump vector table as in table 3.1 in [1]8 *9 *************************************************************************10*/111213 .globl _start14 _start: b start_code15 ldr pc, _undefined_instruction16 ldr pc, _software_interrupt17 ldr pc, _prefetch_abort18 ldr pc, _data_abort19 ldr pc, _not_used20 ldr pc, _irq21 ldr pc, _fiq2223 _undefined_instruction: .word undefined_instruction24 _software_interrupt: .word software_interrupt25 _prefetch_abort: .word prefetch_abort26 _data_abort: .word data_abort27 _not_used: .word not_used28 _irq: .word irq29 _fiq: .word fiq3031 .balignl 16,0xdeadbeef 接着进⼊Start_code中:设置CPU进⼊SVC模式。

Android系统关机的全流程解析

Android系统关机的全流程解析

Android系统关机的全流程解析在PowerManager的API⽂档中,给出了⼀个关机/重启接⼝:public void reboot (String reason)对于这个接⼝的描述很简单,就是⼏句话。

接⼝的作⽤就是重启设备,⽽且,就算重启成功了也没有返回值。

需要包含REBOOT权限,也就是android.permission.REBOOT唯⼀参数reason代表需要的特定重启模式,⽐如recovery,当然也可以为null。

⼀、上层空间1.frameworks/base/core/java/android/os/PowerManager.java/*** Reboot the device. Will not return if the reboot is* successful. Requires the {@link android.Manifest.permission#REBOOT}* permission.** @param reason code to pass to the kernel (e.g., "recovery") to* request special boot modes, or null.*/public void reboot(String reason){try {mService.reboot(reason);} catch (RemoteException e) {}}mService为IPowerManager Binder接⼝服务。

/*** {@hide}*/public PowerManager(IPowerManager service, Handler handler){mService = service;mHandler = handler;}2.frameworks/base/core/java/android/os/IPowerManager.aidlinterface IPowerManager{...void reboot(String reason);...}3.frameworks/base/services/java/com/android/server/PowerManagerService.java/*** Reboot the device immediately, passing 'reason' (may be null)* to the underlying __reboot system call. Should not return.*/public void reboot(String reason){mContext.enforceCallingOrSelfPermission(android.Manifest.permission.REBOOT, null);if (mHandler == null || !ActivityManagerNative.isSystemReady()) {throw new IllegalStateException("Too early to call reboot()");}final String finalReason = reason;Runnable runnable = new Runnable() {public void run() {synchronized (this) {ShutdownThread.reboot(getUiContext(), finalReason, false);}}};// ShutdownThread must run on a looper capable of displaying the UI.mHandler.post(runnable);// PowerManager.reboot() is documented not to return so just wait for the inevitable.synchronized (runnable) {while (true) {try {runnable.wait();} catch (InterruptedException e) {}}}}4.frameworks/base/services/java/com/android/server/pm/ShutdownThread.java/*** Request a clean shutdown, waiting for subsystems to clean up their* state etc. Must be called from a Looper thread in which its UI* is shown.** @param context Context used to display the shutdown progress dialog.* @param reason code to pass to the kernel (e.g. "recovery"), or null.* @param confirm true if user confirmation is needed before shutting down.*/public static void reboot(final Context context, String reason, boolean confirm) {mReboot = true;mRebootSafeMode = false;mRebootReason = reason;shutdownInner(context, confirm);}这⾥说明是需要重启,且不是安全模式,重启参数为传递下来的reason,shutdownInner的confirm参数是⽤来设置是否有确认提⽰框的,通过reboot接⼝调⽤重启是没有的,为false。

Android 启动过程分析

Android 启动过程分析

Android 启动过程分析本文来自moko365的Jollen Chen老师的分析,网络一些文章还有加上个人理解。

不一一写明出处。

首先看看整体开机流程。

这个对于软件开发测试工作非常有用,特别是在项目初期的时候,通常出在驱动或者启动参数上面的问题比较多,比如关机充电,连接charger关机等问题。

一般开机过程大致可以分为三个大阶段:1. OS级别,由bootloader载入linux kernel后(注:bootloader和制造商有关,一般都是自己修改后的bootloader,大同小异,无外乎加载了自己的安全机制,我们可以用最常见的uboot来考虑),kernel开始初始化, 并载入built-in 的驱动程序。

Kernel完成开机后,载入init process,切换至user-space后,结束kernel 的循序过程(sequence),进入排程模式(process scheduling)。

2. Android-level,由init process 开始,读取init.rc,Native 服务启动,并启动重要的外部程序,例如:servicemanager、Zygote以及System Server。

3. Zygote-Mode,Zygote 启动完SystemServer 后,进入Zygote Mode,在Socket 等候命令。

随后,使用者将看到一个桌面环境(Home Screen)。

桌面环境由一个名为[Launcher]的应用程序负责提供。

注:Zygote干嘛用的?主要负责启动system server和执行android程序(APK)。

成功启动system server后会使用socket 方式监听(monitor android apps/prcesses)我们的image都包含什么?Bootloader,system(是Android镜像),data(用户数据/data),kernel(android linux kernel,基础OS,负责process 管理,HAL和一些系统程序),ramdisk(init装载,/system/init/init.c).关于开机时间长短问题,对于产品开机和关机时间长短,直接影响到用户的感受,所以我们需要对开机时间进行评估。

Android7.0开机流程--bootprof

Android7.0开机流程--bootprof

Android7.0开机流程--bootprof<< /proc/bootprof >>:----------------------------------------0 BOOT PROF (unit:msec)----------------------------------------636 : preloader1949 : lk----------------------------------------62.109537 : ON112.790461 : 1-swapper/0 : initcall: of_init 15.703770ms163.221692 : 1-swapper/0 : initcall: customize_machine 30.648923ms195.211307 : 1-swapper/0 : initcall: param_sysfs_init 17.906769ms212.963307 : 1-swapper/0 : initcall: pm_sysrq_init 17.691000ms232.896307 : 1-swapper/0 : initcall: cmdq_init 15.340000ms282.108615 : 1-swapper/0 : initcall: event_trace_init 40.209923ms299.088846 : 1-swapper/0 : initcall: pmic_mt_init 15.703846ms410.799923 : 1-swapper/0 : initcall: populate_rootfs 107.169000ms505.464769 : 1-swapper/0 : probe: probe=i2c_device_probe drv=sm5414(c104fa3c) 42.075308ms 506.070077 : 1-swapper/0 : initcall: sm5414_init 42.768000ms522.554923 : 1-swapper/0 : probe: probe=platform_drv_probe drv=musb-hdrc(c104ff50) 15.892385ms522.634539 : 1-swapper/0 : initcall: musb_init 16.529154ms554.854539 : 1-swapper/0 : probe: probe=mtkfb_probe drv=mtkfb(c1056f2c) 28.608000ms555.117539 : 1-swapper/0 : initcall: mtkfb_init 29.333846ms651.142000 : 1-swapper/0 : probe: probe=platform_drv_probe drv=mtk-msdc(c1095950) 43.962231ms701.404693 : 1-swapper/0 : probe: probe=platform_drv_probe drv=mtk-msdc(c1095950) 50.082846ms702.297924 : 1-swapper/0 : initcall: mt_msdc_init 95.402693ms743.782462 : 1-swapper/0 : probe: probe=platform_drv_probe drv=soc-audio(c109ce6c) 16.761000ms743.913539 : 1-swapper/0 : initcall: mt_soc_snd_init 17.118154ms1543.580387 : 1-swapper/0 : probe: probe=i2c_device_probedrv=LTR_578ALS(c104b748) 777.832386ms1543.860772 : 1-swapper/0 : initcall: alsps_init 778.654233ms1951.618311 : 1-swapper/0 : probe: probe=i2c_device_probedrv=MXC4005(c104b9f8) 407.059539ms1952.416465 : 1-swapper/0 : initcall: acc_init 408.320001ms2316.354312 : 133-kworker/u8:4 : probe: probe=i2c_device_probe drv=ft5x0x(c107ae8c) 350.688847ms 2317.406466 : 133-kworker/u8:4 : probe: probe=platform_drv_probe drv=mtk-tpd(c106def4) 352.631924ms2328.113235 : 1-swapper/0 : initcall: battery_init 363.983847ms2331.870851 : 1-swapper/0 : Kernel_init_done2714.569236 : 1-init : INIT:early-init3397.629315 : 1-init : INIT:late-init3397.783468 : 1-init : INIT:Mount_START5501.145627 : 1-init : INIT:Mount_END6579.013322 : 1-init : INIT:post-fs7410.389247 : 1-init : INIT:post-fs-data7456.532786 : 1-init : post-fs-data: on modem start 7786.491556 : 1-init : INIT:boot8034.992018 : 213-wmt_loader : probe: probe=platform_drv_probe drv=fm(c1061b8c) 76.002616ms 9821.586561 : 223-surfaceflinger : BOOT_Animation:START 12617.459567 : 263-main : Zygote:Preload Start14808.826111 : 263-main : Zygote:Preload 4161 classes in 2025ms15333.832343 : 263-main : Zygote:Preload 114 obtain resources in 350ms15345.829497 : 263-main : Zygote:Preload 41 resources in 12ms15761.499883 : 263-main : Zygote:Preload End15945.818806 : 955-system_server :Android:SysServerInit_START16676.514577 : 955-system_server : Android:PackageManagerService_Start17572.521118 : 955-system_server : Android:PMS_scan_START17615.765810 : 955-system_server : Android:PMS_scan_data:/vendor/overlay17638.123041 : 955-system_server : Android:PMS_scan_data:/system/framework17698.509887 : 955-system_server : Android:PMS_scan_data:/vendor/framework17720.575887 : 955-system_server : Android:PMS_scan_data:/system/priv-app19684.112815 : 955-system_server : Android:PMS_scan_data:/system/app21673.248512 : 955-system_server : Android:PMS_scan_data:/vendor/priv-app21799.495897 : 955-system_server : Android:PMS_scan_data:/system/vendor/app22122.989128 : 955-system_server : Android:PMS_scan_data:/vendor/operator/app24774.798135 : 955-system_server : Android:PMS_scan_data:/vendor/plugin24843.718443 : 955-system_server : Android:PMS_scan_END24875.600520 : 955-system_server : PMS:reconcileAppsDataLI26507.685831 : 955-system_server : Android:PMS_READY 29155.220145 : 955-system_server : AMS:systemReady29170.716222 : 955-system_server : AMS:AMS_READY29278.905992 : 955-system_server : AP_Init:[service]:[tin]:[com.android.i tin/.LatinIME]:pid:105429306.496838 : 955-system_server : AP_Init:[service]:[com.android.systemui]:[com.android.systemui/. ImageWallpaper]:pid:1060:(PersistAP)29382.938069 : 955-system_server : AP_Init:[]:[WebViewLoader-armeabi-v7a]:pid:108329654.529993 : 955-system_server : SystemServer:NetworkManagementService systemReady 29957.197147 : 955-system_server : SystemServer:NetworkStatsService systemReady30331.665071 : 955-system_server : SystemServer:NetworkPolicyManagerService systemReady 30442.371687 : 955-system_server : SystemServer:ConnectivityService systemReady30565.391226 : 955-system_server : SystemServer:PhaseThirdPartyAppsCanStart30594.640533 : 955-system_server : AP_Init:[added application]:[com.android.phone]:[com.android.phone]:pid:1180 :(PersistAP)30620.866149 : 955-system_server : Android:SysServerInit_END30644.739303 : 1131-Binder:955_6 : AP_Init:[activity]:[com.android.settings]:[com.android.settings/.F allbackHome]:pid:119330985.974073 : 1131-Binder:955_6 : AP_Init:[service]:[com.transsion.mgzkeyguard]:[com.transsion.m gzkeyguard/.remotesrv.MgzKeyguardRSrv]:pid:121231120.822073 : 983-ActivityManager :AMS:ENABLE_SCREEN31127.732150 : 991-android.display : AP_Launch: com.android.settings/.FallbackHome 497ms33601.738079 : 400-Binder:223_1 : BOOT_Animation:END 33601.792002 : OFF----------------------------------------================ END of FILE ===============。

Android退出程序离开与关闭程序的弹出窗口

Android退出程序离开与关闭程序的弹出窗口

0Android 退出程序离开与关闭程序的弹出窗口Android 退出程序离开与关闭程序的弹出窗口[复制链接]Android 程序有很多Activity ,比如说主窗口A ,调用了子窗口B ,在B 中如何关闭整个Android 应用程序呢? 这里Android123给大家三种比较简单的方法实现。

首先要说明在B 中直接使用finish(),接下来手机显示的还是主窗口A ,所以一起来看看Android 开发网是如何实现的吧.1. Dalvik VM 的本地方法android.os.Process.killProcess(android.os.Process.myPid()) //获取PID ,目前获取自己的也只有该API ,否则从/proc 中自己的枚举其他进程吧,不过要说明的是,结束其他进程不一定有权限,不然就乱套了。

System.exit(0); //常规java 、c#的标准退出法,返回值为0代表正常退出2. 任务管理器方法首先要说明该方法运行在Android 1.5 API Level 为3以上才可以,同时需要权限android.permission.RESTART_PACKAGES ,我们直接结束自己的package 即 可,直接使用ActivityManager 类的restartPackage 方法即可,参数为package name ,该类通过getSystemService(Context.ACTIVITY_SERVICE)来实例化ActivityManager 对 象,这种方法系统提供的,但需要显示声明权限,所以使用中需要综合考虑。

3. 根据Activity 的声明周期我们知道Android 的窗口类提供了历史栈,我们可以通过stack 的原理来巧妙的实现,这里我们在A 窗口打开B 窗口时在Intent 中直接加入标志 Intent.FLAG_ACTIVITY_CLEAR_TOP ,这样开启B 时将会清除该进程空间的所有Activity 。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Android cold boot process
Agenda 1. Linux內核啟動簡述
2. Init進程 & init.rc
3. Zygote
4. System Server
5. Android服務
6. 啟動Launcher
7. Q&A
1. Linux內核啟動簡述
1.1 Bootloader 加電之後,bootloader開始工作,正常啟動系統,載入Linux 內核 1.2 Kernel 由bootloader載入 kernel通過自解壓、初始化、載入built-in驅動程序,完成啟 動。 kernel啟動后會創建若干內核線程(kernel thread),期間會執 行載入內建的驅動等操作,之後裝入并執行init進程,切換 至用戶空間(user-space)。
3. Zygote
3.2 app_process (二) void AndroidRuntime::start(const char* className, const bool startSystemServer) { … setenv("ANDROID_ROOT", rootDir, 1); if (startVm(&mJavaVM, &env) != 0) { …} //啟動dalvik VM if (startReg(env) < 0) {…} //註冊JNI函數列表 … slashClassName = strdup(className); startClass = env->FindClass(slashClassName); startMeth = env->GetStaticMethodID(startClass, "main", "([Ljava/lang/String;)V"); env->CallStaticVoidMethod(startClass, startMeth, strArray);// 執行ZygoteInit.java中的main函數
3. Zygote
3.3 ZygoteInit.java registerZygoteSocket(); preload(); //預載入classes以及resources if (argv[1].equals("start-system-server")) { startSystemServer(); //載入System Server } else if (…) {…} //以下代碼進入Zygote無限循環。 //到這時為止,Zygote服務總算由init載入完畢 if (ZYGOTE_FORK_MODE) { runForkMode(); } else { runSelectLoopMode(); } closeServerSocket(); //除非Zygote崩潰,否則不會到這兒
2. Init進程 & init.rc
2. Init進程 & init.rc
2.6 init.rc中的Android基礎服務 service ueventd /sbin/ueventd … service servicemanager /system/bin/servicemanager … service vold /system/bin/vold … service surfaceflinger /system/bin/surfaceflinger … service zygote /system/bin/app_process -Xzygote /system/bin -zygote --start-system-server class main …
2. Init進程 & init.rc
2.4 init.rc & init.XXX.rc (1) 通常,init.rc中定義基本的actions,init.%hardware%.rc定義 目標板的actions,例如PBJB0中的init.ventana.rc; (2) 解析init.rc文件,在actions列表中,對於同一trigger ,init.rc 中的actions在前,init. %hardware %.rc中的actions在后,這 些actions被init依順序執行; (3) actions被執行的順序: on early-init on init on fs on post-fs on post-fs-data on early-boot on boot …
2.5 init.c中main函數的actions順序 init_parse_config_file("/init.rc"); init_parse_config_file(init.%hardware%.rc); action_for_each_trigger(“early-init”, …); queue_builtin_action(...); //內建actions action_for_each_trigger("init", …); action_for_each_trigger("early-fs", …); action_for_each_trigger("fs", …); action_for_each_trigger("post-fs", …); action_for_each_trigger("post-fs-data", …); queue_builtin_action(…, "property_service_init"); queue_builtin_action(…, "signal_init"); queue_builtin_action(…, "check_startup"); action_for_each_trigger("early-boot", …); action_for_each_trigger("boot", …); queue_builtin_action(…, "queue_propety_triggers"); queue_builtin_action(bootchart_init_action, "bootchart_init"); for(;;){...} //無限循環,处理设备插入/拔出,signal事件等
4. System Server
4.3 system_init frameworks/base/cmds/system_server/library/system_init.cp p實現了system_init()函數。 這個函數關鍵的代碼如下: SurfaceFlinger::instantiate(); //SurfaceFinger實例化 SensorService::instantiate(); //SensorService實例化 JNIEnv* env = runtime->getJNIEnv(); jclass clazz = env-> FindClass("com/android/server/SystemServer"); jmethodID methodId = env-> GetStaticMethodID(clazz, "init2", "()V"); env->CallStaticVoidMethod(clazz, methodId); // 執行init2 ProcessState::self()->startThreadPool(); // 創建線程池 IPCThreadState::self()->joinThreadPool(); // 進入閉合循環
2. Init進程 & init.rc
3. Zygote
3.1 Zygote Zygote是一個用戶級的服務程序,它和ServiceManager服務 一起奠定了Android的基礎,是整個Android系統的核心。 Zygote由init作為服務啟動,上一小節init.rc中有如下文字: service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server 可見,zygote服務由init執行程序app_process啟動。
3. Zygote
4. System Server
4.1 startSystemServer Zygote啟動時,它調用ZygoteInit.java中的startSystemServer 函數啟動System Server服務。 private static boolean startSystemServer() //以下的代碼調用/dalvik/vm/native/dalvik_system_Zygote.c 中的forkSystemServer函數,啟動System Server pid = Zygote.forkSystemServer( parsedArgs.uid, parsedArgs.gid, parsedArgs.gids, debugFlags, null, parsedArgs.permittedCapabilities, parsedArgs.effectiveCapabilities); if (pid == 0) { handleSystemServerProcess(parsedArgs); }
2. Init進程 & init.rc
2.3 基本流程 (1) 启动准备:创建文件系统的基本目录、打开基本输入、输 出设备,初始化日志功能等; (2) 解析init.rc文件:对init.rc、init.%hardware%.rc进行解析; (3) 触发需要执行的actions:actions在trigger(触发条件)中被執 行。這一阶段对需要执行的action进行触发,根据触发条件 将需要执行的action放入actions队列; (4) 执行actions队列中的action及服務:執行上一阶段触发的 actions以及Services。在這個过程中,init會啟動Zygote和 Service Manager這两个非常重要的进程; (5) 循环处理事件:最後init进程进入无限循环,处理设备插入/ 拔出,服务属性状态变化和signal事件等。
相关文档
最新文档