欢迎来到皮皮网网首页

【山东系统开发源码交付】【pbft改进源码】【源码编译排错】init源码解析

来源:怎么看flash源码 时间:2024-12-24 04:02:55

1.【Busybox】Busybox源码分析-02 | init程序
2.Linux内核|驱动模型initcall和module_init
3.引导Linux系统的源码Init文件及其作用linuxinit文件
4.Vue 源码解读(2)—— Vue 初始化过程

init源码解析

【Busybox】Busybox源码分析-02 | init程序

       在Linux内核启动后期,init线程执行的解析第一个用户空间程序是init,这个程序在Busybox源码中的源码实现由/init目录下的init.c编译而成,其入口点为init_main()。解析在init_main()函数中添加了标识代码,源码验证了这一过程。解析山东系统开发源码交付实际上,源码当Busybox编译安装后,解析会通过链接指向../bin/busybox来执行init。源码

       分析init程序,解析当CONFIG_FEATURE_USE_INITTAB配置启用时,源码会依据/etc/inittab文件中的解析配置进行操作;若文件不存在或未启用该配置,init将执行默认行为,源码如运行INIT_SCRIPT和启动"askfirst" shell。解析而BusyBox的源码init不支持运行级别,sysvinit是需要的选项来处理运行级别管理。

       Linux支持7个运行级别:

       0:停机状态,等同于关机,pbft改进源码不可作为默认运行级别。

       1:单用户模式,用于系统维护,禁止远程登录。

       2:多用户无网络模式。

       3:多用户有网络模式,常见运行级别。

       4:保留,未使用。

       5:X图形界面,登录后进入。

       6:正常关闭并重启,同样不能作为默认运行级别。

       可以通过runlevel命令查看当前运行级别,如在Ubuntu系统中,运行runlevel命令会显示当前的运行级别。

Linux内核|驱动模型initcall和module_init

       内核版本:Linux-6.1

       文章目录汇总:所有文章目录 - 知乎 (zhihu.com)

       模块初始化的源码编译排错宏观:module_init

       在Linux内核开发和驱动开发中,module_init 是一个常见的宏,定义在 include/linux/module.h 文件中。它的实现会根据是否定义了 MODULE 宏有所不同,这决定了驱动是与内核编译到一起,还是单独编译为.ko文件。

       MODULE 的定义通常通过编译时的参数传递,可通过查看 Makefile 文件,如在编译.ko时使用特定的编译选项,而链接到内核时则不会使用这些选项。

       未使能 MODULE 情况下,module_init 实际上是作为特殊 initcall,用于声明初始化函数并控制函数调用顺序。initcall 有多个级别,module_init 实际对应于 device_initcall,级别为 6。initcall 会在编译时声明一个 initcall_t 类型的静态变量,并放入内核的准确指标源码 .init.data 段。

       initcall 的实现和行为可以通过查看 arch-linux-gnu-nm -n vmlinux 命令的输出进行分析。以 __initcall__kmod_cpuinfo____cpuinfo_regs_init6 为例,这个 initcall_t 类型的静态变量的名称和行为可从 __initcall_name 和 __initcall_id 的输出得出。

       rootfs_initcall 在 5 秒后被调用,它在 do_basic_setup 中执行,需要在此之前将存储介质准备好,如读取文件系统镜像。

       console_initcall 用于尽早输出日志,其初始化函数在 console_init 中调用,而 console_init 尽量选择较早时机进行。

       链接脚本中,initcall 声明的变量放入以 .initcall 开头的段中,每个级别对应一个段,并按顺序放入 .init.data 段。

       initcall 的执行时机包括 do_pre_smp_initcalls 和 do_basic_setup,前者在多核处理器和调度系统初始化之前执行,后者按 initcall 级别依次执行指定函数。spyder 源码语言链接时和多次编译的顺序可能影响同级别 initcall 的执行顺序。

       当 MODULE 使能时,Linux 中的某些模块可选择链接到内核或编译为.ko文件。initcall 宏被定义为 module_init 以兼容两者。分析 module_init 实现,可以参考《module_init 源码》。

       __inittest:代码中未找到调用地方,但从 v2.6.0 对 module_init 的注释推测,可能是为了防止编译器警告。

       init_module 是 initfn 的别名,具有相同的地址,通常为静态函数,而 init_module 为全局函数。在命令行使用 insmod 或 modprobe 安装模块时,系统最终调用 init_module 或 finit_module。

       init_module 和 finit_module 用于从用户态加载.ko文件,查看 man 2 init_module 可以了解这两个函数的具体使用。

       加载模块的流程最终会调用 load_module,其流程如下。

引导Linux系统的Init文件及其作用linuxinit文件

       Init文件是Linux系统中的一个重要的系统启动文件,主要用于控制操作系统初始化所执行的系统服务,它扮演着操作系统启动过程中一个很重要的角色。

       Linux系统中的Init文件位于/etc/init.d/文件夹下面,它是操作系统系统设定的初始化文件,其中涉及系统启动、运行和停止的全部程序。它不像一般的脚本文件,它的格式与机器类型有关,而且它的每一行文本都有特定的含义,记录了每一步引导Linux系统的步骤和执行程序,它主要包括如下几个部分:

       1、 开机启动:当Init文件被执行时,它会启动操作系统所需要的核心部分,包括内存管理器,文件系统,进程管理器,设备驱动程序以及网络服务等。

       2、 配置文件:Init文件中还会存放系统配置文件,例如登录脚本,shell环境设定文件,时间同步脚本等。

       3、 服务控制:Init文件还可以控制系统服务的启动、停止、重启等操作,可以使系统更加稳定。

       除了以上这些,Init文件还有一系列的脚本,控制自定义的系统服务,可以根据使用环境的不同来安装或卸载系统服务,这些脚本文件可以位于/etc/init.d/文件夹下,也可以位于/etc/rc.d/文件夹或者是/etc/rc.local文件中,这将丰富我们对系统管理操作的灵活性。

       总之,Linux系统中Init文件是系统引导的核心,它负责控制操作系统初始化所执行的服务,以及源码文件的配置等。它的作用不仅在操作系统的引导过程中,它还可以通过shell脚本控制运行系统时自定义的系统服务,从而大大提升系统运行的稳定性和性能。

Vue 源码解读(2)—— Vue 初始化过程

       深入理解 Vue 的初始化过程,揭开面试官心中疑惑,new Vue(options) 的神秘面纱。

       寻找入口,确定 Vue 的构造函数在 /src/core/instance/index.js 文件中,采用示例代码和调试功能逐步探索。

       阅读源码,从 Vue.prototype._init 开始,了解 Vue 初始化过程,逐步解析构造函数中的各项操作。

       源码解读:从 /src/core/instance/init.js 看起,解析 resolveConstructorOptions、resolveModifiedOptions 等关键方法,逐步深入。

       优化选项合并,理解 mergeOptions 方法如何确保配置选项的正确整合。

       注入和提供,从 initInjections、resolveInject、initProvide 等方法中学习 Vue 如何处理组件之间的依赖关系。

       总结 Vue 的初始化流程,从构造函数到选项解析,再到组件注入与提供,全面掌握初始化过程。

       感谢各位的点赞、收藏和评论,期待与您的下期见面。

       学习之路永无止境,知识与习惯相伴相随。感谢您的支持与关注。

       新视频和文章会第一时间在微信公众号发送,欢迎关注:李永宁lyn。

       文章已收录到 github 仓库 liyongning/blog,欢迎 Watch 和 Star。