LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 768|回复: 5

gentoo 启动rc文件分析---------(2)

[复制链接]
发表于 2008-4-21 21:08:11 | 显示全部楼层 |阅读模式
吃完晚饭了,体力恢复了,那么今天继续分析,上次分析到了/proc已经完了,那么接下去,首先还是看一段代码
    [ -f /sbin/livecd-functions.sh ] && livecd_read_commandline

    if [ "$(get_KV)" -ge "$(KV_to_int '2.6.0')" ] ; then
        if [[ -d /sys ]] ; then
            ebegin "Mounting sysfs at /sys"
            if [[ ${RC_USE_FSTAB} = "yes" ]] ; then
                mntcmd=$(get_mount_fstab /sys)
            else
                unset mntcmd
            fi
            try mount -n ${mntcmd:--t sysfs sysfs /sys -o noexec,nosuid,nodev}
            eend $?
        else
            ewarn "No /sys to mount sysfs needed in 2.6 and later kernels!"
        fi
    fi


    这一大段主要是针对/sys的,首先第一句话

[ -f /sbin/livecd-functions.sh ] && livecd_read_commandline


    这个是在livecd启动的时候才会用到这个,因为现在已经是安装到硬盘了,所以这里不执行的。

[ "$(get_KV)" -ge "$(KV_to_int '2.6.0')" ]


    这里需要是两个函数,分别是get_KV和KV_to_int,这两个函数在/sbin/functions.sh里面,先介绍一下KV_to_int()

KV_to_int() {
    [[ -z $1 ]] && return 1

    local KV_MAJOR="$(KV_major "$1")"
    local KV_MINOR="$(KV_minor "$1")"
    local KV_MICRO="$(KV_micro "$1")"
    local KV_int="$(( KV_MAJOR * 65536 + KV_MINOR * 256 + KV_MICRO ))"

      if [[ ${KV_int} -ge 131584 ]] ; then
        echo "${KV_int}"
        return 0
    fi

    return 1
}



   这个函数主要是由3个函数,KV_MAJOR,KV_MINOR,KV_MICRO,分别获取内核版本的3个值,然后做个比较,最小版本是2.2.0

   接下去介绍一下get_KV()

_RC_GET_KV_CACHE=""
get_KV() {
    [[ -z ${_RC_GET_KV_CACHE} ]] \
        && _RC_GET_KV_CACHE="$(uname -r)"

    echo "$(KV_to_int "${_RC_GET_KV_CACHE}")"

    return $?
}



    这个函数就是吧当前内核版本用KV_to_int这个函数处理,并给出返回值.

    看完了这两个函数,我们继续返回上面的地方讲解

[ "$(get_KV)" -ge "$(KV_to_int '2.6.0')" ]



    这个判断成立,然后判断/sys这个目录是否存在[[ -d /sys ]],显然可以继续走下去,这个时候就会在屏幕上显示Mounting sysfs at /sys,下面是开机时候的信息


    然后的代码

     if [[ ${RC_USE_FSTAB} = "yes" ]] ; then
           mntcmd=$(get_mount_fstab /sys)
     else
           unset mntcmd
     fi



    RC_USE_FSTAB这变量在/etc/init.d/rc里面定义的值在no,所以上面这段都不执行

try mount -n ${mntcmd:--t sysfs sysfs /sys -o noexec,nosuid,nodev}



    这句的话意思就是执行mount -n -t sysfs sysfs /sys -o noexec,nosuid,nodev.在后面两句话都没有,就是判断是否有错误和一个空操作.

    ok,/sys分析完了,第二篇,继续出现令人讨厌的To be continue……
    原文地址:http://blog.chinaunix.net/u/15960/showart_571893.html
发表于 2008-4-21 23:10:15 | 显示全部楼层
ym2death
回复 支持 反对

使用道具 举报

发表于 2008-4-21 23:30:05 | 显示全部楼层
希望楼主在发布完连载之后,可以整理成一篇完整的文章,以方面后人查阅,学习
先行谢过
回复 支持 反对

使用道具 举报

发表于 2008-4-22 00:02:19 | 显示全部楼层
从明天开始跟着学习,不懂就问,好贴先顶。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-4-22 08:46:59 | 显示全部楼层
发完连载后整理一下
回复 支持 反对

使用道具 举报

发表于 2008-4-22 09:45:50 | 显示全部楼层
非常期待
已收了第一篇了,等连载完后建议zhllg弄成精华贴吧
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表