细聊init进程和Linux系统启动流程

一、关于init进程

系统某些程序退出的时候是可以将它重启的;
它可以产生新的进程;
它是由内核启动的;
它的进程号是1;
它是所有进程的祖先。

二、Linux系统启动流程

我们在PC上启动Windows 系统时,都知道有个东西叫BIOS(基本输入输出系统),我们Linux下也有个类似的东西,叫做U-Boot,其功能和BIOS类似,检查CPU、内存、硬盘、鼠标等设备有没有准备好,这一检查过程叫做POST,检查完后,就会去HDD(硬盘)、SDD、USB等地方寻找系统启动了。

那做嵌入式开发的时候,系统的启动流程又是怎么样的呢?
其实和Windows的情况类似,不过它的系统是放到Nandflash里面的,所有的程序都应该是放到内存中去的,启动系统之前也要做一些相应的初始化,这就需要一个启动程序Boatloader,常见的Boatloader是U-boot。
SRAM是由晶体管组成的,不用初始化,速度高,但是价格贵,面积大,一般用cache中,DRAM的话用电容充放电,用的话,CPU上有DRAM控制器才能用DRAM,DRAM控制器里面都是寄存器。
在这里插入图片描述
SDRAM和DDRAM又有什么区别呢?
在这里插入图片描述
这里以A5核的处理器为例
它其实有三级的boatloader的,它不止U-boot这个程序
第一级:RomBOOT,它是出厂固化到CPU内部的,ROM为只读存储器的意思。
第二级:为Bootstrap,其在CPU的SRAM进行运行引导,然后初始化SDRAM。
第三级:U-boot,初始化SDRAM完成后,就可以将U-boot程序搬移到SDRAM运行启动了。

在这里插入图片描述
不过前两级我们可以屏蔽不做考虑。
启动U-boot
在这里插入图片描述

关于U-boot的命令
在这里插入图片描述
在这里插入图片描述

敲boot命令启动系统
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我在做4G模块的项目用的就是树莓派Linux内核的协议栈
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
所以Linux内核就是提供这些基础的驱动
在这里插入图片描述
这就是Linux内核启动的流程了,在最后,我们可以看到内核创建的第一个进程为init进程,这也是为什么init进程为所有进程的祖先的 缘故。
在用户应用程序里面,可以使用fork()函数创建子线程,可以使用exec系列的函数执行程序。
在用户应用程序,如果使用了一个野指针,会出现段错误,进程退出。
而在内核驱动使用了野指针,就会出现Kernel panic的情况,内核死掉,上层应用程序就跑不了了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值