在内核初始化完成后,嵌入式linux 文件系统的启动过程主要包含以下几个步骤:1. 执行/sbin/init 文件2. 执行/etc/inittab 文件3. 执行/etc/init.d/rcS 文件4. 执行挂载文件系统脚本5. 执行内核模块脚本6. 执行网络初始化脚本7. 执行应用程序启动等脚本,如qtopia 的启动系统启动流程图:1. 内核启动init内核启动的最后一步就是启动init 进程,init 进程是由内核启动的第一个(也是唯一一个和)用户进程(进程ID 为1 ),它根据配置文件决定启动哪些程序,比如某些脚本, 启动shell ,运行用户指定的程序等,,那么init 进程又是怎么启动的呢---是由内核调用/sbin/init 文件而启动的,那有人就有人想知道内核是如何找到需要执行的init 文件呢。下面看一下内核代码中init/main.c ,如下所示:static int noinline init_post(void){free_initmem(); /* 释放初始化内存*/unlock_kernel();mark_rodate_ro();system_state=SYSTEM_RUNNING;numa_default_policy();/* 打开控制设备hanle=0=>stdin*/if(sys_open((const char __user*) “/dev/console”, O_RDWR,0)<0)printk(KERN_WARNING “Waring :unable to open an initial console.
”);/* 复制控制台设备到handle 1,2=>stout,stderr*/(void)sys_dup(0);(void)sys_dup(0);/* 尝试执行ramdisk_execute_command 指定的程序*/if(ramdisk_execute_command) {run_init_process(ramdisk_execute_command);printk(KERN_WARNING “Failed to execute %s
”,ramdisk_execute_command);}/* 尝试执行execute_command 指定的程序*/if(execute_command) {run_init_process(execute_command);printk(KERN_WARNING “Failed to execute %s
”,execute_command);}/* 依次尝试执行四个外部程序*/run_init_process(“/sbin/init”);run_init_process(“/etc/init”);run_init_process(“/bin/init”);run_init_process(“/bin/sh”);panic(“No init found . Try passing init=option to kernel.”);内核启动init 进程的过程如下:先打开控制台设备/dev/console ,并复制了两个handle, 这样stdout,stdin,stderr 都指向/dev/console, 这样就打开了标准设备输入,输出,标准错误设备,然后执行几个外部程序。这几个程序中任何一个加载成功就进入了用户态,内核启动就宣告结束。
CentOS 5.5下安装zabbix客户端并配置成SysV服务启动openSUSE 11.4使加载的ntfs分区可写可执行相关资讯 嵌入式Linux
- 2015年嵌入式和移动Linux领域的几 (01月06日)
- OpenWRT嵌入式Linux故障排除一例 (01/17/2015 13:04:14)
- 10款专为嵌入式系统打造的Linux平 (06/27/2014 14:27:09)
| - 解决嵌入式Linux中的时区问题 (09/13/2015 13:49:19)
- 嵌入式Linux开发环境搭建 (08/19/2014 05:49:14)
- 嵌入式Linux中GPS信息读取与处理 (04/08/2014 19:31:47)
|
本文评论 查看全部评论 (0)