2

我正在initUbuntu 的 ramdisk 中学习。在scripts/init-bottom/udev我看到这个代码片段:

PREREQ=""
prereqs()
{
    echo "$PREREQ"
}
case $1 in
# get pre-requisites
prereqs)
    prereqs
    exit 0
    ;;
esac

它几乎出现在脚本中的每个脚本scripts/**(如scripts/init-top/all_generic_ide,scripts/local-bottom/ntfs_3g,scripts/local-premount/fixrtc等)。虽然它们可能有一些细微的差异,但它们中的大多数只是在正文代码的顶部有相同的片段。

我从 Ubuntu 阅读了 wiki:initramfs-tools

我完全不知道它的目的是什么。我想我可以意识到它的流程,但就是不知道它会做什么?

4

1 回答 1

1

此样板代码仅打印PREREQ使用参数调用脚本时的值,prereqs然后以零退出。

initramfs-tools的手册页在 HOOK SCRIPTS -> Boot scripts 中说:

除非在脚本中设置了先决条件,否则不保证不同脚本的执行顺序。

因此,其中的脚本scripts/init-bottom将在启动时以任意顺序执行(如果它们没有指定 prereqs)。如果这些脚本相互依赖,则脚本必须定义 prereqs 以确保正确的执行顺序。

例如,一个脚本可能挂载 /home(调用它mount_home),一个脚本创建新的用户帐户(调用它create_users)。然后第二个脚本需要通过更改样板代码来声明对第一个脚本的依赖(调用create_user prereqs应该返回):mount_home

PREREQ="mount_home"
prereqs()
{
    echo "$PREREQ"
}
case $1 in
# get pre-requisites
prereqs)
    prereqs
    exit 0
    ;;
esac

如果您的脚本不依赖于同一目录中的其他脚本,则只需复制样板代码即可。

于 2018-01-17T22:26:52.213 回答