U-Boot 启动 Toradex Easy Installer

Wednesday, June 6, 2018

Toradex 在去年推出了 Toradex Easy Installer 操作系统安装工具。用户借助该工具能够以图形化界面的操作方式,在 Toradex 的 Arm 计算机模块上方便地安装所需的操作系统,如 Linux、WinCE 以及 Toradex 合作伙伴提供的其他系统包括 QNX、安卓等。这极大降低了用户安装嵌入式系统的难度,同时也让产品的量产编程变得简单。

对于已经使用 Toradex Easy Installer 安装完系统的用户,如果仍旧想要借助 Toradex Easy Installer 更新系统,需要进入 Arm 计算机模块的恢复模式, 连接 USB 接口至电脑。这种连接方法在有些场合下可能并不容易实现和操作。Linux 用户则可以使用 U-Boot 的 distroboot 功能,直接从外部存储介质上启动 Toradex Easy Installer,并进行系统安装。通过这种方法可以实现本地更新系统。下面将介绍如何在 Toradex 的 Arm 计算机模块上使用该功能。

启用 U-Boot distroboot 功能

Toradex 默认的 U-Boot 并没有启用 distroboot,需要在对应模块的配置文件添加 CONFIG_DISTRO_DEFAULTS,例如 Colibri iMX6 模块在 colibri_imx6_defconfig 末尾添加

u-boot-toradex/configs/colibri_imx6_defconfig
CONFIG_DISTRO_DEFAULTS=y


然后重新编译生成 U-Boot 并更新到模块
user@user-pc:~/Toradex/u-boot-toradex$ make colibri_imx6_defconfig
user@user-pc:~/Toradex/u-boot-toradex$ make -j4


制作启动文件

Toradex U-Boot distroboot 支持从 U 盘、SD 卡或者网络(tftp)启动。你需要在 U 盘、SD 卡或者 tftp 根目录下存放 boot.scr 等相关文件。Toradex Easy Installer 已经包含所有的文件,解压后复制到对应目录即可。

Toradex Easy Installer 也是基于 Linux ,常用的 cmdline 同样也适用。如果你需要在 Toradex Easy Installer 启动时加载其他功能,例如修改 device tree,启用电容触摸屏功能,可以创建如下 boot.cmd 文件

# Set timings for 7" multitouch
setenv bootargs console=ttymxc0,115200 quiet video=mxcfb0:dev=lcd,FusionF07A,if=RGB666 rootfstype=squashfs root=/dev/ram autoinstall fullscreen ${teziargs}

# Reenable fdt relocation since in place fdt edits corrupt the ramdisk
# in a FIT image...
setenv fdt_high

# Load FIT image from location as detected by distroboot
load ${devtype} ${devnum}:${bootpart} ${ramdisk_addr_r} ${prefix}tezi.itb

bootm start ${ramdisk_addr_r} && bootm loados && bootm ramdisk && bootm fdt

# Enable capacitive multitouch driver
fdt set /soc/aips-bus@02100000/i2c@021a8000/atmel_mxt_ts@4a status okay

bootm prep && bootm go

然后生成用于启动的 boot.scr

user@user-pc:~/$ mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n "Distro boot script" -d boot.cmd boot.scr


U-Boot 启动 Toradex Easy Installer

将准好的 U 盘、SD 卡连接至 Toradex Arm 计算机模块,进入 U-Boot 命令模式,运行下面命令将启动 Toradex Easy Installer,而无需连接电脑并进入模块的恢复模式。
Colibri iMX6 # run distro_bootcmd

在 Toradex Easy Installer 中你可以更新操作系统。

默认情况下上电启动后 U-Boot 会直接加载模块 Flash 上 Linux 内核并启动。我们可以修改 U-Boot 参数,使其优先从外部介质上的文件启动。在没有连接启动 SD 卡或者 U 盘的情况下再从模块上的 Flash 启动所安装的系统。由于网络 tftp 启动有一定的超时等待时间,为了不影响系统启动时间,我们将禁用 tftp 启动功能,保留从 SD 卡或者 U 盘寻找启动文件。

Colibri iMX6 # setenv boot_targets 'mmc1 usb0'
Colibri iMX6 # setenv bootcmd 'run distro_bootcmd ; run emmcboot ; echo ; echo emmcboot failed ; usb start ;setenv stdout serial,vga ; setenv stdin serial,usbkbd'
Colibri iMX6 # saveenv

同时结合 Toradex Easy Installer 的 autoinstall 功能,我们可以实现 U-Boot 启动 Toradex Easy Installer 后自动安装指定的操作系统。例如在 SD 卡存放 Toradex Easy Installer 所有的启动文件,并在根目录下创建 Colibri-Imx6_Console-Image-Tezi_2.7b5 文件夹,启动存放所要安装系统的 tezi 格式镜像文件和配置文件等,如下面 SD 卡上的文件。

通过上面的配置,默认情况下 Colibri iMX6 将从启动 Flash 上的 Linux 系统,然后正常运行用户的应用程序。如果插入包含 Toradex Easy Installer 启动文件和用户镜像安装文件的 SD 卡或者 U 盘,那么 Colibri iMX6 自动更新所要安装的系统。

总结


借助 U-Boot distroboot 和 Toradex Easy Installer 自动安装功能,用户可以实现 SD 卡或者 U 盘本地更新操作系统。需要注意的是,由于默认的 U-Boot distroboot 没有验证启动文件 boot.scr 合法性的功能,在使用优先从外部介质上的启动时,任何可以在 Arm 计算机模块上启动的系统都可以通过 boot.scr 被加载执行。从而在模块执行其他功能的系统,甚至是带有恶意功能的软件。因此在使用 distroboot 功能时,建议用户根据自己安全需求,修改 U-Boot 代码,防止非法程序在平台上运行。

Author 胡珊逢,FAE,韬睿(上海)

Leave a comment

Your email ID will be kept confidential. Required fields are marked *


Please enter the letters as they are shown in the image above. Letters are not case-sensitive.



* Your comment will be reviewed and then added. Thank you.