和 bootloader (uboot) 溝通(作用)部份,是 installer/bootenv.go
用的是 uboot 的 userland tools:
- fw_printenv
- fw_setenv
- /etc/fw_env.config
CommitUpdate() Rollback() InstallUpdate()配合官方的 state-scripts 文件來看..
-- state script 就是mender 提供的 callback function,mender 把狀態分為 9 個狀態。然後每個狀太的 enter, leave 都會 call 對應名稱的 shell script
有關 root filesystem 的 script,例如 retrain-ssh-keys,就是把新 root partition mount 近來,然後把目前 root fs 的 key date copy 過去。
然後 script 的開頭...
current=$(/sbin/fw_printenv mender_boot_part | awk -F = '{ print $2 }') if [ $current = "2" ]; then newroot=/dev/mmcblk0p3 elif [ $current = "3" ]; then newroot=/dev/mmcblk0p2 else echo "Unexpected current root: $current" >&2 exit 1 fi從 uboot 的 env 知道目前的 boot partition,然後令一個就是 update partition
沒有留言:
張貼留言