历史上的今天
今天是:2025年08月20日(星期三)
2021年08月20日 | 1_5.4.1_根文件系统_构建根文件系统之启动第1个程序_P
2021-08-20 来源:eefocus
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个应用程序的呢?
答:
首先打开一个设备,设置一下标准输入,标准输出,标准错误的终端;
然后通过run_init_process来调用第1个应用程序。
启动u-boot后,通过ls指令可以看到,有许多文件,这些文件是做什么用的呢?下一节再来分析一下。
史海拾趣
|
请教我设计的按键控制为什么按住jia或jian键后程序会停止? #include #define uchar unsigned char #define uint unsigned int uchar bb; //定时器中断次数 。 uchar m; //个位秒。 uchar tt; //十位秒。 uchar tt1; // 个位分。 uchar tt2;   ...… 查看全部问答> |
|
小弟最近关注触摸屏相关的技术,但是具备的相关经验甚少。只是记得Cypress之前一直在推电容感应触摸屏。 大家在实际中,用过触摸屏么?用的什么屏?觉得如何?… 查看全部问答> |
|
**,您好: 小明。男。1986年17月40日出生。身高190,体重80KG。籍贯山东省济南市。信仰无神论力量崇拜。身体优良。未婚。爱好计算机,吉他,铅笔画,篮球,游泳,做饭。性格柔中带钢,讲原则,重诚信。 2005年9月入读乌 ...… 查看全部问答> |
|
采样数据如下:lBFUIN[256] ={1026,1032,1039,1045,1052,1058,1066,1073,1081,1087,1095,1104,1113,1121,1129,1138,1146,1155,1165,1172,1183,1192,1201,1212,1222,1231,1242,1251,1262,1272,1284,1294,1303,1313,1324,1335,1346,1356,13 ...… 查看全部问答> |




