linux 启动

启动一般为4个过程

1 不同CPU的firmware进行系统自举(bootstrap)
2 bootloader
3 操作系统内核的启动
4 系统启动

  bootstrap    

CPU加电后, 总要从某个固定地址开始执行第一条指令
目的:加载bootloader
不同CPU有不同的处理方式

bootloader

用来加载内核并为内核的运行提供环境

内核启动

如果是压缩格式的内核,需要首先解压。内核的入口地址:ENTRY标识 进行一系列处理跳转到start_kernel()

start_kernel具体为下面

页表初始化:paging_init( )

页描述符初始化:kmem_init( ), free_area_init( ), mem_init( )

异常和中断的初始化:trap_init( ), init_IRQ( )

内存初始化:kmem_cache_init( ), kmem_cache_sizes_init( )

时钟初始化:time_init( )

启动第一个系统进程(init):kernel_thread( )

 

 

最后一步系统启动

init: 内核启动后运行的第一个进程 ;所有其他进程都是init进程的子进程   ;内核启动后将启动一系列系统级进程并对系统进行一系列初始化:;加载文件系统,加载设备驱动程序,…;
启动系统日志,启动用户登录进程,…
其它应用级进程…

 

kernel/:内核的通用代码(比较重要)
sched.c module.c printk.c signal.c fork.c exit.c

时间: 2024-10-27 12:46:52

linux 启动的相关文章

Linux中修改linux启动方式(文本方式或xwindow方式)?

Linux中修改linux启动方式(文本方式或xwindow方式)? vi /etc/inittab 找到id:x:initdefault:一行,x=3为文本方式 x=5为xwindow方式,重启机器即可生效

如何查看和停止Linux启动的服务

1. 查看Linux启动的服务 chkconfig --list 查询出所有当前运行的服务 chkconfig --list atd  查询atd服务的当前状态 2.停止所有服务并且在下次系统启动时不再启动,如下所示: chkconfig --levels 12345 NetworkManager off 如果想查看当前处于运行状态的服务,用如下语句过滤即可 chkconfig --list |grep on 3.如果只是想当前的设置状态有效,在系统重启动后即不生效的话,可以用如下命令停止服务

《嵌入式 Linux应用程序开发标准教程(第2版)》——2.2 Linux启动过程详解

2.2 Linux启动过程详解 嵌入式 Linux应用程序开发标准教程(第2版) 在了解了Linux的常见命令之后,下面详细讲解Linux的启动过程.Linux的启动过程包含了Linux工作原理的精髓,而且在嵌入式开发过程中非常需要这方面的知识. 2.2.1 概述 用户开机启动Linux过程如下: (1)当用户打开PC(intel CPU)的电源时,CPU将自动进入实模式,并从地址0xFFFF0000开始自动执行程序代码,这个地址通常是ROM-BIOS中的地址.这时BIOS进行开机自检,并按BI

关于Linux启动时挂载rootfs的几种方式

一直对Linux启动时挂载根文件系统的过程存在着很多疑问,今天在水木精华区找到了有用的资料,摘录如下: 1.Linux启动时,经过一系列初始化之后,需要mount 根文件系统,为最后运行init进程等做准备,mount 根文件系统有这么几种方式: 1)文件系统已经存在于硬盘(或者类似的设备)的某个分区上了,kernel根据启动的命令行参数(root=/dev/xxx),直接进行mount. 这里有一个问题,在root文件系统本身还不存在的情况下,kernel如何根据/dev/xxx来找到对应的设

从linux启动到rootfs的挂载分析

简单的来说,根文件系统包括虚拟根文件系统和真实根文件系统.在Kernel启动的初始阶段,首先去创建虚拟的根文件系统,接下来再去调用do_mount来加载真正的文件系统,并将根文件系统切换到真正的文件系统,也即真实的文件系统. 一.什么是根文件系统 在传统的Windows机器上目录结构中,可能会包括C:或者D:盘,而他们一般就称之为特定逻辑磁盘的根目录.从文件系统的层面来说,每一个分区都包含了一个根目录区,也即系统中存在多个根目录. 但是,在Linux系统中,目录结构与Windows上有较大的不同

看Linux启动时屏幕的显示信息

看Linux启动时屏幕的显示信息,我们在启动完毕后可以使用命令dmesg查看. 示例如下: [root@localhost /]# dmesg pci_bus&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;0000:1f: resource 2 [mem 0xd9d00000-0xd9dfffff 64bit pref]  pci_bus 0000:20: resource 1 [mem 0xcbb00000-0x

定制和监视比较不同的Linux启动机制

您可以将 Linux 系统启动过程(从启动电源到让系统完全运行)看作两个概念性阶段: 从设备引导,加载并初始化 Linux 内核 启动用户空间应用程序(包括服务器进程),挂载另外的文件系统,执行另外的内核配置与定制项,并提供对额外设备的访问权限 第一阶段中的基本步骤已经在名为 "深入理解 Linux 的启动过程" 的 developerWorks 文章中讲述过了.这些步骤多年来变化不大,包括使用 GRand Unified Bootloader 2 (GRUB 2),初始 RAM 磁盘

linux启动过程故障排除

linux机器的启动过程: 开机自检(BIOS)---> MBR引导---> GRUB菜单---> 加载内核(kernel)---> 运行INIT进程 全部过程可以主要分为两个过程:MBR引导和grub 第一阶段失效: NBR引导区域一共只有446个字节,所以当它出现问题时,grub菜单是没法见到的,所以我们来模拟这个问题 使用如下的命令我们可以将开机是启动的446个字节给覆盖住,重启 此时开机的界面变成这样,硬盘启动不了,说明它要用PXE引导,但是起不来 这时候我们要使用光盘引导

Linux启动系统及故障排除

一:Linux的启动过程: 开机加电自检->MBR引导(boot loader占446字节,分区列表64字节,magic占2字节)-->grub菜单(MBR是grub的第一个字段,第二个字段存在于/boot/grub/中)-->加载内核kernel-->启动第一个进程init-->找到初始化脚本/etc/inittab,这个文件中有默认的级别-->找到该级别相关的启动脚本(比如/etc/rc.d/rc.sysinit,然后找到级别3,读取/etc/rc3.d)-->

linux启动过程

本文转载于阮一峰的博客,写的非常清晰,转载收藏: 原文网址:http://www.ruanyifeng.com/blog/2013/08/linux_boot_process.html 这个部分比较有意思.因为在BIOS阶段,计算机的行为基本上被写死了,程序员可以做的事情并不多:但是,一旦进入操作系统,程序员几乎可以定制所有方面.所以,这个部分与程序员的关系更密切. 我主要关心的是Linux操作系统,它是目前服务器端的主流操作系统.下面的内容针对的是Debian发行版,因为我对其他发行版不够熟悉