
1、内核引导
首先是bios自检,按照bios设置的启动设备(通常是硬盘)来启动。
*** 作系统接管硬件后,首先读入/boot目录下的内核文件。
2、运行init
init进程是所有进程的起点,init程序首先要读取配置文件/etc/initlab
许多程序需要开机启动,在windows叫服务,在linux叫做守护进程。
init进程的一大任务就是去运行这些开机进程。但是不懂情况需要运行的进程也不一样,如果作服务器就需要运行apache,如果个人使用则不需要。
所以linux允许不同情况运行不同的开机程序,这个叫做运行级别。
/etc/fstab是Linux系统中用于存储文件系统挂载信息的重要配置文件,如果系统启动时不加载/etc/fstab,则可能会导致文件系统无法正确挂载,从而影响系统的正常运行。以下是一些可能的原因和相应的解决方法:
1. 系统检测到/etc/fstab文件内容有错误或格式不正确,导致系统启动时不加载该文件。此时,可以通过编辑/etc/fstab文件并修复错误或格式问题,然后重启系统来解决问题。
2. 系统启动时没有加载设备驱动程序或模块,导致无法访问/etc/fstab文件中定义的设备。此时,可以通过检查所需的模块是否正确加载或按照硬件设备的适当配置来解决问题。
3. 启动脚本或系统配置文件中包含了不正确或不完整的信息,导致系统启动时不加载/etc/fstab文件。此时,可以通过检查相关的配置文件以确认是否正确配置,或者尝试替换这些文件,然后重启系统以解决问题。
总之,如果系统启动时不加载/etc/fstab文件,一般是由于文件本身存在问题,或者其他相关配置文件存在问题导致的。建议检查这些问题并进行相应的修复。
在Linux内核中,使用 vmlinux.lds.S 文件(路径: arch/arm64/kernel/ )布局内核映像中相关段(例: .text、.data )的位置。
在Linux内核编译时, vmlinux.lds.S 文件最终会被构建成链接脚本 vmlinux.lds 文件(路径: arch/arm64/kernel/ )。
本文主要介绍Linux内核程序运行的起始位置 _text ,在 vmlinux.lds.S 文件中定义如下:
从上面可以看出: _text = KIMAGE_VADDR + TEXT_OFFSET 。
1、KIMAGE_VADDR定义
文件: arch/arm64/include/asm/memory.h ,定义如下:
文件: include/linux/sizes.h ,定义如下:
宏 KIMAGE_VADDR 展开如下:
上面是按照无符号计算, KIMAGE_VADDR 为: 0xFFFFFF8008000000 。
2、TEXT_OFFSET定义
文件: arch/arm64/Makefile ,定义如下:
通过计算, _text 值为: 0xFFFFFF8008080000 。
在Linux内核启动时,从 log 信息中也可以找到对应的地址:
_text 对应的是虚拟地址 , 在内核中可以直接通过访问该地址获取其保存的值 ,其对应 Image 映像中的第一个字 0x14424000 。
Image 映像查看方法如下:
本文基于 RockPI 4A 单板Linux 4.4内核。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)