Android 根文件系统启动过程。
在Android系统启动时,内核引导参数上一般都会设置“init=/init”, 这样的话,如果内核成功挂载了这个文件系统之后,首先运行的就是这个根目录下的init程序。这个程序所了什么呢? 我们只有RFSC(Read the Fucking Source code)!!
init程序源码在Android官方源码的system/core/init中,main在init.c里。我们的分析就从main开始。
init:
(1)安装SIGCHLD信号。(如果父进程不等待子进程结束,子进程将成为僵尸进程(zombie)从而占用系统资源。因此需要对SIGCHLD信号做出处理,回收僵尸进程的资源,避免造成不必要的资源浪费。)
(2)对umask进行清零。
何为umask,请看http://www.szstudy.cn/showArticle/53978.shtml
(3)为rootfs建立必要的文件夹,并挂载适当的分区。
/dev (tmpfs)
/dev/pts (devpts)
/dev/socket
/proc (proc)
/sys (sysfs)
(4)创建/dev/null和/dev/kmsg节点。
(5)解析/init.rc,将所有服务和操作信息加入链表。
(6)从/proc/cmdline中提取信息内核启动参数,并保存到全局变量。
(7)先从上一步获得的全局变量中获取信息硬件信息和版本号,如果没有则从/proc/cpuinfo中提取,并保存到全局变量。
(8)根据硬件信息选择一个/init.(硬件).rc,并解析,将服务和操作信息加入链表。
在G1的ramdisk根目录下有两个/init.(硬件).rc:init.goldfish.rc和init.trout.rc,init程序会根据上一步获得的硬件信息选择一个解析。
(9)执行链表中带有“early-init”触发的的命令。
(10)遍历/sys文件夹,是内核产生设备添加事件(为了自动产生设备节点)。
(11)初始化属性系统,并导入初始化属性文件。
(12)从属性系统中得到ro.debuggable,若为1,則初始化keychord監聽。
(13)打開console,如果cmdline中沒有指定console則打開默認的/dev/console
(14)讀取/initlogo.rle(一張565 rle 壓縮的位圖),如果成功則在/dev/graphics/fb0顯示Logo,如果失敗則將/dev/tty0設為TEXT模式并打開/dev/tty0,輸出文本“ANDROID”字樣。
(15)判斷cmdline 中的參數,并设置属性系统中的参数:
1、 如果 bootmode為
- factory,設置ro.factorytest值為1
- factory2,設置ro.factorytest值為2
- 其他的設ro.factorytest值為0
2、如果有serialno参数,則設置ro.serialno,否則為""
3、如果有bootmod参数,則設置ro.bootmod,否則為"unknown"
4、如果有baseband参数,則設置ro.baseband,否則為"unknown"
5、如果有carrier参数,則設置ro.carrier,否則為"unknown"
6、如果有bootloader参数,則設置ro.bootloader,否則為"unknown"
7、通过全局变量(前面从/proc/cpuinfo中提取的)設置ro.hardware和ro.version。
(16)執行所有触发标识为init的action。
(17)開始property服務,讀取一些property文件,這一動作必須在前面那些ro.foo設置后做,以便/data/local.prop不能干預到他們。
- /system/build.prop
- /system/default.prop
- /data/local.prop
- 在讀取默認的property后讀取presistent propertie,在/data/property中
(18)為sigchld handler創建信號機制
(19)確認所有初始化工作完成:
device_fd(device init 完成)
property_set_fd(property server start 完成)
signal_recv_fd (信號機制建立)
(20) 執行所有触发标识为early-boot的action
(21) 執行所有触发标识为boot的action
(22)基于當前property狀態,執行所有触发标识为property的action
(23)注冊輪詢事件:
- device_fd
- property_set_fd
-signal_recv_fd
-如果有keychord,則注冊keychord_fd
(24)如果支持BOOTCHART,則初始化BOOTCHART
(25)進入主進程循環:
- 重置輪詢事件的接受狀態,revents為0
- 查詢action隊列,并执行。
- 重啟需要重啟的服务
- 輪詢注冊的事件
- 如果signal_recv_fd的revents為POLLIN,則得到一個信號,獲取并處理
- 如果device_fd的revents為POLLIN,調用handle_device_fd
- 如果property_fd的revents為POLLIN,調用handle_property_set_fd
- 如果keychord_fd的revents為POLLIN,調用handle_keychord
分享到:
相关推荐
本文档对 Android 11.0 平台开机启动流程进行了详细的介绍,涵盖了 Android 架构图、系统启动流程、init 启动流程、Zygote 启动流程、System Server 启动流程等关键部分。 Android 架构图 Android 系统架构图主要...
通过这种方式,"Android-PullToRefresh-master"不仅可以提高用户体验,还能简化开发者的工作流程。 总之,"Android-PullToRefresh-master"是一个强大且灵活的Android开源库,它使实现拉动刷新功能变得轻而易举。...
通过对Zygote启动流程以及systemServer和Home Activity启动过程的详细解析,我们不仅了解了Android系统启动过程中的关键步骤和技术细节,还深入了解了ART虚拟机的工作原理。这些深入的理解对于开发者来说至关重要,...
4. SDK Manager:首次启动Android Studio,系统会引导你配置Android SDK,这是开发Android应用必不可少的部分。你可以在这里下载不同版本的Android API、工具和其他必要的组件。 三、核心特性 1. 代码编辑器:...
通过不断的技术迭代和功能完善,Android Studio旨在提高开发效率,简化应用开发流程。无论是新接触Android开发的初学者还是经验丰富的开发者,都能够从中受益。选择适合自己项目的Android Studio版本,并充分利用其...
《Android SDK for macOS详解》 Android SDK(Software Development Kit)是开发者进行Android应用程序开发不可或缺的工具集,它包含了编译、调试...理解这些核心概念和流程对于任何Android开发者而言都是至关重要的。
2. **Android Gradle Plugin更新**:配合新的Gradle插件,开发者可以更高效地管理项目依赖,自动化构建流程,并能更快地编译和测试应用程序。 3. **布局编辑器增强**:此版本的布局编辑器提供了更直观的设计视图,...
1. **设备发现**:应用启动后,用户可以通过扫描找到附近的nRF设备。源码中的`BluetoothLeScanner`类负责执行BLE扫描。 2. **连接与服务发现**:用户选择设备后,`BluetoothGatt`类建立连接,并发现设备提供的服务...
四、Android应用开发流程 1. **创建项目**:通过选择模板或从头开始,快速初始化一个Android项目。 2. **编写代码**:在IDE中编写Java或Kotlin代码,构建应用逻辑。 3. **设计界面**:使用XML或可视化工具设计...
同时,它内置了Gradle构建系统,自动管理项目的依赖关系,简化了项目的构建流程。 其次,Android Studio的用户界面设计工具(布局编辑器)让开发者能够直观地设计和预览应用界面。对于新手而言,拖放式组件设计大大...
本文将深入探讨“究浅意深-Android-高通-boot流程合集”这一主题,揭示高通处理器在Android启动过程中的具体步骤和技术细节。 1. **引导加载程序(Bootloader)阶段**: - Bootloader是设备启动的第一步,它负责...
**Android课程设计--便捷备忘录** 在移动应用开发领域,Android系统因其开源特性与广泛的应用,成为开发者的重要平台。...同时,这也展示了Android Studio的开发流程,帮助你掌握实际开发中的各种技巧和最佳实践。
安装完成后,启动Android Studio,导入或创建新的项目,即可开始Android应用开发。 四、学习资源与社区支持 为了帮助开发者更好地使用Android Studio,Google提供了丰富的官方文档、教程和示例代码,包括入门指南...
v4库提供了Intent、FileProvider等类,可以帮助构建更新流程,例如创建下载任务、管理文件权限,以及启动安装过程。通过将`android-support-v4.jar`导入到Unity的Android插件目录(通常为Android/libs),可以调用...
### Android待机流程分析——锁屏、解锁模块 在深入探讨Android系统中锁屏与解锁模块的工作原理之前,我们先来了解一下这些概念的基本背景。Android操作系统作为全球最广泛使用的移动设备操作系统之一,其用户界面...
- 为了优化用户体验,建议在应用启动时检查并更新用户的Dropbox会话状态。 - 使用`Session.startAuthentication`方法在后台进行OAuth认证,避免用户长时间等待。 - 使用`Uploader`和`Downloader`的`pause`和`...
1. **Android模拟器改进**:新版本可能优化了模拟器的启动速度和运行效率,使其更加接近真实设备的体验。 2. **支持新的API级别**:可能增加了对新Android版本的支持,如Android O(8.0)或更高版本的API级别。 3. *...
Android 中 G-Sensor 相关流程 Android 中 G-Sensor 相关流程是指在 Android 系统中使用 G-Sensor 传感器的整个过程,从驱动程序的加载到应用程序的使用。下面将详细介绍 Android 中 G-Sensor 相关流程。 首先,在...
android启动流程详解,对启动中所遇到的重要进程进行简单的分析