Linux内核启动过程分析和思考
2009-10-19 15:59
375 查看
系统先读grub.conf文件,
然后根据其内容选择内核并加载initrd.img文件到内存中,
内核的main.c文件中的init函数进而执行initrd.img中的init脚本(nash脚本),该脚本运行流程如下:
装载基本的内核系统文件和设备文件 (mknod /dev/tty1....., insmod 硬盘、nfs模块等等)
根据grub的启动命令行参数,判断root根文件设备,参看/boot/grub/grub.conf文件中制定的参数,该参数在内核启动后可有cat /proc/cmdline显示出来,nash和其他的一些程序也是通 过读该系统文件来去内核启动参数的。
在将从grub启动参数中获得根设备并将其与/dev/root设备联接以后,通过nash的switchroot指令将/dev/root设备挂接到根目录上("/")
内核中main.c中init函数,调用/sbin/init处理/etc/inittab文件,该文件流程如下:
运行/etc/rc.sysinit
根据inittab文件第一行initdefault所指定的级别运行该级别下的启动脚本。
建立六个运行控制终端,在runlevel5下运行图形化界面
内核中main.c中init函数,调用/sbin/init处理/etc/inittab文件
rc.sysinit rc.d rc.local etc/inettab mingetty
grub文件详解
http://blog.csdn.net/zhuliting/archive/2010/04/19/5502636.aspx
Linux启动过程综述
http://www.unix-center.net/bbs/archiver/?tid-12186.html
使用ram disk初始化(initrd)
http://www.linuxfans.org/bbs/thread-169737-1-1.html
于是温习鸟哥的开机关机流程与Loader(这个比启动过程综述多了两步,更详细点):
1. 整个开机流程是
(1) 载入BIOS的硬件信息,并取得第一个开机装置的代号
(2)读取第一个开机装置的MBR的boot Loader (grub)的开机信息
(3)载入OS Kernel信息,解压Kernel,尝试驱动硬件
(4) Kernel执行init程序并获得run-lebel信息(如3或5)
(5) init执行/etc/rc.d/rc.sysinit
(6)启动内核外挂模块(/etc/modprobe.conf)
(7) init执行run-level的各种Scripts,启动服务
(8) init执行/etc/rc.d/rc.local
(9)执行/bin/login,等待用户Login
(10)Login后进入Shell
/etc/rc.d/rc.sysinit 文件详解
http://blog.csdn.net/jiangcl207504/archive/2010/01/15/5192215.aspx
linux 设置开机启动服务
http://darkmasky.javaeye.com/blog/253753
总结一下chkconfig的本质就是决定是否需要一个链接,请看如下测试:
[root@c190 ~]# /sbin/chkconfig --level 345 iptables on
[root@c190 ~]# ll /etc/rc.d/rc3.d |grep iptable
lrwxrwxrwx 1 root root 18 Nov 5 16:19 S08iptables -> ../init.d/iptables
[root@c190 ~]# /sbin/chkconfig --level 345 iptables off
[root@c190 ~]# ll /etc/rc.d/rc3.d |grep iptable
lrwxrwxrwx 1 root root 18 Nov 5 16:19 K92iptables -> ../init.d/iptables
另经测试setup也是这样的,请看如上。
如何改变linux启动时加载驱动程序的次序?(基本解决!)
已基本解决!
具体的解决办法如下:
编辑/boot目录下config打头的文件,以RedHat AS3 Update3为例是config-2.4.21-20.EL。找到“SCSI low-level drivers”这一段,你会发现“CONFIG_SCSI_AIC7XXX=m”这一行是在“CONFIG_SCSI_MEGARAID=m”、“CONFIG_SCSI_MEGARAID2=m”前头的,这也就是系统在引导时先加载AIC7XXX的原因。将后两行移至最前,保存config-2.4.21-20.EL。然后执行以下命令:
mv initrd-2.4.21-20.EL.img initrd-2.4.21-20.EL.bak
mkinitrd initrd-2.4.21-20.EL.img 2.4.21-20.EL
完成上述操作后重起机器,这时你就能看到在引导时首先加载了megaraid、然后再加载aic7xxx了。启动完成后就能正常使用阵列柜了! :D
据RedHat的人说这个问题在AS4上已经解决了,4.0中会先加载本地的SCSI驱动,然后再加载盘柜的驱动。
然后根据其内容选择内核并加载initrd.img文件到内存中,
内核的main.c文件中的init函数进而执行initrd.img中的init脚本(nash脚本),该脚本运行流程如下:
装载基本的内核系统文件和设备文件 (mknod /dev/tty1....., insmod 硬盘、nfs模块等等)
根据grub的启动命令行参数,判断root根文件设备,参看/boot/grub/grub.conf文件中制定的参数,该参数在内核启动后可有cat /proc/cmdline显示出来,nash和其他的一些程序也是通 过读该系统文件来去内核启动参数的。
在将从grub启动参数中获得根设备并将其与/dev/root设备联接以后,通过nash的switchroot指令将/dev/root设备挂接到根目录上("/")
内核中main.c中init函数,调用/sbin/init处理/etc/inittab文件,该文件流程如下:
运行/etc/rc.sysinit
根据inittab文件第一行initdefault所指定的级别运行该级别下的启动脚本。
建立六个运行控制终端,在runlevel5下运行图形化界面
内核中main.c中init函数,调用/sbin/init处理/etc/inittab文件
rc.sysinit rc.d rc.local etc/inettab mingetty
grub文件详解
http://blog.csdn.net/zhuliting/archive/2010/04/19/5502636.aspx
Linux启动过程综述
http://www.unix-center.net/bbs/archiver/?tid-12186.html
使用ram disk初始化(initrd)
http://www.linuxfans.org/bbs/thread-169737-1-1.html
于是温习鸟哥的开机关机流程与Loader(这个比启动过程综述多了两步,更详细点):
1. 整个开机流程是
(1) 载入BIOS的硬件信息,并取得第一个开机装置的代号
(2)读取第一个开机装置的MBR的boot Loader (grub)的开机信息
(3)载入OS Kernel信息,解压Kernel,尝试驱动硬件
(4) Kernel执行init程序并获得run-lebel信息(如3或5)
(5) init执行/etc/rc.d/rc.sysinit
(6)启动内核外挂模块(/etc/modprobe.conf)
(7) init执行run-level的各种Scripts,启动服务
(8) init执行/etc/rc.d/rc.local
(9)执行/bin/login,等待用户Login
(10)Login后进入Shell
/etc/rc.d/rc.sysinit 文件详解
http://blog.csdn.net/jiangcl207504/archive/2010/01/15/5192215.aspx
linux 设置开机启动服务
http://darkmasky.javaeye.com/blog/253753
总结一下chkconfig的本质就是决定是否需要一个链接,请看如下测试:
[root@c190 ~]# /sbin/chkconfig --level 345 iptables on
[root@c190 ~]# ll /etc/rc.d/rc3.d |grep iptable
lrwxrwxrwx 1 root root 18 Nov 5 16:19 S08iptables -> ../init.d/iptables
[root@c190 ~]# /sbin/chkconfig --level 345 iptables off
[root@c190 ~]# ll /etc/rc.d/rc3.d |grep iptable
lrwxrwxrwx 1 root root 18 Nov 5 16:19 K92iptables -> ../init.d/iptables
另经测试setup也是这样的,请看如上。
如何改变linux启动时加载驱动程序的次序?(基本解决!)
已基本解决!
具体的解决办法如下:
编辑/boot目录下config打头的文件,以RedHat AS3 Update3为例是config-2.4.21-20.EL。找到“SCSI low-level drivers”这一段,你会发现“CONFIG_SCSI_AIC7XXX=m”这一行是在“CONFIG_SCSI_MEGARAID=m”、“CONFIG_SCSI_MEGARAID2=m”前头的,这也就是系统在引导时先加载AIC7XXX的原因。将后两行移至最前,保存config-2.4.21-20.EL。然后执行以下命令:
mv initrd-2.4.21-20.EL.img initrd-2.4.21-20.EL.bak
mkinitrd initrd-2.4.21-20.EL.img 2.4.21-20.EL
完成上述操作后重起机器,这时你就能看到在引导时首先加载了megaraid、然后再加载aic7xxx了。启动完成后就能正常使用阵列柜了! :D
据RedHat的人说这个问题在AS4上已经解决了,4.0中会先加载本地的SCSI驱动,然后再加载盘柜的驱动。
相关文章推荐
- Linux内核分析------跟踪分析Linux内核的启动过程
- Linux内核源码分析--内核启动命令行的传递过程(Linux-3.0 ARMv7)
- Linux内核分析——跟踪分析Linux内核的启动过程
- Linux内核源码分析--内核启动命令行的传递过程(Linux-3.0 ARMv7)
- Linux内核启动过程分析 ___x86
- [转载] linux启动流程分析(3)---内核解压缩过程
- linux内核分析作业3:跟踪分析Linux内核的启动过程
- Linux内核源码分析--内核启动命令行的传递过程(Linux-3.0 ARMv7)
- 跟踪分析Linux内核的启动过程
- Linux课程3:分析Linux内核的启动过程
- 第3节 跟踪分析Linux内核的启动过程【Linux内核分析】
- 实验三:跟踪分析Linux内核的启动过程
- 跟踪分析Linux内核的启动过程(start_kernel到init进程启动)
- Linux内核分析实验3——分析linux内核启动过程
- 3.分析Linux内核的启动过程
- Linux内核分析课程实验三:跟踪分析Linux内核的启动过程
- 跟踪分析Linux内核的启动过程--20135334赵阳林
- linux 内核启动过程分析
- 1 linux内核启动过程分析
- 转载:Linux内核源码分析--内核启动命令行的传递过程(Linux-3.0 ARMv7)