首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >U引导脚本,允许在哪个rootfs部件启动之间进行选择(RAUC)

U引导脚本,允许在哪个rootfs部件启动之间进行选择(RAUC)
EN

Stack Overflow用户
提问于 2019-10-01 10:41:11
回答 1查看 2.1K关注 0票数 2

我已经成功地创建了一个具有两个rootfs分区的映像,以便在我的jetson上使用yocto/poky运行。我遵循元- rauc层自述和rauc用户手册,创建了system.conf文件和rauc_%.bbappend文件,并且能够成功地创建包。

据我所知,我需要某种U引导脚本

为了使RAUC能够切换正确的插槽,其系统配置必须从引导加载程序的角度指定相应插槽的名称。您还必须在引导加载程序本身中设置一个适当的引导选择逻辑,方法是编写脚本(如GRUB、up )或使用专用的引导选择基础设施(如Barebox中的引导选择器)。 引导加载程序还必须提供一组变量,Linux用户空间可以修改这些变量,以更改引导顺序或优先级。 在这个接口准备好之后,RAUC将关心适当地设置引导逻辑。例如,它将在写入之前关闭要更新的插槽,并在成功完成安装后重新激活它。

我是在yocto层或build文件夹中的某个地方制作脚本,还是在生成图像后需要在jetson上安装脚本?--这个脚本的内容是什么?

**************************************************EDIT********************************************************

我写了这个剧本:

代码语言:javascript
复制
test -n "${BOOT_ORDER}" || setenv BOOT_ORDER "system0 system1"
test -n "${BOOT_system0_LEFT}" || setenv BOOT_system0_LEFT 3
test -n "${BOOT_system1_LEFT}" || setenv BOOT_system1_LEFT 3

setenv bootargs
for BOOT_SLOT in "${BOOT_ORDER}"; do
  if test "x${bootargs}" != "x"; then
    # skip remaining slots
  elif test "x${BOOT_SLOT}" = "xsystem0"; then
    if test ${BOOT_system0_LEFT} -gt 0; then
      setexpr BOOT_system0_LEFT ${BOOT_system0_LEFT} - 1
      echo "Found valid slot system0, ${BOOT_system0_LEFT} attempts remaining"
      setenv distro_bootpart "1"
      setenv boot_line "mmc 1:1 any ${scriptaddr} /boot/extlinux/extlinux.conf"
      setenv bootargs "${default_bootargs} root=/dev/mmcblk0p1 rauc.slot=system0"
    fi
  elif test "x${BOOT_SLOT}" = "xsystem1"; then
    if test ${BOOT_system1_LEFT} -gt 0; then
      setexpr BOOT_system1_LEFT ${BOOT_system1_LEFT} - 1
      echo "Found valid slot system1, ${BOOT_system1_LEFT} attempts remaining"
      setenv distro_bootpart "13"
      setenv boot_line "mmc 1:D any ${scriptaddr} /boot/extlinux/extlinux.conf"
      setenv bootargs "${default_bootargs} root=/dev/mmcblk0p13 rauc.slot=system1"
    fi
  fi
done

if test -n "${bootargs}"; then
  saveenv
else
  echo "No valid slot found, resetting tries to 3"
  setenv BOOT_system0_LEFT 3
  setenv BOOT_system1_LEFT 3
  saveenv
  reset
fi

sysboot ${boot_line}

我在我的中间层得到了一个食谱recipes-bsp/u-boot/u-boot-script.bb

代码语言:javascript
复制
LICENSE = "GPLv2+"
LIC_FILES_CHKSUM = "file://Licenses/README;md5=30503fd321432fc713238f582193b78e"

S = "${WORKDIR}/git"

PACKAGE_ARCH = "${MACHINE_ARCH}"

DEPENDS = "u-boot-mkimage-native"

inherit deploy

BOOTSCRIPT ??= "${THISDIR}/uboot.sh"

do_mkimage () {
    uboot-mkimage -A arm -O linux -T script -C none -a 0 -e 0 \
                  -n "boot script" -d ${BOOTSCRIPT} ${S}/boot.scr
}

addtask mkimage after do_compile before do_install

do_compile[noexec] = "1"

do_install () {
    install -D -m 644 ${S}/boot.scr ${D}/boot.scr
}

do_deploy () {
    install -D -m 644 ${D}/boot.scr \
                      ${DEPLOYDIR}/boot.scr-${MACHINE}-${PV}-${PR}

    cd ${DEPLOYDIR}
    rm -f boot.scr-${MACHINE}
    ln -sf boot.scr-${MACHINE}-${PV}-${PR} boot.scr-${MACHINE}
}

addtask deploy after do_install before do_build

FILES_${PN} += "/"

COMPATIBLE_MACHINE = "jetson-nano"

我可以看到脚本图像正在进入work/jetson_nano_poky-linux/u-boot-tegra/2016.07.../git/文件夹。

但是如何在u引导中使用它呢?-如何确保这个脚本在每次引导时都自动运行?

EN

回答 1

Stack Overflow用户

发布于 2020-06-12 14:26:54

booted默认引导序列的一部分试图在第一个分区中找到一个名为boot.src的文件,该文件是从其引导的位置启动的。如果找到这个文件,那么它将尝试运行这个脚本。文件中的命令可以基于RAUC语法,以便当RAUC在用户空间中被激活时,它可以更新相同的环境变量。因此,RAUC通过命令int脚本文件来处理引导序列。RAUC无法直接改变up引导序列的流

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58183097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档