1_5.4.1_根文件系统_构建根文件系统之启动第1个程序_P

u-boot的目的是:启动内核;

内核的目的是:启动应用程序,应用程序又位于根文件系统;

构建:根文件系统。

如果理解了以上三步,就可以从无到有在一个单板上搭建出一个根文件系统来。

内核的目的是:启动应用程序。那么应用程序有那么多,到底启动哪一个应用程序呢?

上一节有说过,是在init_post函数里面启动应用程序的。
在这里插入图片描述
那么,内核怎么启动第1个应用程序?

首先,打开一个设备,open(/dev/console),然后sys_dup(0);sys_dup(0);
在这里插入图片描述
这三句话是什么意思呢?

答:我们写程序时经常会用到printf(标准输出),scanf(标准输入),err(标准错误),这是指三个文件,根据我们打开的顺序,依次是/dev/console,/dev/console,/dev/console(sys_dup(0)表示和第0个一样),也就是说所有消息都从/dev/console输出和输入,这个/dev/console叫做终端,对于我们来说,这个设备就是串口0,对于其他设备则不一定。

ramdisk_execute_command先不管,接着往下看,execute_command是一个指针,如果它不指空,那么就调用run_init_process来执行execute_command。
在这里插入图片描述
在这里插入图片描述
查看execute_command可以看到,execute_command指向的是uboot传给内核的命令行参数中init=后面的字符串,也就是\linuxrc。
在这里插入图片描述
在这里插入图片描述
也就是说,如果命令行参数中定义了一个init,那么就启动这个init,否则就往下依次顺序执行。一般来说,init程序不会有返回,一旦开始就会一直跑,知道关机。

所以,init程序就是命令行参数中指定的init程序,或者是/sbin/init。
在这里插入图片描述
程序启动成功后,可以使用ps命令查看一下有哪些应用程序在跑了,其中的 init就是第1个应用程序, -sh 就是shell。
在这里插入图片描述
总结一下,内核是怎样启动第1个应用程序的呢?

答:

  1. 首先打开一个设备,设置一下标准输入,标准输出,标准错误的终端;
  2. 然后通过run_init_process来调用第1个应用程序。

启动u-boot后,通过ls指令可以看到,有许多文件,这些文件是做什么用的呢?下一节再来分析一下。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值