在嵌入式Linux开发中,启动镜像的制作与烧写是硬件部署的核心环节。本文详细解析华为昇腾Ascend310B启动镜像的完整流程,从环境搭建到烧写验证,为开发者提供一站式解决方案。

华为昇腾310B(Ascend310B)是一款高性能、低功耗的AI处理器,专为边缘计算和推理应用场景而设计。它基于华为自研的达芬奇架构,具备强大的计算能力和高效的运算效率,能够支持多种深度学习框架和算法,为智能安防、智能交通、工业互联网等领域提供卓越的AI推理解决方案。

作者使用的是Atlas 200I AI加速模块,模块可通过SD卡、M.2和eMMC方式制作启动镜像包。

需要用到的软件包:

  • sdtool.tar.gz     位于Ascend-hdk-310b-sdk-soc_25.2.0.zip包
  • Ascend-hdk-310b-npu-driver-soc_25.2.0_linux-aarch64.run
  • Ascend-hdk-310b-npu-firmware-soc_7.7.0.6.236.run
  • Sample-root-filesystem-soc_ubuntu-22.04-aarch64.img   位于Ascend-hdk-310b-npu-sample-root-filesystem-soc_23.0.rc1_linux-aarch64.zip包
  • ubuntu-22.04-live-server-arm64.iso
  • Ascend-hdk-310b-npu-soc_25.2.0_linux-aarch64.tar.gz    位于Ascend-hdk-310b-npu-soc_25.2.0_linux-aarch64.zip包

所用到的软件包可参考《Atlas 200I A2 加速模块 25.2.0 驱动开发指南》给出的地址进行下载。

制作镜像:

1.执行命令创建mksd目录。

mkdir mksd

2.解压sdtool.tar.gz,并将其中的所有文件copy到mksd目录下。

tar -xzvf sdtool.tar.gz
cp -arf sdtool/* ./mksd
cd ./mksd

mksd文件如下:


总用量 75092
drwxrwxr-x 5 ubuntu ubuntu     4096 Sep  8 15:11 ./
drwxrwxr-x 6 ubuntu ubuntu     4096 Sep  8 15:11 ../
-rw-rw-r-- 1 ubuntu ubuntu     4096 Jul 17 00:00 boot_image_info
-rwxrwxr-x 1 ubuntu ubuntu    59352 Jul 17 00:00 emmc-head*
-rw-rw-r-- 1 ubuntu ubuntu 76642642 Jul 17 00:00 initrd_usb
-rwxrwxr-x 1 ubuntu ubuntu     2464 Jul 17 00:00 install_hook_demo.sh*
-rwxrwxr-x 1 ubuntu ubuntu    48760 Jul 17 00:00 make_os_recover.sh*
-rwxrwxr-x 1 ubuntu ubuntu    76123 Jul 17 00:00 make_os_sd.sh*
-rwxrwxr-x 1 ubuntu ubuntu    14481 Jul 17 00:00 make_sd_card.py*
-rw-rw-r-- 1 ubuntu ubuntu      129 Jul 17 00:00 mksd.conf
-rw-rw-r-- 1 ubuntu ubuntu     1024 Jul 17 00:00 parttion_head_info
-rwxrwxr-x 1 ubuntu ubuntu     6521 Jul 17 00:00 preconfig.sh*
drwxrwxr-x 2 ubuntu ubuntu     4096 Jul 17 00:00 recovertool/
drwxrwxr-x 2 ubuntu ubuntu     4096 Jul 17 00:00 synctool/
drwxrwxr-x 2 ubuntu ubuntu     4096 Jul 17 00:00 tools/

3.执行如下命令,检查emmc-head工具是否可用。

ubuntu@ubuntu:~/project/Ascend310B-tools/mksd$ ./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工具需要使用“ /lib64/”目录下的ld-linux-aarch64.so.1文件,当前环境的“ /lib64/”目录下缺少此文件。

  • 解决方案

执行如下命令,复制或创建ld-linux-aarch64.so.1的符号链接到“ /lib64/”目录下。

cp /usr/aarch64-linux-gnu/lib/ld-linux-aarch64.so.1 /lib64/
或
ln -sf /usr/aarch64-linux-gnu/lib/ld-linux-aarch64.so.1 /lib64/ld-linux-aarch64.so.1

emmc-head执行提示错误二:./emmc-head: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory。

  • 原因分析

若为emmc-head工具需要使用“ /lib”目录下的libc.so.6文件,当前环境的“ /lib/”目录下缺少此文件。

  • 解决方案

执行如下命令,复制到或创建libc.so.6的符号链接“ /lib/”目录下。

cp /usr/aarch64-linux-gnu/lib/libc.so.6 /lib/
或
ln -sf /usr/aarch64-linux-gnu/lib/libc.so.6 /lib/libc.so.6

emmc-head执行提示错误三:./emmc-head --help -bash: ./emmc-head: cannot execute binary file: Exec format error

  • 原因分析

不兼容的操作系统上运行二进制文件,例如在32位系统上运行64位的二进制文件。emmc-head为64位二进制文件,需要在64位系统上运行。

  • 解决方案

修改虚拟机的系统架构。

将当前32位操作系统架构修改为64位。

4.复制软件包到对应目录:

cp -rf Ascend-hdk-310b-npu-driver-soc_25.2.0_linux-aarch64.run ./mksd/
cp -rf Ascend-hdk-310b-npu-firmware-soc_7.7.0.6.236.run ./mksd/
cp -rf Sample-root-filesystem-soc_ubuntu-22.04-aarch64.img ./mksd/
cp -rf ubuntu-22.04-live-server-arm64.iso ./mksd/
cp -rf Ascend-hdk-310b-npu-soc_25.2.0_linux-aarch64.tar.gz ./mksd/recovertool

5.执行对应命令创建启动镜像。(必须要root权限)

镜像操作之前先将系统语言切换成英文,执行LANG=en_US。

LANG=en_US      #切换语言为英文。

#制作本地镜像包,会生成对应的recoverfs-<os-type>-xxx.img镜像
sudo python3 make_sd_card.py mkrecoverimg eMMC
sudo python3 make_sd_card.py mkrecoverimg SD

#制作启动镜像,并烧写到对应的介质中。主要需要插入U盘或SD卡
sudo python3 make_sd_card.py local /dev/sdb  #制作SD卡启动盘,需要插入SD卡。
sudo python3 make_sd_card.py local /dev/sdb USB  #制作U盘卡启动盘,需要插入U盘。

命令执行过程根据打印提示信息输入"Y"。

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!

注:eMMC需要通过U盘进行烧写,无法通过SD卡进行烧写。SD卡制作的recoverfs-<os-type>-SD.img通过dd写入到SD卡后,设备从SD卡启动后,会烧写SD的系统到SD卡中,而不是eMMC中。

6.重构驱动run包

重构驱动run包需要用到SDK包,所以需要先解压Ascend310B-source.tar.gz,对源码进行编译后在output目录中生成dt.img、Image、userBaseConfig.bin等。Ascend310B-source.tar.gz存放在Ascend-hdk-310b-sdk-soc_25.2.0.zip中。

tar -xzvf Ascend310B-source.tar.gz
cd Ascend310B-source
./build.sh dtb      #编译dts,生成dt.img
./build.sh kernel   #编译kernel,生成Image及内核module。
./build.sh usrBaseConfig   #编译usrBaseConfig,通过user_base_config.xml的配置生成userBaseConfig.bin

在 Ascend310B-source下创建构建run包需要的目录。

mkdir -p ./repack/firmware  #存放dt.img、Image
mkdir -p ./repack/drivers    #存放模块ko
mkdir -p ./repack/scripts    #11-atlas.conf、filelist.csv、minirc_sys_init_ext.sh、minirc_sys_init.sh

复制对应文件到上面创建的目录中。

cp output/dt.img repack/firmware/
cp output/Image repack/firmware/
cp output/Image repack/firmware/	
cp output/kernel_modules/* repack/drivers

在run包中提取"repack/scripts"需要的文件。注意下面操作只为提取run包中的文件,最好在其它目录下运行,最后可以删除掉。

chmod u+x  Ascend-hdk-310b-npu-driver-soc_<version>_linux-aarch64.run
bash Ascend-hdk-310b-npu-driver-soc_<version>_linux-aarch64.run -- noexec --extract=./repack

运行上面命令后会在当前目录下生成一个repack的文件。复制"repack/scripts"中的下面几个文件到Ascend310B-source的"repack/scripts"中。

11-atlas.conf、filelist.csv、minirc_sys_init_ext.sh、minirc_sys_init.sh

对文件做如下修改:

minirc_sys_init.sh

minirc_sys_init_ext.sh

另外还需要复制Ascend-hdk-310b-npu-driver-soc_<version>_linux-aarch64.run到Ascend310B-source下,因为构建的run包是在之前的run包上进行修改。

执行下面命令进行构建:

sudo bash build.sh repack ./Ascend-hdk-310b-npu-driver-soc_<version>_linux_aarch64.run

命令正常执行后会在Ascend310B-source下生成Ascend-hdk-310b-npu-driver-soc_<version>_linux-aarch64_repack.run。用这个包去替换制作进行工具mksd下的run包,另外"mksd/recovertool/Ascend-hdk-310b-npu-soc_25.2.0_linux-aarch64.tar.gz"中也藏着一个同样的run包,如果遇到烧写失败的情况,可以尝试对tar包进行解压后替换run包重新压缩,再制作启动镜像。

产品介绍

IGB-310EPC-1310分别是瑞迅科技基于Ascend310B的高性能工业级嵌入式主控板和AI边缘计算工作站,采用高性能4核64位处理器,提供极佳的运算性能。RS485、RS232、CAN、AI、DI、DO等丰富接口,可满足多样化的连接需求。凭借高达20TOPS的算力,广泛适用于智能边缘设备、机器人、智能工控等边端侧AI应用场景。

EPC-1310

  • 高性能4核64位处理器,主频1.6GHZ,1个AI core,主频1.224GHz
  • 算力高达20TOPS
  • 板载 LPDDR4X,12GB(可选配8G/4G)
  • 板载 eMMC,64GB(可选配128/256G)
  • RS485、RS232、CAN、AI、DI、DO
  • 工作温度:-40℃-70℃
Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐