下载
中文
注册

eMMC制作和启动系统镜像

用于制作Atlas 200I A2 加速模块从eMMC启动需要的镜像,用户可基于业务需要选择是否开启快速启动配置并制作快速启动所需要的镜像。该镜像裁剪了部分系统服务,保证eMMC作为存储介质启动时,直连网络15秒内通信正常。

前提条件

已获取表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. 将U盘(使用16G及以上)插入Linux服务器。
  2. 登录Linux服务器。
  3. 执行如下命令,切换至root用户。

    su - root

  4. 使用WinSCP工具或其他工具,将下载软件包获取的制卡所需软件包sdtool.tar.gz、驱动包Ascend-hdk-310b-npu-driver-soc_<version>_linux-aarch64.run(若有软实时OS需求,不能直接使用驱动包Ascend-hdk-310b-npu-driver-soc_<version>_linux-rt-aarch64.run,该驱动包需要用户自行编译生成内核Image文件后进行重构,用户使用重构后的驱动包,具体操作请参见重构驱动run包)和前提条件中获取的ISO与文件系统镜像上传至root用户属组目录下,例如“/home/ascend/mksd”。工具使用方法请参见使用WinSCP传输文件
    • 对于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. 执行如下命令,解压sdtool.tar.gz制卡脚本工具包。

    tar -xzvf sdtool.tar.gz

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

    cp -arf sdtool/* ./

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

    cd ./recovertool

  9. 使用WinSCP工具或其他工具,根据实际需求将对应软件包上传至“recovertool”目录下,制卡所需软件包请参见表1。工具使用方法请参见使用WinSCP传输文件
    • 非软实时OS需求,将“Ascend-hdk-310b-npu-soc_<version>_linux-aarch64.tar.gz”软件包上传至“recovertool”目录下。
    • 软实时OS需求,将“Ascend-hdk-310b-npu-soc_<version>_linux-rt-aarch64.tar.gz”软件包上传至“recovertool”目录下。

      上传“Ascend-hdk-310b-npu-soc_<version>_linux-rt-aarch64.tar.gz”软件包后,需执行如下命令进行软件包重构。

      mkdir rt && tar -zxvf Ascend-hdk-310b-npu-soc_<version>_linux-rt-aarch64.tar.gz -C ./rt && rm -rf rt/Ascend-hdk-310b-npu-driver-soc_<version>_linux-rt-aarch64.run && cp ../Ascend-hdk-310b-npu-driver-soc_<version>_linux-rt-aarch64-repack.run rt/ && cd rt && tar zcvf Ascend-hdk-310b-npu-soc_<version>_linux-rt-aarch64.tar.gz ./* && cp Ascend-hdk-310b-npu-soc_<version>_linux-rt-aarch64.tar.gz ../ && cd .. && rm -rf rt

      <version>表示NPU版本号,具体请根据实际情况进行替换。

  10. (可选)更改网线和USB的默认IP地址。
    1. 执行如下命令,进入制卡脚本工具包所在目录,例如“/home/ascend/mksd”。

      cd /home/ascend/mksd

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

      vim 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.2.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.2.1。
    3. 配置完成后,按“Esc”键,再执行:wq!保存修改,并按“Enter”键退出。
  11. (可选)执行如下命令,修改“mksd.conf”中的“FAST_BOOT_FLAG”的值为“on”,打开快速启动配置。
    vim /home/ascend/mksd/mksd.conf
    FS_BACKUP_FLAG=off
    FAST_BOOT_FLAG=on
    ROOT_PART_SIZE=6144
    LOG_PART_SIZE=1024
    HOME_DATA_SIZE=1024

    配置完成后,按“Esc”键,再执行如下命令,保存修改并按“Enter”键退出。

    :wq!

    启动镜像默认使能了主备分区,开启了主备同步功能。若开启快速启动,会导致主备同步功能失效,用户需根据实际使用场景配置。主备分区介绍可参考主备分区介绍

  12. (可选)若用户需要自定义分区的配置,请执行该步骤。
    1. 在驱动包所在目录(例如“/home/ascend/mksd/”)执行如下命令,解压驱动run包,获取“restore_factory.sh”脚本。

      bash Ascend-hdk-310b-npu-driver-soc_<version>_linux-aarch64.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 ./tmp/scripts/restore_factory.sh ./recovertool/

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

    3. 修改分区配置。

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

      vim ./recovertool/restore_factory.sh

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

      图1 restore_factory.sh脚本配置1
      图2 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的整数,不支持配置为小数。
        • 修改分区大小或增加新分区后,总大小不能超过eMMC的最大容量。

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

    4. 配置完成后,按“Esc”键,再执行:wq!保存修改,并按“Enter”键退出。
  13. 在脚本工具包所在目录(例如“/home/ascend/mksd/”)执行如下命令,检查emmc-head工具是否可用。

    ./emmc-head --help

    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
    • emmc-head工具用于更新镜像启动信息。
    • 执行命令后有帮助回显信息则表示可用,若回显信息出现-bash: ./emmc-head: No such file or directory的错误提示,请参见emmc-head工具不可用
  14. 执行如下命令,启动镜像脚本“make_sd_card.py”,制作烧写到eMMC的恢复出厂镜像。

    python3 make_sd_card.py mkrecoverimg eMMC

    显示如下类似信息,表示开始制卡。

    Begin to make Image package for restoring factory settings...
    FS_BACKUP_FLAG off
    FAST_BOOT_FLAG on
    ROOT_PART_SIZE 6144(MB)
    LOG_PART_SIZE 1024(MB)
    HOME_DATA_SIZE 1024(MB)
    preconfig success.
    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:
  15. 根据打印提示信息输入“Y”。
    显示如下类似信息,表示制卡成功。
    Make Card successfully!

    执行ls -l查看当前目录下生成的镜像文件为“recoverfs-<os-type>-eMMC.img”,其中<os-type>表示目标镜像的操作系统类型。

  16. 替换软实时OS需求的驱动包、ISO和文件系统镜像。

    仅当有软实时OS需求时需要执行此操作。

    1. 执行如下命令,进入驱动包、ISO和文件系统所在目录,例如“/home/ascend/mksd”。

      cd /home/ascend/mksd

    2. 执行如下命令删除驱动包、ISO和文件系统镜像。

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

      rm -rf openEuler-22.03-LTS-SP1-aarch64-dvd.iso

      rm -rf Sample-root-filesystem-soc_openEuler-22.03-LTS-SP1-aarch64.img

    3. 使用WinSCP工具或其他工具,将下载软件包获取的驱动包Ascend-hdk-310b-npu-driver-soc_<version>_linux-aarch64.run和前提条件中获取的openEuler-22.03-LTS ISO(openEuler-22.03-LTS-aarch64-dvd.iso)与openEuler-22.03-LTS文件系统(Sample-root-filesystem-soc_openEuler-22.03-LTS-aarch64.img)上传至当前目录下,例如“/home/ascend/mksd”。
  17. 执行如下命令,查找USB设备名称,例如“/dev/sdc”。

    fdisk -l

    类似回显信息如下。

    Disk /dev/sdc: 29.14 GiB, 31293702144 bytes, 61120512 sectors
    Disk model: STORAGE DEVICE
    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: E66417A5-1553-4BA1-A3E5-939DCE8C52AB

    其中“Disk model: STORAGE DEVICE”为USB设备名称,不同的USB设备显示的名称不一样,此处以“STORAGE DEVICE”为例。

  18. 执行如下命令,启动镜像脚本“make_sd_card.py”,制作U盘。

    此处以“/dev/sdc”USB设备名称为例。

    python3 make_sd_card.py local /dev/sdc USB

    显示如下类似信息,表示开始制卡。

    root@ubuntu:/home/ascend/mksd# python3 make_sd_card.py local /dev/sdc USB
    Begin to make USB...
    FS_BACKUP_FLAG off
    FAST_BOOT_FLAG on
    ROOT_PART_SIZE 6144(MB)
    LOG_PART_SIZE 1024(MB)
    HOME_DATA_SIZE 1024(MB)
    preconfig success.
    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:Y
  19. 根据打印提示信息输入“Y”,等待约15分钟(具体等待时间以实际环境为准)。
    Make Card successfully!

    显示如上类似回显信息,表示制卡成功。

  20. (可选)执行如下命令查看分区信息。

    fdisk -l

    Device        Start      End  Sectors  Size Type
    /dev/sdc1   1605633  1810432   204800  100M Linux filesystem
    /dev/sdc2   1810433 14393344 12582912    6G Linux filesystem
    /dev/sdc3  14393345 14598144   204800  100M Linux filesystem
    /dev/sdc4  14598145 16695296  2097152    1G Linux filesystem
    /dev/sdc5  16695297 18792448  2097152    1G Linux filesystem
  21. (可选)为避免出现内存不足导致设备OOM异常挂死问题,请参见运行程序超内存导致设备异常挂死,设备能ping通,但SSH无法远程连接解决。

烧写镜像和启动设备

  1. 确认Atlas 200I A2 加速模块金手指“S72”管脚已开发为update按键,具体开发请参见《Atlas 200I A2 加速模块 硬件开发指南》的“UPDATE_MODE”章节
  2. 将U盘插入Atlas 200I A2 加速模块底板。
  3. 准备串口线,连接PC和Atlas 200I A2 加速模块底板串口。
  4. 上电Atlas 200I A2 加速模块
  5. 通过串口登录Atlas 200I A2 加速模块,用于查看启动日志信息,具体请参见使用PuTTY登录设备(串口方式)
  6. 上电Atlas 200I A2 加速模块,同时按下update按键直到进入U盘启动模式。

    串口打印显示类似如下信息表明进入U盘启动模式。

    Usb Boot Entry.                                                                                                                     
    Success open USB device: 2
  7. 等待eMMC烧写。

    串口打印显示如下类似信息表示eMMC正在烧写。

    1229762560 bytes (1.2 GB, 1.1 GiB) copied, 86 s, 14.3 MB/s

    烧写完成Atlas 200I A2 加速模块自动重启。

  8. 登录Atlas 200I A2 加速模块OS。详细信息请参见使用PuTTY登录设备(串口方式)
    • Atlas 200I A2 加速模块(使用非Atlas 200I DK A2 开发者套件底板)USB接口登录的默认IP为192.168.1.2,Atlas 200I DK A2 开发者套件USB接口登录的默认IP为192.168.0.2。
    • Atlas 200I A2 加速模块上电后网络可以ping通,但无法通过SSH登录,请参见使用root用户SSH登录服务器出现Access Denied错误解决。
  9. (可选)关闭apt自动软件更新。若安装的OS为Ubuntu 22.04,由于apt自动软件更新会消耗很多资源,建议关闭apt自动软件更新。
    1. 执行如下命令,切换至root用户。

      su - root

    2. 执行以下命令,打开20auto-upgrades文件。

      vim /etc/apt/apt.conf.d/20auto-upgrades

      将下列参数的值修改为0。

      APT::Periodic::Update-Package-Lists "0"; 
      APT::Periodic::Unattended-Upgrade "0"; 
      APT::Periodic::Download-Upgradeable-Packages "0";
      APT::Periodic::AutocleanInterval "0";
    3. 配置完成后,按“Esc”键,再执行:wq!保存修改,并按“Enter”键退出。
  10. 执行如下命令,查询设备健康状态。

    npu-smi info -t health -i 0

            NPU ID                         : 0
            Chip Count                     : 1
    
            Chip ID                        : 0
            Health                         : OK

    Health显示OK,表示正常。