免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 26986 | 回复: 76
打印 上一主题 下一主题

[分享] rc.sysinit 及相关脚本分析(含rc.sysinit 的定制) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-09 21:25 |只看该作者 |倒序浏览
多谢 jerry017cn 朋友的热心帮助,把 SELinux 部分加上了注释,


**************************************************************************************
注 :该文章参考了如下内容 :

A)man 手册

作者 :ailms <ailms{@}qq{dot}com>

版本 :v2

完成时间  :2007/07/10 11:30

**************************************************************************************


Linux 的启动及初始化的过程是一个有趣而又复杂的过程,对于大部分人来说只要系统能够起来就行了,怎么初始化并不重要。

不过既然是学习就要深究到底,本着一不怕苦,二不怕累的精神,终于把 /etc/rc.d/rc.sysinit 、/etc/rc.d/rc 、/etc/rc.d/functions 都看完了。

我尽量争取每行代码都加上注释,但有些部分目前并不懂(SELinux 部分),所以就没有做注释(用红色字体的都是未解的),

希望有那位热心人把这些部分的功能也都写出来让大家一起学习进步

建议先看 /etc/rc.d/functions、再看 /etc/rc.d/rc.sysinit、最后看 /etc/rc.d/rc

至于所说的 rc.sysinit 定制,其实就是对 rc.sysinit 中的部分功能进行修改,达到自己要的目的 :

1)改变 console 字体。原来的 "latarcyrheb-sun16" 有点烦了

2)rc.sysinit 在启动 lvm 和 software-raid 部分是不输出错误信息的,我把它改为 verbose 模式

3)默认原来只显示 vg 的名称。现在加上 lv 的信息

4)系统启动时允许我们按 i 进入交互模式,但这个时间很短,而且真正到可以按 i 键的时候却没有提示信息。

5)rc.sysinit 会对 IDE 硬盘进行优化,不过它会对 hda ~ hdt 这么多个硬盘都执行一次 hdparm ,但实际上一般不超过 hdd





[ 本帖最后由 ailms 于 2007-8-1 23:17 编辑 ]

系统初始化相关脚本分析.rar

40.6 KB, 下载次数: 1794

系统初始化相关脚本分析.rar

61.44 KB, 下载次数: 1213

论坛徽章:
0
2 [报告]
发表于 2007-07-09 21:39 |只看该作者
严重支持大天使!

论坛徽章:
0
3 [报告]
发表于 2007-07-09 21:51 |只看该作者

多谢楼上。

把 linux 的启动过程也一并贴出来,欢迎大家指正 ^_^


系统启动

1、系统加电

2、BIOS 自检 → 本地设备枚举和初始化

3、POST 代码从内存中清除,但运行时服务(runtime service)仍然留在内存。

4、BIOS 从 CMOS 的设置中找出第1/2/3 启动设备(可能有第4个),然后逐个尝试,

   并在第一个 ”active“状态的硬盘上读入其 MBR



第一阶段引导加载程序

1、MBR 实际上是由3个部分组成 :主引导加载程序(master bootloader code,446 字节)、主分区表  (ppt)、magic nubmer (0xAA55)组成

   主分区表有4个记录,对应主分区1-主分区4,共64 字节。最后的 magic number 是 2 字节

2、主引导加载程序搜索主分区表,扫描全部4个分区记录,确保只有1个是被标为”active“ 的(用 fdisk 可以设置某个分区为 active 分区)。

   然后读入该分区的引导扇区(前512 字节)。active 分区一般是 C 盘或者 linux 的第一个分区

3、主引导加载程序的作用就是读入第2阶段的引导加载程序



第二阶段引导加载程序

1、第2阶段引导加载程序的目的是加载内核和 initrd 。GRUB 和 LILO 都是把 boot loader 程序分成两部分,一部分在 MBR ,一部分在”active" 分区的引导扇区

2、第2阶段引导加载程序被读入内存后,它读取 root() 命令给出的分区下的 grub/grub.conf ,显示一个菜单,供用户选择

3、GRUB 可以细分为3个阶段,中间的一个是 stage1.5 ,它跟在 stage1 的后面,目的是让 grub 能够识别文件系统的类型



内核

1、内核自解压

2、按照 bootloader 向它提供的 initrd 在内存中的地址,把 /dev/initrd 的内容拷贝到 /dev/ram ,并释放 /dev/initrd 所占用的内存

3、把 /dev/ram 按 rw 的模式挂载为初始根文件系统

4、执行其上面的 /linuxrc 或者 /init 脚本,目的是加载驱动模块

5、在 /linuxrc 和 /init 脚本中,会有 pivot_root ()或者 switchroot 把 /sysroot 下的真正根文件系统设备挂载到 / ,把初始根文件系统挂载到 /initrd 下

6、/linuxrc 和 /init 脚本的后面会 umount /initrd 下的初始根文件系统(即使没有完全卸载,也会在 /etc/rc.d/rc.sysinit 中把它们全部卸载)

7、接下来是启动 init 进程。在 2.4 内核中,这个步骤是由内核完成的。但在 2.6 内核中,这个步骤是由 /init 脚本完成的。


Init

1、init  首先执行 /etc/rc.d/rc.sysinit 进行系统的初始化

2、而 rc.sysint 会先执行 /etc/rc.d/init.d/functions ,获得一些有用的函数,例如 daemon()、action ()、success()、failure()等

3、按照默认运行级别或者 grub 启动时的 kernel 行给出的运行级别运行 /etc/rcN.d/ 下的脚本,先执行 K 开头的(按从低到高),再执行S开头的(从低到高)

    这个过程“有可能”是通过执行 /etc/rc.d/rc 脚本实现的。因为 rc 脚本是为改变 runlevel 而做的,那么从关机(level 0)到 正常(level3/5)应该也算是

    一种特殊的改变 runlevel 的情况吧


4、按照 /etc/inittab 的要求在指定的虚拟控制台上创建 mingetty 进程,提示输入用户名和密码

5、执行 login 命令,login 命令会做如下工作 :

    a)如果存在 ~/.hashlogin ,则以 "quiet" 的方式登录,不显示邮件、不打印 motd

            如果存在 /var/log/lastlog ,则打印最后登录时时间

    b)设置环境变量,包括 HOME、MAIL、PATH 、SHELL、TERM 等

         PATH 值默认是 /usr/local/bin:/bin:/usr/bin (对于普通用户而言),
           对于 root 而言,则是 /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 。

     c)如果不是 quiet login ,则打印用户的邮件数量和 /etc/motd 文件)

     d)启动 login shell (默认是 /bin/sh),并执行 ~/.bashprofile

       e)~/.bashprofile 会自动执行 ~/.bashrc ,而 ~/.bashrc 又调用 /etc/bashrc

[ 本帖最后由 ailms 于 2007-7-9 22:11 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2007-07-09 21:54 |只看该作者
说到 sysfont,对了,以前用 slackware 时有种歪歪扭扭的字体,好像是 A 开头的,谁知道?

论坛徽章:
0
5 [报告]
发表于 2007-07-09 21:58 |只看该作者
我觉的 . 命令还是解释成读取比较好,

逻辑上,执行是只要结果的感觉,而 . 命令更像 include ,做 变量 和 函数 的初始化工作,
作为公共文件或 config 的读取手段

论坛徽章:
0
6 [报告]
发表于 2007-07-09 22:16 |只看该作者
nod

不过这应该相对于 /etc/sysconfig/ 下的文件来说,如果是普通的 shell 脚本,则 '.' 也有执行的含义

论坛徽章:
0
7 [报告]
发表于 2007-07-09 22:29 |只看该作者
原帖由 alvis 于 2007-7-9 21:54 发表于 4楼  
说到 sysfont,对了,以前用 slackware 时有种歪歪扭扭的字体,好像是 A 开头的,谁知道?



是否为 "Agafari-14" ?俺觉得这个字体还可以,还有一种希腊字体的也很不错

论坛徽章:
0
8 [报告]
发表于 2007-07-09 22:42 |只看该作者
原帖由 ailms 于 2007-7-9 21:25 发表于 1楼  

**************************************************************************************
注 :该文章参考了如下内容 :

A)man 手册

作者 :ailms <ailms{@}qq{dot}com>

版本 :v1

完 ...


大天使……我爱你……

论坛徽章:
0
9 [报告]
发表于 2007-07-09 22:46 |只看该作者
原帖由 ppm 于 2007-7-9 22:42 发表于 8楼  


大天使……我爱你……


论坛徽章:
0
10 [报告]
发表于 2007-07-09 22:50 |只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP