欢迎来到天天文库
浏览记录
ID:40749623
大小:37.50 KB
页数:5页
时间:2019-08-07
《linux 启动流程详解》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、一、从哪里到哪里本文旨在描述linux中内核如何调用启动,然后如何从img的文件系统切换到硬盘的过程。描述起于:linux-2.6.11/init/main.c中函数staticintinit(void*unused)描述止于:/etc/rc.d/rc.sysinit文件的被调用二、描写流程在linux代码linux-2.6.11/init/main.c中init这个函数被调用时,初始启动的文件系统镜像:/boot/initrd-2.6.11.12.img(以2.6.11.12内核为例)已被grub加载到内存中,并已挂载到根目录上("/")。1、我们先来看
2、看initrd-2.6.11.12.img到底是个什么东西:[root@wj-server1tmp]#cd/tmp[root@wj-server1tmp]#cp/boot/initrd-2.6.11.12.img/tmp/initrd-2.6.11.12.gz[root@wj-server1tmp]#gunzipinitrd-2.6.11.12.gz解压缩后的文件为:[root@wj-server1tmp]#ls-linitrd-2.6.11.12-rw-r--r-- 1rootroot846848 7月3117:01initrd-2.6.11.12是
3、一个CPIO格式的文件,该文件格式是种文件镜像让我们将它解开到一个目录中看看其中的具体内容:[root@wj-server1tmp]#mkdirinitrd[root@wj-server1tmp]#cdinitrd[root@wj-server1initrd]#cpio-i ../initrd-2.6.11.121654blocks[root@wj-server1initrd]#gzip../initrd-2.6.11.12[root@wj-server1initrd]#mv../initrd-2.6.11.12.gz../initrd-2.6.11.1
4、2.img2、回到内核init函数中,看看如何调用/boot/initrd-2.6.11.12.img中/init脚本的 ....//这里判断在grub装载的/boot/initrd-2.6.11.12.img中是否有"/init"这个文件?if(sys_access((constchar__user*)"/init",0)==0) execute_command="/init"else ....//如果有"/init"这个文件就先运行它。if(execute_command) run_init_process(execute_command);r
5、un_init_process("/sbin/init");run_init_process("/etc/init");run_init_process("/bin/init");run_init_process("/bin/sh");panic("Noinitfound.Trypassinginit=optiontokernel");由代码我们看到kernel会先判断并运行/boot/initrd-2.6.11.12.img中的/init文件,我们来看看该/boot/initrd-2.6.11.12.img/init文件的内容,我们上面已将该文件展开到目
6、录/tmp/initrd中:[root@wj-server1initrd]#cat./init#!/bin/nash #该文件是个nash的脚本文件#挂接proc文件系统mount-tproc/proc/proc#不输出nash调试信息,由/proc/cmdline决定,cat/proc/cmdline我的启动参数#输出roroot=/dev/hda3vga=791splash=silent,如果该命令行中带了quiet参#数,则不输出nash提示信息。setquiet#提示信息(这里提示因该放到上面去,mkinitrd-4.2.17-2mgc.rp
7、m包中原来如是,#笔误?为什么这里牵涉到mkinitrd这个包类?因为:/boot/initrd-2.6.11.12.img#文件由下面命令生成:mkinitrd/boot/initrd-2.6.11.12.img2.6.11.12)echoMounted/procfilesystem#挂接sys文件系统echoMountingsysfsmount-tsysfs/sys/sys#创建/dev临时目录echoCreating/devmount-omode=0755-ttmpfs/dev/dev#创建设备文件(这些设备文件在切换到硬盘后,由/etc/rc.sy
8、sinit中start_udev#重新创建)mknod/dev/c
此文档下载收益归作者所有