应用程序位于根文件系统,内核为了使用应用程序,需要挂接根文件系统,本节分析一个最小根文件系统的组成,在下节讲解如果创建一个最小根文件系统
内核分析时,有如下调用过程
rest_init
kernel_init(通过创建线程调用)
prepare_namespace
mount_root/*挂接根文件系统*/
init_post
sys_open((const char __user *)"/dev/console", O_RDWR, 0)/*打开控制台*/
run_init_process/*调用应用程序*/
在mount_root挂接好文件系统后,系统会调用init_post,完成以下工作:
1、以读写方式打开终端,返回文件描述符为0
sys_open((const char __user *) "/dev/console", O_RDWR, 0)
2、将文件描述符为0的文件复制两份,其描述符分为别1、2,这三个文件是标准输入、输出、错误流,都指向终端/dev/console
(void) sys_dup(0);
(void) sys_dup(0);
3、若execute_command不为空,执行相应的应用程序
if (execute_command) {
run_init_process(execute_command);
printk(KERN_WARNING "Failed to execute %s. Attempting "
"defaults...\n", execute_command);
}
其中execute_command在下面这个函数中赋值
static int __init init_setup(char *str)
{
unsigned int i;
execute_command = str;
/*
* In case LILO is going to boot us with default command line,
* it prepends "auto" before the whole cmdline which makes
* the shell think it should execute a script with such name.
* So we ignore all arguments entered _before_ init=... [MJ]
*/
for (i = 1; i < MAX_INIT_ARGS; i++)
argv_init[i] = NULL;
return 1;
}
__setup("init=", init_setup);
其中str通过命令行参数init=xxx指定

本文详细解析了根文件系统的重要组成部分,包括/dev/console、init进程、inittab配置文件及必要的应用程序。阐述了内核如何挂载根文件系统,init进程如何执行应用程序,以及配置文件如何控制系统启动流程。
最低0.47元/天 解锁文章
484

被折叠的 条评论
为什么被折叠?



