Chinaunix首页 | 论坛 | 博客
  • 博客访问: 213145
  • 博文数量: 48
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 258
  • 用 户 组: 普通用户
  • 注册时间: 2013-05-22 23:45
文章分类

全部博文(48)

文章存档

2015年(4)

2014年(34)

2013年(10)

分类: LINUX

2013-09-14 00:36:06

原文地址:linux的开机过程分析 作者:archer239915

1. 主板的BIOS程序进行硬件检查,并根据启动顺序得到第一个可以启动的装置,假设是硬盘/dev/sda。

2. 加载sda的MBR的bootloader到内存执行,假设是grub。
    grub执行也有配置文件的:/boot/grub/menu.lst,其实就是根据配置文件给用户提供选单,选择后再根据配置文件启动相应的内核。

点击(此处)折叠或打开

  1. default=0    //默认为第一个title
  2. timeout=5    //时间5秒后按照默认选项开机
  3. splashimage=(hd0,6)/grub/splash.xpm.gz    //背景图在第一个硬盘的第7个分区(即/boot挂载点)
  4. hiddenmenu                       //读秒期间是否显示完整的选单画面
  5. title CentOS (2.6.32-358.18.1.el6.i686)    //第一个选项
  6.     root (hd0,6)        //核心在第一个硬盘的第7个分区(即/boot挂载点)
  7.     kernel /vmlinuz-2.6.32-358.18.1.el6.i686 ro root=UUID=2e092a14-4071-41c3-8a1b-a5b5759f3abb rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet crashkernel=auto
  8.     initrd /initramfs-2.6.32-358.18.1.el6.i686.img
  9. title Win7                //第二个选项为windows
  10.     rootnoverify (hd0,0)    //在第一个硬盘的第1个分区
  11.     chainloader +1          //不是直接启动,而是将控制权转交给windows的bootloader,+1表示该分区的第一个扇区sector
    第7行:为kernel的文件(/boot中),后面是启动的参数,zh_CN.UTF-8表示语言,rhgb为色彩模式,quiet为安静模式。
    第8行:因为是直接启动核心,要用到initrd的ramdisk配置文件,也在/boot中。initrd用于提供开机过程中启动核心必须的模块。
                主要是与硬盘和文件系统相关的模块,让核心正常加载。
    例子:让centos选项不是直接加载核心,而是将控制权交给centos自身的bootloader

点击(此处)折叠或打开

  1. title Centos
  2.     rootnoverify (hd0,6)
  3.     chainloader +1
3.
启动kernel后,kernel开始检测硬件环境,加载驱动程序,还有一些模块。
    这里主要是驱动核心,比如pci核心,usb核心等等将检测结果放到/proc或/sys的相应目录,并根据发现的设备加载相应的驱动程序。

4. 找到init程序执行(/sbin/init),init会取得run-level,假设默认是Xwindow启动,run-level为5。
    /etc/inittab中规定了默认的开机等级为5:    id:5:initdefault:

5. init执行/etc/rc.d/rc.sysinit准备系统的环境。(这个文件很长,仅看主要部分)

点击(此处)折叠或打开

  1. 1. 取得网络环境与主机类型:
  2. 读取网络配置文件 /etc/sysconfig/network ,取得主机名等网络环境。

  3. 2. 测试和挂载内存装置 /proc 及 USB 装置 /sys:
  4. 除挂载内存装置 /proc,还会侦测系统上是否具有 usb 的装置, 若有则会主动加载usb 的驱劢程序,尝试挂载 usb 的文件系统。

  5. 3. 设定系统时间 (clock) 与时区设定:
  6. 需读入 /etc/sysconfig/clock 设定值

  7. 4. 接口设备的侦测与Plug and Play(PnP)参数的测试:
  8. 根据核心在开机时侦测的结果 (/proc/sys/kernel/modprobe ) 开始接口讴备的侦测。

  9. 5. 用户自定义模块的加载:
  10. 使用者可以在 /etc/sysconfig/modules/*.modules 加入自定义的模块,则此时会被加载到系统当中。

  11. 6. 加载核心的相关设定:
  12. 系统会读取 /etc/sysctl.conf 这个档案的设定值,使核心功能成为我们想要的样子。

  13. 7. 清除开机过程当中的临时文件

  14. 8. 将开机相关信息加载 /var/log/dmesg 档案中。
    所以可以用指令dmesg查看开机的输出消息。
    如果我们要将自定义的模块开机时加载,只需要放到/etc/sysconfig/modules/*.modules即可,文件名要以.modules结尾。

6. init执行level 5的配置,在/etc/rc.d/rc5.d/目录下,启动或关闭一些服务。
    到/etc/rc.d/rc5.d/目录下ls -l可以知道全部都是链接文件到/etc/init.d/中。

点击(此处)折叠或打开

  1. lrwxrwxrwx. 1 root root 19 8月 16 03:08 K95firstboot -> ../init.d/firstboot
  2. lrwxrwxrwx. 1 root root 14 8月 16 03:01 K99rngd -> ../init.d/rngd
  3. lrwxrwxrwx. 1 root root 17 8月 16 03:01 S01sysstat -> ../init.d/sysstat
  4. lrwxrwxrwx. 1 root root 22 8月 16 03:01 S02lvm2-monitor -> ../init.d/lvm2-monitor
  5. lrwxrwxrwx. 1 root root 19 8月 16 02:54 S08ip6tables -> ../init.d/ip6tables
    K95firstboot这个链接文件表示/etc/init.d/firstboot  stop,K开头表示stop,95表示顺序
    S01sysstat这个链接文件表示/etc/init.d/sysstat  start,S开头表示start,01表示顺序
    这些名称表示的含义都会由chkconfig来解释执行,运行chkconfig --list显示结果就是由此得出的。

7. init执行/etc/rc.d/rc.local,这是本地配置。
    可以自定义这个文件,比如运行自己的脚本,开启自己的服务,加载自己的驱动模块,运行什么命令等等。
    我就在这里加载了一个驱动模块。

点击(此处)折叠或打开

  1. insmod /usr/local/src/dnw_for_linux/secbulk/secbulk.ko
8. 最后启动login登入程序,等待用户登入。

阅读(1389) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~