でびあんの initrd (10)

次は script/local-premount なソレ。どちらも依存するナニは無い。

$ grep PRERE /local-premount/*
../local-premount/resume:PREREQ=""
../local-premount/resume:       echo "$PREREQ"
../local-premount/uswsusp:PREREQ=""
../local-premount/uswsusp:      echo "$PREREQ"
$

ここも微妙。ちなみに mountroot から呼ばれるソレ的には

  • local-top は必要な kernel module の load とか
  • local-premount は suspend なソレからの復帰

みたいな形になっている模様。両方ざっくりベースで以下に控えを。

resume

  • 起動オプション resume= が指定されてなかったら終了
  • 起動オプション resume= の値で resume 再設定
  • resume= で指定されたファイルが存在しない場合は終了
  • /sys/power/resume が存在したら /bin/resume 実行

uswsusp

s2disk という utility がある模様。hibernate 云々とある。

  • noresume が /proc/cmdline にあったら exit
  • /sys/class/misc/snapshot/dev が無かったら exit
    • kernel が snapshot サポート外、との事
  • DEV に cat /sys/class/misc/snapshot/dev の出力をセット
  • /dev/snapshot が無かったら mknod している
    • major, minorは DEV から取り出している
  • /sbin/resume が実行可能でなかったら exit
  • /sbin/resume 実行

このあたり、resume とか hibernate あたりを掘る必要あり。

script/local-bottom 配下。
# ってデフォルトではファイルがありませんな。これで mountroot を抜けます。以降を全部以下に引用。

maybe_break bottom
[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/init-bottom"
run_scripts /scripts/init-bottom
[ "$quiet" != "y" ] && log_end_msg

# Move virtual filesystems over to the real filesystem
mount -n -o move /sys ${rootmnt}/sys
mount -n -o move /proc ${rootmnt}/proc

while [ ! -x ${rootmnt}${init} ]; do
	panic "Target filesystem doesn't have ${init}"
done

# Confuses /etc/init.d/rc
if [ -n ${debug} ]; then
	unset debug
fi

# Chain to real filesystem
maybe_break init
exec run-init ${rootmnt} ${init} "$@" <${rootmnt}/dev/console >${rootmnt}/dev/console

script/init-bottom がナニ。デフォルトで配下にあるのは udev というスクリプト。udev も今一つ理解できてません。ちょっとこのあたりもきちんと確認する必要ありそげ。