



免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一、从哪里到哪里本文旨在描述linux中内核如何调用启动,然后如何从img的文件系统切换到硬盘的过程。描述起于:linux-2.6.11/init/main.c中函数 static int init(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、我们先来看看initrd-2.6.11.12.img到底是个什么东西:rootwj-server1 tmp# cd /tmprootwj-server1 tmp# cp /boot/initrd-2.6.11.12.img /tmp/initrd-2.6.11.12.gzrootwj-server1 tmp# gunzip initrd-2.6.11.12.gz解压缩后的文件为:rootwj-server1 tmp# ls -l initrd-2.6.11.12-rw-r-r-1 root root 8468487月 31 17:01 initrd-2.6.11.12是一个CPIO格式的文件,该文件格式是种文件镜像让我们将它解开到一个目录中看看其中的具体内容:rootwj-server1 tmp# mkdir initrdrootwj-server1 tmp# cd initrdrootwj-server1 initrd# cpio -i./initrd-2.6.11.121654 blocksrootwj-server1 initrd# gzip ./initrd-2.6.11.12rootwj-server1 initrd# mv ./initrd-2.6.11.12.gz ./initrd-2.6.11.12.img2、回到内核init函数中,看看如何调用/boot/initrd-2.6.11.12.img中/init脚本的 ./ 这里判断在grub装载的/boot/initrd-2.6.11.12.img中是否有/init这个文件?if (sys_access(const char _user *) /init, 0) = 0) execute_command = /initelse ./ 如果有/init这个文件就先运行它。if (execute_command) run_init_process(execute_command);run_init_process(/sbin/init);run_init_process(/etc/init);run_init_process(/bin/init);run_init_process(/bin/sh);panic(No init found. Try passing init= option to kernel);由代码我们看到kernel会先判断并运行/boot/initrd-2.6.11.12.img中的/init文件,我们来看看该/boot/initrd-2.6.11.12.img/init文件的内容,我们上面已将该文件展开到目录/tmp/initrd中:rootwj-server1 initrd# cat ./init#!/bin/nash # 该文件是个nash的脚本文件# 挂接proc文件系统mount -t proc /proc /proc# 不输出nash调试信息,由/proc/cmdline决定,cat /proc/cmdline我的启动参数# 输出ro root=/dev/hda3 vga=791 splash=silent,如果该命令行中带了quiet参# 数,则不输出nash提示信息。setquiet# 提示信息(这里提示因该放到上面去,mkinitrd-4.2.17-2mgc.rpm包中原来如是,# 笔误?为什么这里牵涉到mkinitrd这个包类?因为:/boot/initrd-2.6.11.12.img# 文件由下面命令生成:mkinitrd /boot/initrd-2.6.11.12.img 2.6.11.12)echo Mounted /proc filesystem# 挂接sys文件系统echo Mounting sysfsmount -t sysfs /sys /sys# 创建/dev临时目录echo Creating /devmount -o mode=0755 -t tmpfs /dev /dev# 创建设备文件(这些设备文件在切换到硬盘后,由/etc/rc.sysinit中start_udev# 重新创建)mknod /dev/console c 5 1mknod /dev/null c 1 3mknod /dev/zero c 1 5# 新建伪终端目录mkdir /dev/pts# 新建共享内存目录mkdir /dev/shm# 这里是调用的nash中的makedevs指令装载硬盘等块设备,不装载其他设备只装载# 硬盘等块设备echo Starting udev# 告诉内核当发现新拔插设备时用/sbin/hotplug程序来处理echo -n /sbin/hotplug /proc/sys/kernel/hotplugmakedevsmakedevs # 这里多搞一次没必要echo Creating root device# 由grub启动命令行root=/dev/hda3来联接设备/dev/root到root变量所指定的启动# 设备,见下面我的grub启动参数:# kernel /boot/vmlinuz-2.6.11.12ro root=/dev/hda3 vga=791 splash=silentmkrootdev /dev/root# 挂接/dev/root目录echo Mounting root filesystemmount -o defaults -ro -t ext3 /dev/root /sysrootecho Switching to new root# 切换根目录到设备/dev/root目录,运行完该命令根目录/-/dev/hda3switchroot -movedev /sysroot由上面的注释我们大概能够明白./init脚本的基本运行流程:a、装载基本的内核系统文件和设备文件b、根据grub的启动命令行参数,判断root根文件设备,参看/boot/grub/grub.conf文件中制定的参数,该参数在内核启动后可有cat /proc/cmdline显示出来,nash和其他的一些程序也是通过读该系统文件来去内核启动参数的。c、在将从grub启动参数中获得根设备并将其与/dev/root设备联接以后,通过nash的switchroot指令将/dev/root设备挂接到根目录上(/)看看这样操作后,留下的痕迹:rootwj-server1 initrd# ls -l /dev/rootlrwxrwxrwx1 root root 97月 31 12:06 /dev/root - /dev/hda3rootwj-server1 initrd# mount/dev/hda3 on / type ext3 (rw)到此为止,已将硬盘设备装载到根目录下了,从而取代了原来有initrd.img文件的根位置。3、再回头看看内核中main.c中init函数,看看如何调用/sbin/init处理/etc/inittab文件 ./ 如果有/init这个文件就先运行它。if (execute_command) run_init_process(execute_command);run_init_process(/sbin/init);run_init_process(/etc/init);run_init_process(/bin/init);run_init_process(/bin/sh);panic(No init found. Try passing init= option to kernel);我们已经运行完run_init_process(execute_command);这里了,然后继续运行:run_init_process(/sbin/init);run_init_process(/etc/init);run_init_process(/bin/init);run_init_process(/bin/sh);/sbin/init这个文件在SysVinit-2.85-34mgc.rpm这个包中,该程序的主要处理代码在文件:sysvinit-2.85/src/init.c中,该文件主要查找和处理/etc/inittab文件,按照该文件的内容依次做处理。rootwj-server1 initrd# cat /etc/inittab# inittab This file describes how the INIT process should set up# the system in a certain run-level.# Author: Miquel van Smoorenburg, # Modified for RHS Linux by Marc Ewing and Donnie Barnes# Default runlevel. The runlevels used by RHS are:# 0 - halt (Do NOT set initdefault to this)# 1 - Single user mode# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)# 3 - Full multiuser mode# 4 - unused# 5 - X11# 6 - reboot (Do NOT set initdefault to this)#id:5:initdefault: # /sbin/init 根据这里判断启动的级别# System initialization.si:sysinit:/etc/rc.d/rc.sysinit # /sbin/init 会最先运行这个系统配置文件l0:0:wait:/etc/rc.d/rc 0 # /sbin/init 根据上面取得的级别运行相应l1:1:wait:/etc/rc.d/rc 1 # 目录下的启动脚本l2:2:wait:/etc/rc.d/rc 2l3:3:wait:/etc/rc.d/rc 3l4:4:wait:/etc/rc.d/rc 4l5:5:wait:/etc/rc.d/rc 5l6:6:wait:/etc/rc.d/rc 6# Trap CTRL-ALT-DELETEca:ctrlaltdel:/sbin/shutdown -t3 -r now # 设置关机热键# When our UPS tells us power has failed, assume we have a few minutes# of power left.Schedule a shutdown for 2 minutes from now.# This does, of course, assume you have powerd installed and your# 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 runlevels1:2345:respawn:/sbin/mingetty tty1 # 建立6个登陆控制终端可以通过CTRL-ALT-F?2:2345:respawn:/sbin/mingetty tty2 # 切换,?表示第几个登陆控制台,比如第13:2345:respawn:/sbin/mingett
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 黑龙江省齐齐哈尔市建华区2026届九上化学期中质量检测试题含解析
- 企业培训课件图片大全
- 2026届安徽省六安市裕安中学九年级化学第一学期期中检测模拟试题含解析
- 2025-2030肉牛养殖行业疫病防控技术与生物安全措施分析报告
- 2025年大庆市第二十三中学初中部招聘教师备考模拟试题及答案解析
- 2025年哈尔滨市团结小学校招聘临聘教师4人备考模拟试题及答案解析
- 成都市锦江区花园街幼儿园2025年公开招聘员额教师(11人)备考考试题库附答案解析
- 2025四川攀枝花市仁和区医共体总医院定岗定薪护士招聘5人考试模拟试题及答案解析
- 2025上海同济大学后勤管理与保障处节能保障管理岗招聘1人考试模拟试题及答案解析
- 2025年西咸新区泰和医院招聘(6人)备考考试题库附答案解析
- 一例感染性休克患者护理查房汇报
- 电池热管理机组知识
- 《电力行业职业技能标准 农网配电营业工》
- 《戏曲服饰欣赏》课件
- 《公共基础知识》贵州省黔南布依族苗族自治州都匀市2024年事业单位考试统考试题含解析
- 电力营销业务培训课件
- 技术方案评审表
- 人教版九年级数学下册第二十六章反比例函数-作业设计
- 人美小学美术五上《第1课:肖像艺术》课件
- 湘美版五年级上册美术全册教案
- 浙江省通用安装工程预算定额第八册
评论
0/150
提交评论