|
|
吃完晚饭了,体力恢复了,那么今天继续分析,上次分析到了/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 |
|