WEB开发网
开发学院手机开发Android 开发 Android Linux启动过程详解 阅读

Android Linux启动过程详解

 2010-06-01 22:50:00 来源:WEB开发网   
核心提示:init线程,由start_kernel()创建,Android Linux启动过程详解(5),当前处于用户态,加载了init程序kflushd核心线程,并作为当前的运行级别,如果没有inittab文件,由init线程创建,在核心态运行bdflush()函数kupdate核心线程

init线程,由start_kernel()创建,当前处于用户态,加载了init程序

kflushd核心线程,由init线程创建,在核心态运行bdflush()函数

kupdate核心线程,由init线程创建,在核心态运行kupdate()函数

kswapd核心线程,由init线程创建,在核心态运行kswapd()函数

keventd核心线程,由init线程创建,在核心态运行context_thread()函数

对于I386平台

基本相同。

对于2.4.x版内核

这一部分的启动过程在2.4.x内核中简化了不少,缺省的独立初始化过程只剩下网络(sock_init())和创建事件管理核心线程,而其他所需要的初始化都使用__initcall()宏包含在do_initcalls()函数中启动执行。

init进程和inittab引导指令

init进程是系统所有进程的起点,内核在完成核内引导以后,即在本线程(进程)空间内加载init程序,它的进程号是1。

init程序需要读取/etc/inittab文件作为其行为指针,inittab是以行为单位的描述性(非执行性)文本,每一个指令行都具有以下格式:

id:runlevel:action:process其中id为入口标识符,runlevel为运行级别,action为动作代号,process为具体的执行程序。

id一般要求4个字符以内,对于getty或其他login程序项,要求id与tty的编号相同,否则getty程序将不能正常工作。

runlevel 是init所处于的运行级别的标识,一般使用0-6以及S或s。0、1、6运行级别被系统保留,0作为shutdown动作,1作为重启至单用户模式,6 为重启;S和s意义相同,表示单用户模式,且无需inittab文件,因此也不在inittab中出现,实际上,进入单用户模式时,init直接在控制台(/dev/console)上运行/sbin/sulogin。

在一般的系统实现中,都使用了2、3、4、5几个级别,在Redhat系统中,2表示无NFS支持的多用户模式,3表示完全多用户模式(也是最常用的级别),4保留给用户自定义,5表示XDM图形登录方式。7-9级别也是可以使用的,传统的unix系统没有定义这几个级别。runlevel可以是并列的多个值,以匹配多个运行级别,对大多数action来说,仅当runlevel与当前运行级别匹配成功才会执行。

initdefault 是一个特殊的action值,用于标识缺省的启动级别;当init由核心激活以后,它将读取inittab中的initdefault项,取得其中的 runlevel,并作为当前的运行级别。如果没有inittab文件,或者其中没有initdefault项,init将在控制台上请求输入

上一页  1 2 3 4 5 6 7 8  下一页

Tags:Android Linux 启动

编辑录入:coldstar [复制链接] [打 印]
赞助商链接