下载
中文
注册

SD卡制作和启动系统镜像(方法二)

本章节用于制作从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. 登录Linux服务器。
  2. 执行如下命令,切换至root用户。

    su - root

  3. 使用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”。
    • 对于openEuler操作系统,需要将“openEuler-22.03-LTS-aarch64-dvd.iso”镜像与定制后的Sample-root-filesystem-soc_openEuler-22.03-LTS-aarch64.img(请参考定制文件系统章节)一并上传至root用户属组目录下,例如“/home/ascend/mksd”。
    • 当前目录只允许存放一个版本的软件包。
    • 对于Ubuntu 22.04系统,需要将“ubuntu-22.04-live-server-arm64.iso”镜像与定制后的Sample-root-filesystem-soc_ubuntu-22.04-aarch64.img(请参考定制文件系统章节)一并上传至root用户属组目录下,例如“/home/ascend/mksd。”
  4. 执行如下命令,进入sdtool.tar.gz制卡脚本工具包的上传目录,例如“/home/ascend/mksd”。

    cd /home/ascend/mksd

  5. 在制卡脚本工具包的上传目录下(例如“/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. 使用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版本号,具体请根据实际情况进行替换。

  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.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

      修改如图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的整数,不支持配置为小数。
        • 修改分区大小或增加新分区后,总大小不能超过SD的最大容量。

          总大小=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 three files must be included in the firmware path:
    Image, itrustee.img, dt.img.
    force_recover: force recover flag.
        Example: emmc-head ./firmware /dev/mmcblk1p1 /dev/mmcblk1p2    
  7. 在脚本工具包所在目录(例如“/home/ascend/mksd/”)执行命令启动镜像脚本“make_sd_card.py”,制作烧写到SD的系统镜像。

    python3 make_sd_card.py mkrecoverimg SD

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

    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分钟(具体等待时间以实际环境为准)。显示类似如下信息,表示制卡成功。
    Make Card successfully!

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

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

  9. 烧写镜像到SD卡。
    1. 将SD卡插入USB读卡器(推荐使用32G (class10)及以上)。
    2. 将USB读卡器插入Linux服务器。
    3. 执行fdisk -l查询SD卡所在的USB设备名称,例如“/dev/sdb”。
      显示类似信息如下:
      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”为例。

    4. 执行mkfs.ext4 -F /dev/sdb命令格式化SD,出现如下类似关键回显信息表明格式化成功。
      Writing superblocks and filesystem accounting information: done
    5. 在镜像recoverfs-<os-type>-SD.img上传路径下(例如“/home/ascend/mksd”),执行dd if=recoverfs-<os-type>-SD.img of=/dev/sdb status=progress,烧写镜像到SD,等待约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>-SD.img of=/dev/sda status=progress烧写镜像。

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

      mount /dev/sdb1 /mnt

      ll /mnt

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

  10. 上电和启动设备,具体请参见上电和启动设备