文档库 最新最全的文档下载
当前位置:文档库 › linux启动顺序分解

linux启动顺序分解

linux启动顺序分解
linux启动顺序分解

一、简单介绍RHEL开机时的先后顺序

BIOS —> MBR —> Kernel —> init

1、当电脑一打开电源时电脑就会进入BIOS(BIOS的工作主要是检测一些硬件设备);

2、检测完后会进入MBR也就是boot loader(MBR位于硬盘的第一个扇区总共512bytes,其中前446bytes里面的编码是在选择引导分区也就是决定要由哪个分区来引导);

3、载入系统的Kernel(核心),在Kernel里主要是载入电脑设备的驱动程序,以便可以控制电脑上的设备,并且以只读方式来挂载根目录,也就是一开始只能读取到根目录所对应的那个分区,所以/etc、/bin、/sbin、/dev、/lib这五个目录必须同根目录在一个分区中;

4、最后启动init这个程序,所以init这个程序的进程编号为1,是Linux中第一个执行的程序;

init这个程序会根据Run level来执行以下这些程序:

·/etc/rc.d/rc.sysinit;

·/etc/rc.d/rc 和etc/rc.d/rc?.d/

·/etc/rc.d/rc.local

·如果有适当的图形界面管理程序

二、BIOS初始化时主要的三个任务

BIOS(B asic I nput/O utput S ystem)

1、电脑周边设备的检测,加电自检POST (Power on self test);

2、BIOS会选择要由哪一个设备来开机,例如:软盘启动、光盘启动、网络启动、最常见的从硬盘启动;

3、选择好由哪个设备开机后,就开始读取这个设备的MBR 引导扇区;

三、介绍Boot Loader中的主要工作

1、Boot Loader可以安装在两个地方:

·安装在硬盘的MBR中;

·当有时候MBR中被其他开机管理程序占用就可以将Boot Loader 安装在硬盘中的其中一个分区的引导扇区上,;

2、Boot Loader的程序码分为两个阶段:

(1)Boot Loader第一阶段的程序码非常小,只有446bytes,可以存入在MBR或是某一个分区的引导扇区里,

(2)Boot Loader第一阶段的程序码是从boot 分区来载入的,就是说Boot Loader 第二阶段程序码存放在/boot 这个分区中;

3、下面来看三个Boot Loader 的开机流程范例,如在一块硬盘中安装了两个系统分别为:windows 2003 和Red hat linux

当电脑开机后,会先载入MBR通过第一阶段程序码来载入第二阶段程序码,进入GRUB开机菜单这里选择哪个系统就会载入相应的核心;

四、介绍GRUB和grub.conf 这个配置文件的内容

其实从MBR载入Boot Loader开始,载入Kernel,载入init这些程序之间都是由GRUB这个多重开机管理程序所负责的。

1、GRUB (GR and U nified B ootloader)拥有以下特性:

· GRUB的开机管理程序可以在开机提示字元的界面下输入指令;例如在GRUB界面下可以按C键就会来到以grub> 开头的提示符来输入据指令;

· GRUB的开机管理程序可以支持以下几种文件系统:ext2/ext3、ReiserFS、JFS、FAT、minix、FFS 等等;

·支持MD5的密码来保护GRUB的配置文件;

2、/boot/grub/grub.conf这个配置文件是GRUB 的配置文件,在做修改前推荐先做好备份

下面来介绍这个配置文件的内容以及里面的语法:

·以#开头的行为注解执行时不会使用;

·可以以title开头的一行为准,分为上下两部分:

(1)基本设定:

(2)用于区分多个系统的设定,如果这台主机中还安装了其它系统并设定了多重启动,在这里还可以看到其它系统的设定;

4、另外,如果硬盘上的MBR被清除掉了,可使用下面的指令来重新安装boot loader 到MBR中:

/sbin/grub-install /dev/hda

5、介绍进入GRUB的开机管理程式可以做哪些动作(开机前改Kernel的参数)

(1)开机后在进入GRUB界面后,先选择要使用的系统(这里选择Linux)

(2)按下a键,可以在开机修改Kernel的参数,也就是可以传一个参数给Kernel;这时可以看到下面这个界面

(3)上图中root=LABEL=/ 这部分不可以动,将后面的都去掉后,先输入一个空格再输入一个1,如下图:

这个1 就是附加的一个参数,表示要进入单用户模式,不需要输入root密码就可以以root身份登录;(4)当进入到#提示字元时,就可以设定root 密码了。

这时会发现一个问题任何人到主机前都可以通过这种方式修改ROOT密码是很不安全的。

6、为GRUB进入单用户模式设定密码及加密方法:

在GRUB的设定档中设定密码,以防止非法者以单用户模式进入。

(1)编辑grub.conf配置文件,在基本设定的部分里,插入一行password 123456来设定密码,这里是将密码设定为123456 。

(2)当重新开机后,在GRUB的菜单中,需要输入P ,再输入密码才可以进行下一步,选择其它的模式。

(3)可以发现上面设定的密码是明文的,在GRUB中是可以对这个密码进行加密的,如下图:

注:grub-md5-crypt这个指令在设定一个加密的密码的时候,就算每次输入的密码相同经加密后也是不同的,所以上面的几组密码都不一样,grub-md5-crypt >> /boot/grub/grub.conf 这行指令在执行后不会你上面那样会提示出输入两次密码,虽然没有提示但还是可以输入的,每输入一次密码按一次回车,等设定好密码后,再打开grub.conf文件时,就会发现经过加密的密码就追加到了grub.conf 文件中去了,将追加文件中的前二行去掉,第三行就是要使用的密码了,然后就像上图中那样进行设定,等上面的设定好后,一定要删除掉最后三行的内容,不然会出错的。

password –-md5 这里面的md5 表示后面使用的密码是经过md5加密的。

7、在进入系统前,按E键进入命令编辑模式,来修改引导配置文件

在GRUB菜单选择时,按"e"键,就可以看到所对应系统的三行grub.conf中的配置参数,选择有错误的一行,再按"e"键,可修改这一行:

如下图:选择了第二行,按E键,就可以修改这行内容了,这里只是未了举例子,将正常启动的一行改为了要使用单用户模式启动,修改完成后按回车,返回上一界面,再按"b"键,使用编辑后的设定开机。

五、介绍Kernel初始化时所做的工作

Kernel在开机时,有以下四项工作:

1、检测电脑上的硬件设备;

2、将检测到的硬件驱动程序载入Kernel;

3、如果必要的驱动载入后Kernel 将根目录以只读方式挂载进来;

4、Kernel载入第一个程序init 这个程序;

六、介绍init 这个程序在初始化时做了哪些工作

init 程序读取的是/etc/inittab 这个配置文件来决定要做哪些操作

1、决定预设要使用哪个Run Level 下面介绍几个常用的(Run Level 将在下节做详细介绍)

Run Level 可以从0 到6 分为7种

· run level 1 :单用户模式,主要用来维护系统,这在前面已经使用过了;

· run level 3 :会启用完整的服务但登录后进入文字模式;

· run level 5 :启用完整的服务登录后进入图形界面模式;

注:在inittab 的配置文件里id:5:initdefault: 这项initdefault 的前面设定为5 表示预设会用run level 5,也就是默认启用完整服务并进入图形界面模式。

2、init 会执行初始作业系统的程序

3、init会根据执行的run level 来执行run level 对应目录里面的程序,如果inittab 配置文件里预设的run level 是5,那么就会把5的参数传给/etc/rc.d/rc 这个程序执行,在/etc/rc.d目录下就可以看到rc0.d 至rc6.d 七个目录run level 所对应的目录,所以init 程序会根据执行的run level 来执行run level 对应目录里面的程序,来决定要启用哪些服务。

4、设某个组合键,如下图:定义快捷键,按这三个组合键3秒后重启系统

6、在定义UPS不断电系统,当电源发生问题时,以及电源恢复时都要执行哪些程序。

6、产生六个virtual consoles (虚拟控制台)(tty1~tty6)

7、如果启动的是run level 5 ,初始化工作就会启动X11(图形界面)

七、iniit初始化流程图

以下小节将依据上面的流程图为准逐一介绍

八、介绍Run Level (init初始化流程第一步)

其中在Run Level 里除了0~6这七种外,还有S 和emergency 这两种

· 1 :执行init程序后,会接着执行/etc/rc.sysinit程序来初始化系统,再执行/etc/rc1.d/目录下的所有程序;

· S:执行init程序后,只会执行/etc/rc.sysinit 程序来初始化系统;

· emergency:执行init程序后,只会执行/etc/rc.sysinit 程序中某些必要的程序,并不会全部执行;

1、介绍一些Run level 的特性

Run level 是使用init 这个指令来定义要使用哪个run level。

2、下面有三种方式可以选择要使用哪个Run level

(1)在开机时,预设run level会设定在/etc/inittab 这个文件中,例如:initdefault 前面的值;

(2)可以从boot loader 传一个参数给kernel (例如:在GRUB的引导菜单按“a”键,在开机前可以给kernel传一个参数以单用户模式登录系统)

(3)在开机进入Linux 系统后,可以使用init 指令,再输入要进入哪个run level ;(例如:init 5 进入run level 5)

3、使用runlevel 指令执行后,就可以在下面显示当前在哪个级别下;

/sbin/runlevel

九、介绍/etc/rc.d/rc.sysinit 这个程序主要做哪些工作(init初始化流程第二步)

rc.sysinit 这个文件是一个脚本文件,主要是一些判断程序,还有一些设定变数的程式;

rc.sysinit 这个文件的工作如下:

1、启动udev ,也就是启用热插拔的设备,例如:USB,并且也会启动SELinux;

2、会把kernel的参数设定在/etc/sysctl.conf配置文件里;这个配置文件下下单元详细说明;

3、设定系统时间;

4、载入keymaps 设定,keymap设定是在定义键盘,这样电脑开机时才能找到相对应的键盘设定;

5、启用swap这个虚拟内存的分区;

6、设定主机名称,主机名称设定在/etc/sysconfig/network 配置文件中的HOSTNAME= 项下;

7、检查根目录有没有问题,并且重新挂载成为可读可写的状态;

8、启用RAID磁盘阵列,以及LVM的设备;

9、启用磁盘配额的功能,就是限制使用者最多可以使用多少硬盘空间;

10、检查其它的文件系统,并且把它们挂载进来;

11、最后会清除被修改过的locks及PID files,其实就是清除一些开机时的缓存文件,以及一些没有用的信息及文件;

十、介绍/etc/rc.d/rc 这个程式的作用

1、这个步骤就是根据载入的Run Level 来执行Run Level 对应目当里面的程序来决定要启用哪些服务,例如,如果Run level 的值是5,就会去执行/etc/rc.d/rc5.d/* 这个目录下的所有程序,来停用或启动这个运行级别下应该有的服务,如下图:

就用rc5.d这个目录来作说明,可以看到这个目录下都是一些链接文件,所有的链接文件都链接到

了../init.d/*这个目录下的某个执行文件,其实init.d和rc5.d后面的d是代表Daemon(【unix】新进程;端口监督[控]程序)的意思。

十一、介绍Daemon Processes (Process进程)

1、Daemon Processes就是在后台执行的程序,主要功能就是在提供一些系统的服务,所以在init.d 目录里的所有程序全部都是在后台执行提供系统服务的程序,而这些在后台执行提供系统服务的程序都是在等待别人提出需求来提供服务,例如:httpd 这个程序就是提供web 的服务,主要是会开启80端口,让别人可以通过80端口连接进来。

2、Daemon 主要分为两种类型,主要差别在于提供服务的方式,说明如下:

(1)Standalone(中文翻译为:独立):在Standalone的程序里,当使用者提出需求要求服务时,会自己提供服务组使用者;

(2)Transient(中文翻译为:暂时程序,暂存区):当使用者提出需求时,会先跟xinetd(以称为:Supper Daemon)这个Daemon程序要求服务,然后xinetd程序再去呼叫Transient 类型的程序,最后Transient 类型的程序才能够提供服务给使用者;

3、在Standalone的Daemon里分为两种:

(1)在开机时,就由init这个程序直接启动的;

例如:Virtual Console;

(2)System V Daemon程式

例如:httpd程序(提供web服务的);

十二、介绍System V 程式的特性

1、其实Run Level 是在定义电脑启动时,要提供哪些服务:

·在每个runlevel 里都有他相对应的目录;就像前面提到的rc5.d 的目录;

·而用来初始化System V的程序都存放在/etc/rc.d/init.d/ 这个目录里;

2、介绍runlevel 是如何定义要提供哪些服务的。

因为在runlevel对应的目录里,都有一些连接,而这些链接就是用来呼叫init.d目录里的程序的,并夹代一个启动或停止服务的参数,所以根据runlevel 对应目录里的链接,就可以设定系统在启动后要提供哪些服务。

3、下面介绍前面提到的那个链接文件名称的格式:

这个链接文件的名称主要分为三区:

(1) 以K或S开头:K ( Kill 的缩写)开头,表示要停用链接的这个服务;S (start 的缩写)开头,表示要启用链接的这个服务;

(2) 为两位的数字:表示执行的先后顺序,数字越小的越先执行,但是在K 与S 执行的先后顺序是先执行K 停用链接的服务,再执行S 启用链接的服务,这是因为要先将所有服务停用类似归零的意思,然后再启用服务,所以执行完这些链接的程序,就初始化了系统上的服务;

(3) 链接的System V 程序名称:

4、另外,System V 程序有种特性,就是启动和停止都用同一个程序,只是后面加上不同的参数:

例:/etc/init.d/httpd start 启用web服务

/etc/init.d/httpd stop 停用web服务

这里的start , stop 就是使用的参数

十三、介绍/etc/rc.d/rc.local 这个程式的作用(init初始化流程第三步)

1、在执行完run level 下相对应的那个目录里的链接后都会执行rc.local 这个程式;如下图:run level2到5下都有这个程式:

其中S 表示启用,99表示执行的顺序最后才会执行,执行的程式就是rc.local;

2、因此,可以修改rc.local 这个文件,将runlevel2-5都要执行的指令或程序设定在rc.local文件中。

十四、介绍Virtual Consoles 的特性(init初始化流程第四步)

Virtual consoles,Virtual consoles具有以下几点特性:

1、定义在/etc/inittab 档案里,使用/sbin/mingetty 来产生tty1 到tty6 这六个Virtual consoles;

2、如果要切换Virtual consoles ,同时按下ctrl-alt-F(1~6)

3、Virtual consoles的档案是在/dev/这个目录中,对应的文件是tty1、tty2、tty3、tty

4、tty

5、tty6;但这个目录下有许多以tty开头的文件

4、/dev/tty0 是代表当前使用的Virtual consoles

5、在RHEL中有以下三个预设的Virtual consoles设定:

· RHEL中共定义了12个Virtual consoles;

·在这12个Virtual consoles里,只有1~6的可以登录

·如果使用图形界面登录,刚会先使用Virtual consoles 7 登录(也就是tty7)

注:当图形界面已启动时,才可以使用ctrl-alt-F7 才能切换回到图形界面。

十五、如何控制系统上服务的停止与启动

在控制系统的服务停止与启动里,主要分为两种类型的工具

1、控制系统预设是会自动启动的服务;

有以下三种工具可以控制Linux 作业系统,预设会自动启动的服务:

(1)ntsysv:这个工具在Virtual consoles下也可以使用,此命令执行后出现的界面,如下图:可以启动Services界面来设定系统预设要启动哪些服务,如果在ntsysv后面未加参数,只会设定目前这个

Run level ,如果要设定其它的run level ,需要在后面加参数:

例如:ntsysv –level 35指定要修改runlevel 3和5预设要启动的服务

注:这个指令在文字模式下也是可以使用的。

(2)chkconfig:这个工具可以快速设定,并且适用在各种Linux下的命令行模式工具

例如:如下图:查看预设自动启动的设定注:下面的gpm 的服务是在Virtual consoles下可以使用鼠标的服务,通过下图可以看到gpm 服务在runlevel2~5下都以以S开头,也是是预设会自动启动的意思;

执行下面的指令,可以让runlevel1~3预设不自动启动gpm的服务,如下图可以看到原来的2和3原来是以S开头的现在已经变成了以K开头,表示预设是停有的。

可以使用chkconfig –list 查看某个服务预设是否会自动启动,如下图:off 表示不启用,on表示启用,如果想查看所有的服务可以将gpm去掉,这时会看到许多服务的列表,

(3)system-config-services

这个工具是图形界面的工具,只能在图形界面下执行,开启视窗后,左边窗口可以勾选预设要启动的服务;点选Edit Runlevel 可以选择要修改哪个级别的预设服务,但只能设定3~5的,如下图:

2、在系统开机后,可以手动控制服务的停止与启动,立即控制服务的启动状态;

有以下三个工具可以手动控制服务的启动与停止:

(1)service:这个工具可以立即启动或停用standalone类型的服务;

在文字模式下如果启用了鼠标功能,使用鼠标选中文字点后,按鼠标的中键就可以将选中的文字粘贴到光标所在处,这样很方便选中一些文字,现在来停用gpm 这个服务,指令如下:

· service gpm stop 停用gpm服务(这种方法不一定支持所有的Linux版本)

· /etc/init.d/gpm stop 立即停用gpm服务(推荐使用绝对路径的方法来执行这个指令:这种方法支持所有Linux版本)

· /etc/init.d/gpm start 立即开启gpm服务

· /etc/init.d/gpm reload 立即重启服务

· /etc/init.d/gpm restart 立即重启服务

· /etc/init.d/gpm status 显示服务启用状态

(2)chkconfig:这个工具可以立即启动或停用xinetd程式所管理的服务

例如:chkconfig telnet off 停用telnet服务;

chkconfig telnet on 启用telnet服务;

(3)system-config-services

图形界面工具,选择服务,再点start(启用)或stop(停止)或restart(重启)。

十六、介绍使用指令关机

有四个指令可以用来关机

1、shutdown –h now h是halt(终止的意思),now是参数表示立即,也可输入时间例如:13:22表示下午1点22分关机

2、halt

3、power off

4、init 0 进入runlevel 0级做关机动作;

注:这四个指令在关机前都会执行sync 这个指令,进行资料的同步,将内存中的数据写入硬盘中,以免将记忆体中的资料丢失。

十七、介绍使用指令重启电脑

1、shutdown –r now -r 就是reboot(重新启动)的意思,这里的now也可以换成时间

2、reboot

3、init 6

6、ctrl-alt-del (在virtual Console环境中使用)

linux内核启动 Android系统启动过程详解

linux内核启动+Android系统启动过程详解 第一部分:汇编部分 Linux启动之 linux-rk3288-tchip/kernel/arch/arm/boot/compressed/ head.S分析这段代码是linux boot后执行的第一个程序,完成的主要工作是解压内核,然后跳转到相关执行地址。这部分代码在做驱动开发时不需要改动,但分析其执行流程对是理解android的第一步 开头有一段宏定义这是gnu arm汇编的宏定义。关于GUN 的汇编和其他编译器,在指令语法上有很大差别,具体可查询相关GUN汇编语法了解 另外此段代码必须不能包括重定位部分。因为这时一开始必须要立即运行的。所谓重定位,比如当编译时某个文件用到外部符号是用动态链接库的方式,那么该文件生成的目标文件将包含重定位信息,在加载时需要重定位该符号,否则执行时将因找不到地址而出错 #ifdef DEBUG//开始是调试用,主要是一些打印输出函数,不用关心 #if defined(CONFIG_DEBUG_ICEDCC)

……具体代码略 #endif 宏定义结束之后定义了一个段, .section ".start", #alloc, #execinstr 这个段的段名是 .start,#alloc表示Section contains allocated data, #execinstr表示Section contains executable instructions. 生成最终映像时,这段代码会放在最开头 .align start: .type start,#function /*.type指定start这个符号是函数类型*/ .rept 8 mov r0, r0 //将此命令重复8次,相当于nop,这里是为中断向量保存空间 .endr b 1f .word 0x016f2818 @ Magic numbers to help the loader

linux启动过程

Linux系统启动过程分析 by 王斌斌 binbinwang118@https://www.wendangku.net/doc/8010016192.html, Linux系统启动过程分析 操作系统的启动过程,实际上是控制权移交的过程。Linux 系统启动包含四个主要的阶段:BIOS initialization, boot loader, kernel initialization, and init startup.见下图: 阶段一、BIOS initialization,主要功能如下: 1.Peripherals detected 2.Boot device selected 3.First sector of boot device read and executed 系统上电开机后,主板BIOS(Basic Input / Output System)运行POST(Power on self test)代码,检测系统外围关键设备(如:CPU、内存、显卡、I/O、键盘鼠标等)。硬件配置信息及一些用户配置参数存储在主板的CMOS( Complementary Metal Oxide Semiconductor)上(一般64字节),实际上就是主板上一块可读写的RAM芯片,由主板上的电池供电,系统掉电后,信息不会丢失。 执行POST代码对系统外围关键设备检测通过后,系统启动自举程序,根据我们在BIOS中设置的启动顺序搜索启动驱动器(比如的硬盘、光驱、网络服务器等)。选择合适的启动器,比如通常情况下的硬盘设备,BIOS会读取硬盘设备的第一个扇区(MBR,512字节),并执行其中的代码。实际上这里BIOS并不关心启动设备第一个扇区中是什么内容,它只是负责读取该扇区内容、并执行,BIOS的任务就完成了。此后将系统启动的控制权移交到MBR部分的代码。 注:在我们的现行系统中,大多关键设备都是连在主板上的。因此主板BIOS提供了一个操作系统(软件)和系统外围关键设备(硬件)最底级别的接口,在这个阶段,检测系统外围关键设备是否准备好,以供操作系 “” 统使用。 阶段二、Boot Loader 关于Boot Loader,简单的说就是启动操作系统的程序,如grub,lilo,也可以将boot loader本身看成一个小系统。 The BIOS invokes the boot loader in one of two ways: 1.It pass control to an initial program loader (IPL) installed within a driver's Master Boot Record (MBR) 2.It passes control to another boot loader, which passes control to an IPL installed within a partition's boot sector. In either case, the IPL must exist within a very small space, no larger than 446 bytes. Therefore, the IPL for GRUB is merely a first stage, whose sole task is to locate and load a second stage boot loader, which does most of the work to boot the system. There are two possible ways to configure boot loaders: Primary boot loader: Install the first stage of your Linux boot loader into the MBR. The boot loader must be configure to pass control to any other desired operating systems. Secondary boot loader: Install the first stage of your Linux boot loader into the boot sector of some partition. Another boot loader must be installed into the MBR, and configured to pass control to your Linux boot loader. 假设Boot Loader 为grub (grub-0.97),其引导系统的过程如下: grub 分为stage1 (stage1_5) stage2两个阶段。stage1 可以看成是initial program loaderI(IPL),而stage2则实现了grub 的主要功能,包括对特定文件系统的支持(如ext2,ext3,reiserfs等),grub自己的shell,以及内部程序(如:kernrl,initrd,root )等。

linux启动顺序讲解

一、简单介绍RHEL开机时的先后顺序 BIOS —> MBR —> Kernel —> init 1、当电脑一打开电源时电脑就会进入BIOS(BIOS的工作主要是检测一些硬件设备); 2、检测完后会进入MBR也就是boot loader(MBR位于硬盘的第一个扇区总共512bytes,其中前446bytes里面的编码是在选择引导分区也就是决定要由哪个分区来引导); 3、载入系统的Kernel(核心),在Kernel里主要是载入电脑设备的驱动程序,以便可以控制电脑上的设备,并且以只读方式来挂载根目录,也就是一开始只能读取到根目录所对应的那个分区,所以/etc、/bin、/sbin、/dev、/lib这五个目录必须同根目录在一个分区中; 4、最后启动init这个程序,所以init这个程序的进程编号为1,是Linux中第一个执行的程序; init这个程序会根据Run level来执行以下这些程序: ·/etc/rc.d/rc.sysinit; ·/etc/rc.d/rc 和etc/rc.d/rc?.d/ ·/etc/rc.d/rc.local ·如果有适当的图形界面管理程序 二、BIOS初始化时主要的三个任务 BIOS(B asic I nput/O utput S ystem) 1、电脑周边设备的检测,加电自检POST (Power on self test); 2、BIOS会选择要由哪一个设备来开机,例如:软盘启动、光盘启动、网络启动、最常见的从硬盘启动; 3、选择好由哪个设备开机后,就开始读取这个设备的MBR 引导扇区; 三、介绍Boot Loader中的主要工作 1、Boot Loader可以安装在两个地方: ·安装在硬盘的MBR中; ·当有时候MBR中被其他开机管理程序占用就可以将Boot Loader 安装在硬盘中的其中一个分区的引导扇区上,; 2、Boot Loader的程序码分为两个阶段: (1)Boot Loader第一阶段的程序码非常小,只有446bytes,可以存入在MBR或是某一个分区的引导扇区里, (2)Boot Loader第一阶段的程序码是从boot 分区来载入的,就是说Boot Loader 第二阶段程序码存放在/boot 这个分区中; 3、下面来看三个Boot Loader 的开机流程范例,如在一块硬盘中安装了两个系统分别为:windows 2003 和Red hat linux 当电脑开机后,会先载入MBR通过第一阶段程序码来载入第二阶段程序码,进入GRUB开机菜单这里选择哪个系统就会载入相应的核心;

linux系统脚本的常见启动顺序

由于相关变量定义不同, 所以以下启动顺序仅供参考 在Redhat Redflag centos fc linux系统里面脚本的启动 先后: 第一步:通过/boot/vm进行启动 vmlinuz 第二步:init /etc/inittab 第三步:启动相应的脚本,并且打开终端 rc.sysinit rc.d(里面的脚本) rc.local 第四步:启动login登录界面 login 第五步:在用户登录的时候执行sh脚本的顺序:每次登录的时候都会完全执行的/etc/profile.d/file /etc/profile /etc/bashrc /root/.bashrc /root/.bash_profile 在Suse Linux (sles server or Desktop 10) 第一步:通过/boot/vm进行启动 vmlinuz 第二步:init /etc/inittab 第三步:启动相应的脚本,并且打开终端 /etc/init.d/boot 里面包括: . /etc/rc.status ./etc/sysconfig/boot ./etc/init.d/boot.d下面的脚本 ./etc/init.d/boot.local rc X.d(里面的脚本) 第四步:启动login登录界面 login 第五步:在用户登录的时候执行sh脚本的顺序:每次登录的时候都会完全执行的/etc/profile.d/file /etc/profile /root/.bashrc /root/.profile 先后: 第一步:通过/boot/vm进行启动 vmlinuz 第二步:init /etc/inittab 第三步:启动相应的脚本,并且打开终端 rc.sysinit rc.d(里面的脚本) rc.local 第四步:启动login登录界面 login 第五步:在用户登录的时候执行sh脚本的顺序:每次登录的时候都会完全执行的/etc/profile.d/file

怎样执行在Linux上运行应用程序

如何执行在Linux上运行的应用程序 关键字:Linux 先决条件 要充分理解本文,必须具备Windows 环境下桌面应用程序的工作经验,我认为读者对如何使用Linux 桌面有一个基本的了解。使用一个运行的Linux 计算来机探讨本文的概念和示例是很有帮助的。 概述 有时候第一次在Linux 上运行一个应用程序需要一点额外工作。有些应用程序,比如服务器服务,可能无法安装为服务,因此您需要从命令行启动这些应用程序。对于启动这些应用程序的用户帐户而言,需要在应用程序文件中设置执行许可标志(x)。 运行用户空间应用程序 Linux 在内核空间或用户空间运行进程。用户空间是操作系统的区域,应用程序通常在此运行。简单地说,每个用户帐户有其自己的用户空间,应用程序在这个领域内运行。 默认情况下,只有root 用户有权访问内核空间。root 用户是Linux 中的超级用户,相当于Windows 中的管理员帐户。在root 用户帐户下运行应用程序可能会引起安全风险,是不可取的。 很多服务器服务需要root 权限启动服务。然而,服务启动后,root 帐户通常会将其移至服务帐户。严格地说,Linux 中的服务帐户才是标准的用户帐户。主要区别是服务帐户仅用于运行一个服务,而不是为任何实际登录的用户准备的。 设置权限 您可以使用chmod 命令在一个文件中设置执行权限。在Linux 中,umask 设置通常用来防止下载的文件被执行,也有充分的理由相信,因为它有助于维护Linux 计算机的安全性。 大多数Linux 发行版具有一个值为022 的umask 设置,这意味着,默认情况下一个新文件权限设置为644.权限的数字表示形式采用读(4)、写(2)、执行(1) 的格式。因此,默认权限为644 的应用程序下载意味着文件所有者有读写权限,而组用户和其他用户只有读权限。 例如,为每个人赋予一个文件的执行权限,使用chmod a+x 命令。a 表示所有人,加号(+) 表示添加,而x 表示执行。同样地,如果应用程序是一个服务器服务,您应该确保只有授权帐户才有权执行此服务。 如果一个应用程序能够在标准用户帐户权限下运行,但只有特定组中的用户才需要使用它,您可以将该组所有者权限设置为可执行,然后将这些用户添加到该组中。 更具体地说,您可以在一个可执行文件中设置访问控制列表(ACL) 权限,赋予特定用户或组权限来运行该应用程序。使用setfacl 实用工具设置ACL 权限。 对于这些需要以root 用户启动进程的应用程序,比如服务器服务,您有几个选择。总结了允许用户执行需要root 权限的服务器服务的各种选项。 选项描述 作为root 用户不推荐用于服务器服务。当用户已经知道root 密码而且应用程序泄露不是首要关注问题时,可用于应用程序。 SetUID 由于安全问题,不推荐使用。SetUID 允许标准用户以另一个用户方式,比如root 用户,执行一个文件。 sudo 很常用,并且被认为是一个很好的实践。sudo 授予一个用户或组成员权限以执行可能额外需要root 权限的文件。该用户不需要知道root 密码。 带有文件权限的标准用户帐户在一个文件上为用户所有者、组所有者或其他人(所有人)

Linux2 进程的启动方式

Linux2 进程的启动方式 程序或者命令的执行实际上是通过进程实现的。通常情况下,程序或者命令是保存在硬盘上的,当在命令行中输入一个可执行程序的文件名或者命令并按下Enter 键后,系统内核就将该程序或者命令的相关代码加载到内存中开始执行。系统会为该程序或者命令创建一个或者多个相关的进程,通过进程完成特定的任务。启动进程的方式有两种,分别为前台启动方式和后台启动方式。 1.以前台方式启动进程 在终端窗口的命令行上输入一个Linux命令并按Enter键,就是以前台方式启动了一个进程。例如,在终端窗口上执行“find /-name myfile.txt”命令,就以前台方式启动了一个进程,在该进程还未执行完时,可按下Ctrl+z组合键将该进程暂时挂起,然后使用ps命令查看该进程的有关信息,如图5-1所示。 图5-1 以前台方式启动进程 2.以后台方式启动进程 要在命令行上以后台方式启动进程,需要在执行的命令后添加一个“&”。例如,在终端窗口的命令行上输入命令“find / -name myfile2.txt &”并按下Enter键后将从后台启动一个进程。启动后,系统会显示如下所示的信息: 这里的数字2表示该进程是运行于后台的第2个进程,数字3516是该进程的PID(即进程标识码,用于惟一地标识一个进程)。 然后,出现了shell提示符,这表示已返回到前台。这时,执行ps命令将能够看到现在在系统中有两个由find命令引起的进程,它们的标识号是不同的,因而是两个不同的进程,其中,PID为3385的进程就是刚才被挂起的进程。 如果执行jobs命令可以查看当前控制台中的后台进程,如图5-2所示,可以看到当前在后台有两个进程,其中一个处于运行(Running)状态,另一个,即被挂起的进程处于停止(Stopped)状态。等过一段时间后再使用ps命令进行查看,会发现PID为3516的进程已经结束了,而PID为3385的进程还存在。

linux grub 引导启动过程详解

linux grub 引导启动过程详解 2008-01-08 17:18 这几天看了很多文档,算是对linux的启动过程有了比较细致的了解. 网上有很多文章谈到这方面的内容,但总觉得没有一篇完全的解析linux启动的 细节,下面是我小弟在学习的过程中总结出来的一些东东.这个是完整的linux启动过程, 不涉及内核,但是我觉得比较详细哦. (由于本人比较懒,这一段是从网上抄的) 机器加电启动后,BIOS开始检测系统参数,如内存的大小,日期和时间,磁盘 设备以及这些磁盘设备用来引导的顺序,通常情况下,BIOS都是被配置成首先检查 软驱或者光驱(或两者都检查),然后再尝试从硬盘引导。如果在这些可移动的设 备中,没有找到可引导的介质,那么BIOS通常是转向第一块硬盘最初的几个扇区, 寻找用于装载操作系统的指令。装载操作系统的这个程序就是boot loader. linux里面的boot loader通常是lilo或者grub,从Red Hat Linux 7.2起,GRUB( GRand Unified Bootloader)取代LILO成为了默认的启动装载程序。那么启动的时候grub是如何被载入的呢 grub有几个重要的文件,stage1,stage2,有的时候需要stage1.5.这些文件一般都 在/boot/grub文件夹下面.grub被载入通常包括以下几个步骤: 1. 装载基本的引导装载程序(stage1),stage1很小,网上说是512字节,但是在我的系统上用du -b /boot/grub/stage1 显示的是1024个字节,不知道是不是grub版本不同的缘故还是我理解有误.stage1通常位于主引导扇区里面,对于硬盘就是MBR了,stage1的主要功能就是装载第二引导程序(stage2).这主要是归结于在主引导扇区中没有足够的空间用于其他东西了,我用的是grub 0.93,stage2文件的大小是107520 bit. 2. 装载第二引导装载程序(stage2),这第二引导装载程序实际上是引出更高级的功能, 以允许用户装载入一个特定的操作系统。在GRUB中,这步是让用户显示一个菜单或是输入命令。由于stage2很大,所以它一般位于文件系统之中(通常是boot所在的根 分区). 上面还提到了stage1.5这个文件,它的作用是什么呢你到/boot/grub目录下看看, fat_stage_1.5 e2fs_stage_1.5 xfs_stage_1.5等等,很容易猜想stage1.5和文件系统 有关系.有时候基本引导装载程序(stage1)不能识别stage2所在的文件系统分区,那么这 时候就需要stage1.5来连接stage1和stage2了.因此对于不同的文件系统就会有不同的stage1.5.但是对于grub 0.93好像stage1.5并不是很重要,因为我试过了,在没有stage1.5 的情况下, 我把stage1安装在软盘的引导扇区内,然后把stage2放在格式化成ext2或者fat格式的软盘内,启动的时候照常引导,并不需要e2fs_stage_1.5或者fat_stage_1.5. 下面是我的试验: #mkfs.ext2 /dev/fd0 #mount -t ext2 /dev/fd0 /mnt/floppy #cd /mnt/floppy #mkdir boot #cd boot #mkdir grub (以上三步可用mkdir -p boot/grub命令完成) #cd grub #cp /boot/grub/{stage1,stage2,grub.conf} ./ #cd; umount /mnt/floppy

Linux启动过程详解

深入浅出:Linux的启动流程刨析 Linux的启动过程,是一个Linuxer必须要熟练掌握的。通过系统的启动过程,可以更深入的理解Linux,假如Linux系统出问题的话,可以通过启动过程来分析原因,解决问题。而且,在掌握了Linux的启动流程后,还可以借助宿主机来打造自己的Linux。 下面是我画的一张简单的Linux启动流程图 在了解启动流程之前,我们应该先知道系统的几个重要脚本和配置文件,他们对应的路径为: 1、/sbin/init 2、/etc/inittab 3、/etc/rc.d/rc.sysinit 4、/etc/rc.d/rcN.d //这是几个文件夹N代表数字1,2,3,4.. 5、/etc/fstab 1、关于/sbin/init与/etc/inittab 关于/sbin/init ,它是一个二进制可执行文件,为系统的初始化程序,而/etc/inittab是它的配置文件,我们可以通过/etc/inittab来一睹它的功能,里面的内容是一种固定的文本格式,id:runlevels:action:process 我们来通过它的内容来学习它之前,先了解写运行级别的分类(0-6): 0:关机half

1:单用户模式singel user 2:多用户模式multi user ,不提供nfs服务without nfs 3:完全多用户字符模式full multiuser text mod 4:系统预留officially undefined 5:图形登录界面graphical login 6:重启reboot id:3:initdefault: //这里定义linux的启动时的运行级别,可以看到我的主机的启动级别是3 # System initialization. si::sysinit:/etc/rc.d/rc.sysinit //紧接着,运行系统第一个脚本/etc/rc.d/rc/sysinit //它的action:sysyinit指的是定义系统初始化过程 l0:0:wait:/etc/rc.d/rc 0 l1:1:wait:/etc/rc.d/rc 1 l2:2:wait:/etc/rc.d/rc 2 //然后就是加载服务了,他们被定义在/etc/rc.d/rcN.d l3:3:wait:/etc/rc.d/rc 3 //action:waite 这个进程在在对应级别启动一次,知道它结束为止,我的系统启动级别为3,所有执行rc 3对应的服务 l4:4:wait:/etc/rc.d/rc 4 l5:5:wait:/etc/rc.d/rc 5 l6:6:wait:/etc/rc.d/rc 6 ca::ctrlaltdel:/sbin/shutdown -t3 -r now //这里定义了一个组合快捷键,熟悉吧,没错就是重启,你可以把它注释掉不用 pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"//这里定义了ups电源,powerfail 指的是如果突然断电,它对应的process命令是,提示用户系统电源失效,将要关机,提醒用户把数据都存储好 pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"//这里的action,powerokwaite,指的是系统恢复供电,关机取消...

 1:2345:respawn:/sbin/mingetty tty1 //开启终端,在系统准备工作做好后,就会启动出6个终端,tty1~6 mingetyy就是终端的执行命令 2:2345:respawn:/sbin/mingetty tty2 //可以看到他们对应的级别是2345,你也可以注释

Linux引导与配置文件加载过程

Linux引导及配置文件加载过程解读 文章分类:操作系统 ?? 本文包括3部分内容 1、 Linux的引导过程 2、 Linux 的运行级别 3、 /etc/inittab与/etc/rc.d/ 与/etc/rc.d/init.d的关系 关键词:Linux引导过程、运行级别、inittab与 init.d 与 rc.d 一、 Linux的引导过程 系统加电之后,首先进行的硬件自检,然后是bootloader对系统的初始化,加载内核。 内核被加载到内存中之后,就开始执行我们的系统设置了。一旦内核启动运行,对硬件的检测就会决定需要对哪些设备驱动程序进行初始化。从这里开始,内核就能够挂装根文件系统(这个过程类似于Windows识别并存取C盘的过程)。内核挂装了根文件系统,并已初始化所有的设备驱动程序和数据结构等之后,就通过启动一个叫init的用户级程序,完成引导进程。 二、运行级别(run level) Init进程是系统启动之后的第一个用户进程,所以它的pid(进程编号)始终为1。init 进程上来首先做的事是去读取/etc/目录下 inittab文件中initdefault id值,这个值称为运行级别(run-level)。它决定了系统启动之后运行于什么级别。运行级别决定了系统启动的绝大部分行为和目的。这个级别从0到 6 ,具有不同的功能。不同的运行级定义如下:# 0 - 停机(千万别把initdefault设置为0,否则系统永远无法启动) # 1 - 单用户模式 # 2 - 多用户,没有 NFS # 3 - 完全多用户模式(标准的运行级) # 4 –系统保留的 # 5 - X11 (x window) # 6 - 重新启动(千万不要把initdefault 设置为6,否则将一直在重启) 三、 /etc/rc.d/与/etc/rc.d/init.d的关系 先解释一下init.d。这个目录存放的是一些脚本,一般是linux以rpm包安装时设定的一些服务的启动脚本。系统在安装时装了好多rpm包,这里面就有很多对应的脚本。执行这些脚本可以用来启动、停止、重启这些服务。 /etc/rc.d/init.d这个目录下的脚本就类似与windows中的注册表,在系统启动的时候执行。程序运行到这里(init进程读取了运行级别),就开始有选择地启动服务了,这时刚才说的运行级别就起作用了。在决定了系统启动的run level之后,/etc/rc.d/rc这个脚本先执行。在RH9的源码中它都是一上来就check_runlevel(),知道了运行级别之后,对于每一个运行级别,在rc.d下都有一个子目录分别是rc0.d,rc1.d ….. rc6.d。每个目录下都是到init.d目录的一部分脚本一些链接。每个级别要执行哪些服务就在相对应的目录下,比如级别5要启动的服务就都放在rc5.d下,但是放在这个rc5.d下的都是一些链接文

Linux启动全过程-由bootloader到fs

Linux启动过程 许多人对Linux的启动过程感到很神秘,因为所有的启动信息都在屏幕上一闪而过。其实Linux的启动过程并不象启动信息所显示的那样复杂,它主要分成两个阶段: 1.启动内核。在这个阶段,内核装入内存并在初始化每个设备驱动器时打印信息。 2.执行程序init。装入内核并初始化设备后,运行init程序。init程序处理所有程序的启动, 包括重要系统精灵程序和其它指定在启动时装入的软件。 下面以Red Hat为例简单介绍一下Linux的启动过程。 一、启动内核 首先介绍启动内核部分。电脑启动时,BIOS装载MBR,然后从当前活动分区启动,LILO获得引导过程的控制权后,会显示LILO提示符。此时如果用户不进行任何操作,LILO将在等待制定时间后自动引导默认的操作系统,而如果在此期间按下TAB键,则可以看到一个可引导的操作系统列表,选择相应的操作系统名称就能进入相应的操作系统。当用户选择启动LINUX操作系统时,LILO就会根据事先设置好的信息从ROOT文件系统所在的分区读取LINUX映象,然后装入内核映象并将控制权交给LINUX内核。LINUX内核获得控制权后,以如下步骤继续引导系统: 1. LINUX内核一般是压缩保存的,因此,它首先要进行自身的解压缩。内核映象前面的一些代码完成解压缩。 2. 如果系统中安装有可支持特殊文本模式的、且LINUX可识别的SVGA卡,LINUX会提示用户选择适当的文本显示模式。但如果在内核的编译过程中预先设置了文本模式,则不会提示选择显示模式。该显示模式可通过LILO或RDEV工具程序设置。 3. 内核接下来检测其他的硬件设备,例如硬盘、软盘和网卡等,并对相应的设备驱动程序进行配置。这时,显示器上出现内核运行输出的一些硬件信息。 4. 接下来,内核装载ROOT文件系统。ROOT文件系统的位置可在编译内核时指定,也可通过LILO 或RDEV指定。文件系统的类型可自动检测。如果由于某些原因装载失败,则内核启动失败,最终会终止系统。 二、执行init程序 其次介绍init程序,利用init程序可以方便地定制启动其间装入哪些程序。init的任务是启动新进程和退出时重新启动其它进程。例如,在大多数Linux系统中,启动时最初装入六个虚拟的控制台进程,退出控制台窗口时,进程死亡,然后init启动新的虚拟登录控制台,因而总是提供六个虚拟登陆控控制台进程。控制init程序操作的规则存放在文件/etc/inittab中。Red Hat Linux缺省的inittab文件如下:# #inittab This file describes how the INIT process should set up the system in a certain #run-level. # # #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)

linux开机启动脚本的顺序

linux开机启动脚本的顺序 如果服务器重启之后需要手工开启许多服务、工作及以后的维护相对比较繁琐、特地总结了下linux下开机自动启动脚本所涉及的知识和方法、如下: 1、相关基础知识点 1)redhat的启动方式和执行次序是: 加载内核 执行init程序 /etc/rc.d/rc.sysinit # 由init执行的第一个脚本 /etc/rc.d/rc $RUNLEVEL # $RUNLEVEL为缺省的运行模式 /etc/rc.d/rc.local #相应级别服务启动之后、在执行该文件(其实也可以把需要执行的命令写到该文件中) /sbin/mingetty # 等待用户登录 在Redhat中,/etc/rc.d/rc.sysinit主要做在各个运行模式中相同的初始化工作,包括: 调入keymap以及系统字体 启动swapping 设置主机名 设置NIS域名 检查(fsck)并mount文件系统 打开quota 装载声卡模块 设置系统时钟 等等。 /etc/rc.d/rc则根据其参数指定的运行模式(运行级别,你在inittab文件中可以设置)来执行相应目录下的脚本。凡是以Kxx开头的 ,都以stop为参数来调用;凡是以Sxx开头的,都以start为参数来调用。调用的顺序按xx 从小到大来执行。(其中xx是数字、表示的是启动顺序)例如,假设缺省的运行模式是3,/etc/rc.d/rc就会按上述方式调用 /etc/rc.d/rc3.d/下的脚本。 值得一提的是,Redhat中的运行模式2、3、5都把/etc/rc.d/rc.local做为初始化脚本中 的最后一个,所以用户可以自己在这个文件中添加一些需要在其他初始化工作之后,登录之前执行的命令。 init在等待/etc/rc.d/rc执行完毕之后(因为在/etc/inittab中/etc/rc.d/rc的 action是wait),将在指定的各个虚拟终端上运行/sbin/mingetty,等待用户的登录。 至此,LINUX的启动结束。 2)init运行级别及指令 一、什么是INIT: init是Linux系统操作中不可缺少的程序之一。

嵌入式linux系统地启动过程

一、分析嵌入式系统的启动过程 嵌入式系统的启动过程: 上电------->u-boot------->加载Linux内核------->挂载rootfs ---->执行应用程序 二、分析u-boot 1.什么是u-boot(是一个通用的bootloader) U-Boot,全称Universal Boot Loader,是遵循GPL条款的开放源码项目。 Universal ----------->通用的 Boot ----------------->启动,引导 Loader ----------------->加载 通用------->支持多种架构的CPU,除了支持ARM系列的处理器外,还能支持MIPS、x86、Power PC、NIOS等诸多常用系列的处理器 ------->支持多种厂家的开发板,如cortex-A8,cortex-A9,cortex-A53等不同厂 家的开发板 ------->支持多种嵌入式操作系统,U-Boot不仅仅支持嵌入式Linux系统的引导,它还支持Net BSD, Vx Works, QNX, RTEMS, ARTOS, Lynx OS, android 嵌入式操作系统。 Boot -------->完成硬件的初始化,启动硬件平台。 Loader ------->当初始化硬件结束后,加载操作系统。 2.u-boot的作用 大多数BootLoader都分为stage1和stage2两大部分,U-boot也不例外。依赖于cpu体系结构的代码(如设备初始化代码等)通常都放在stage1且可以用汇编语言来实现,而stage2则通常用C语言来实现,这样可以实现复杂的功能,而且有更好的可读性和移植性。 (1)Stage1:CPU(S5P6818-->Cortex-A53)的初始化,使用汇编语言编写。 如:初始化Cache、MMU、clock、中断、看门狗、DDR3、eMMC、... (2)Stage2:板级初始化,使用C语言编写。 如:uart、网卡、usb、LCD、.... (3)提供了一些工具,如进入uboot的命令行模式,使用u-boot命令 (4)加载操作系统 3.U-boot的工作模式 U-Boot的工作模式有启动加载模式和下载模式。

linux系统引导过程

linux系统引导过程简介 首先,主板的BIOS会读取硬盘的主引导记录(MBR),MBR中存放的是一段很小的程序,他的功能是从硬盘读取操作系统核心文件并运行,因为这个小程序太小了,因此通常这个小程序不具备直接引导系统内核的能力,他先去引导另一个稍微大一点的小程序,再由这个大一点的小程序去引导系统内核.在linux系统中这样的小程序有LILO和GRUB.在这个项目中,我决定用LILO来做系统引导程序.在软盘上启动linux系统的过程和在硬盘上启动的过程相似. Linux系统内核被引导程序装入内核并运行后,linux内核会检测系统中的各种硬件.并做好各种硬件的初始化工作,使他们在系统正式运行后能正常工作.之后内核做的最后一个工作是运行 /sbin下的init程序,init是英文单词initialization(初始化)的简称,init程序的工作是读取/etc/inittab 文件中描述的指令,对系统的各种软硬件环境做最初化设定.最后运行mingetty等待用户输入用户名登录系统.所有的工作就这么简单,虽然linux启动的时候有很多内容,看上去十分高深,但是都不过是对这个过程的扩充.明白了这个道理,你可以写一些脚本程序让他在系统启动的特定时间运行完成任务.事实上系统内核并不关心/sbin下的init是不是真的init,只要是放在/sbin下名叫init 的可执行程序他都可以执行. Red Hat Enterprise Linux在电脑的启动阶段,一共经历以下两个阶段: 1.启动内核。在这个阶段,内核装入内存并在初始化每个设备驱动器时打印信息。 2.执行程序init.(系统初始化).装入内核并初始化设备后,运行init程序。init程序处理所有程序的启动,包括重要系统精灵程序和其它指定在启动时装入的软件。 开机---BIOS自检---载入启动程序---加载内核---启动init服务---加载/etc/inittab---Run level---rc.sysinit---rc--- mingetty---rc.local 一.BIOS自检 当电脑开机的时候,电脑会进入BIOS,在PC机中引导LINUX是从BIOS中的地址0xFFFF0处开始的.BIOS的第一个步骤是加电自检,即所谓的POST(Power On Self Test),BIOS的第二个步骤是进行本地设备的枚举和初始化,侦测电脑周边配套设备是否工作正常,如cpu的类型,速度,缓存等;主板类型,内存的速度,容量,硬盘的大小,类型和工作模式,风扇速度等,主要是为了检查这些设备在开机的时候是否能通过检测,说明电脑可以正常的工作.BIOS由两部分组成:POST代码和运行时的服务.当POST完成之后,它被从内存中清理了出来,但是,BOIS 运行时服务依然保留在内存中,目标操作系统可以使用这些服务 二.载入启动程序

在linux下设置开机自动启动程序的方法

下面用自启动apache为例; 自启动脚本: /usr/local/apache2/bin; ./apachectl start 文件位于/etc/rc.d/init.d下,名为apached, 注意要可执行. #chmod +x /etc/rc.d/init.d/apached //设置文件的属性为可执行 #ln -s /etc/rc.d/init.d/apached /etc/rc3.d/S90apache //建立软连接,快捷方式 #ln -s /etc/rc.d/init.d/apached /etc/rc0.d/K20apache 在Red Hat Linux中自动运行程序 1.开机启动时自动运行程序 Linux加载后, 它将初始化硬件和设备驱动, 然后运行第一个进程init。init根据配置文件继续引导过程,启动其它进程。通常情况下,修改放置在 /etc/rc或 /etc/rc.d 或/etc/rc?.d 目录下的脚本文件,可以使init自动启动其它程序。例如:编辑/etc/rc.d/rc.local 文件,在文件最末加上一行"xinit"或"startx",可以在开机启动后直接进入X-Window。 2.登录时自动运行程序 用户登录时,bash首先自动执行系统管理员建立的全局登录script :/etc/profile。然后bash在用户起始目录下按顺序查找三个特殊文件中的一个:/.bash_profile、/.bash_login、/.profile,但只执行最先找到的一个。 因此,只需根据实际需要在上述文件中加入命令就可以实现用户登录时自动运行某些程序(类似于DOS下的Autoexec.bat)。 3.退出登录时自动运行程序 退出登录时,bash自动执行个人的退出登录脚本/.bash_logout。例如,在/.bash_logout 中加入命令"tar -cvzf c.source.tgz *.c",则在每次退出登录时自动执行 "tar" 命令备份*.c 文件。 4.定期自动运行程序 Linux有一个称为crond的守护程序,主要功能是周期性地检查 /var/spool/cron目录下的一组命令文件的内容,并在设定的时间执行这些文件中的命令。用户可以通过crontab 命令来建立、修改、删除这些命令文件。 例如,建立文件crondFile,内容为"00 9 23 Jan * HappyBirthday",运行"crontab cronFile"命令后,每当元月23日上午9:00系统自动执行"HappyBirthday"的程序("*"表示不管当天是星期几)。 5.定时自动运行程序一次 定时执行命令at 与crond 类似(但它只执行一次):命令在给定的时间执行,但不自动重复。at命令的一般格式为:at [ -f file ] time ,在指定的时间执行file文件中所给出的所有命令。也可直接从键盘输入命令: $ at 12:00 at>mailto Roger -s ″Have a lunch″ < plan.txt

Linux 启动过程详解

Linux 启动过程详解 下面来详细了解一下Linux 的启动过程。Linux 的启动 过程包含了Linux 工作原理的精髓, 而且在嵌入式的开发过程也非常需要这方面知识的积累。 用户开机启动Linux 过程总体上是这样的: 首先当用户打开PC 的电源时,CPU 将自动进入实模式,并从地址0xFFFF0 开始自 动执行程序代码,这个地址通常是ROM-BIOS 中的地址。这时BIOS 进行开机自检,并 按BIOS 中设置的启动设备(通常是硬盘)进行启动,接着启动设备上安装的引导程序 lilo 或grub 开始引导Linux(也就是启动设备的第一个扇区) ,这时,Linux 才获得了启 动权。 接下来的第二阶段,Linux 首先进行内核的引导,主要完成磁盘引导、读取机器系统数 据、实模式和保护模式的切换、加载数据段寄存器以及重置中断描述符表等。 第三阶段执行init 程序(也就是系统初始化工作) init 程序调用了rc.sysinit 和rc 等程序, 而rc.sysinit 和rc 在完成系统初始化和运行服务的任务后,返回init。 之后的第四阶段,init 启动mingetty,打开终端供用户登录系统,用户登录成功后进入了Shell,这样就完成了从开机到登录的整个启动过程。 Linux 启动总体流程图如图所示, 其中的4 个阶段分别由同步棒隔开。由于第一阶段 不涉及Linux 自身的启动过程,因此,下面分别对第二和第三阶段进行详细讲解。 内核引导阶段 2.2.2 在grub 或lilo 等引导程序成功完成引导Linux 系统的任务后,Linux 就从它们手中接管 了CPU 的控制权。用户可以从https://www.wendangku.net/doc/8010016192.html, 上下载最新版本的源码进行阅读,其目录为: linux-2.6.*.*archi386boot。在这过程中主要用到该目录下的这几个文件:bootsect.S、setup.S 以及compressed 目录下的head.S 等。 首先要介绍一下,Linux 的内核通常是压缩过后的,包括如上述提到的那几个重要的汇 编程序,它们都是在压缩内核vmlinuz 中的。因为Linux 中提供的内核包含了众多驱动和功能,因而比较大,所以在采用压缩内核可以节省大量的空间。

相关文档
相关文档 最新文档