Chinaunix首页 | 论坛 | 博客
  • 博客访问: 54933
  • 博文数量: 18
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 182
  • 用 户 组: 普通用户
  • 注册时间: 2016-03-14 17:05
文章分类
文章存档

2017年(15)

2016年(3)

我的朋友

分类: LINUX

2016-12-07 21:58:16

HelloWorld自启动

自启动原理:

   

    内核的最后一部分初始化操作为启动init进程,init进程首先进行一系列的硬件初始化,并挂载根文件系统。最后,init进程会去执行一个特定的程序,此程序可以由用户传递过来的“init=”启动参数指定,或者执行以下几个程序之一,由内核态变为用户态:

          execve("/sbin/init",argv_init,envp_init)
          execve("/etc/init",argv_init,envp_init)
          execve("/bin/init",argv_init,envp_init)
          execve("/bin/sh",argv_init,envp_init)
这个程序负责创建一些其他进程并且启动系统的一些关键组件运行。Init进程可以看成是所有进程的父亲。


    综上,helloworld自启动有两种策略实现:

策略一:将helloworld程序编译生成init,并将init拷贝到根文件系统映像的/sbin目录下

策略二:通过启动参数“init=helloworld程序所在根文件系统的路径”实现

实验结果:

策略一实现

阅读(1370) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~