根文件系统启动、init分析、配置

本文详细介绍了嵌入式系统根文件系统的启动过程,包括内核如何挂载根文件系统并启动第一个应用程序。接着分析了init程序的运行步骤,如读取配置文件、解析配置并执行用户程序。此外,还讨论了配置根文件系统所需的基本元素,如添加必要的设备节点、挂载虚拟文件系统(如proc),以及使用udev管理设备节点。最后提到了NFS文件系统的挂载方法,为系统提供远程启动的可能性。
摘要由CSDN通过智能技术生成


一、根文件系统启动一个应用程序

内核:启动应用程序{
1、挂接根文件系统
2、启动第一个应用程序
}
1、挂接根文件系统mount yaffs:内部含有第一应用程序
2、内核启动第一个应用程序:

a:
	打开一个设备 open  (/dev/console ”)
	sys_dup(0);  
	sys_dup(0); //“复制”一个打开的文件号,使两个文件号都指向同一个文件      
	//第一个作为printf 二:scanf 三:err
b:
run_init_process(命令行init =xxx(linuxrc)或者/sbin/init或者..)  只执行一个,内部为死循环

二、init进行分析

ls cp 等指令都是连接到 busybox
在这里插入图片描述

init程序{
①:读取配置文件
②:解析配置文件
③:执行(用户程序)
}

busybox->init_main
			parse_inittab
					file = fopen(INITTAB,"r");  //打开配置文件 /etc/inittab
					new_init_action				//①、创建一个init_cation结构体,填充
												//②、把这个结构体放入init_action_list链表
				    run_actions(SYSINIT);
				    	waitfor(a,0;		 	//执行应用程序,等待它执行完毕
				    		run(a);				//创建process子进程
				    		waitpid(runpid,&status,0); //等待process子进程结束
				    	delete_init_action();   //在init_action_list链表里删除
				    run_actions(WAIT);
				    	waitfor(a,0;		 	//执行应用程序,等待它执行完毕
				    		run(a);				//创建process子进程
				    		waitpid(runpid,&status,0); //等待process子进程结束
				    	delete_init_action();   //在init_action_list链表里删除
				    run_actions(ONCE);
				    	run(a);				//创建process子进程
				    	delete_init_action();   //在init_action_list链表里删除
				    while(1){
						run_actions(RESPAWN);
							if(a->pid == 0){
								a->pid = run(a);
							}
						run_actions(ASKFIRST);
							if(a->pid == 0){
								a->pid = run(a);
										打印: Please press Enter to activate this console.
										等待回车
										创建子进程
							}
						wpid = wait(NULL);			//等待子进程退出
						while(wpid > 0){
							a->pid = 0;				//退出后,就设置pid = 0
						}
					}

在这里插入图片描述

三、配置根文件系统

最小根文件系统需要:
①/dev/console、 /dev/null
②init=>busybox
③ /etc/inittab
④配置文件指定的程序
⑤C库

②:busybox源码生成init 内含sbin、bin、linuxrc、usr
①:再添加 /dev/console /dev/null
③:/etc /inittab
⑤:拷贝工具链里的c库(.so)
再制作成yaffs影响文件,制作工具:mkyaffs2imae (yaffs2 jffs2)

1、额外挂载虚拟文件系统目录

/proc :进程信息使用的挂载虚拟的文件系统
a、手动挂载 :mount -t proc none /proc
b、自动挂载 : 在inittab里加一个配置脚本 ::sysinit:/etc/init.d/rcS
rcS里加上mount -t proc none /proc 或者 mount -a (会去/etc/fstab脚本里去添加挂载)

/etc/fstab文件格式:
#device         mount-point         type       options   dump    fsck    order
proc               /proc             proc       defaults   0       0
tmpfs              /tmp              tmpfs      defaults   0       0

在这里插入图片描述

2、udev 自动创建设备节点

添加到fstab
sysfs /sys sysfs
tmpfs /dev tmpfs

3、NFS文件系统

每次制作好文件系统不需要烧写,而是通过网络进行挂载
两种方法:
a、从flash上启动根文件系统,再用命令挂接NFS mount -t nfs -o nolock 192.168.服务ip:/目录 /本地目录
前提:是要在服务器上配置NFS服务 /etc/export 添加 /xxx *(rw.sync.no_root_squash)
再重启 /etc/init.d/nfs-kernel-server restart
b、直接从NFS启动,修改uboot命令行参数 bootargs
bootargs = root=/dev/nfs nfsroot=… ip=… init=/linuxrc console=ttySAC0

nfsroot=…
在这里插入图片描述
ip=…
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值