Chinaunix首页 | 论坛 | 博客
  • 博客访问: 84593
  • 博文数量: 38
  • 博客积分: 273
  • 博客等级: 二等列兵
  • 技术积分: 215
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-14 22:01
文章分类

全部博文(38)

文章存档

2012年(14)

2011年(24)

分类: LINUX

2011-11-15 15:22:46

启动电源后,主机第一步先做的就是查询BIOS信息。了解整个系统的硬件状态,
 接下来,就是主机读取MBR(硬盘的第一个扇区)里的boot loader了。从网上找了一个WIN的Boot.ini 文件
的一个示例:
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect
LIUNX的是GRUB LINUX好像自己不带像WIN这样的BOOT.INI文件(bootloder)。应该是系统自己集成了GRUB
当然。winDOWS也可以装GRUB后、再导系统。我们工作中。用U盘装好晨枫U盘维护工具 从硬盘设置U盘起动
里面会有好多起动选项,这个就是用的GRUB。本来想发一下培训的时候老师演示的GRUB
 没带上课时做的笔计回家。从百度上找来一个GRUB, LINUx和WIN的对比
1 RedHat linux
title RedHat linux
root (hd0,0)
kernel /boot/vmlinuz-2.2.18 root=/dev/hda0 3ro
initrd /boot/initrd-2.2.18.gz
 
2Windows 菜单选项
title Windows2000
root (hd0,0)
chainloader +1
感觉差不多吧

接上一步,主机读取boot loader后,读取到linux核心是在/boot文件目录中后,将此核心加载到内存中。
开始了接下来的启动第一个运行程序/sbin/init,
本人对init的第一个进程也感点兴趣。百度了一下init进程创建过程——基于0.12内核_百度文库
init进程创建过程 ,第一个是百度文库,好像是赵炯博士的书里的内容。复制了几个大家看一下。
从开机到任务0执行
bootsect.S--->setup.S--->head.s--->main.c
1)bootsect.S: 引导代码,将setup代码和system模块加载到内存指定位置处。
2)setup.S : 读取时钟、硬盘参数表等信息,main函数会用到。
3)head.s : 内核模块(system)最先执行的代码,主要设置page directory table 和四个page
tables,映射整个物理内存(high effective physical memory = 16M),供内核代码和任务0使用;并设
置main函数
后面 的就是汇编 一共16页,强人们可以去分析一下 话外题
 
init启动时,它会在/etc/inittab内查找一个代码行 下面是/etc/inittab所有内容 #号的是一些说明
id:5:initdefault:
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/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
# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
# UPS connected and working correctly. 
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
# If power was restored before the shutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"

# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
# Run xdm in runlevel 5
x:5:respawn:/etc/X11/prefdm -nodaemon
[root@sundy ~]#
去掉了一些作为说明的费话,看起来好看一点
id:5:initdefault:
表示当前默认运行级别为
init首先查找启动等级(run-level)。因为启动等级不同,其运行脚本(也就是服务)会不同。默认的等级有
以下几项:
  0 - halt (系统直接关机)
  1 - single user mode (单人模式,用于系统维护时使用)
  2 - Multi-user, without NFS (类似3模式,不过少了NFS服务)
  3 - Full multi-user mode (完整模式,不过,是文本模式)
  4 - unused (系统保留功能)
  5 - X11 (与3模式类似,不过,是X终端显示)
  6 - reboot (重新开机)
不要选择0或4,6 不然开不了机
si::sysinit:/etc/rc.d/rc.sysinit
  注意 si:: 2个:号里都没内容。表示所有级别。里面有数字。表示级别几
读取的文件/etc/rc。d/rc。sysinit文件。
  设置网络环境/etc/sysconfig/network,如主机名,网关,IP,DNS等。
  挂载/proc。此文件是个特殊文件,大小为0,。
   根据内核在开机时的结果/proc/sys/kernel/modprobe。开始进行周边设备的侦测。
  载入用户自定义的模块/etc/sysconfig/modules/*。modules
  读取/etc/sysctl。conf文件对内核进行设定。
  设定时间,终端字体,硬盘LVM或RAID功能,以fsck进行磁盘检测。
   将开机状况记录到/var/log/dmesg中。(可以用命令dmesg查看结果)

接下来,就是启动系统服务了,不同的run-level会有不同的服务启动。到/etc/rc。d目录中,不同的
level会有不同的目录。如启动 3模式,会有个rc3。d目录,里面就保存着服务。其中,S(start)开头的表
明开机启动,K(kill)开头的表明开机不启动。数字表示启动顺序。数字越小,启动越早。
读取服务后,主机会读取/etc/rc。d/rc。local文件
 
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
CTRL-ALT-DELETE 几个键的定义 在启动过程中允许按[Ctrl+Alt+Del]重启系统
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
开关电源的定义
1:2345:respawn:/sbin/mingetty tty1
这样的有6行 ,都表示
在运行级别2、3、4、5上以ttyX为参数执行/sbin/mingetty程序,打开ttyX终端用于用户登录,如果进程
退出则再次运行mingetty程序

x:5:respawn:/etc/X11/prefdm -nodaemon
在级别5上运行xdm程序,提供xdm图形方式登录界面,并在退出时重新执行

这次就到这样。关于/etc/rc。d/rc。sysinit 这几重要的东西是如何运行的。就看我的下一编关
于/etc/rc。d/rc。sysinit这几的详细说明
阅读(1646) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~