eMMC制作和启动系统镜像
用于制作Atlas 200I A2 加速模块从eMMC启动需要的镜像,用户可基于业务需要选择是否开启快速启动配置并制作快速启动所需要的镜像。该镜像裁剪了部分系统服务,保证eMMC作为存储介质启动时,直连网络15秒内通信正常。
前提条件
已获取表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。 |

社区版软件不需要申请下载权限可以直接下载,但软件不能用于商业用途, 详细请参见社区华为软件许可协议;如果您需要用于商业用途,参见定制文件系统的操作步骤进行制作。因此如果您下载软件仅用于调试验证,推荐下载社区版软件。
制作镜像
- 将U盘(使用16G及以上)插入Linux服务器。
- 登录Linux服务器。
- 执行如下命令,切换至root用户。
su - root
- 使用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”。
- 执行如下命令,进入sdtool.tar.gz制卡脚本工具包的上传目录,例如“/home/ascend/mksd”。
cd /home/ascend/mksd
- 执行如下命令,解压sdtool.tar.gz制卡脚本工具包。
tar -xzvf sdtool.tar.gz
- 执行如下命令,将解压后的文件拷贝至制卡脚本工具包所在目录,例如“/home/ascend/mksd”。
cp -arf sdtool/* ./
- 执行如下命令,进入“recovertool”目录。
cd ./recovertool
- 使用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版本号,具体请根据实际情况进行替换。
- (可选)更改网线和USB的默认IP地址。
- 执行如下命令,进入制卡脚本工具包所在目录,例如“/home/ascend/mksd”。
- 执行如下命令,更改网线和USB的默认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.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。
- 配置完成后,按“Esc”键,再执行:wq!保存修改,并按“Enter”键退出。
- (可选)执行如下命令,修改“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!
- (可选)若用户需要自定义分区的配置,请执行该步骤。
- 在驱动包所在目录(例如“/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
- 拷贝“restore_factory.sh”脚本到“recovertool”目录。
cp ./tmp/scripts/restore_factory.sh ./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
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工具不可用。
- 执行如下命令,启动镜像脚本“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:
- 根据打印提示信息输入“Y”。显示如下类似信息,表示制卡成功。
Make Card successfully!
执行ls -l查看当前目录下生成的镜像文件为“recoverfs-<os-type>-eMMC.img”,其中<os-type>表示目标镜像的操作系统类型。
- 替换软实时OS需求的驱动包、ISO和文件系统镜像。
仅当有软实时OS需求时需要执行此操作。
- 执行如下命令,进入驱动包、ISO和文件系统所在目录,例如“/home/ascend/mksd”。
- 执行如下命令删除驱动包、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
- 使用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”。
- 执行如下命令,查找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”为例。
- 执行如下命令,启动镜像脚本“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
- 根据打印提示信息输入“Y”,等待约15分钟(具体等待时间以实际环境为准)。
Make Card successfully!
显示如上类似回显信息,表示制卡成功。
- (可选)执行如下命令查看分区信息。
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
- (可选)为避免出现内存不足导致设备OOM异常挂死问题,请参见运行程序超内存导致设备异常挂死,设备能ping通,但SSH无法远程连接解决。
烧写镜像和启动设备
- 确认Atlas 200I A2 加速模块金手指“S72”管脚已开发为update按键,具体开发请参见《Atlas 200I A2 加速模块 硬件开发指南》的“UPDATE_MODE”章节。
- 将U盘插入Atlas 200I A2 加速模块底板。
- 准备串口线,连接PC和Atlas 200I A2 加速模块底板串口。
- 上电Atlas 200I A2 加速模块。
- 通过串口登录Atlas 200I A2 加速模块,用于查看启动日志信息,具体请参见使用PuTTY登录设备(串口方式)。
- 上电Atlas 200I A2 加速模块,同时按下update按键直到进入U盘启动模式。
串口打印显示类似如下信息表明进入U盘启动模式。
Usb Boot Entry. Success open USB device: 2
- 等待eMMC烧写。
串口打印显示如下类似信息表示eMMC正在烧写。
1229762560 bytes (1.2 GB, 1.1 GiB) copied, 86 s, 14.3 MB/s
烧写完成Atlas 200I A2 加速模块自动重启。
- 登录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错误解决。
- (可选)关闭apt自动软件更新。若安装的OS为Ubuntu 22.04,由于apt自动软件更新会消耗很多资源,建议关闭apt自动软件更新。
- 执行如下命令,切换至root用户。
- 执行以下命令,打开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";
- 配置完成后,按“Esc”键,再执行:wq!保存修改,并按“Enter”键退出。
- 执行如下命令,查询设备健康状态。
npu-smi info -t health -i 0
NPU ID : 0 Chip Count : 1 Chip ID : 0 Health : OK
Health显示OK,表示正常。