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


系统从M.2启动时,需要用户根据Atlas 200I A2 加速模块底板设计配置userBaseConfig文件使能SATA接口。在任何介质下,直接下载软件包升级驱动和固件重启后,系统会提示找不到M.2 SATA的启动介质,导致M.2 SATA介质的OS启动失败,需要重新构建新的镜像包,通过镜像安装的方式进行升级。
前提条件
已获取表1中对应的ISO和文件系统镜像。
镜像 |
目标OS |
支持的版本 |
获取方式 |
说明 |
---|---|---|---|---|
ISO |
Ubuntu |
22.04 |
- |
|
openEuler |
openEuler-22.03-LTS |
|
若下载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。 |

社区版软件不需要申请下载权限可以直接下载,但软件不能用于商业用途, 详细请参见社区华为软件许可协议;如果您需要用于商业用途,参见定制文件系统的操作步骤进行制作。因此如果您下载软件仅用于调试验证,推荐下载社区版软件。
制作及烧写镜像
- 登录Linux服务器。
- 执行如下命令,切换至root用户。
su - root
- 修改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”)
- 参考SATA接口调测参考,根据Atlas 200I A2 加速模块底板设计修改user_base_config.xml文件并编译,生成“userBaseConfig.bin”文件。
- 使用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传输文件。
- 执行如下命令,进入源码包所在目录“/opt”。
cd /opt
- 执行如下命令,解压源码包“Ascend310B-source.tar.gz”。
tar -xzvf Ascend310B-source.tar.gz
如果已解压过源码包,可跳过此步骤。
- 执行如下命令,进入“Ascend310B-source”目录。
cd Ascend310B-source
- 执行以下命令,为驱动包添加可执行权限。
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
- 执行如下命令,将驱动包解压至当前文件夹下。
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
- 执行以下命令,进入“/opt/Ascend310B-source/repack/firmware”目录。
- 执行如下命令,将3.a生成的“userBaseConfig.bin”文件到拷贝当前文件夹下。
cp /opt/Ascend310B-source/output/userBaseConfig.bin /opt/Ascend310B-source/repack/firmware
- (可选)如有软实时需求,参考(可选)获取内核Image文件,将Image文件使用WinSCP工具或其他工具拷贝到当前所在的“firmware”目录下。
- 执行如下命令,返回“Ascend310B-source”目录。
- 执行如下命令,编译驱动。
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!
- 执行如下命令,新建打包目录并进入该目录。
cd /opt/tar
- 使用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”的软件包。
- 执行如下命令,解压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
- 执行如下命令,删除旧文件。
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
- 执行如下命令,拷贝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
- 执行如下命令,重新打包生成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/*
- 使用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。”
- 执行如下命令,进入sdtool.tar.gz制卡脚本工具包的上传目录,例如“/home/ascend/mksd”。
cd /home/ascend/mksd
- 在制卡脚本工具包的上传目录下(例如“/home/ascend/mksd”),执行如下命令解压sdtool.tar.gz制卡脚本工具包。
tar -xzvf sdtool.tar.gz
- 执行如下命令,将解压后的文件拷贝至制卡脚本工具包所在目录,例如“/home/ascend/mksd”。
cp -arf sdtool/* .
- 执行如下命令,进入“recovertool”目录。
cd /home/ascend/mksd/recovertool
- 执行如下命令,拷贝构建依赖的驱动文件。
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
- (可选)更改网线和USB的默认IP地址。
- 执行如下命令,进入制卡脚本工具包所在目录,例如“/home/ascend/mksd”。
- 执行如下命令,更改网线的默认IP地址。
需分别修改“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。
- 配置完成后,按“Esc”键,再执行:wq!保存修改,并按“Enter”键退出。
- (可选)若用户需要自定义分区的配置,请执行该步骤。
- 在驱动包所在目录(例如“/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
- 拷贝“restore_factory.sh”脚本到“recovertool”目录。
cp /home/ascend/mksd/tmp/scripts/restore_factory.sh /home/ascend/mksd/recovertool/
tmp为临时解压目录,若不需要使用可以删除。
- 修改分区配置。
vim ./recovertool/restore_factory.sh
- 修改分区大小。
- 增加新分区。
找到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 ......
- 配置完成后,按“Esc”键,再执行:wq!保存修改,并按“Enter”键退出。
- 在驱动包所在目录(例如“/home/ascend/mksd/”)执行如下命令,解压驱动run包,获取“restore_factory.sh”脚本。
- 在脚本工具包所在目录(例如“/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
- 在脚本工具包所在目录(例如“/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:
- 根据打印提示信息输入“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命令制作镜像。
- 烧写镜像到M.2。
- 将Atlas 200I A2 加速模块整机下电。
- 将M.2插入Atlas 200I A2 加速模块整机并上电。
- 使用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 加速模块整机。
- 执行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
- 执行mkfs.ext4 -F /dev/sda命令格式化M.2,出现如下类似关键回显信息表明格式化成功。
Writing superblocks and filesystem accounting information: done
- 在镜像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烧写镜像。
- 烧写镜像后会出现1.5G的golden分区,可以通过mount命令挂载后查看分区内容。
mount /dev/sda1 /mnt
ll /mnt
查看完文件请执行umount /mnt,防止文件损坏。

若M.2插入服务器,则烧写镜像到M.2后,需将M.2安装在Atlas 200I A2 加速模块整机上。
切换启动介质至M.2设备
- 将启动介质修改为M.2 SATA SSD硬盘,具体请参考 《Atlas 200I A2 加速模块 硬件开发指南》的“启动方式选择”章节。
- Atlas 200I A2 加速模块整机通过插拔电源插头进行强制上下电。
- 使能SSH服务。
制作Ubuntu 22.04系统的镜像,在烧录镜像启动后如需使用root用户登录,需要执行该步骤。openEuler 22.03系统为默认开启允许root远程登录,请跳过此步骤。
- 使用HwHiAiUser登录Atlas 200I A2 加速模块整机OS。详细信息请参见使用PuTTY登录设备(网口方式)。
- 执行如下命令,切换到root用户。
- 执行如下命令,修改“PermitRootLogin”选项为“yes”。
- 执行如下命令,重启SSH服务。
- 打开新的连接终端,重新使用SSH远程连接。
- 登录Atlas 200I A2 加速模块整机OS。详细信息请参见使用PuTTY登录设备(网口方式)。
- (可选)自定义同步主备文件系统关键数据,详细请参考主备分区介绍。