day14-文件系统工作流程分析

1.内核启动文件系统后,文件系统的工作流程

        1.参数的接收

        2.参数的解析

        3.参数的应用

问题:

1.        UBOOT 传给 KERNEL 的参数是以tagglist进行的

           KERNEL 传给 文件系统(busybox)的参数是以什么进行的? 

2.        在整个文件系统中都需要什么组件?

文件系统初始化流程

parse_inittab()

        file = fopen(INITTAB, "r");        //#define INITTAB      "/etc/inittab"

        if (file == NULL) {

                /* Reboot on Ctrl-Alt-Del */

                new_init_action(CTRLALTDEL, "reboot", "");

                /* Umount all filesystems on halt/reboot */

                new_init_action(SHUTDOWN, "umount -a -r", "");

                /* Swapoff on halt/reboot */

                if (ENABLE_SWAPONOFF) new_init_action(SHUTDOWN, "swapoff -a", "");

                /* Prepare to restart init when a HUP is received */

                new_init_action(RESTART, "init", "");

                /* Askfirst shell on tty1-4 */

                new_init_action(ASKFIRST, bb_default_login_shell, "");

                new_init_action(ASKFIRST, bb_default_login_shell, VC_2);

                new_init_action(ASKFIRST, bb_default_login_shell, VC_3);

                new_init_action(ASKFIRST, bb_default_login_shell, VC_4);

                /* sysinit */

                new_init_action(SYSINIT, INIT_SCRIPT, "");

inittab的格式:

                Format for each entry: <id>:<runlevels>:<action>:<process>

文件系统默认的参数解析:

static void new_init_action(int action, const char *command, const char *cons)
{struct init_action *new_action, *a, *last;if (strcmp(cons, bb_dev_null) == 0 && (action & ASKFIRST))return;/* Append to the end of the list */for (a = last = init_action_list; a; a = a->next) {/* don't enter action if it's already in the list,* but do overwrite existing actions */if ((strcmp(a->command, command) == 0)&& (strcmp(a->terminal, cons) == 0)) {a->action = action;return;}last = a;}new_action = xzalloc(sizeof(struct init_action));if (last) {last->next = new_action;} else {init_action_list = new_action;}strcpy(new_action->command, command);new_action->action = action;strcpy(new_action->terminal, cons);messageD(L_LOG | L_CONSOLE, "command='%s' action=%d tty='%s'\n",new_action->command, new_action->action, new_action->terminal);
}struct init_action {struct init_action *next;int action;pid_t pid;char command[INIT_BUFFS_SIZE];char terminal[CONSOLE_NAME_SIZE];
};

默认的inittab:   

::ctrlaltdel:/sbin/reboot

::shutdown:/sbin/swapoff -a

::shutdown:/bin/umount -a -r

::restart:/sbin/init

::askfirst:/bin/sh

tty2::askfirst:/bin/sh

tty3::askfirst:/bin/sh

tty4::askfirst:/bin/sh

::SYSINIT:/etc/init.d/rcS

参数使用流程

        run_actions(SYSINIT);

                waitfor(a, 0);  //运行该action对应的命令函数,并且等待其退出

启动流程:

          run_actions(SYSINIT);  //运行::SYSINIT:/etc/init.d/rcS脚本,并且等待退出

          run_actions(WAIT);

          run_actions(ONCE);

	while (1) {/* run the respawn stuff */run_actions(RESPAWN);/* run the askfirst stuff */run_actions(ASKFIRST);//:/bin/sh/* Don't consume all CPU time -- sleep a bit */sleep(1);/* Wait for a child process to exit */wpid = wait(NULL);while (wpid > 0) {/* Find out who died and clean up their corpse */for (a = init_action_list; a; a = a->next) {if (a->pid == wpid) {/* Set the pid to 0 so that the process gets* restarted by run_actions() */a->pid = 0;message(L_LOG, "process '%s' (pid %d) exited. ""Scheduling it for restart.",a->command, wpid);}}/* see if anyone else is waiting to be reaped */wpid = waitpid(-1, NULL, WNOHANG);}}

一个文件系统都需要什么?

        1./dev/console        

        2.init_main函数---->busybox

        3./etc/init.d/rcS--脚本

        4.因为需要运行shell命令,所以要有shell命令的支持函数--->busybox

        5.标准库函数,包含glibc

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/143114.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

马尔可夫过程

马尔可夫决策过程 马尔可夫含义 马尔可夫性质 在给定历史状态 s 0 , … , s t s_0,\dots,s_t s0​,…,st​的情况下&#xff0c;某个状态的未来只与当前状态 s t s_t st​有关&#xff0c;与历史的状态无关。 ​ p ( s t 1 ∣ s t ) p ( s t 1 ∣ s 0 , s 1 , … , s t…

【python】单词接龙

题目&#xff1a; 这是一个关于“单词接龙”的算法题目。在这个游戏中&#xff0c;我们需要从给定的一组单词中&#xff0c;以特定的开头字母构造出一条最长的“龙”。每个单词在这条“龙”中最多出现两次。当两个单词相连时&#xff0c;它们的重合部分被合并成一个。例如&…

spring boot中使用Bean Validation做优雅的参数校验

一、Bean Validation简介 Bean Validation是Java定义的一套基于注解的数据校验规范&#xff0c;目前已经从JSR 303的1.0版本升级到JSR 349的1.1版本&#xff0c;再到JSR 380的2.0版本&#xff08;2.0完成于2017.08&#xff09;&#xff0c;目前最新稳定版2.0.2&#xff08;201…

LMI相机配置步骤,使用Gocator2550相机

在此之前可以先浏览我编写的相机SDK通用类和LMISDK&#xff0c;进行配套观看 https://blog.csdn.net/m0_51559565/article/details/134404394 //LMI相机SDK https://blog.csdn.net/m0_51559565/article/details/134403745 //相机通用类1.启动LMI加速器 LMI加速器用于将相机…

什么是智能井盖?万宾科技的智能井盖传感器的效果

近年来为打造智慧城市政府一直在不懈努力。加速城市基础建设是一项重要的举措&#xff0c;它有助于推动城市综合治理城市生命线的建设工程。在改善市民生活质量的过程中&#xff0c;市政部门正积极进行井盖的改进和升级工作&#xff0c;特别是那些看似微不足道的井盖却蕴含着重…

Java基于itextPDF实现pdf动态导出

Java基于itextPDF实现pdf动态导出 1、制作PDF导出模板2 、集成itextpdf3 、编写实体4 、编写主要代码5、编写controller并测试补充&#xff1a;踩坑记录 现在的业务越来越复杂了&#xff0c;有些业务场景已经不能满足与EXCEL导出和WORD导出了&#xff0c;例如准考证打印&#x…

深度学习 植物识别算法系统 计算机竞赛

文章目录 0 前言2 相关技术2.1 VGG-Net模型2.2 VGG-Net在植物识别的优势(1) 卷积核&#xff0c;池化核大小固定(2) 特征提取更全面(3) 网络训练误差收敛速度较快 3 VGG-Net的搭建3.1 Tornado简介(1) 优势(2) 关键代码 4 Inception V3 神经网络4.1 网络结构 5 开始训练5.1 数据集…

深入理解JMeter中的JSON Extractor

Apache JMeter是一款出色的开源性能和功能测试工具&#xff0c;这款工具提供了丰富的功能和强大的扩展性&#xff0c;可以应对各种复杂的测试需求。当我们在进行接口测试时&#xff0c;经常会遇到需要从接口响应中提取信息并在后续请求中使用的情况。这时候&#xff0c;JMeter中…

arf_1解题

arf_1解题 镜像环境 version: 3.2services:web:image: registry.cn-hangzhou.aliyuncs.com/n1book/web-file-read-1:latestports:- 80:80新建yml文件将代码保存在当前位置 使用docker-compost up -d 拉取镜像 解题 访问该镜像映射端口为1520 可以看到页面只有一个holle但…

java Concurrent 线程安全的集合类

ConcurrentHashMap&#xff1a;是一个线程安全的哈希表实现&#xff0c;它支持高并发的读写操作。它采用了分段锁的机制&#xff0c;将整个哈希表分成多个段&#xff0c;每个段都有一个独立的锁&#xff0c;不同的线程可以同时访问不同的段&#xff0c;从而提高并发性能。 Con…

【Python】一文带你掌握数据容器之集合,字典

目录&#xff1a; 一、集合 思考&#xff1a;我们目前接触到了列表、元组、字符串三个数据容器了。基本满足大多数的使用场景为何又需要学习新的集合类型呢? 通过特性来分析: &#xff08;1&#xff09;列表可修改、支持重复元素且有序 &#xff08;2&#xff09;元组、字符…

DAY52 300.最长递增子序列 + 674. 最长连续递增序列 + 718. 最长重复子数组

300.最长递增子序列 题目要求&#xff1a;给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] 是数组 […

Home Assistant使用ios主题更换背景

Home Assistant使用ios主题、更换背景 lovelace-ios-dark-mode-theme 默认前置情况&#xff0c;1、已安转HACS插件2、搜索安装 IOS Dark Mode Theme1&#xff09;第一、二步应该很容易实现&#xff0c;configuration.yaml文件很容易被找到2&#xff09;而本人在进行第三步操作时…

python_定时任务自动匹配数据II

从配置文件读取配置参数&#xff0c;并每天定时执行日常任务、每周一定时执行周任务&#xff0c;匹配符合要求的org数据&#xff0c;文件查找-复制-合并-裁剪。 import os import re import shutil import threading import datetime import timeimport schedule# 全局变量&am…

php+vue3实现点选验证码

buildadmin 中的点选验证码实现 验证码类 <?phpnamespace ba;use Throwable; use think\facade\Db; use think\facade\Lang; use think\facade\Config;/*** 点选文字验证码类*/ class ClickCaptcha {/*** 验证码过期时间(s)* var int*/private int $expire 600;/*** 可以…

我记不住的那些命令(不断更新中)

fzf 一种进行模糊查找的命令行工具 主页&#xff1a;https://github.com/junegunn/fzf 我的主机是 Kali&#xff0c;通过apt进行安装fzf&#xff0c;并进行配置。 # apt install fzf # apt show fzf 通过参考/usr/share/doc/fzf/README.Debian来进行快速配置快捷键和自动补…

保护您的Google账号安全:检查和加固措施

简介&#xff1a;随着我们在日常生活中越来越依赖于Google账号&#xff0c;我们的个人信息和敏感数据也变得越来越容易受到威胁。为了确保您的Google账号的安全性&#xff0c;本文将介绍一些简单但有效的方法&#xff0c;帮助您检查和加固您的Google账号。 --- 在数字时代&am…

squid代理服务器

squide是正向代理&#xff0c;缓存加速。基于aci访问控制协议。可以过滤控制。可以实现访问控制 squid代理的工作机制 nginx是转发 1、 squid是代替客户端向网站请求数据&#xff0c;不需要访问代理的ip地址。直接请求目的网站即可。由代理服务器处理请求和响应。squid也可以…

Linux 应用服务

Part I: Linux 系统概述 什么是 LinuxLinux 的历史和版本Linux 发行版介绍Linux 的优缺点 Part II: Linux 安装与配置 5. 硬件要求与准备工作 6. 安装 Linux 操作系统 7. Linux 系统初始化设置 8. Linux 系统更新与升级 9. Linux 基础配置 Part III: Linux 命令行 10. Linux…