Linux启动过程分析之init进程分析

linuxrc是如何启动的

uboot的作用是启动内核,而内核的作用是为了运行应用程序,而应用程序位于文件系统中,因此内核代码运行最终会挂载根文件系统,并启动用户进程。 uboot时通过bootargs传入参数init=/linuxrc,内核启动的最后阶段会根据此命令启动应用程序!
在这里插入图片描述
1. init进程完成了从内核态向用户态的转变
(1)一个进程先后两种状态
•init进程刚开始运行的时候是内核态,它属于一个内核线程,然后运行一个用户态下面的程序后,把自己强行转成了用户态(后面的进程需要工作在用户态下)。
•因为init进程自身完成了从内核态到用户态的过渡,因此后续的其他进程都可以工作在用户态。

(2)init进程在内核态下的工作内容
•主要是挂载根文件系统,并试图找到用户态下的那个init程序。
•init进程要把自己转成用户态就必须运行一个用户态的应用程序(这个应用程序名字一般也叫init),要运行这个应用程序就必须得找到这个应用程序,要找到这个应用程序就必须得挂载根文件系统,因为所有的应用程序都在文件系统中。
•内核源代码中的所有函数都处于内核态,执行其中任何一个都不能脱离内核态。应用程序必须不属于内核源代码,这样才能保证应用程序处于用户态。这里执行的init程序和内核不在一起,由根文件系统另外提供。

(3)init进程在用户态下的工作内容
•init进程大部分有意义的工作都是在用户态下进行的。
•init进程对操作系统的意义在于:其他所有的用户进程都直接或者间接派生自init进程。

(4)init进程如何从内核态跳跃到用户态?还能回来不?
•init进程处于内核态时,通过函数kernel_execve来执行一个用户空间编译连接的应用程序就跳跃到用户态了。
•跳跃过程中进程号没有改变,一直是进程1。
•跳跃过程是单向的,一旦执行init程序转到用户态,整个操作系统就算真正运转起来了,以后只能在用户态下工作,用户态下想要进入内核态只能通过调用API。

2. init进程构建了用户交互界面

(1)init进程是其他用户进程的老祖宗。
•linux系统中一个进程的创建是通过其父进程创建出来的。根据这个理论只要有一个父进程就能生出一堆子孙进程了
(2)init启动了login进程(用户登录进程)、命令行进程(提供命令行环境)、shell进程(提供命令解释和执行)。

(3)shell进程启动了其他用户进程。
•命令行和shell一旦工作,用户就可以在命令行下通过./xx的方式来执行其他应用程序,每一个应用程序的运行就是一个进程。

3.Linux与busybox
一般嵌入式系统使用busybox构建各种格式的文件系统,busybox交叉编译后生成同名的二进制文件busybox,它为当前系统提供了一整套的shell命令程序集,譬如vi、cd、mkdir、ls等,linuxrc是根目录下该二进制文件的软链接。注意:在桌面版的linux发行版(譬如ubuntu、redhat、centOS等)中vi、cd、ls等都是一个一个的单独的应用程序。但是在嵌入式linux中,为了省事我们把vi、cd等所有常用的shell命令集合到一起构成了一个shell命令包,起名叫busybox

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值