linux根文件系统-粗略分析学习笔记

原创 2013年12月05日 16:24:55
1)uboot目的:启动内核;
2)内核目的:启动应用程序;
那么应用程序在哪儿?在根文件系统中;
3)因此我们还要构建根文件系统

内核启动之后,会去启动哪个应用程序呢?
内核怎样启动第一个应用程序?
1.open(/dev/console) //打开终端
2.sys_dup(0); //复制上面打开的文件
3.sys_dup(0); //复制上面打开的文件 
这三句话的意思是打开终端,分别代表标准输出,标准输入,标准错误,跟输入输出相关;

if (execute_command) {
run_init_process(execute_command);
printk(KERN_WARNING "Failed to execute %s.  Attempting "
"defaults...\n", execute_command);
}
此句用于判断和执行由uboot启动参数传入的init程序,如果有则执行,uboot没有init这一参数的输入的话,接着往下执行。
run_init_process("/sbin/init");
run_init_process("/etc/init");
run_init_process("/bin/init");
run_init_process("/bin/sh");
这些都是用于启动应用程序的,但run_init_process()函数特点是成功执行则不返回,执行失败才返回,即如果/sbin/init文件被执行的话,后面的就不用执行了。

挂接根文件系统后才能去启动应用程序。下面开始了解文件系统的内容,跟进/sbin/init进程,分析一下看看进程需要哪些东西。
busybox是系统应用程序的总和,如ls、cp、cd等,我们使用ls的时候会连接到busybox,执行ls的时候就等于执行busybox ls。
 
busybox中有init程序,其工作:
1.读取用户程序配置文件;
2.解析配置文件;
3.执行用户程序:配置文件应该包括a.指定程序b.何时执行;
busybox->init_main
                   parse_inittab
                       file=open(INITTAB,"r"); //打开配置文件/etc/inittab
                       new_init_action  //1.创建一个init_action结构,填充;2.把这个结构放入链表init_action_list;

配置文件/etc/inittab格式:
<id>:<runlevels>:<action>:<process>
id会加上前缀/dev/,这个可以省略
id=>/dev/id,用作终端:stdin,stdout,stderr即printf,scanf,err;
runlevels :忽略;
action     :执行时机,即何时执行;
process  :要执行的应用程序或脚本;

new_init_action的工作:
1.创建一个init_action结构,填充;
2.把这个结构放入链表init_action_list;

如果没有配置文件,new_init_action会执行默认工作,由默认工作反推默认配置文件:
::ctrlaltdel:reboot
::shutdown:umount -a -r
::restart:init
::askfirst:-/bin/sh
tty2::askfirst:-/bin/sh
tty3::askfirst:-/bin/sh
tty4::askfirst:-/bin/sh
::sysinit:/etc/init.d/rcS

那么,我们总结一下以上进程需要哪些文件?
/dev/console /dev/null
/etc/inittab
配置文件指定应用程序

init本身,来源于busybox
其中/dev/null用于未指定id(终端)时标准输入输出指向的终端位置;

那么最小的根文件系统需要的项:
1./dev/console
/dev/null
2.init=>busybox;
3./etc/inittab;
4.配置文件中指定的程序;
5.C库;
那么我们一一创建上面各项,并将其制作成一种文件系统的格式,就构建成了一个根文件系统。
这里注意,如果我们是在linux操作系统下编译busybox,用于其它系统安装,那么在配置(make menuconfig)、编译(make)完之后,千万不要直接make install,否则会影响本机系统,应该make CONFIG_PREFIX=/path/from/root install,即指定路径安装,/path/from/root为自己指定的安装目录。这一点busybox的INSTALL中有说明。
版权声明:本文为博主原创文章,未经博主允许不得转载。

嵌入式linux开发学习笔记之运用BusyBox构建根文件系统

首先在讲解如果运用BusyBox构建根文件系统

嵌入式学习笔记300-linux根文件系统搭建

制作根文件系统首先需要用busybox编译出系统文件所需的应用程序,然后再以此拓展构建根文件系统。 这里使用busybox1.16.0,可以在本博客查询看是否有上传。 tar jxvf busyb...

I.MX6Q(TQIMX6Q/TQE9)学习笔记——新版BSP之根文件系统挂载

经过前面的移植,新版BSP的uboot和kernel已经能够在tqimx6q开发板上运行了,接下来我们来挂载文件系统。 DTB整理 前面的文章中提到,新版BSP的DTB管理感觉不是太好,在之前移植的B...
  • girlkoo
  • girlkoo
  • 2015年05月04日 00:03
  • 8624

EasyARM i.mx287学习笔记——根文件系统rootfs修改和烧写

本文详细说明如何修改和制作根文件系统,包括修改根文件系统中的配置文件;在根文件系统中加入可执行文件,最后通过uboot tftp方式烧录根文件系统和镜像。...

嵌入式学习笔记------根文件系统inittab

感谢老房老师的资料,下面是我对老师的资料整理: 首先介绍点背景知识,关于 inittab 的: init 进程是系统中所有进程的父进程,init 进程繁衍出完成通常操作所需的子进程,这些操作 ...

移植内核学习笔记2-----修改分区及制作根文件系统

1、制作分区 (1)分析 在上节实验中出现以下问题:无法挂载根文件系统 在以前u-boot烧写文件系统时是烧写到某个地方,以前的分区是下面那样划分的,划分为4个分区,但是上面有8个分区 分区修...

I.MX6Q(TQIMX6Q/TQE9)学习笔记——新版BSP之根文件系统挂载

经过前面的移植,新版BSP的uboot和kernel已经能够在tqimx6q开发板上运行了,接下来我们来挂载文件系统。 DTB整理 前面的文章中提到,新版BSP的DTB管理感觉不是太好,在之前移植...
  • dddxxxx
  • dddxxxx
  • 2016年06月23日 09:55
  • 2100

S3C6410移植linux-2.6.39 笔记(三)-构建cramfs根文件系统(1)

Author:    eilian Blog:       http://blog.csdn.net/eilianlau Copyright:Original Date:   2011、12...

S3C6410移植linux-2.6.39 笔记(三)-构建cramfs根文件系统(2)

Author:    eilian Blog:       http://blog.csdn.net/eilianlau Copyright:Original Date:   2011、12...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux根文件系统-粗略分析学习笔记
举报原因:
原因补充:

(最多只允许输入30个字)