- 浏览: 1018417 次
- 性别:
- 来自: 北京
-
文章分类
- 全部博客 (367)
- JavaScript (23)
- Java (60)
- Python (41)
- 其他 (36)
- SQL (4)
- 开发工具 (26)
- Linux (15)
- AJAX (6)
- Cache (3)
- 正则 (4)
- 架构 (9)
- 手机 (3)
- MySQL (4)
- Android (115)
- vps (1)
- 网站 (4)
- scale (3)
- 搜索引擎 (3)
- iPhone (2)
- hessian (1)
- hessdroid (1)
- 411 (1)
- jstat (1)
- gc (1)
- gallery (1)
- 惯性 (1)
- eclipse (1)
- mac wget error (1)
- miui file explorer 无用 解决办法 (1)
- vim (1)
最新评论
-
qingyezhangluo:
哎。楼主您既然是分享代码的为什么要加密的呢?而且问你密码还不回 ...
android应用换皮肤(转) -
MagicError:
kavoe 写道下载文件有密码。。。。
http抓包工具 -
knightdf:
我先试下再来
JAVA的RAS加密例子 -
kavoe:
下载文件有密码。。。。
http抓包工具 -
changanfounder:
hmc1985 写道setCallbackDuringFlin ...
android gallery滑动惯性问题
今天开始分析Android 根文件系统启动过程。 在Android系统启动时,内核引导参数上一般都会设置“init=/init”,这样的话,如果内核成功挂载了这个文件系统之后,首先运行的就是这个根目录下的init程序。这个程序所了什么呢? 我们只有RFSC(Readthe 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 根文件系统启动过程。
在Android系统启动时,内核引导参数上一般都会设置“init=/init”,这样的话,如果内核成功挂载了这个文件系统之后,首先运行的就是这个根目录下的init程序。这个程序所了什么呢? 我们只有RFSC(Readthe 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屏幕适配
2012-11-16 17:24 2209屏幕适配一直是一个让人头疼的问题,论坛上讨论这个问题的最后也 ... -
禁止Eclipse中xml文件Run as的XSL Transformation生成out.xml以方便Android应用开发
2012-08-26 21:38 2659可以在Eclipse里面配置,菜单Windows->P ... -
android 自带的主题 theme 的使用
2012-08-25 23:21 2390在android的sdk 安装目录data\r ... -
android 如何判断程序是否在前台运行
2012-04-06 00:04 3116private boolean isTopActiv ... -
用代码如何检测一个android程序是否在运行
2012-04-05 23:07 3754<uses-permission android:na ... -
Android-TextView多行本文滚动轻松实现
2012-03-04 19:37 1361TextView tvAndroid123 = (T ... -
让背景模糊的效果
2012-03-04 16:22 2641设置透明度(这是窗体本身的透明度,非背景) Wi ... -
Android 使用shape
2012-03-04 16:14 1070刚刚翻论坛的时候看到的,总觉得以后会用的上这些零零碎碎 ... -
关于android中使用很多大图片的一些做法
2012-02-29 00:11 1459最近在xoom上开发应用,碰到ui设计都是使用图片,而 ... -
屏幕尺寸和像素密度的资源限定符
2012-02-23 15:31 1629屏幕尺寸和像素密度的资源限定符 以下是可以用来为 ... -
android开发之gallery 实现滚动一张且短距离滑动实现滚动
2011-12-19 18:50 1944首先gallery的特点就不用多说了吧,惯性滚动、半屏翻页,但 ... -
下拉刷新
2011-10-14 15:09 1213要实现这种效果 可以参见这里https://git ... -
android应用换皮肤(转)
2011-10-12 14:36 3223看到好多人在问题与解答里面都问怎么换肤,搜了一下论坛里面好像没 ... -
Android签名到底都有哪些作用?
2011-10-09 17:59 2319所有的Android应用程序都要求开发人员用一个证书进 ... -
Android 动态切换全屏和非全屏模式
2011-10-08 15:15 3494直接贴出代码: Java代码 ... -
Android开发——利用Cursor+CursorAdapter实现界面实时更新(转)
2011-09-20 15:47 3097好久没有更新博客了 ... -
Nginx使用反向代理时 Hessian 的 411 错误解决方案【转】
2011-09-15 13:48 2380问题描述: 用 Hessian 实现 web se ... -
理解 Android 本地数据存储 AP(转)
2011-05-18 14:25 1924样例应用程序 为了突出 Android 应用程序开发的本 ... -
Android 本地数据存储 API(二)(转)
2011-05-18 14:23 1999使用 SQLite 数据库 Android 通过 S ... -
Android 本地数据存储 API(三)(转)
2011-05-18 14:22 2586为私有数据使用设备的内部存储器 有了数据存储 API ...
相关推荐
#### 二、Linux内核启动与挂载Android根文件系统过程分析 Linux内核启动和挂载Android根文件系统是一个复杂但关键的过程。简单来说,这个过程可以分为以下几个步骤: 1. **内核初始化**:内核加载并执行初始的硬件...
### Android Init 启动过程分析 #### 一、初始化流程概览 在深入探讨Android的启动过程之前,我们需要明确一点:整个启动流程是从内核开始的。当内核加载完毕并准备好与用户空间进行交互时,它会启动一个称为`init...
`/init`文件是Android系统的启动脚本,它负责初始化系统服务、启动守护进程等操作。`.rc`文件(如`init.rc`)是初始化脚本,定义了系统启动时执行的任务。 `/data`目录是用户数据的存储区域,包括应用程序数据、...
在解析init.rc文件的过程中,init程序会启动各种关键的系统服务,如Android系统的守护进程、硬件抽象层服务、本地服务等。这些服务的启动顺序和依赖关系在init.rc中都有明确的规定,以确保系统能够正确稳定地启动。 ...
3. 启动 Init 和其它重要守护进程:当系统内核加载完成之后,会首先启动 Init 守护进程,Init 进程是内核启动的第一个用户级进程,进程号永远是 1。当 Init 进程启动后,还负责启动其他的一些重要守护进程,主要包括...
在Android系统中,`init` 进程是系统启动后第一个运行的进程,扮演着核心角色,它负责整个系统的初始化任务,包括启动必要的守护进程和服务、管理进程间通信等。在Android 8.1版本中,`init` 进程的实现细节主要分布...
System Server是Android系统的守护进程,负责管理系统服务和资源。 4. **Zygote-Mode**: Zygote启动SystemServer后,自身进入Zygote Mode,等待通过Socket接收命令。SystemServer启动并初始化核心框架服务,如...
### Android启动过程深入解析 ...通过上述分析,我们可以看到Init进程是如何一步步引导系统进入完全可用状态的,这涉及到硬件初始化、系统服务启动、资源管理等多个方面,展现了Android操作系统设计的精妙之处。
Android系统的启动过程是一个复杂而精细的过程,涉及到硬件初始化、Linux内核加载、init进程的启动、zygote进程的创建以及SystemServer的启动等多个阶段。通过这些步骤,最终实现了用户界面的呈现和应用程序的运行。...
1. **init进程启动**:这是Android启动过程的第一步,主要负责启动系统中的各种基础服务。 2. **Native服务启动**:在init进程之后,会启动一些基于C/C++编写的Native服务,如Zygote进程等。 3. **System Server及...
- **Main Function**:Init进程是Android系统中的第一个进程,其主要任务是初始化系统环境,执行设备驱动加载、初始化必要的系统服务,并启动其他守护进程。 - **Process step**:Init进程首先会解析配置文件,如`...
`init`进程的主要职责包括初始化基本的文件系统结构、启动必要的守护进程和服务等。本文档主要分析了Android系统中`init`进程的具体实现细节,尤其是`init.c`文件中的关键逻辑。 #### 二、源码文件路径及主要函数 ...
在Android系统中,init.rc是启动过程中的核心配置文件,它定义了系统启动时的各种服务、守护进程(daemons)以及其他初始化操作。针对高通LA.1.1基线的Android源码,我们来深入探讨init.rc文件中涉及的服务启动流程...
2. **无父进程**:守护进程的父进程通常是init进程,以确保其在系统启动后即运行,并且不会因为父进程退出而被终止。 3. **会话领导者**:守护进程不处于任何会话中,也不属于任何控制终端。 4. **工作目录**:通常...
Android冷启动过程:从init守护进程到桌面显示
3.Android编译过程分析 4.android.mk初识 5.Android.mk学习1 6.Android.mk学习2 7.Android.mk学习3 8.Android启动课程大纲 9.Android启动模式 10.init启动分析 11.走入init启动脚本 12.init脚本解析分析 13.init脚本...
init进程根据系统配置文件(如init.rc)执行各种初始化任务,包括创建其他系统服务、启动守护进程等。 Android启动流程中的关键角色之一就是Zygote。Zygote是由init进程孵化出来的,它是所有Android应用程序进程的...
它作为系统运行的第一个用户空间程序,以守护进程的方式运行,确保了从Linux启动标准到Android系统的平滑过渡。init可执行程序不仅负责启动和管理系统的各个服务和进程,还是自定义系统启动行为和配置的关键点。理解...