Chinaunix首页 | 论坛 | 博客
  • 博客访问: 403324
  • 博文数量: 49
  • 博客积分: 6020
  • 博客等级: 准将
  • 技术积分: 520
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-18 21:36
文章分类

全部博文(49)

文章存档

2008年(14)

2007年(4)

2006年(31)

我的朋友

分类: LINUX

2008-04-21 20:43:56

    吃完晚饭了,体力恢复了,那么今天继续分析,上次分析到了/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……
阅读(2261) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~