下载
中文
注册

SD卡制作系统镜像

本章节指导用户如何烧写SD卡启动盘。通过本章节将SD卡烧写成功后,可直接作为启动盘将Atlas 200I A2 加速模块整机启动。

图1 SD卡制作系统镜像操作流程

前提条件

已获取表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. 将SD卡插入USB读卡器(推荐使用32G (class10)及以上)。
  2. 将USB读卡器插入Linux服务器。
  3. 登录准备环境所搭建Linux服务器。
  4. 执行如下命令,切换至root用户。

    su - root

  5. 使用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文件后进行重构,用户使用重构后的驱动包)和前提条件中获取的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”
    • USB读卡器方式制卡时会自动创建用户名和属组都为HwHiAiUser的默认用户,该用户用来运行应用程序,同时该用户还有用户态AI驱动的管理权限。
    • 不支持将用户态AI驱动的管理权限切换到其他用户。请不要删除HwHiAiUser用户,以免导致系统异常。如果系统使用过程中有删除、重新增加HwHiAiUser用户的操作,需要重新启动设备。
  6. 执行如下命令,进入sdtool.tar.gz制卡脚本工具包的上传目录,例如“/home/ascend/mksd”。

    cd /home/ascend/mksd

  7. 执行如下命令,解压sdtool.tar.gz制卡脚本工具包。

    tar -xzvf sdtool.tar.gz

  8. (可选)用户需要预置自定义软件包时,请执行如下步骤,修改自定义预置软件包脚本。
    1. 执行如下命令,编辑minirc_install_hook.sh脚本。

      vim minirc_install_hook.sh

    2. 参考编辑用户自定义脚本,编辑用户自定义脚本。
    3. 按“Esc”键,再执行如下命令,保存修改并按“Enter”键退出。

      :wq!

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

    cp -arf sdtool/* ./

    执行如下命令,查看文件是否拷贝至制卡脚本工具包所在目录。

    ll

    类似回显信息如下:

    total 2109376
    drwxr-xr-x  5 root  root        4096 Jun 21 02:52 ./
    drwxr-xr-x 16 root  root        4096 Jun 21 02:03 ../
    -rw-r--r--  1 root  root   180094149 Jun 21 02:11 Ascend-hdk-310b-npu-driver-soc_24.1.rc3_linux-aarch64-repack.run
    -rw-r--r--  1 root  root   550127845 Jun 21 02:14 Ascend-hdk-310b-npu-sample-root-filesystem-soc_24.1.rc3_linux-aarch64.zip
    -rw-rw-r--  1 20001 20001          0 Jun 21 02:52 boot_image_info
    -rwxrwxr-x  1 20001 20001      55328 Apr 21 16:00 emmc-head*
    -rwxrwxr-x  1 20001 20001       2464 Apr 21 16:00 install_hook_demo.sh*
    -rwxrwxr-x  1 20001 20001      48760 Apr 21 16:00 make_os_recover.sh*
    -rwxrwxr-x  1 20001 20001      62383 Apr 21 16:00 make_os_sd.sh*
    -rwxrwxr-x  1 20001 20001      12777 Apr 21 16:00 make_sd_card.py*
    -rw-r--r--  1 root  root           0 Jun 21 02:19 minirc_install_hook.sh
    -rw-rw-r--  1 20001 20001        110 Apr 21 16:00 mksd.conf
    -rw-rw-r--  1 20001 20001       1024 Jun 21 02:52 parttion_head_info
    -rwxrwxr-x  1 20001 20001       7195 Apr 21 16:00 preconfig.sh*
    drwxr-xr-x  4 root  root        4096 Jun 21 02:15 sdtool/
    -rw-r--r--  1 root  root      380372 Jun 21 02:14 sdtool.tar.gz
    drwxrwxr-x  2 20001 20001       4096 Apr 21 16:00 synctool/
    drwxrwxr-x  3 20001 20001       4096 Jun 21 02:21 tools/
    -rw-r--r--  1 root  root  1429155840 Jun 21 02:10 ubuntu-22.04-live-server-arm64.iso
  10. 执行如下命令,检查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工具不可用
  11. (可选)更改网线和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。
  12. 执行如下命令,查找SD卡所在的USB设备名称,例如“/dev/sdb”。

    fdisk -l

    显示类似信息如下:

    Disk /dev/sdb: 28.33 GiB, 30416044032 bytes, 59406336 sectors
    Disk model: UHSII uSD Reader
    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: 57C9FC21-66A9-4474-8EEB-DD67845D38CB

    其中Disk model: UHSII uSD Reader为SD卡所在的USB设备名称,不同的USB设备显示的名称不一样,此处以“UHSII uSD Reader”为例。

  13. (可选)修改镜像包配置文件。
    1. 执行如下命令,进行重新配置。

      bash preconfig.sh reconfigure

      显示信息如下:

      [INFO]mksd.conf is exist, reconfiguration will overwrite mksd.conf!
      [INFO]The old mksd.conf will be rename to mksd.conf.bak, do you want to continue (y/n)?
    2. 根据界面提示选择是否覆盖原有mksd.conf文件。
      • y:覆盖原有mksd.conf文件。
      • n:不覆盖原有mksd.conf文件。
    3. 根据界面提示选择是否使用默认配置。
      显示信息如下:
      [INFO]Do you want to use default configuration (y/n)?
      • y:保留默认配置。
      • n:进行手工配置。
    4. 根据界面提示选择是否使能主备分区功能。
      显示信息如下:
      [INFO]Set filesystem backup enable type (on/off) (default off):
      • on:使能主备分区功能。
      • off/回车键:不使能主备分区功能。
    5. 根据界面提示选择是否分配系统分区的存储容量。分区关系表可参考主备分区介绍
      显示信息如下:
      [INFO]Set rootfs partitation size, enter a number(MB) (default 6144):
      • 输入目标容量(MB)。
      • 回车键:使用默认项。
    6. 根据界面提示选择是否分配日志分区的存储容量。
      显示信息如下:
      [INFO]Set log partitation size, enter a number(MB) (default 1024):
      • 输入目标容量(MB)。
      • 回车键:使用默认项。
    7. 根据界面提示选择是否分配用户数据分区的存储容量。
      显示信息如下:
      [INFO]Set home data size, enter a number(MB) (default 1024):
      • 输入目标容量(MB)。
      • 回车键:使用默认项。
  14. (可选)自定义SD卡剩余空间。
    1. 执行以下命令,打开mksd.conf文件。

      vim mksd.conf

      mksd.conf文件示例如下所示。

      #!/bin/bash
      FS_BACKUP_FLAG=on
      FAST_BOOT_FLAG=off
      ROOT_PART_SIZE=6144
      LOG_PART_SIZE=1024
      HOME_DATA_SIZE=1024
      • 13使能了主备分区时,FS_BACKUP_FLAG的值为on,否则为off。
      • 13没有更改ROOT_PART_SIZE、LOG_PART_SIZE与HOME_DATA_SIZE的值,则此处为默认大小。
    2. 在mksd.conf文件末尾添加分区配置,以默认分区大小为例。
      • 未使能主备分区,则需要预留9216M空间,在mksd.conf文件末尾添加以下加粗字体内容,如下所示:
        #!/bin/bash
        FS_BACKUP_FLAG=off
        FAST_BOOT_FLAG=off
        ROOT_PART_SIZE=6144
        LOG_PART_SIZE=1024
        HOME_DATA_SIZE=1024
        OFFSIZE=9216 END=13312
        OFFSIZE=13312 END=19456
        OFFSIZE=19456 END=30412
      • 使能主备分区,则需要预留15360M空间,在mksd.conf文件末尾添加以下加粗字体内容,如下所示:
        #!/bin/bash
        FS_BACKUP_FLAG=on
        FAST_BOOT_FLAG=off
        ROOT_PART_SIZE=6144
        LOG_PART_SIZE=1024
        HOME_DATA_SIZE=1024
        OFFSIZE=15360 END=18332
      • 自定义分区时需要预留一定空间,预留大小为ROOT_PART_SIZE(开启备区时需要*2)+LOG_PART_SIZE+HOME_DATA_SIZE+固件烧写预留大小(1024MB)。
      • 配置格式如未使能主备分区的mksd.conf文件示例所示,OFFSIZE=9216为预留空间的大小,也是自定义分区的起始地址。END=OFFSIZE+1024*3=13312,即第一个自定义分区大小为3GB。
      • 最后一个分区END的大小不能超过SD卡容量最大值,可使用fdisk -l可以查询SD卡容量大小。
  15. 执行如下命令,运行启动镜像脚本“make_sd_card.py”,制作SD卡。例如:SD卡所在的USB设备名称为“/dev/sdb”。

    python3 make_sd_card.py local /dev/sdb

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

    root@ubuntu:/home/ascend/mksd# python3 make_sd_card.py local /dev/sdb
    Begin to make SD Card...
    FS_BACKUP_FLAG on
    FAST_BOOT_FLAG off
    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:
  16. 输入“Y”。等待约15分钟。显示如下信息,表示制卡成功。
    Make Card successfully!
  17. (可选)查看分区信息。

    若执行14自定义SD卡剩余空间,可执行以下命令查看分区信息。

    fdisk -l

    图2 分区信息示例

    图中/dev/sda6是使能备区后的分区信息。

  18. (可选)配置IP文件。
    1. 执行如下命令,挂载SD卡主区(例如:/dev/sdb2)到“/mnt”目录。

      mount /dev/sdb2 /mnt

    2. 执行以下命令,编辑ifcfg-eth0配置文件。用户可根据现场网络规划配置IP与网关。

      vim /mnt/etc/sysconfig/network-scripts/ifcfg-eth0

    3. 执行以下命令解挂载SD卡。

      umount /mnt

    • 挂载SD卡后,不同文件系统的网络配置文件路径与名称不同。
      • openEuler网络配置文件路径与名称:/mnt/etc/sysconfig/network-scripts/ifcfg-eth0
      • Ubuntu22.04网络配置文件路径与名称:/mnt/etc/netplan/01-netcfg.yaml
    • 用户配置完网络后,须对“/mnt”目录进行解挂载,否则可能会导致SD卡内的文件系统损坏。
  19. (可选)批量制卡。

    批量制卡需保证复制卡与母卡型号和规格完全一致。

    • 方法1:通过内存卡拷贝机直接进行SD卡复制。
    • 方法2:将制作好OS的SD卡使用dd命令导出镜像,进行批量烧录制卡。
      1. 将SD插入USB读卡器,并将USB读卡器插入Linux服务器。
      2. 导出镜像,请执行如下命令。详细请自行查询Linux dd命令使用方法。

        命令:dd if=母盘盘符 of=导出镜像名

        示例:dd if=/dev/sda of=/root/tmp/sd.image

      3. 将镜像烧录至待复制子卡,请执行如下命令。

        命令:dd if=镜像名 of=待复制子盘盘符

        示例:dd if=/root/tmp/sd.image of=/dev/sdb

  20. (可选)为避免出现内存不足导致设备OOM异常挂死问题,请参考运行程序超内存导致设备异常挂死,设备能ping通,但SSH无法远程连接解决。
  21. 上电和启动设备,具体请参见上电和启动设备