4.3.1. 刷机问题

4.3.1.1. 手动升级SM5/SE5固件的方式

SoC模型下有多种更新固件的方式:

  1. 文件替换 直接更新 kernel、预编译的SDK库以及bootloader等文件 :文件替换方式是指在SoC系统中直接通过替换对应文件的方式分别升级bootloader、kernel和SDK等其它软件。这种方式有一定的风险,如不同软件组件之间的版本匹配、文件损坏等。请参考《 智算模组SM5软件开发指南 》2.2软件更新 b.文件替换 章节。

    注解

    1. 升级kernel: sudo cp emmcboot.itb /boot/;

    2. 升级预编译的库:sudo tar xzf system.tgz -C /system;

    3. 升级bootloader: sudo flash_update -i spi_flash.bin -b 0x6000000 -f 0x0;

    4. 保存并重启使生效:sudo sync; sudo reboot.

  2. 使用 SD卡刷 烧写整个固件:这种方式最为干净可靠,理论上只要您的SE5/SM5硬件没有损坏,都可以进行SD卡刷机,具体步骤请参考《 SE5用户手册 》6.1节 系统升级或《 智算模组SM5软件开发指南 》2.2软件更新 a.SD卡刷机 。(注意:带有预置算法应用的卡刷包和 干净系统的卡刷包 是不一样的,请在升级前核实清楚您的需求,并向技术支持获取相应卡刷包; 卡刷会重写整个eMMC,也即您存储在eMMC的数据全部会丢失,请务必做好数据备份。

  3. 通过以太网,使用 tftp刷机 专用文件 升级:请参考《 SM5开发手册 》7.4 使用tftp刷机。

  4. 使用 DDT设备扫描工具 更新:请联系技术支持获取,目前仅提供Windows客户端。需要注意的是,DDT设备扫描工具依赖于我方安装在SE5/SM5中的服务程序,若您使用自己定制的固件和操作系统,本方式不一定适用。

    DDT 设备扫描工具是算能科技SE5 和 SM5 产品(以下简称产品)配套的辅助工具,它主要提供如下两种功能:
    1) 自动扫描:发现同一局域网内的所有相关 SE5 或 SM5 产品,支持 IP 地址等基础信息更改。
    2) 软件升级:支持对勾选的指定产品进行单个或者批量软件升级。

4.3.1.2. SE5如何刷新固件

  1. 准备一张16GB以上的miniSD卡和读卡器 ,并将卡格式为 fat32格式

    1. Ubuntu系统(版本16.04)可以通过界面直接格式为 fat32 (Compatible with all system and devices(FAT))

    2. Ubuntu系统(版本18.04)通过命令行的方式(下面举例)

      df -h                             ----找到U盘的序列号,本例“/dev/sdb1”
      sudo umount /dev/sdb1             ----解除U盘挂载
      sudo mkfs.vfat -F 32 /dev/sdb1    ----格式化U盘为fat32格式
      
      ../../_images/soc_se5_firmware_update_ubuntu.jpg
    3. win10需要磁盘管理删除卷再添加新卷,用Diskgenius工具格式化为 fat32

      ../../_images/soc_se5_firmware_update_property.png
  2. 下载压缩包,并找到固件升级包( 例如: sdcard_V5R7C01.tgz), 并将其解压后的所有文件拷贝到miniSD卡的根目录下:

    ../../_images/soc_se5_firmware_update_dir_info.png
  3. 确保SE5 处于 断电状态 ,拆卸维护窗盖板,插入 MicroSD 卡,并将设备上电,此时STAT灯呈现为红色(常亮)状态:

    ../../_images/soc_se5_firmware_update_light_constant_red.png
  4. 等待设备升级完成,待STAT灯由红色(常亮)变为绿色(闪烁)状态后,将设备下电,并将 MicroSD 卡移除;

  5. 升级完成,将 SE5 重新上电。

4.3.1.3. SM5刷机方案

4.3.1.3.1. 本地刷机方案

SM5模组提供了SD卡和tftp两种刷机方式,详见SM5指南。客户可以选择两种方式来定制自己的刷机包:

  1. 使用上面提到的BSP SDK来创建刷机包,这种拥有最大的自由度,但需要学习相关脚本的使用;

  2. 将自己的程序提供给算能,由算能制作刷机包在模组出厂时刷好,这种比较适合大批量出货,不适合开发阶段频繁版本迭代;

当然客户也可以选择只刷算能的官方通用刷机包,然后再通过网络等方式把自己的业务应用部署上去。

在上述SD卡刷机包的基础上,这里再提供一种不依赖于SD卡的升级方案。这并不是一个完整的OTA方案,并不包含版本管理、分发等功能,仅仅只是提供拿到升级包后刷到SM5上这最后一公里的方案,客户仍然需要自行实现刷机包部署。也并不支持差分包的方式,主要只是为了方便把SD卡刷机包刷到SM5上。 操作步骤如下:

  1. 首先并不是所有的SD卡刷机包都支持这种方式升级,建议先与技术支持确认。主要是两个限制: a. 刷机包里包含的脚本要支持这种方式 b. 从SM5当在的版本,到刷机包里的版本,eMMC上的分区布局没有发生过变化

  2. 请把SD卡刷机包里的全部文件丢到SM5的/data目录下,效果如下,建议最好能做一下md5校验,确保文件正确:

    ../../_images/soc_ls_data.png
  3. 然后输入如下命令,请务必核对输入的字母,如果有问题了修复起来比较麻烦,最好写到一个脚本文件里来执行

    sudo -i
    echo -e "boot-recovery\n/DATA/" > /dev/mmcblk0p3
    
  4. 然后读取一下看是否符合预期:

    cat /dev/mmcblk0p3
    预期要能看到:
    boot-recovery
    /DATA/
    然后按ctrl+c结束
    
  5. 最后重启系统,请注意不要直接拔电源,以免文件损坏:

    sync
    sudo reboot
    
  6. 正常情况下,重启后应该可以从串口log看到开始刷机了,此过程中请务必不要断电(SE5产品可以通过面板上的指示灯判断升级是否成功,请参考SE5产品手册;SM5产品只能通过串口log,或者等待几分钟后重新尝试ssh登入来确认):

    ../../_images/soc_brush.png
  7. 刷机完成后,SM5会自动重启,待重新进入系统后可以通过bm_version命令查看版本号,确认升级是否成功。请注意/data分区并不会被清除,里面的文件都会保存下来。

如果过程中遇到问题,请参考SM5指南中关于recovery mode的介绍,通过串口终端进入recovery mode的命令行后,可以通过如下命令清除升级标记

mdev -s
dd if=/dev/zero of=/dev/mmcblk0p3 bs=512 count=1
sync
reboot -f

如果升级程序还没有清除eMMC上的数据,上述方式应该可以使您进入原来的系统。如果eMMC上的数据已经被破坏,甚至连recovery mode都进不去了,那么只能再通过SD卡刷机来恢复了。

4.3.1.3.2. 网络刷机方案

SM5指南上已经介绍了tftp刷机,但需要手工敲命令的方式,这里再提供一个便于自动化的方案: SM5的内核启动方式是u-boot去加载/boot目录下的boot.scr.emmc脚本,解析里面的命令,找到内核去启动。所以我们可以通过把tftp升级用的命令替换进这个脚本,让SM5一开机就自动进入tftp升级。只有当tftp升级成功完成时,才会把这个脚本刷回正常的启动脚本;如果升级失败,重启SM5就可以再次进行tftp升级。 脚本内容如下:

echo "set serverip 10.0.0.3; dhcp 0x310000000 \$serverip:boot.scr; set reset_after 1; source 0x310000000" > boot.txt
# 这里serverip要设置成tftp server的IP,SM5需要与这个server在同一个网关下
mkimage -A arm64 -O linux -T script -C none -a 0 -e 0 -n "Distro Boot Script" -d boot.txt boot.scr.emmc
sudo cp ./boot.scr.emmc /boot
sudo reboot