内核编译init脚本调用mountroot()函数分析

mountroot()
{
    pre_mountroot

    # Get the root filesystem type if not set
    if [ -z "${ROOTFSTYPE}" ]; then
        [ -n "${FSTYPE}" ] || FSTYPE=$(blkid -s TYPE -o value "${ROOT}")
        ROOTFSTYPE="${FSTYPE}"
    else
        FSTYPE=${ROOTFSTYPE}

    fi


如果grub.cfg配置文件里面指定了rootfstype=ext3那么就不会调用blkid命令。

那么就会加快开机速度。


当然如果你的根目录所在分区是ext4分区类型,那么也不会启动成功。

所以可以用blkid命令先看看自己分区类型再指定rootfstype。

我的分区类型是ext4,结果内核编译没有编译ext4进内核,又没有编译成模块。

也没有指定rootfstype,所以会运行blkid命令得出fstype为ext4,结果也不能启动成功。


实验的方法:如果你的根分区是ext3,则设置rootfstype=ext4,

如果你的根分区是ext4,则设置rootfstype=ext3,

同时把grub.cfg的quiet去掉,则能让系统停下来,同时打印出错误信息。


mountroot()
{
    pre_mountroot

    # Get the root filesystem type if not set
    if [ -z "${ROOTFSTYPE}" ]; then
        [ -n "${FSTYPE}" ] || FSTYPE=$(blkid -s TYPE -o value "${ROOT}")
        ROOTFSTYPE="${FSTYPE}"
    else
        FSTYPE=${ROOTFSTYPE}
    fi
log_begin_msg "${FSTYPE}"

当然看下面functions里面的代码:
_log_msg()
{
    if [ "$quiet" = "y" ]; then return; fi
    printf "$@"
}

log_success_msg()
{
    _log_msg "Success: $@\n"
}

log_failure_msg()
{
    _log_msg "Failure: $@\n"
}

log_warning_msg()
{
    _log_msg "Warning: $@\n"
}

log_begin_msg()
{
    _log_msg "Begin: $@ ... "
}

log_end_msg()
{
    _log_msg "done.\n"
}
改为:
mountroot()
{
    pre_mountroot

    # Get the root filesystem type if not set
    if [ -z "${ROOTFSTYPE}" ]; then
        [ -n "${FSTYPE}" ] || FSTYPE=$(blkid -s TYPE -o value "${ROOT}")
        ROOTFSTYPE="${FSTYPE}"
    else
        FSTYPE=${ROOTFSTYPE}
    fi
printf "${FSTYPE}"

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值