Linux内核移植:内核的启动过程分析、启动配置与rootfs必要文件
Linux内核移植:内核的启动过程、启动配置与rootfs必要文件
- 一、启动过程
- 二、启动配置
- (一)SysV初始化
- (二)systemd初始化
- 三、rootfs中的启动配置文件
- 1、inittab
- 2、/etc/init.d/rcS 脚本
- 3、fstab
- 4、profile 文件
- 5、其他文件
一、启动过程
内核启动通常包括4个阶段:
- iROM代码启动(BIOS启动)。开发板上电后,先执行内部iROM中的固化代码,类似于BIOS,执行通电自检和初始化过程,包括初始化CPU、存储器、时钟、总线等一些必要的硬件资源。
- 启动引导加载程序BootLoader。根据启动引脚的电平,读取相应的存储介质上的Uboot到RAM。接着,启动Uboot。U-Boot再根据用户传的参数加载内核、设备树、根文件系统。
- 装载内核。Linux内核镜像文件uImage被载入内存后,首先将自身解压,然后进行系统的一系列初始化工作,包括初始化存储器、中断表、必要的设备驱动,设定分页机制、任务调度机制,接着根据bootargs环境变量载入根文件系统。
- 系统初始化。根文件系统加载成功后,根据bootargs尝试执行/init命令。如果是RAMDisk,就尝试执行/init命令,否则,就尝试执行/sbin/init、 /etc/init、 /bin/init、 /bin/sh。如果其中任意一个能成功执行,就进人下一阶段,否则,内核启动失败。
二、启动配置
Linux通常有3中系统初始化方式:SysV、systemd、UpStart。
(一)SysV初始化
init是系统的1号进程,可以是可执行脚本,或sysvinit,或者busybox的二进制程序。ramdisk常用可执行程序脚本程序的init,二进制程序常依照/etc/inittab文件执行初始化任务。管理员可以定制/etc/inittab 配置文件来建立所需的系统运行环境。所以,/etc/inittab是rootfs中的重要文件。验证如下:
~$ ls /sbin/init -l
lrwxrwxrwx 1 1000 1000 14 Jan 25 2023 sbin/init -> ../bin/busybox
System V initialization是基于运行级别(Runlevel)来启动系统,用来设置不同环境下所运行的程序和服务。使用运行级别和对应的链接文件(位于etc/rcn.d 目录中,n为运行级别,分别链接到/etc/init.d中的init 脚本)来启动和关闭系统服务。假设当前inittab 中设置的默认运行级别是2,则init 进程会运行/etc/init.d/rc2命令,该命令会依据系统服务的依赖关系遍历执行/etc/rc2.d中的脚本或程序。/etc/rc2.d目录中的文件实际都是指向/etc/init.d/下对应的脚本或程序的软链接。
init 进程根据/etc/inittab中的配置初始化系统,设置系统运行级别及进入各运行级别对应的要执行的命令。inittab 提供了0~6的运行级别选项,runlevels是运行级别列表(如下)。其中,1级(单用户模式)和5级(多用户标准模式)比较常用。系统工作不正常时使用单用户模式维护,工作正常时使用多用户标准模式。在资源受限时(如没有网络环境或没有图形终端)可选择2级。以S开头的表示启动,以K开头的表示停止,并且S或K后面的两位数数字代表了服务的启动顺序,具体由服务依赖关系决定
# Runlevel 0:Halt.
# Runlevel 1:Single-user mode without networking,only for root.
# Runlevel 2:Multi-user mode without networking and daemons.
# Runlevel 3:Multi-user mode with networking.
# Runlevel 4:Not used or user-defined.
# Runlevel 5:Runlevel3+X-window,full functionally.
# Runlevel 6:Reboot.
(二)systemd初始化
新版本的Ubuntu使用systemd来初始化系统,验证如下:
~$ ls /sbin/init -l
lrwxrwxrwx I root root 20 3月 30 00:40 /sbin/init -> /lib/systemd/systemd
systemd最主要的功能包括系统的主机名称、网络设置定、语言处理、文件系统格式及其他系统服务和应用服务的启动等。所有的这些任务都会通过systemd的默认启动目标(/etc/systemd/system/default.target)来配置。
systemd依次执行相应的各项任务来完成系统的最终启动。例如,systemd 首先执行initrd.target所有单元,包括挂载/etc/fstab,最后执行 graphical所需的服务以启动图形界面来让用户以图形界面登录。如果系统的defaulttarget 指向multi-user.target,那么此步骤就不会执行。
三、rootfs中的启动配置文件
1、inittab
基本的ininttab内容如下:
#this is run first except when booting in single-user mode.
::sysinit:/etc/init.d/rcS
# /bin/sh invocations on selected ttys
# start an "askfirst" shell on the console (whatever that may be)
::askfirst:-/bin/sh
# stuff to do when restarting the init process
::restart:/sbin/init
# stuff to do before rebooting
::ctrlaltdel:/sbin/reboot
inittab 文件中的每一项按下面的格式设置:
id: runlevels: action: process
每一项有四个字段,字段之间用冒号隔开。每个字段的含义如下。
(1)起d由1~4个字符组成,作为inittab项的唯一标识。
(2)runlevedls 是运行级别列表。
(3)action指明执行什么动作
(4)process字段包含init执行的进程。
与系统启动相关的文件和目录如下:
|--/etc/
| |-- inittab (init脚本)
| |-- init.d/
| |-- rc (启动脚本)
| |-- rcS (启动脚本)
| |-- rc.local(附加启动脚本)
| |-- .... (其他系统服务脚本)
| |--rcS.d/ (S级服务管理目录)
| |-- .... (init.d服务脚本链接)
| |-- rc0.d/ (0级服务管理目录)
| |-- .... (init.d服务脚本链接)
2、/etc/init.d/rcS 脚本
#!/bin/sh## rcS Call all S??* scripts in /etc/rcS.d in# numerical/alphabetical order.## Version: @(#)/etc/init.d/rcS 2.76 19-Apr-1999 miquels@cistron.nl#PATH=/sbin:/bin:/usr/sbin:/usr/binrunlevel=Sprevlevel=Numask 022export PATH runlevel prevlevel# Make sure proc is mounted#[ -d "/proc/1" ] || mount /proc## Source defaults.# 设置环境变量#./etc/default/rcS## Trap CTRL-C &c only in this shell so we can interrupt subprocesses.#trap ":" INT QUIT TSTP## Call all parts in order.# # exec /etc/init.d/rc S/bin/mount -a
不要忘记为 rcS 添加可执行权限:
$ chmod +x init.d/rcS
3、fstab
/etc/init.d/rcS中的mount -a。意思是将/etc/fstab的所有内容重新加载。
/etc/fstab 文件负责配置Linux开机时自动挂载的分区。
- fstab中的文件挂载操作如下:
<file system> <mount point> <type> <options> <dump> <pass>
<file system>:描述要挂载的特殊的块设备或远程文件系统,如/dev/cdrom /dev/sdb等,远程文件系统使用<host>:<dir>.
<mount point>:描述文件系统的挂载点;如果是一个交换分区(swap partitions),这个域应写为‘none’.
<type>:描述文件系统的类型,Linux支持许多文件系统类型,如adfs, affs, autofs, coda, coherent, cramfs,devpts, efs, ext2, ext3, hfs, hpfs, iso9660, jfs, minix, msdos, ncpfs, nfs,ntfs, proc, qnx4, reiserfs, romfs, smbfs, sysv, tmpfs, udf, ufs, umsdos,vfat, xenix, xfs,等。
<options>:描述关于这个文件系统的挂载选项,基本的选项如下:
default:使用默认选项,rw, suid, dev, exec, auto, nouser, and async
noauto:当启动时给出“mount -a”命令时并不挂载。
user:允许用户挂载
owner:允许设备自己挂载
comment:供fstab维护程序使用
nofail:如果这个设备不存在,不报告错误信息
<dump>:当其值设置为1时将允许dump备份程序备份;设置为0时忽略备份操作;如果文件系统需不需要被dump,则设置为0即可
<pass>:该字段由fsck程序用于确定在重新启动时文件系统检查完成的顺序,启动用的文件系统需要制定为1,其他文件系统需要指定为2,如果没有此域或设置为0表示不检查。其值是一个顺序。当其值为0时,永远不检查;而 / 根目录分区永远都为1。其它分区从2开始,数字越小越先检查,如果两个分区的数字相同,则同时检查
参考博文: 根文件系统(linuxrc、inittab、fstab)
例1:
#device mount-point type options dump fsck order
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
例2:
none /dev/pts devpts gid=5,mode=620 0 0
none /proc proc defaults 0 0
nonc /dev/shm tmpfs defaults 0 0
/dev/hda4 swap swap dcfaults o 0
/dev/edrom /mntcdrom iso9660 noauto,owner,kudzu,ro 0 0
/dev/fd0 /mnt/floppy auto noauto,owner,kudzu 0 0
/dev/hdal /mnt/c vfat exec,dev,suid,rw,umask=0, iocharset=gb2312,codepage=936 0 0
例3:fstab中添加了mount nfs的配置:
192.168.1.7:/CBT-SuperIOT/ /mnt/nfs/ nfs nolock 0 0
4、profile 文件
#!/bin/sh
export HOSTNAME=farsight
export USER=root
export HOME=root
export PS1="[$USER@$HOSTNAME \W]\# "
PATH=/bin:/sbin:/usr/bin:/usr/sbin
LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH
export PATH LD_LIBRARY_PATH
5、其他文件
service,inetd.conf,passwd文件,可以配置telnet服务器的配置和开启:
确保fstab 文件中存在none /dev/pts devpts mode=0622 0 0这一行
确保services文件中存在 telnet 23/tcp这一行
确保 inetd.conf中存在telnet stream tcp nowait root /sbin/telnetd telnetd
确保passwd 文件中存在 root::0:0:root:/:/bin/sh ,表示没有密码的root 帐号
相关文章:
Linux内核移植:内核的启动过程分析、启动配置与rootfs必要文件
Linux内核移植:内核的启动过程、启动配置与rootfs必要文件一、启动过程二、启动配置(一)SysV初始化(二)systemd初始化三、rootfs中的启动配置文件1、inittab2、/etc/init.d/rcS 脚本3、fstab4、profile 文件5、其他文件…...
【代码随想录训练营】【Day14】第六章|二叉树|理论基础|递归遍历|迭代遍历|统一迭代
理论基础 二叉树的定义形式有:节点指针和数组 在数组中,父节点的下标为i,那么其左孩子的下标即i*21,右孩子的下标即为i*22 二叉树的常见遍历形式有:前序遍历、后序遍历、中序遍历和层序遍历 前序遍历:二…...

AXI-Stream 学习笔记
参考 https://wuzhikai.blog.csdn.net/article/details/121326701 https://zhuanlan.zhihu.com/p/152283168 AXI4 介绍 AXI4 是ARM公司提出的一种片内总线,描述了主从设备之间的数据传输方式。主要有AXI4_LITE、AXI4_FULL、AXI4_STREAM三种。 AXI4_LITE࿱…...

【Linux】程序进程地址空间
文章目录程序地址空间进程地址空间程序地址空间 在Linux下,这种地址叫做 虚拟地址, 我们在用C/C语言所看到的地址,全部都是虚拟地址!物理地址,用户一概看不到,由OS统一管理 问:C/C程序地址空间是内存吗? -> 根本就不是内存! 是进程虚拟地址空间 堆栈…...

电压放大器在液滴微流控芯片的功能研究中的应用
实验名称:电压放大器在液滴微流控芯片的功能研究中的应用研究方向:微流控生物芯片测试目的:液滴微流控技术能够在微通道内实现液滴生成,精准控制生成液滴的尺寸以及生成频率。结合芯片结构设计和外部控制条件,可以对液…...

Linux操作系统学习(进程地址空间)
文章目录进程地址空间奇怪的现象什么是进程地址空间???虚拟地址是如何与物理内存联系的?页表是什么呢?为什么要有页表和地址空间,让进程直接访问内存不行吗?现象解释进程地址空间 在我们学习其…...
【排序】快速排序实现
目录 一、快速排序是什么? 二、左右指针法 1.实现原理 2.代码如下: 三、挖坑法 1.实现原理 2.代码如下: 四、前后指针法 1.实现原理 2.代码如下: 五、三数取中 1.实现思想 2.代码如下: 3.使用方法 总结…...

YOLOv5/v7 Flask Web 车牌识别 | YOLOv7 + EasyOCR 实现车牌识别
YOLOv7 Flask Web 车牌识别图片效果展示 本篇博文只包含源码以及使用方式,目前不同提供详细开发教程。 YOLOv7 Flask Web 车牌识别视频效果展示 YOLOv7 + EasyOCR 实现车牌识别 什么是Flask? 简介 Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更…...

【Opencv实战】几十年前的Vlog火了:黑白老照片如何上色?这黑科技操作一定要知道,复原度超高,竟美的出奇~(图像修复神级代码)
导语 哈喽大家好呀!我是每天疯狂赶代码的木木子吖~情人节快乐呀! 所有文章完整的素材源码都在👇👇 粉丝白嫖源码福利,请移步至CSDN社区或文末公众hao即可免费。 我们都知道,有很多经典的老照片…...

React源码分析(一)Fiber
前言 本次React源码参考版本为17.0.3。 React架构前世今生 查阅文档了解到, React16.x是个分水岭。 React15及之前 在16之前,React架构大致可以分为两层: Reconciler: 主要职责是对比查找更新前后的变化的组件;R…...

小樽 C++指针—— (壹) 指针变量
(壹) 指针变量 一、指针的概念与定义 二、给指针变量p赋值 三、指针变量的的、-运算 四、无类型指针 五、多重指针 C (壹) 指针变量 小明想把从李华家借来的书——《CCF中学生计算机程序设计》还给李华,但李华不在家,于是把书放到书架第3层的最右边…...

java 代码块 万字详解
概述 : 特点 : 格式 : 情景 : 细节 : 演示 : 英文 : //v,新版编辑器无手动添加目录的功能,PC端阅读建议通过侧边栏进行目录跳转;移动端建议用PC端阅读。😂一、概述 :代码块,也称为初始化块,属于类中的成员&…...

杂项-图片隐写
图片隐写的常见隐写方法: 三基色:RGB(Red Green Blue) 图片文件隐写 1.Firework 使用winhex打开文件时会看到文件头部中包含firework的标识,通过firework可以找到隐藏图片。 使用场景:查看隐写的图片文件…...

【高性价比】初学者入门吉他值得推荐购买的民谣单板吉他品牌—VEAZEN费森吉他
“在未知的世界里,我们是一群不疲不倦的行者,执念于真善美,热衷于事物的极致。我们抽丝剥茧,不断地打败自己,超越自己,我们无所畏惧终将成为巨人。”这是VEAZEN吉他官网首页上很明显的一段话,也…...

2023年浙江交安安全员考试题库及答案
百分百题库提供交安安全员考试试题、交安安全员考试真题、交安安全员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 50.根据《建设工程安全生产管理条例》第65条规定,施工单位有下列()行…...
【新】华为OD机试 - 跳格子(Python)
跳格子 题目 地上共有 N 个格子,你需要跳完地上所有的格子, 但是格子间是有强依赖关系的,跳完前一个格子后, 后续的格子才会被开启,格子间的依赖关系由多组 steps 数组给出, steps[0] 表示前一个格子, steps[1] 表示 steps[0] 可以开启的格子: 比如 [0,1] 表示从跳完第…...
乡村能做社区团购吗?怎么做?我走访调查后发现机会很大
乡村能做社区团购吗?怎么做?我走访调查后发现机会很大#深度触网 #社区团购 #乡村振兴##乡村旅游##县域经济##市场经济##农文旅产业振兴研究院#乡村旅游能带动农产品加工业、服务业、商贸业等相关联产业的发展 乡村能做社区团购吗?怎么做&…...

态路小课堂丨下一代数据中心100G接口第二篇——SFP-DD封装
100G光模块根据封装模式可分为QSFP28、CXP、CFP、CFP2、FCP4、DSFP和SFP-DD等。态路小课堂之前已经大量介绍了相关内容(。 态路小课堂丨下一代数据中心100G接口——DSFP态路小课堂丨100G解决方案-425G NRZ光模块态路小课堂丨什么是100G QSFP28单波光模块?…...
状态栏和导航栏高度获取
/*** 获取导航栏高度*/public static int getNavigationBarHeight(Context context){int navigationBarHeight 0;int resourceId context.getResources().getIdentifier("navigation_bar_height", "dimen", "android")if (resourceId > 0) {…...
插曲:第一桶金 1w 的来由
因为前天跟同事聊天,发现有个比较严重的认知,就是关于赚钱思维。 同事反馈说工作十来年,却没有接过私活,这里话分两头,有可能私 活钱少,但他给我的理由是:私活太麻烦,有时候不敢接&a…...

springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...

MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...