本文正在更新中…
Digi核心板或核系统模块是一个带有ARM处理器,闪存,RAM和电源管理芯片,并将处理器引脚引出的完整片上系统,可以把核心模块当成一片微型计算机。在核心模块的闪存中预置有Digi深度定制的U-Boot启动器,上电时,系统镜像就能被U-Boot加载到RAM中运行,完成系统的启动。向闪存中烧入U-Boot或不同的操作系统镜像的过程,则称为固件更新。Digi核心模块支持多种向flash更新固件的方式,包括利用U-Boot通过网络TFTP或是SD卡,USB接口等来更新固件,以及在Linux系统中在线更新固件等各种不同的方式。
Digi的核心模块上预置有深度定制的U-Boot启动器,支持加载不同的操作系统,固件更新可采用U-Boot中的update命令,使用uSD卡或以太网,配合console就能完成不同操作系统的镜像烧写。U-Boot的固件更新命令也可以用来更新U-Boot本身。
核心板上电后,首先会运行启动器U-Boot,并根据启动器的预置命令加载不同的操作系统。上电后的启动信息会打印到U-Boot默认指定的某个UART上,该串口称为Cosole口。可能通过Console口和核心板的U-Boot或Linux/android系统进行交互。B连接开发板的Console口到电脑串口,并配置好串口波特率(默认115200/8/N/1),就可以在电脑的上查看启动信息,执行U-Boot命令等。
默认地,上电后会根据U-Boot的参数命令加载系统,我们可以在加载系统之前,按任意键停在U-Boot环境中,从而来执行一些U-Boot的命令,如更新固件,设置网络参数,更改分区等。这些操作要保证核心模块能够正常上电并进入U-Boot,如果您的核心模块预置的U-Boot因为误操作或烧入不可用的固件而无法启动,请参考如何恢复核心模块的U-Boot来通过USB来恢复U-Boot固件到内置的闪存中。
不论通过哪种介质在U-Boot中升级固件,首先都要下载或编译好待更新的固件,对于DEY系统来说,完整的固件包括U-Boot,内核,恢复分区,文件系统四个。Digi官方的FTP网站提供了各种预编译的固件,您可以在此下载卡刷包,或是下载单个或多个待更新的固件。
通过网络TFTP服务来更新核心模块的片上系统显得十分方便。在使用前,您需要接好网线,并在U-Boot中配置好核心模块的IP以及存放有待升级固件的TFTP服务器IP。
默认地,核心模块的第一个网口IP地址为:192.168.42.30,您可以更改为和电脑同一网段,这可以通过配置自动获取IP或是固定IP来实现。
设置好IP地址后,您还需要设置TFTP服务器的地址并保存到闪存中:
⇒ setenv serverip w.x.y.z
⇒ saveenv
注意TFTP服务器地址和核心板的IP地址需要在同一网段,配置好后,你可以尝试在U-Boot中去ping一下TFTP服务器,确保网络畅通,接下来就可以用网络来更新固件了。
注意,虽然你可以在核心板的终端窗口去ping主机,但您无法反方向通过电脑去ping核心板,因为核心板上只运行有一个U-Boot,它并没有带响应ping请求的协议。
更新U-Boot
注意核心模块出厂已经带了稳定版本的U-Boot,如果使用原厂的U-Boot,你并无需频繁更新。若要更新U-Boot,执行:
⇒ update uboot tftp <u-boot-file>.imx
通常更新完U-Boot,你需要重新启动以便使用它。不同版本的U-Boot可能带来参数的增加或变化,建议重新启动后,执行一次
⇒ env default -a
⇒ saveenv
这样可以使得模块恢复该版本的默认参数。
注意,IP地址也恢复默认,所以需参考上述部骤重设置一下网络和serverip
默认地,flash中有一个update分区预留给将来从Linux系统中在更新固件使用,如果你刚从U-Boot更新完固件,可以格式化这个分区,如果你从未进行过在线更新,也可以不进行格式化操作。
要格式化update分区,执行:
⇒ setenv recovery_command wipe_update
⇒ saveenv
⇒ run recoverycmd
或者略过上述三个命令,直接启动进入系统
⇒ boot
此外,flash中有一个update分区预留给将来从Linux系统中在更新固件使用,如果你刚从U-Boot更新完固件,可以格式化这个分区,如果你从未进行过在线更新,也可以不进行格式化操作。
要格式化update分区,执行:
⇒ setenv recovery_command wipe_update
⇒ saveenv
⇒ run recoverycmd
或者略过上述三个命令,直接启动进入系统
⇒ boot
或直接启动进入系统
⇒ boot
在单板机上手初步的文章中,我们介绍的卡刷的方法,实际上就是一种通过SD卡更新固件的方法,不过在卡刷中,我们使用的是一系列的U-Boot命令组成的脚本,我们也可以在U-Boot中通过输入一个一个的命令地来执行SD卡更新固件的相关功能。
更新U-Boot
注意核心模块出厂已经带了稳定版本的U-Boot,如果使用原厂的U-Boot,你并无需频繁更新。若要更新U-Boot,执行:
⇒ update uboot mmc 0 fat <u-boot-file>.imx
通常更新完U-Boot,你需要重新启动以便使用它。不同版本的U-Boot可能带来参数的增加或变化,建议重新启动后,执行一次
⇒ env default -a
⇒ saveenv
这样可以使得模块恢复该版本的默认参数。
默认地,flash中有一个update分区预留给将来从Linux系统中在更新固件使用,如果你刚从U-Boot更新完固件,可以格式化这个分区,如果你从未进行过在线更新,也可以不进行格式化操作。
要格式化update分区,执行:
⇒ setenv recovery_command wipe_update
⇒ saveenv
⇒ run recoverycmd
或者略过上述三个命令,直接启动进入系统
⇒ boot
此外,flash中有一个update分区预留给将来从Linux系统中在更新固件使用,如果你刚从U-Boot更新完固件,可以格式化这个分区,如果你从未进行过在线更新,也可以不进行格式化操作。
要格式化update分区,执行:
⇒ setenv recovery_command wipe_update
⇒ saveenv
⇒ run recoverycmd
或者略过上述三个命令,直接启动进入系统
⇒ boot
或直接启动进入系统
⇒ boot
待续,请先参考官方英文文档
CC6UL:修复无法启动的ConnectCore 6UL核心模块
CC6:修复无法启动的CC6模块
为了在Linux环境中进行固件更新,同样地,您需要有tftp服务器软件和串口终端程序。可以参考常用软件安装配置来安装配置tftp服务器软件tftpd-hpa和minicom串口终端。
虽然调试终端和TFTP服务器软件无需在同一台电脑上,不过简单起见,大多数情况我们还是在同一台电脑上操作,所以确保tftpd-hpa服务已经运行,可以接受U-Boot的连接和传输请求。
Digi的开发板上console口连接所需的配置为115200,8/N/1,无流控。使用minicom作为串口终端程序,请注意你的minicom配置,确保串口设备号和波特率等正确设置。按ctrl+a就可以显示出当前minicom配置,CTRL+A Z可以调出minicom的配置菜单。Minicom的终端界面如下图所示:
通常地,我们将TFTP服务器所在的电脑IP地址配置为192.168.42.1,以便和默认的核心模块网口IP在同一网段,如果您使用的内部网络有特殊要求,需要为核心模块配置内网IP,请参考U-Boot命令用setenv来设置ipaddr的值,以改变核心模块的IP地址或是用dhcp命令让核心模块的U-Boot自动获取一个内网IP。
默认地,核心板第一个以太网口出厂时U-Boot中定义的默认IP地址为:
IP 192.168.42.10 Netmask 255.255.255.0 Gateway IP 0.0.0.0
你也可以在U-Boot中用print命令打印全部参数来查看对应值。
通常在量产时,我们需要把tftp服务器配置成核心板U-Boot上serverip参数的默认值:192.168.42.1,以便上电后核心板去自动查找该tftp服务器的根目录的自动更新脚本,来自动执行固件烧写升级操作。
在核心板上,通过U-Boot的update命令,可以进行固件更新,完整的命令参数,请参考U-Boot用户手册或是在U-Boot中输入
#help 命令名
来查阅。