(Linux文件系统启动.docVIP

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
(Linux文件系统启动

嵌入式Linux文件系统启动脚本及分析 [日期:2011-03-24] 来源:Linux社区 作者:Linux 在内核初始化完成后,嵌入式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.\n”); /* 复制控制台设备到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\n”,ramdisk_execute_command); } /* 尝试执行execute_command 指定的程序*/ if(execute_command) { run_init_process(execute_command); printk(KERN_WARNING “Failed to execute %s\n”,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, 这样就打开了标准设备输入,输出,标准错误设备,然后执行几个外部程序。这几个程序中任何一个加载成功就进入了用户态,内核启动就宣告结束。 即{ 即{释放掉初始化内存(__init标出的变量和函数占用的内存) 打开控制台设备(/dev/console)文件,并且把它设置为标出输入 复制标准输入为标准输出和标准错误输出 启动内核参数rdinit=指定的init程序 启动内核参数init=指定的init程序 启动其它地方的init程序或者sh程序 提示找不到init程序 其中 4 5 6 7 只要顺序找到一个 就开始跳过其他步执行了 } 2. 执行/etc/inittab 文件 当init 启动成功后,需要做的就是分析/etc/inittab 文件并执行它。其内容如下: # /etc/inittab ::sysinit:/etc/init.d/rcS # 启动shell 以/dev/ttySAC0 作为控制台 ttySAC0::askfirst:-/b

文档评论(0)

lisuf331 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档