Linux 启动加载项详解 init

init进程【1】——init启动过程 众所周知,Linux中的所有进程都是有init进程创建并运行的。首先Linux内核启动,然后在用户空间中启动init进程,再启动其他系统进程。在系统启动完成完成后,init将变为守护进程监视系统其他进程。Android是基于Linux的操作系统,所以init也是Android系统中用户空间的第一个进程,它的进程号是1。下面先简单的看一下init进程的启动过程。 @/kernel/good 阅读详情
 
Linux 启动加载项详解 init
2008年05月20日 星期二 下午 07:41

一、什么是INIT:
  
    init是Linux系统操作中不可缺少的程序之一。
  
    所谓的init进程,它是一个由内核启动的用户级进程。
  
    内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。所以,init始终是第一个进程(其进程编号始终为1)。
  
    内核会在过去曾使用过init的几个地方查找它,它的正确位置(对Linux系统来说)是/sbin/init。如果内核找不到init,它就会试着运行/bin/sh,如果运行失败,系统的启动也会失败。
  
二、运行级别
  
    那么,到底什么是运行级呢?
  
    简单的说,运行级就是操作系统当前正在运行的功能级别。这个级别从1到6 ,具有不同的功能。
  
    不同的运行级定义如下:(可以参考Red Hat Linux 里面的/etc/inittab)

# Default runlevel. The runlevels used by RHS are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
id:5:initdefault:

  
    # 0 - 停机(千万不能把initdefault 设置为0 )
  
    # 1 - 单用户模式
  
    # 2 - 多用户,没有 NFS
  
    # 3 - 完全多用户模式(标准的运行级) (默认的运行状态)

    # 4 - 没有用到
  
    # 5 - X11 (重启并以xwindow启动)
  
    # 6 - 重新启动 (千万不要把initdefault 设置为6 )
  
    这些级别在/etc/inittab 文件里指定。这个文件是init 程序寻找的主要文件,最先运行的服务是放在/etc/rc.d 目录下的文件。在大多数的Linux 发行版本中,启动脚本都是位于 /etc/rc.d/init.d中的。这些脚本被用ln 命令连接到 /etc/rc.d/rcn.d 目录。(这里的n 就是运行级0-6)   三、运行级别的配置
  
    运行级别的配置是在/etc/inittab行内进行的,如下所示:
  
    12 : 2 : wait : / etc / init.d / rc 2
  
    第一个字段是一个任意指定的标签;
  
    第二个字段表示这一行适用于运行那个级别(这里是2);
  
    第三个字 段表示进入运行级别时,init应该运行第四个字段内的命令一次,而且init应该等待该命令结束。/etc/init.d/rc命令运行启动和终止输入以便进入运行级别2时所需的任何命令。
  
    第四个字段中的命令执行设置运行级别时的一切“杂活”。它启动已经没有运行的服务,终止不应该再在新运行级别内运行的服务。根据Linux版本的不同,采用的具体命令也不同,而且运行级别的配置也是有差别的。
网管下载dl.bitscn.com


  
    init启动时,它会在/etc/inittab内查找一个代码行,这一行指定了默认的运行级别:
  
    id : 2 : initdefault :
  
    你可以要求init在启动时,进入非默认运行级别,这是通过为内核指定一个“single”或“emergency” 命令行参数来实现的。比如说,内核命令行参数的指定可通过LILO来执行。这样一来,你就可以选择单用户模式了(即运行级别1)。
  
    系统正在运行时,telinit命令可更改运行级别。运行级别发生变化时, init 就会从/etc/inittab运行相应的命令。
  
四、/etc/inittab中的特殊配置
  
    /etc/inittab中,有几个特殊的特性,允许init重新激活特殊事件。这些特殊特性都是用第三个字段中的特殊关键字标记出来的。比如:
  
    1. powerwait
  
    允许init在电源被切断时,关闭系统。其前提是具有U P S和监视U P S并通知init电源已被切断的软件。
  
    2. ctrlaltdel
  
    允许init在用户于控制台键盘上按下C t r l + A l t + D e l组合键时,重新启动系统。注意,如果该系统放在一个公共场所,系统管理员可将C t r l + A l t + D e l组合键配置为别的行为,比如忽略等。   3. sysinit 网管网www_bitscn_com
  
    系统启动时准备运行的命令。比如说,这个命令将清除/tmp。
  
    上面列出的特殊关键字尚不完整。其他的关键字及其使用详情,可参考你的inittab手册页。
  

五、在单用户模式下引导
  
    一个重要的运行级别就是单用户模式(运行级别1),该模式中,只有一个系统管理员使用特定的机器,而且尽可能少地运行系统服务,其中包含登录。单用户模式对少数管理任务(比如在/usr分区上运行fsck)而言,是很有必要的,因为这需要卸载分区,但这是不可能的,除非所有的服务系统已被杀死。
  
    一个正在运行的系统可以进入单用户模式,具体做法是利用init,请求运行级别1。内核启动时,在内核命令行指定single或emergency关键字,就可进入运行级别1了。内核同时也为init指定命令行, init从关键字得知自己不应该采用默认的运行级别(内核命令行的输入方式和你启动系统的方式有关)。
  
    有时,以单用户模式进行启动是必要的,这样一来,用户在装入分区之前,或至少在装入分散的/usr分区之前,能手工运行fsck(在分散的文件系统上,任何活动都可能使其更为分散,所以应该尽可能地运行fsck)。
  
    如果自动化的fsck在启动时失败了,启动脚本init的运行将自动进入单用户模式。这样做是为了防止系统使用不连贯的文件系统,这个文件系统是f s c k不能自动修复的。文件系统不连贯的现象极为少见,而且通常会导致硬盘的不连贯或实验性的内核释放,但最好能做到防患于未然。 网管论坛bbs_bitsCN_com
  
    由于安全上的考虑,在单用户模式下,启动外壳脚本之前,配置得当的系统会要求用户提供root密码。否则,它会简单地为L I L O输入合适的一行代码,以r o o t的身份登录(当然,如果/etc/passwd已经由于文件系统的问题而不连贯了,就不适合这里的原则了,为对付这种情况,你最好随时准备一张启动盘)。
  
    不同的运行级有不同的用处,也应该根据自己的不同情形来设置。
  
    例如,如果丢失了root口令,那么可以让机器启动进入单用户状态。在启动后的 lilo 提示符下输入:
  
    init=/bin/sh rw 使机器进入运行级1 ,并把 root 文件系统挂为读写。他会跳过所有系统认证,让你可以使用passwd 程序来改变root口令,然后启动到一个新的运行级。

名称:init
使用权限:开机时
使用方式:init [0123456Ss]
说明:init 是所有行程(process)的父行程(parent),开机时一定会先从这个指令开始(可以用 ps -aux 看看第一个行程就是 init),并参考 /etc/inittab 档来完成整个开机程序,共有八个执行层级(runlevel),而改变只能透过 telinit 的指令来更改
参数:
0 开机执行层级为 0 ,用来关闭系统
1 开机执行层级为 1 ,用来进行单一使用者模式(single user mode)
4 开机执行层级为 4 ,表示进入 X window 时的模式
6 开机执行层级为 6 ,用来重新开机
S 或 s 不是直接使用的,配合开机执行层级 1 时使用,当加上S 或 s 表示开机后不参考 /etc/inittab 档
   235 请参照 /etc/inittab 档案内容以及 /etc/rc.d/rc2.d,/etc/rc.d/rc3.d,/etc/rc.d/rc5.d 等目录
范例:
由于这并不是让使用者可以单独下指令的执行档,请参照 /etc/inittab


[Linux外设驱动详解]RK3588 平台 Linux 启动流程详解:从 U-Boot 到 init 进程 RK3588 Linux系统启动流程分析 本文档详细分析了RK3588平台的Linux系统启动流程,涵盖从U-Boot引导到内核初始化的完整过程。主要内容包括: U-Boot引导阶段: bootcmd环境变量定义启动命令序列 设备检测优先级(SD卡/eMMC/NAND等) bootm命令执行流程 bootargs参数传递机制 内核启动阶段: 设备树加载与处理 内存保留区域标记 内核参数解析(控制台、根文件系统等) 典型配置示例: bootcmd多阶段启动策略 bootargs参数格式解析 设备树二进制处理流 阅读详情

相关推荐

Linux-Android启动之Machine-Init函数

Linux/Android启动之Machine-Init函数前言:前面写过两篇Linux/Android的启动过程分析,这篇接着前两篇的知识点进行分析。Linux/Android的启动过程包括了很多内容,其中有些需要了解,有些则需要在系统移植的时候进行修改。本篇文章主要来讲述Machine-Init函数在系统启动过程中如何被调用的以及在何时被调用。Linux中的Machine-Init在功能和调用位置上类似于Win CE/ Windows Mobile中的OAL初始化函数OEMInit。一. 基础知识1. 

guopeixin的专栏 4759

Linux init详解

[size=large] 一、什么是INIT:[/size]        initLinux系统操作中不可缺少的程序之一。        所谓的init进程,它是一个由内核启动的用户级进程。        内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。所以,init始终是第...

horace_lee的专栏 200

电磁波函数复数表示法:为什么物理学家偏爱e^(ikz)而非cos(kr-wt)?

本文深入解析了电磁波函数复数表示法(如e^(ikz))相较于传统余弦形式的巨大优势。通过欧拉公式,复数形式将复杂的三角运算转化为简洁的指数运算,在微分、积分、线性叠加及处理相位时展现出极高的计算效率,是物理学家和工程师分析波动现象的核心工具。

weixin_29094539的博客 458

Linux 的module_init运行加载

Linux 的module_init运行加载 段说明 text段 代码段,通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定。 data段 数据段,通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。 bss段 通常是指用来存放程序中未初始化的全局变量和静态变量的一块内存区域。BSS段属于静态内存分配。 initlinux定义的一种初始化过程中才会用到的段,一旦初始化完成,那么这些段所占用的内存会被释放掉, kernel启动过程中打印的内存相关

南大侠的博客 513

Linux 动态加载并调用动态库(.so)方法介绍

linux动态库

enjoy.day 4万+

内核启动流程——init进程分析

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。

主要记录嵌入式学习与开发过程。 8015

win10开机加载卡顿,如何设置开机启动

b、将你想要的启动的程序或者路径或者文件夹等等都可以发送一个快捷方式到桌面,把这个快捷方式粘贴到刚才的路径文件夹中;C:\Users\改成指定的用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup;选择“启动”菜单选项,状态为“已启动”即为开机默认启动选项,对于启动选项为“高”的内容,建议禁止开机启动。C盘--ProgramData--Microsoft--「开始」--菜单---程序---启动。选择启动,打开任务管理器,

shangqiu100100的博客 1510

linuxinit进程的详解

init进程和init程序(linuxrc程序)是有区别的。init进程一开始就有,它运行于内核态,属于一个内核线程。后来init进程挂载根文件系统,并运行应用程序init程序后,init进程才从内核态转变为用户态。因为转变过程中进程号没有变,还是进程1,所以有人会把init程序(linuxrc程序)当做进程1。但其实init进程除了后来的init程序,还包括内核态下挂载根文件系统等操作。

m0_45406092的博客 6552

Linux 启动详解init

1.init初探 initLinux系统操作中不可缺少的程序之一。init进程,它是一个由内核启动的用户级进程,然后由它来启动后面的任务,包括多用户环境,网络等。 内核会在过去曾使用过init的几个地方查找它,它的正确位置(对Linux系统来说)是/sbin/init。如果内核找不到init,它就会试着运行/bin/sh,如果运行失败,系统的启动也会失败。...

baga20060514的博客 2024

Linux 启动详解init运行过程

Linux 启动详解init 1.init初探 initLinux系统操作中不可缺少的程序之一。init进程,它是一个由内核启动的用户级进程,然后由它来启动后面的任务,包括多用户环境,网络等。 内核会在过去曾使用过init的几个地方查找它,它的正确位置(对Linux系统来说)是/sbin/init。如果内核找不到init,它就会试着运行/bin/sh,如果运行失败,系统的启动也会失败。 ...

2273

Linux系列-1 Linux启动流程——init与systemd进程

init进程因串行化地启动程序,存在效率问题,且需要自定义脚本; systemd通过并行启动以及通过引入service配置文件,规避了上面两个问题。 ini使用service命令,systemd使用systemctl工具来管理,并且在操作上做了兼容处理(将service指令重定向到systemctl)

shengyu 8826

linuxinit 进程,Linux启动分析——init进程与app启动

概述本文通过简要分析init进程源码,梳理其处理流程,重点关注init进程如何启动应用程序,总结启动脚本文件的编写思路init进程源码分析init进程是linux内核启动的第一个进程,怎么知道的?从内核源码linux-2.6.xxx/init/main.c代码的kernel_init()函数分析,可以发现,内核会根据uboot传入的参数来启动第一个进程,一般都是init怎么启动的呢,调用kerne...

weixin_34348050的博客 595

WPS加载项开发和离线加载项本地安装方法、在线部署

介绍WPS加载项开发细节,以及加载项部署方式:本地安装离线加载项、把加载项部署到服务器的方法。介绍如何利用ribbon.xml文件自定义功能区、离线插件的网络请求,搭建简易的Express服务器,使用wpsjs开发工具包......

huaermeier的博客 2万+

linux 下的启动

/etc/profile 这个也是启动脚本.而且优先级很高哦.. 以下都是网上找来的 (1)编辑文件 /etc/rc.local 输入命令:vim /etc/rc.local 将出现类似如下的文本片段: #!/bin/sh## This script will be executed *after* all the other init scripts.# You can p...

1540

linux 程序运行时加载自己指定路径下的SO

export LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH 可以在执行的shell中加载, 先调用上面的命令 在执行可执行程序。

cddchina的专栏 3338

Linux 启动加载自己的驱动模块 .ko

原文地址::http://fgsink.blog.163.com/blog/static/16716997020107981857597/ 相关文章 1、Linux驱动的两种加载方式过程分析----http://www.2cto.com/os/201406/311006.html 2、Linux驱动的两种加载方式过程分析----http://www.linuxidc.com/Linu

xqhrs232的专栏 8260

linux 】添加开机启动项的方法|Linux目录结构和存放哪些文件

linux 添加开机启动项的三种方法。 编辑文件 /etc/rc.local /etc/rc.d/rc.local(和/etc/rc.local是同一个文件 输入命令:vim /etc/rc.local 将出现类似如下的文本片段: #!/bin/sh # # This script will be executed *after* all the other init scripts. #...

我的笔记本 7740

linux启动项加命令,启动项 命令(linux 添加开机启动项的三种方法)

启动项 命令(linux 添加开机启动项的三种方法),哪吒游戏网给大家带来详细的启动项 命令(linux 添加开机启动项的三种方法)介绍,大家可以阅读一下,希望这篇启动项 命令(linux 添加开机启动项的三种方法)可以给你带来参考价值。(1)编辑文件 /etc/rc.local输入命令:vim /etc/rc.local 将出现类似如下的文本片段:#!/bin/sh## This script ...

weixin_39926394的博客 2367

OpenClaw Manager Pro - 可视化管理工具

OpenClaw Manager Pro 是一个现代化的 Web 管理界面,用于管理多个 OpenClaw Gateway 实例。🎨美观的界面:深色主题,渐变设计,现代化 UI📡实时监控:WebSocket 实时推送状态和日志🔧完整管理:创建、编辑、删除、启动、停止 Gateway📊多渠道支持:飞书、Telegram、Discord、Slack、微信、钉钉🧩技能管理:可视化配置 61+ 个技能🌍跨平台:支持 macOS、Linux、Windows使用自定义模型系统会自动在中创建},

Maynor的博客 3040

可重构片上网络:双向NoC架构与优化

本书深入探讨了可重构片上网络(NoC)的技术,特别是双向NoC(BiNoC)架构的设计与优化。书中详细介绍了NoC的基本概念、分层结构及设计方法,并重点讨论了BiNoC架构如何通过动态自我重构双向通道来提高性能和资源利用率。此外,书中还提出了分布式通道方向控制协议,该协议能够智能地决定通道传输方向,从而避免死锁和饥饿现象。书中还涵盖了一系列QoS相关技术,包括性能优化、容错设计和能量感知任务调度等。这些技术不仅提高了系统的可靠性和效率,还在一定程度上减少了功耗。对于从事NoC研究与开发的专业人士来说,本书提供了宝贵的理论基础和实际应用案例,是一本不可多得的参考资料。

上一篇: Linux下解压命令大全 解压缩 tar bz2 zip tar.gz gz
下一篇: 解读linux内核源码的入门方法 [转]
junecau
博客等级 码龄19年 125粉丝 3原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值