M.2制作和启动系统镜像

本章节用于制作从M.2启动需要的镜像,该镜像默认使能了主备分区,并开启了主备同步功能。M.2制作和启动系统镜像的整体流程如下所示。

图1 M.2制作和启动系统镜像流程

系统从M.2启动时,需要用户根据Atlas 200I A2 加速模块底板设计配置userBaseConfig文件使能SATA接口。在任何介质下,直接下载软件包升级驱动和固件重启后,系统会提示找不到M.2 SATA的启动介质,导致M.2 SATA介质的OS启动失败,需要重新构建新的镜像包,通过镜像安装的方式进行升级。

前提条件

已获取表1中对应的ISO和文件系统镜像。

表1 镜像获取

镜像

目标OS

支持的版本

获取方式

说明

ISO

Ubuntu

22.04

单击ubuntu 22.04 ISO镜像下载。

-

openEuler

openEuler-22.03-LTS

  • Linux环境

    同Windows方式获取iso,执行命令wget iso镜像链接

若下载ISO速度过慢,可参考如下方式获取。

  1. 访问镜像链接
  2. 客户自行选择相近的Location。
  3. 下载OS镜像。
    • openEuler-22.03-LTS:进入“openEuler-22.03-LTS/ISO/aarch64”目录,下载OS镜像“openEuler-22.03-LTS-aarch64-dvd.iso”。
    • openEuler-22.03-LTS-SP1:进入“openEuler-22.03-LTS-SP1/ISO/aarch64”目录,下载OS镜像“openEuler-22.03-LTS-SP1-aarch64-dvd.iso”。

openEuler-22.03-LTS-SP1a

文件系统

Ubuntu

22.04

访问Atlas 200I A2 加速模块软件包,下载并解压Ascend-hdk-310b-npu-sample-root-filesystem-soc_23.0.rc1_linux-aarch64.zip,直接获取Sample-root-filesystem-soc_ubuntu-22.04-aarch64.img。

若用户需要自定义文件系统,请参见定制文件系统

openEuler

openEuler-22.03-LTS

访问Atlas 200I A2 加速模块软件包,下载并解压Ascend-hdk-310b-npu-sample-root-filesystem-soc_23.0.rc1_linux-aarch64.zip,直接获取Sample-root-filesystem-soc_openEuler-22.03-LTS-aarch64.img或Sample-root-filesystem-soc_openEuler-22.03-LTS-SP1-aarch64.img。

openEuler-22.03-LTS-SP1a

a:若有软实时OS需求时,需使用的OS为openEuler-22.03-LTS-SP1,否则需使用openEuler-22.03-LTS或Ubuntu。

社区版软件不需要申请下载权限可以直接下载,但软件不能用于商业用途, 详细请参见社区华为软件许可协议;如果您需要用于商业用途,参见定制文件系统的操作步骤进行制作。因此如果您下载软件仅用于调试验证,推荐下载社区版软件。

制作及烧写镜像

  1. 登录Linux服务器。
  2. 执行如下命令,切换至root用户。

    su - root

  3. 修改userBaseConfig文件,重新生成新的“Ascend-hdk-310b-npu-soc_<version>_linux-aarch64.tar.gz”和“Ascend-hdk-310b-npu-driver-soc_<version>_linux-aarch64-repack.run”。(如有软实时OS需求,重新生成新的“Ascend-hdk-310b-npu-soc_<version>_linux-rt-aarch64.tar.gz”和“Ascend-hdk-310b-npu-driver-soc_<version>_linux-rt-aarch64-repack.run”)

    1. 参考SATA接口调测参考,根据Atlas 200I A2 加速模块底板设计修改user_base_config.xml文件并编译,生成“userBaseConfig.bin”文件。
    2. 使用WinSCP工具,将下载软件包获取的源码包“Ascend310B-source.tar.gz”和驱动包“Ascend-hdk-310b-npu-driver-soc_<version>_linux-aarch64.run”(若有软实时OS需求,使用驱动包Ascend-hdk-310b-npu-driver-soc_<version>_linux-rt-aarch64.run)上传至Linux系统root用户属组目录,例如“/opt”。详细操作请参见使用WinSCP传输文件
    3. 执行如下命令,进入源码包所在目录“/opt”

      cd /opt

    4. 执行如下命令,解压源码包“Ascend310B-source.tar.gz”

      tar -xzvf Ascend310B-source.tar.gz

      如果已解压过源码包,可跳过此步骤。

    5. 执行如下命令,进入“Ascend310B-source”目录。

      cd Ascend310B-source

    6. 执行以下命令,为驱动包添加可执行权限。

      chmod u+x /opt/Ascend-hdk-310b-npu-driver-soc_<version>_linux-aarch64.run

      若有软实时OS需求,请执行如下命令。

      chmod u+x /opt/Ascend-hdk-310b-npu-driver-soc_<version>_linux-rt-aarch64.run

    7. 执行如下命令,将驱动包解压至当前文件夹下。

      bash /opt/Ascend-hdk-310b-npu-driver-soc_<version>_linux-aarch64.run --noexec --extract=./repack

      若有软实时OS需求,请执行如下命令。

      bash /opt/Ascend-hdk-310b-npu-driver-soc_<version>_linux-rt-aarch64.run --noexec --extract=./repack

    8. 执行以下命令,进入“/opt/Ascend310B-source/repack/firmware”目录。

      cd /opt/Ascend310B-source/repack/firmware

    9. 执行如下命令,将3.a生成的“userBaseConfig.bin”文件到拷贝当前文件夹下。

      cp /opt/Ascend310B-source/output/userBaseConfig.bin /opt/Ascend310B-source/repack/firmware

    10. (可选)如有软实时需求,参考(可选)获取内核Image文件,将Image文件使用WinSCP工具或其他工具拷贝到当前所在的“firmware”目录下。
    11. 执行如下命令,返回“Ascend310B-source”目录。

      cd /opt/Ascend310B-source

    12. 执行如下命令,编译驱动。

      bash build.sh repack ../Ascend-hdk-310b-npu-driver-soc_<version>_linux-aarch64.run

      编译生成文件在当前路径下,名称为“Ascend-hdk-310b-npu-driver-soc_<version>_linux-aarch64-repack.run”。

      若有软实时OS需求,请执行如下命令。

      bash build.sh repack ../Ascend-hdk-310b-npu-driver-soc_<version>_linux-rt-aarch64.run

      编译生成文件在当前路径下,名称为“Ascend-hdk-310b-npu-driver-soc_<version>_linux-rt-aarch64-repack.run”。

      出现如下类似回显信息,表示驱动重打包成功。

      repack success!
    13. 执行如下命令,新建打包目录并进入该目录。

      mkdir -p /opt/tar

      cd /opt/tar

    14. 使用WinSCP工具或其他工具,将下载软件包获取的“Ascend-hdk-310b-npu-soc_<version>_linux-aarch64.tar.gz”软件包上传至/opt/tar目录下。若有软实时OS需求拷贝名为“Ascend-hdk-310b-npu-soc_<version>_linux-rt-aarch64.tar.gz”的软件包。
    15. 执行如下命令,解压tar.gz包。

      tar -zxvf Ascend-hdk-310b-npu-soc_<version>_linux-aarch64.tar.gz

      若有软实时OS需求,请执行如下命令。

      tar -zxvf Ascend-hdk-310b-npu-soc_<version>_linux-rt-aarch64.tar.gz

    16. 执行如下命令,删除旧文件。

      rm Ascend-hdk-310b-npu-soc_<version>_linux-aarch64.tar.gz Ascend-hdk-310b-npu-driver-soc_<version>_linux-aarch64.run

      若有软实时OS需求,请执行如下命令。

      rm Ascend-hdk-310b-npu-soc_<version>_linux-rt-aarch64.tar.gz Ascend-hdk-310b-npu-driver-soc_<version>_linux-rt-aarch64.run

    17. 执行如下命令,拷贝3.l生成的run包到当前文件夹下。

      cp /opt/Ascend310B-source/Ascend-hdk-310b-npu-driver-soc_<version>_linux-aarch64-repack.run /opt/tar

      若有软实时OS需求,请执行如下命令。

      cp /opt/Ascend310B-source/Ascend-hdk-310b-npu-driver-soc_<version>_linux-rt-aarch64-repack.run /opt/tar

    18. 执行如下命令,重新打包生成tar.gz。

      tar -zcvf Ascend-hdk-310b-npu-soc_<version>_linux-aarch64.tar.gz /opt/tar/*

      若有软实时OS需求,请执行如下命令。

      tar -zcvf Ascend-hdk-310b-npu-soc_<version>_linux-rt-aarch64.tar.gz /opt/tar/*

  4. 使用WinSCP工具或其他工具,将下载软件包获取的制卡所需软件包“sdtool.tar.gz”和前提条件中获取的ISO与文件系统镜像上传至root用户属组目录下,例如“/home/ascend/mksd”。

    • 对于openEuler操作系统,需要将ISO与定制后的文件系统(请参考定制文件系统章节)一并上传至root用户属组目录下,例如“/home/ascend/mksd”。需注意“openEuler-22.03-LTS-aarch64-dvd.iso”镜像配套“Sample-root-filesystem-soc_openEuler-22.03-LTS-aarch64.img”使用,“openEuler-22.03-LTS-SP1-aarch64-dvd.iso”镜像配套“Sample-root-filesystem-soc_openEuler-22.03-LTS-SP1-aarch64.img”使用。
    • 当前目录只允许存放一个版本的软件包。
    • 对于Ubuntu 22.04系统,需要将“ubuntu-22.04-live-server-arm64.iso”镜像与定制后的Sample-root-filesystem-soc_ubuntu-22.04-aarch64.img(请参考定制文件系统章节)一并上传至root用户属组目录下,例如“/home/ascend/mksd。”

  5. 执行如下命令,进入sdtool.tar.gz制卡脚本工具包的上传目录,例如“/home/ascend/mksd”。

    cd /home/ascend/mksd

  6. 在制卡脚本工具包的上传目录下(例如“/home/ascend/mksd”),执行如下命令解压sdtool.tar.gz制卡脚本工具包。

    tar -xzvf sdtool.tar.gz

  1. 执行如下命令,将解压后的文件拷贝至制卡脚本工具包所在目录,例如“/home/ascend/mksd”。

    cp -arf sdtool/* .

  2. 执行如下命令,进入“recovertool”目录。

    cd /home/ascend/mksd/recovertool

  3. 执行如下命令,拷贝构建依赖的驱动文件。

    cp /opt/Ascend310B-source/Ascend-hdk-310b-npu-driver-soc_<version>_linux-aarch64-repack.run /home/ascend/mksd

    cp /opt/tar/Ascend-hdk-310b-npu-soc_<version>_linux-aarch64.tar.gz /home/ascend/mksd/recovertool

    若有软实时OS需求,请执行如下命令。

    cp /opt/Ascend310B-source/Ascend-hdk-310b-npu-driver-soc_<version>_linux-rt-aarch64-repack.run /home/ascend/mksd

    cp /opt/tar/Ascend-hdk-310b-npu-soc_<version>_linux-rt-aarch64.tar.gz /home/ascend/mksd/recovertool

  4. (可选)更改网线和USB的默认IP地址。

    1. 执行如下命令,进入制卡脚本工具包所在目录,例如“/home/ascend/mksd”。

      cd /home/ascend/mksd

    2. 执行如下命令,更改网线的默认IP地址。

      vi make_sd_card.py

      需分别修改“make_sd_card.py”脚本中的“USB_CARD_DEFAULT_IP”、“NETWORK_CARD_DEFAULT_IP”、“NETWORK_CIDR_PREFIX”、“NETWORK_DEFAULT_NETMASK”和“NETWORK_DEFAULT_GATEWAY”的参数值。
      • USB连接方式的默认IP地址为192.168.1.2,网线连接方式的默认IP地址192.168.0.2。
      • USB_CARD_DEFAULT_IP:表示USB连接方式的IP地址,例如192.168.3.5。
      • NETWORK_CARD_DEFAULT_IP:表示IP地址,例如192.168.1.8。
      • NETWORK_CIDR_PREFIX:表示子网掩码中bit是1的个数,例如CIDR PREFIX=24,对应子网掩码为255.255.255.0。
      • NETWORK_DEFAULT_NETMASK:表示子网掩码,例如255.255.255.0。
      • NETWORK_DEFAULT_GATEWAY:表示网关,例如192.168.1.1。
    3. 配置完成后,按“Esc”键,再执行:wq!保存修改,并按“Enter”键退出。

  5. (可选)若用户需要自定义分区的配置,请执行该步骤。

    1. 在驱动包所在目录(例如“/home/ascend/mksd/”)执行如下命令,解压驱动run包,获取“restore_factory.sh”脚本。

      bash Ascend-hdk-310b-npu-driver-soc_<version>_linux-aarch64-repack.run --noexec --extract=./tmp

      若有软实时OS需求,请执行如下命令。

      bash Ascend-hdk-310b-npu-driver-soc_<version>_linux-rt-aarch64-repack.run --noexec --extract=./tmp

    2. 拷贝“restore_factory.sh”脚本到“recovertool”目录。

      cp /home/ascend/mksd/tmp/scripts/restore_factory.sh /home/ascend/mksd/recovertool/

      tmp为临时解压目录,若不需要使用可以删除。

    3. 修改分区配置。

      用户可自定义修改p2及之后的分区,p1不可修改。

      vim ./recovertool/restore_factory.sh

      修改如图2图3红框中所示的配置。

      图2 restore_factory.sh脚本配置1
      图3 restore_factory.sh脚本配置2
      1. 修改分区大小。

        直接修改各个分区PX_SIZE_GiB的值,如修改P8分区大小为20G,则P8_SIZE_GiB=20。

      2. 增加新分区。

        修改CREATE_NEW_PFLAG=yes

        找到add_new_part函数,在#write partition size below, one size occupies one row下面写入分区大小配置,增加几个分区就写几行。

        如:增加三个分区,每个分区大小为20G

        ......
        cat > mkpart_tmp.conf << EOF
        #write partition size below, one size occupies one row
        20
        20
        20
        EOF
        ......
        • 为了保证文件系统的正常使用,修改p2~p8分区大小时不能小于原配置大小。
        • 分区大小的赋值需要为大于0的整数,不支持配置为小数。
        • 修改分区大小或增加新分区后,总大小不能超过M.2的最大容量。

          总大小=p2~p8分区大小+新增分区大小+2.3G,其中2.3G为烧写的镜像包大小,需要保留。

    4. 配置完成后,按“Esc”键,再执行:wq!保存修改,并按“Enter”键退出。

  6. 在脚本工具包所在目录(例如“/home/ascend/mksd/”)执行如下命令,检查emmc-head工具是否可用。

    ./emmc-head --help

    执行命令后有帮助回显信息则表示可用;若回显信息出现-bash: ./emmc-head: No such file or directory的错误提示,请参见emmc-head工具不可用

    Usages: emmc-head firmware_path boot_a_devname boot_b_devname [force_recover]
    The following files must be contained in firmware_path:
    Image, itrustee.img, dt.img, initrd.
    boot_a_devname: A Partition boot device name, for example, eMMC:mmcblk0p2, SD:mmcblk1p2
    boot_b_devname: B Partition boot device name, for example, eMMC:mmcblk0p3, SD:mmcblk1p3
    force_recover: force recover flag.
            Example: /var/davinci/driver/emmc-head ./firmware /dev/mmcblk0p2 /dev/mmcblk0p3

  7. 在脚本工具包所在目录(例如“/home/ascend/mksd/”)执行命令启动镜像脚本“make_sd_card.py”,制作烧写到M.2的系统镜像。

    python3 make_sd_card.py mkrecoverimg M.2

    显示如下类似信息,表示开始制卡,此处仅为示例,具体请以实际情况为准。

    Begin to make Image package for restoring factory settings...
    Please make sure you have installed dependency packages:
       apt-get install -y qemu-user-static binfmt-support gcc-aarch64-linux-gnu g++-aarch64-linux-gnu dosfstools parted kpartx
    Please input Y: continue, other to install them:
    

  8. 根据打印提示信息输入“Y”,等待约10分钟(具体等待时间以实际环境为准)。显示如下信息,表示制卡成功。

    Step: Start to make M.2 SATA SSD or eMMC. It need some time, please wait...
    Make Card successfully!

    执行ls -l查看当前目录下生成的镜像文件为recoverfs-<os-type>-M.2.img,其中<os-type>表示目标镜像的操作系统类型,例如:Ubuntu或者openEuler。

    若出现“[ERROR] Making M.2 SATA SSD failed”类似回显信息,则代表制卡失败,建议用户按照日志错误排查,重新执行python3 make_sd_card.py mkrecoverimg M.2命令制作镜像。

  9. 烧写镜像到M.2。

    1. Atlas 200I A2 加速模块整机下电。
    2. 将M.2插入Atlas 200I A2 加速模块整机并上电。
    3. 使用WinSCP工具或其他工具上传镜像recoverfs-<os-type>-M.2.img(文件大小为2.3G)到Atlas 200I A2 加速模块整机(例如“/home/test”)。
      • 其中<os-type>表示目标镜像的操作系统类型,例如:Ubuntu或者openEuler。
      • 也可以通过转换器将M.2插入制作镜像的服务器,将镜像recoverfs-<os-type>-M.2.img(文件大小为2.3G)烧录至M.2后再将M.2插入Atlas 200I A2 加速模块整机。
    4. 执行fdisk -l查询M.2盘符,如下述内容中粗体所示为/dev/sda,具体盘符请以实际环境为准。如查询不到盘符,请参考SATA接口调测参考解决。
      Disk /dev/sda: 111.79 GiB, 120034123776 bytes, 234441648 sectors
      Disk model: Netac SSD 120GB
      Units: sectors of 1 * 512 = 512 bytes
      Sector size (logical/physical): 512 bytes / 512 bytes
      I/O size (minimum/optimal): 512 bytes / 512 bytes
      Disklabel type: gpt
      Disk identifier: 86CA1C8B-D6CC-4761-AEAC-2A953681B164
    5. 执行mkfs.ext4 -F /dev/sda命令格式化M.2,出现如下类似关键回显信息表明格式化成功。
      Writing superblocks and filesystem accounting information: done
    6. 在镜像recoverfs-<os-type>-M.2.img上传路径下(例如“/home/test”),执行dd if=recoverfs-<os-type>-M.2.img of=/dev/sda status=progress,烧写镜像到M.2,等待约3分钟,出现如下类似信息则代表烧写成功,此处仅为示例,具体烧写花费时间和烧写速率以实际情况为准。
      4751360+0 records in
      4751360+0 records out
      2432696320 bytes (2.4 GB, 2.3 GiB) copied, 45.217 s, 53.8 MB/s

      若出现写入数据量不等于4751360,则代表烧写失败,建议重新执行dd if=recoverfs-<os-type>-M.2.img of=/dev/sda status=progress烧写镜像。

    7. 烧写镜像后会出现1.5G的golden分区,可以通过mount命令挂载后查看分区内容。

      mount /dev/sda1 /mnt

      ll /mnt

      查看完文件请执行umount /mnt,防止文件损坏。

若M.2插入服务器,则烧写镜像到M.2后,需将M.2安装在Atlas 200I A2 加速模块整机上。

切换启动介质至M.2设备

  1. 将启动介质修改为M.2 SATA SSD硬盘,具体请参考 Atlas 200I A2 加速模块 硬件开发指南中的“启动方式选择”章节。
  2. Atlas 200I A2 加速模块整机通过插拔电源插头进行强制上下电。
  3. 使能SSH服务。

    制作Ubuntu 22.04系统的镜像,在烧录镜像启动后如需使用root用户登录,需要执行该步骤。openEuler 22.03系统为默认开启允许root远程登录,请跳过此步骤。

    1. 使用HwHiAiUser登录Atlas 200I A2 加速模块整机OS。详细信息请参见使用PuTTY登录设备(网口方式)

      默认密码请参见Atlas 系列硬件产品 账户清单

    2. 执行如下命令,切换到root用户。

      su root

    3. 执行如下命令,修改“PermitRootLogin”选项为“yes”。

      vi /etc/ssh/sshd_config

    4. 执行如下命令,重启SSH服务。

      /etc/init.d/ssh restart

    5. 打开新的连接终端,重新使用SSH远程连接。

  4. 登录Atlas 200I A2 加速模块整机OS。详细信息请参见使用PuTTY登录设备(网口方式)

    • 首次登录时,先使用HwHiAiUser登录,修改HwHiAiUser用户的初始密码,再执行su - root切换为root用户,并修改root用户的初始密码。
    • 非首次登录,可使用HwHiAiUser或root用户登录。

    默认密码请参见Atlas 系列硬件产品 账户清单

  5. (可选)自定义同步主备文件系统关键数据,详细请参考主备分区介绍