首页
学习
活动
专区
工具
TVP
发布

Linux启动引导程序(GRUB)加载内核过程

我们知道启动引导程序(Boot Loader,也就是 GRUB)会在启动过程中加载内核,之后内核才能取代 BIOS 接管启动过程。如果没有启动引导程,那么内核是不能被加载的。...本节,我们就来看看启动引导程序加载内核过程,当然 initramfs 这个虚拟文件系统也是要靠启动引导程序调用的。...GRUB加载内核过程GRUB 的作用有以下几个:加载操作系统的内核;拥有一个可以让用户选择的的菜单,来选择到底启动哪个系统;可以调用其他的启动引导程序,来实现多系统引导。...那么 Linux 的解决办法是把 GRUB 的程序分成了三个阶段来执行。...接下来内核就可以接管启动过程,继续自检与加载硬件模块了。

16220
您找到你想要的搜索结果了吗?
是的
没有找到

深入理解 Linux 启动过程 | QEMU 启动 linux 内核和自制根文件系统

跟我一起来到故事开始的地方,深入 Linux 系统的启动流程,自己编译内核并制作根文件系统,并使用 QEMU 模拟启动。 前置知识# 昨天看到阮老师两篇文章 《计算机是如何启动的?》...说明:本文介绍的方法同样可用于内核调试,但侧重于介绍 使用 QEMU 模拟 Linux启动流程 。...根文件制作过程如果是采用了 方案一 ,使用下面命令启动: $ qemu-system-x86_64 -s \ -kernel ....By 阮一峰 BusyBox By Wikipedia 第一步,用qemu启动linux内核,从跑个Helloworld开始 在qemu上运行BusyBox 编译内核出现:cc1: error: code...Linux内核 QEMU + Busybox 模拟 Linux 内核环境 Qemu 模拟环境 By CTF Wiki Linux 内核编译步骤及配置详解 注:本作品采用 知识共享署名-非商业性使用-相同方式共享

1.4K30

Linux内核启动参数详解

1.环境: Ubuntu 16.04 Linux linuxidc 4.4.0-89-generic #112-Ubuntu SMP Mon Jul 31 19:38:41 UTC 2017 x86_64...x86_64 x86_64 GNU/Linux 2.查看当前linux内核启动参数: cat /proc/cmdline 笔者的输出内容如下: BOOT_IMAGE=/boot/vmlinuz-4.4.0...-4202-4513-b39b-cde6a5d9753f :这一串可以用root=/dev/sda1(假如根文件系统在第一个分区)来代替,但是不能用root=(hd0,msdos1)来代替 ro : 启动时以只读方式挂载根文件系统...所以去掉此项将会迎来很多打印信息 splash: 显示开机动画 vt.handoff=7 : 图形界面会去使用tty7,此项用来禁止splash占用tty7,因此如果将splash参数去掉,此项就无效了 4.添加新的启动参数...update-grub命令无法满足更细致的内核参数修改需求

5.4K20

Linux内核编译过程详解

前言 Linux内核Linux操作系统的核心,也是整个Linux功能体现的核心,就如同发动机 在汽车中的重要性。内核主要功能包括进程管理、内存管理、文件管理、设备管理、网络管理等。...Linux内核是单内核设计,但却采用了微内核的模块化设计, 支持内核线程以及动态装载内核模块的能力。 Linux作为一个自由软件,在广大爱好者的支持下,内核版本不断更新。...内核编译之编译安装 编译时如果是远程连接,一旦断开连接,编译就会出问题。所以我们可使用screen命令(需安装),启动多个窗口,即使连接中断,编译也不会终止。...查看grub.conf配置文件,会发现新内核的信息已经写入了 ? 以新内核启动 ? 查看新内核版本 ?...path/to/dir只编译一个模块:make path/to/dir/MOD_NAME.ko将编译生成的文件保存至别处:make O=/path/to/somewhere The end 好了,内核编译的过程就是这样了

9.3K100

Linux内核21-Linux内核的中断处理过程

图4-4展示了处理中断的过程原理图。其中的函数,后面描述。 中断向量表 在表4-2中,我们列出了IRQ的分配,中断号对应32-238。另外,Linux使用中断号128实现系统调用。...为了统一处理这些硬件,Linux内核使用了面向对象的编程思想,构建了一个PIC对象,包含PIC名称和7个PIC标准方法。...因此,Linux2.6内核使用一个特定的内核线程叫kirqd进行纠正IRQ的自动分配(如果有必要的话)。...设置IRQ_INPROGRESS标志,并启动循环处理。每次迭代过程,清除IRQ_PENDING标志,释放中断自旋锁,然后执行调用handle_IRQ_event()执行中断服务程序。...比如我们以Linux4.4.203内核对于中断的处理为例,与上面的处理过程进行比较,理解其主要变化。 调用do_IRQ函数。其入口位于entry_32.S文件中,是C语言实现的。

2.1K20

Linux内核20-Linux内核的异常处理过程

异常处理的基本过程 当异常发生时,Linux内核给造成异常的进程发送一个信号,告知其发生了异常。...但是,除了这些常规的异常以外,Linux有时候会特意利用某些CPU异常管理硬件资源。...比如,可以使用Device not available这个异常,结合cr0寄存器中的TS标志,强迫内核重新加载CPU的浮点寄存器,从而更新最新的值。...异常处理程序基本上都是下面这样的代码:(所有的异常和中断处理函数都可以在linux\arch\x86\entry\entry_32.S文件中找到) handler_name: pushl $0...如果进程是在用户态,则信号交给进程自身的信号处理程序(如果存在的话);如果是在内核态,则内核通常会杀死进程。 最后异常处理程序跳转到ret_from_exception()函数地址处,从异常状态返回。

1.3K70

linux启动过程解析

Linux中,Boot Loader通常安装在硬盘的MBR (Master Boot Record)或EFI系统分区。...当Boot Loader加载内核后,内核会开始初始化硬件设备和文件系统,并启动第一个用户空间进程——init进程。...内核初始化的过程包括以下几个步骤: 加载驱动程序:内核会加载与硬件设备对应的驱动程序,并初始化这些设备。驱动程序通常存储在内核模块中,可以在运行时加载和卸载。...初始化文件系统:内核会检查和挂载根文件系统,以便系统可以访问文件和目录。根文件系统通常在内核中硬编码。 启动init进程:内核会在用户空间启动第一个进程——init进程。...init进程是所有进程的祖先进程,它负责启动和管理所有其他进程和服务。 建立内存映射:内核会将物理内存映射到虚拟内存空间中,并为每个进程分配一定的虚拟内存空间。

1.3K30

Linux内核内核模块)的加载过程(超详细)

GRUB 加载了内核之后,内核首先会再进行二次系统的自检,而不一定使用 BIOS 检测的硬件信息。这时内核终于开始替代 BIOS 接管 Linux启动过程了。...vmlinuz-2.6.32-279.el6.i686#用于启动Linux内核。...如果 Linux 安装在 IDE 硬盘之上,并且采用的是默认的 ext3/4 文件系统,那么内核启动后加载根分区和模块的加载都没有什么问题,系统会顺利启动。...但是,如果 Linux 安装在 SCSI 硬盘之上,或者采用的是 LVM 文件系统,那么内核内核载入内存是启动引导程序 GRUB 调用的,并不存在硬盘驱动不识别的问题)在加载根目录之前是需要加载 SCSI...它们的作用类似,可以通过启动引导程序加载到内存中,然后会解压缩并在内存中仿真成一个根目录,并且这个仿真的文件系统能够提供一个可执行程序,通过该程序来加载启动过程中所需的内核模块,比如 USB、SATA.

18820

Linux系统修改默认内核启动顺序

grub2-set-default "CentOS Linux (3.10.0-123.9.3.el7.x86_64) 7 (Core)" 3、执行如下命令,确认配置成功。...2、在grub.conf文件中决定开机使用哪个内核版本做启动的参数是default,默认值为0,代表从最新的内核启动。代表启动内核版本从上往下依次是0、1、2等。...3、如果要选择从旧版内核,即系统最开始的内核启动,则把default值改为1 ,然后重启服务器从新的内核进行引导。...三、centos8修改内核启动顺序 1、查看默认内核 grubby --default-kernel 2、 查看所有内核 grubby --info=ALL 3、修改默认启动内核 grubby --set-default...=0 ##修改为 GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 4.4.0-31-generic" 3、更新修改后的grub

8K20

Linux内核有没有rootfs,Linux内核rootfs的初始化过程

由于在下水平相当有限,不当之处,还望大家批评指正^_^ 在Linux shell中执行mount命令,通常可以看到某个做了文件系统的磁盘分区或flash分区或内存文件系统做为所谓的根文件系统被mount...实际上内核中最初始的根文件系统,并不是来自内核外部,他是由内核自己构建出来的。 为了说明这个过程,我们先说说mount的过程。...这个过程感觉挺复杂,在下对其代码实现理解得也很有限^_^ 不过,可以通过open系统调用的实现,看到内核遍历路径的过程中,是如何转向被挂载的文件系统内部的。...vfs_kern_mount加载了一个文件系统到内核中。...如果ramdisk_execute_command指向的init程序不可访问, 就进入prepare_namespace,但是这个过程涉及到内核命令行参数中与rootfs有关的内容。

2K20

linux内核移植过程问题总结

make zImage以此为依据 配置内核过程: cd linux-2.6.30.4(进入Linux根目录) cp arch/arm/configs/s3c2410_defconfig /linux-...=arm-linux- 1,make s3c2410_defconfig(生成.config) 2,make zImage 即可生成压缩内核印象 uboot引导内核,入口点必须为0x30008000...XP,用supervivi的a命令下载,开关拨到nand启动 uImage和根文件系统,考到tftp的收发文件夹,使用tftp服务传送 在u-boot命令行下输入:(自启动的将内核读入内存) set...boot命令参数,不输入则默认内核的boot参数 内核启动yaffs2文件系统: uboot命令行下输入: set bootargs noinitrd root=/dev/mtdblock3 init...write.yaffs2 0x30008000 0x00580000 rootfs的大小 //将内存0x30008000处的内容写入到nand的0x00380000处 重启开发板(reset命令),完成内核启动

3.5K20

Linux 系统启动过程

Linux 系统启动过程 linux启动时我们会看到许多启动信息。 Linux系统的启动过程并不是大家想象中的那么复杂,其过程可以分为5个阶段: 内核的引导。 运行 init。 系统初始化。...---- 内核引导 当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。 操作系统接管硬件以后,首先读入 /boot 目录下的内核文件。...运行级别 许多程序需要开机启动。它们在Windows叫做"服务"(service),在Linux就叫做"守护进程"(daemon)。 init进程的一大任务,就是去运行这些开机启动的程序。...但是,不同的场合需要启动不同的程序,比如用作服务器时,需要启动Apache,用作桌面就不需要。 Linux允许为不同的场合,分配不同的开机启动程序,这就叫做"运行级别"(runlevel)。...Linux系统有7个运行级别(runlevel): 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆 运行级别

2.7K00

Linux 系统启动过程

IOS/UEFI阶段计算机通电,BIOS或UEFI启动。进行硬件初始化、POST(Power-On Self-Test)自检,检查设备的可用性。BIOS/UEFI查找启动设备,并加载引导加载程序。...引导加载程序阶段引导加载程序(如GRUB)加载内核映像文件到内存。提供引导菜单,用户可以选择不同的内核或操作系统。引导加载程序将控制权交给操作系统内核。...内核启动阶段内核被加载到内存中,解压缩,并进行初始化。内核初始化系统硬件、建立内存管理、设置中断服务等。内核创建第一个用户空间进程(init或者其他初始化管理器如systemd)。...用户空间初始化阶段初始化管理器接管控制,启动系统服务和守护进程。系统初始化阶段可能包括加载共享库、配置网络、挂载文件系统。...用户输入凭据,登录管理器验证身份,启动用户会话。用户登录阶段登录后,系统加载用户配置文件、启动用户级别的进程。图形界面或命令行界面最终,系统进入用户的桌面环境或命令行终端。

11121

Linux 系统启动过程

linux启动时我们会看到许多启动信息。 Linux系统的启动过程并不是大家想象中的那么复杂,其过程可以分为5个阶段: 内核的引导。 运行 init。 系统初始化。 建立终端 。 用户登录系统。...---- 内核引导 当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。 操作系统接管硬件以后,首先读入 /boot 目录下的内核文件。...运行级别 许多程序需要开机启动。它们在Windows叫做"服务"(service),在Linux就叫做"守护进程"(daemon)。 init进程的一大任务,就是去运行这些开机启动的程序。...但是,不同的场合需要启动不同的程序,比如用作服务器时,需要启动Apache,用作桌面就不需要。 Linux允许为不同的场合,分配不同的开机启动程序,这就叫做"运行级别"(runlevel)。...Linux系统有7个运行级别(runlevel): 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆 运行级别

2.6K30

Linux系统启动过程

原文:https://www.runoob.com/linux/linux-system-boot.html Linux 系统启动过程 linux 启动时我们会看到许多启动信息。...linux 启动时我们会看到许多启动信息。 Linux 系统的启动过程并不是大家想象中的那么复杂,其过程可以分为 5 个阶段: 内核的引导。 运行 init。 系统初始化。 建立终端 。...内核引导 当计算机打开电源后,首先是 BIOS 开机自检,按照 BIOS 中设置的启动设备(通常是硬盘)来启动。 操作系统接管硬件以后,首先读入 /boot 目录下的内核文件。...运行级别 许多程序需要开机启动。它们在 Windows 叫做 "服务"(service),在 Linux 就叫做 "守护进程"(daemon)。...Linux 允许为不同的场合,分配不同的开机启动程序,这就叫做 "运行级别"(runlevel)。也就是说,启动时根据 "运行级别",确定要运行哪些程序。

3.2K30

Linux 系统启动过程

linux启动时我们会看到许多启动信息。 Linux系统的启动过程并不是大家想象中的那么复杂,其过程可以分为5个阶段: 内核的引导。 运行 init。 系统初始化。 建立终端 。 用户登录系统。...---- 内核引导 当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。 操作系统接管硬件以后,首先读入 /boot 目录下的内核文件。...运行级别 许多程序需要开机启动。它们在Windows叫做"服务"(service),在Linux就叫做"守护进程"(daemon)。 init进程的一大任务,就是去运行这些开机启动的程序。...但是,不同的场合需要启动不同的程序,比如用作服务器时,需要启动Apache,用作桌面就不需要。 Linux允许为不同的场合,分配不同的开机启动程序,这就叫做"运行级别"(runlevel)。...Linux系统有7个运行级别(runlevel): 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆 运行级别

2.5K20

Linux学习笔记之Linux启动引导过程

尽管目前的计算机已经装备了很多工具来简化引导过程,但是这一切并没有对整个过程进行必要的简化。 让我们先从高级的视角来查看 Linux 引导过程,这样就可以看到整个过程的全貌了。...这就是 Linux 引导的整个过程。现在让我们深入挖掘一下这个过程,并深入研究一下 Linux 引导过程的一些详细信息。 系统启动 系统启动阶段依赖于引导 Linux 系统上的硬件。...然后该例程会调用内核,并开始启动内核引导的过程。 当 bzImage(用于 i386 映像)被调用时,我们从 ....在桌面 Linux 系统上,第一个启动的程序通常是 /sbin/init。但是这不是一定的。...在很多情况下,我们可以调用一个简单的 shell 脚本来启动必需的嵌入式应用程序。 结束语 与 Linux 本身非常类似,Linux 的引导过程也非常灵活,可以支持众多的处理器和硬件平台。

10.4K41
领券