尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
3559A开发环境搭建全攻略:从工具链到烧录的避坑指南
1. 拿到3559A开发板之前先把这几件事想清楚搞嵌入式开发的人多少都有个习惯板子还没到手先翻手册、找SDK、配环境。但3559A这块芯片有点特殊它不像那些通用MCU随便找个IDE就能跑起来也不像树莓派那样插上电就能玩。它是一颗面向专业视觉处理场景的SoC周边配套的软件栈、交叉编译链、烧录工具都有自己的一套逻辑。如果你之前只玩过STM32或者ESP32第一次接触3559A的开发环境搭建大概率会在某个环节卡住——不是能力问题是这套工具链的设计思路和通用嵌入式开发有本质区别。这篇文章面向的是手里已经拿到或者即将拿到3559A开发板、准备从零搭建开发环境的工程师。我会把整个搭建过程拆成几个关键阶段每个阶段不仅告诉你“怎么做”还会解释“为什么这么做”。涉及到的工具选型、目录结构设计、参数配置我都会给出基于实际项目经验的建议。文章里提到的所有路径、脚本、配置你都可以直接拿去改改用。先说一下3559A这颗芯片的基本定位它属于海思系列的智能视觉处理芯片主打AI视觉场景内置NPU支持多种图像处理加速。这意味着它的开发环境不只是“编译-烧录-运行”这么简单还涉及到模型转换、算子适配、多媒体管线配置等额外环节。但别被这些吓到环境搭建本身是有清晰路径的只要理解了每一步的意图后面的事情就顺了。我见过太多人在环境搭建阶段就放弃转而去买别人配好的虚拟机镜像。但问题是你不理解环境是怎么来的后面遇到编译报错、库版本冲突、烧录失败的时候根本无从下手。所以这篇文章的核心目标不是给你一个“一键脚本”而是让你真正理解这套环境的结构具备自己排查问题的能力。2. 开发主机环境的选择与底层依赖梳理2.1 为什么推荐Ubuntu 18.04而不是更新的版本3559A的官方SDK通常是在Ubuntu 18.04 LTS上验证的这不是随便选的。SDK里包含的交叉编译工具链、Python脚本、以及各种依赖库都是针对这个版本的glibc和系统库编译的。你如果在Ubuntu 22.04或者24.04上跑大概率会遇到glibc版本不兼容的问题——典型报错是“GLIBC_2.XX not found”。有人会说那我用Docker跑一个18.04的容器不就行了可以但要注意Docker容器默认不包含32位库支持而交叉编译工具链里有些组件是32位的。你需要在容器里额外安装lib32z1、lib32ncurses5这类包。另外USB设备透传到容器也需要额外配置烧录的时候可能会遇到设备识别不到的问题。我的建议是如果手头有闲置机器直接装Ubuntu 18.04物理机或者虚拟机省去很多麻烦。如果非要用新版本系统那就做好折腾的准备遇到问题逐个解决。但如果你是第一次搭3559A环境强烈建议按官方推荐的版本来不要在环境阶段给自己增加额外难度。安装Ubuntu 18.04的时候分区方案要注意/home目录至少留100GB。SDK解压后大概20-30GB编译过程中产生的中间文件可能再占20-30GB再加上你后续要放的模型文件、测试视频100GB是底线。/分区给50GB就够了swap分区给8GB编译大工程的时候内存不够会用到swap。2.2 系统安装后必须立即执行的依赖安装清单系统装好之后不要急着解压SDK。先把基础依赖装齐否则后面编译到一半报错你还得回头补。以下是我整理的最小依赖集直接复制执行sudo apt-get update sudo apt-get install -y build-essential cmake git wget curl \ libncurses5-dev libncursesw5-dev libssl-dev libelf-dev \ bison flex zip unzip bc rsync \ python3 python3-pip python3-dev \ lib32z1 lib32ncurses5 lib32stdc6 \ device-tree-compiler uuid-dev liblz4-tool这里面有几个包容易被忽略但很关键lib32z1和lib32ncurses5交叉编译工具链里的某些可执行文件是32位的没有这两个包会报“No such file or directory”但实际上是动态链接器找不到。device-tree-compiler3559A的设备树编译需要用到dtc命令不装的话编译内核时会中断。uuid-devSDK里有些工具依赖libuuid不装的话链接阶段会报错。liblz4-tool内核镜像压缩用到lz4格式缺少这个工具会导致内核编译失败。装完这些之后建议再装一个minicom或者picocom后面串口调试会用到sudo apt-get install -y minicom picocom注意不要用apt安装pythonPython 2Ubuntu 18.04默认没有Python 2而SDK里有些脚本写的是#!/usr/bin/python。解决办法是在/usr/bin/下建一个软链接指向python3或者直接修改脚本的shebang。我倾向于后者因为改shebang更明确不会影响系统其他部分。2.3 交叉编译工具链的部署与验证3559A的SDK包里通常会自带交叉编译工具链一般放在toolchain/或者prebuilts/目录下。工具链的名字通常是aarch64-mix210-linux-或者aarch64-himix100-linux-这样的前缀。你需要做的是把工具链的bin目录加到PATH环境变量里。但这里有个细节不要直接修改/etc/environment或者~/.bashrc里的全局PATH。因为3559A的SDK可能包含多个不同版本的工具链比如uboot用的、kernel用的、用户态用的全局设置会导致冲突。正确的做法是在SDK的编译脚本里临时设置PATH或者写一个envsetup.sh脚本每次编译前source一下。验证工具链是否可用aarch64-mix210-linux-gcc --version如果输出了版本信息说明工具链部署成功。如果报“command not found”检查PATH是否设置正确。如果报“cannot execute binary file”说明你装的是64位系统但工具链是32位的需要确认lib32z1等包是否安装。还有一个容易踩的坑某些工具链的可执行文件没有执行权限。从某些渠道获取的SDK包解压后文件权限可能丢失。解决办法是批量添加执行权限chmod -R x /path/to/toolchain/bin/3. SDK目录结构拆解与编译前的关键配置3.1 拿到SDK后先别急着编译花十分钟看懂目录3559A的SDK目录结构通常长这样不同版本可能略有差异但大体一致SDK/ ├── boot/ # 启动相关uboot、atf等 ├── kernel/ # Linux内核源码 ├── osdrv/ # 驱动和系统级组件 ├── mpp/ # 媒体处理平台核心组件 ├── sample/ # 示例代码 ├── toolchain/ # 交叉编译工具链 ├── scripts/ # 编译和配置脚本 └── build.sh # 顶层编译入口这里面最重要的是mpp/目录它包含了3559A的媒体处理框架包括视频输入VI、视频处理VPSS、视频编码VENC、视频解码VDEC等模块。你后续开发的所有视觉应用基本上都是围绕MPP来做的。osdrv/目录里包含了内核驱动和根文件系统的构建脚本。boot/目录里是uboot和ARM Trusted Firmware。这三个部分boot、kernel、osdrv构成了系统的基础运行环境而mpp/和sample/是你做应用开发时主要打交道的部分。3.2 编译前的menuconfig配置哪些选项必须改在编译内核之前你需要通过menuconfig确认一些关键配置。进入内核目录cd SDK/kernel make ARCHarm64 menuconfig以下是我建议必须检查的几项第一检查CPU类型和芯片型号。在Platform selection里确认选中的是3559A对应的选项。如果选错了芯片型号编译出来的内核可能无法启动。第二检查内存布局。3559A通常搭配DDR4内存容量可能是2GB、4GB或8GB。在Memory configuration里确认内存基地址和大小与你的硬件一致。这个参数错了内核启动时会直接挂掉。第三检查文件系统支持。确认Ext4、SquashFS、NFS等文件系统选项已经勾选。如果你打算用NFS挂载根文件系统进行调试NFS客户端支持必须编译进内核。第四检查串口驱动。3559A的调试串口通常是UART0确认对应的驱动已经编译进内核。如果串口驱动没编进去你连启动日志都看不到。第五检查USB和网络驱动。如果你需要通过USB烧录或者网络传输文件对应的驱动必须使能。改完配置后保存退出。建议把当前的.config文件备份一份命名为.config.backup后面如果配置乱了可以快速恢复。3.3 根文件系统的制作busybox还是buildroot3559A的SDK通常提供两种根文件系统制作方式一种是基于busybox手动构建另一种是用buildroot自动构建。busybox方式更灵活但需要手动配置的东西多buildroot方式更自动化但定制起来稍微麻烦。我的建议是第一次搭建环境时先用SDK自带的默认根文件系统配置不要自己从头做。等系统跑起来之后再根据自己的需求裁剪或添加组件。SDK里一般会有一个osdrv/rootfs/目录里面包含了预编译好的根文件系统镜像或者制作脚本。如果你需要添加自己的应用程序到根文件系统有两种方式方式一把编译好的可执行文件放到rootfs/usr/bin/目录下然后重新打包根文件系统镜像。方式二通过NFS挂载根文件系统直接在开发主机上修改开发板重启即可生效。这种方式适合调试阶段效率高很多。NFS挂载的配置稍后会详细说这里先记住这个思路。4. 从编译到烧录完整链路实操与避坑记录4.1 顶层编译脚本的使用与常见报错处理SDK根目录下通常有一个build.sh或者类似的顶层编译脚本。执行之前先看一下脚本内容了解它做了哪些事情。一般来说它会依次编译uboot、ATF、kernel、osdrv和mpp。编译命令通常是./build.sh all或者分步编译./build.sh uboot ./build.sh kernel ./build.sh osdrv ./build.sh mpp分步编译的好处是当某个环节报错时你可以单独排查不用从头再来。以下是我在实际编译中遇到过的几个典型报错及解决办法报错一fatal error: openssl/ssl.h: No such file or directory原因缺少OpenSSL开发库。虽然前面装了libssl-dev但某些SDK版本需要特定版本的OpenSSL。解决办法是确认libssl-dev已安装如果还报错尝试安装libssl1.0-dev。报错二/bin/sh: 1: dtc: not found原因设备树编译器未安装。执行sudo apt-get install device-tree-compiler即可。报错三error: unrecognized command line option -mabilp64原因使用了错误的编译器。检查当前PATH里的交叉编译工具链是否正确确认用的是aarch64版本而不是arm版本。报错四编译到某个模块时提示No rule to make target xxx.o原因通常是源码目录不完整或者文件权限问题。检查SDK是否完整解压以及是否有文件缺少读权限。报错五collect2: error: ld returned 1 exit status后面跟着一堆undefined reference原因链接阶段缺少库文件。根据报错信息找到缺失的库确认对应的开发包是否安装。如果是SDK内部的库检查库路径是否设置正确。编译完成后会在output/或者images/目录下生成最终的镜像文件通常包括u-boot.binuboot镜像kernel.img内核镜像rootfs.img根文件系统镜像atf.binARM Trusted Firmware镜像4.2 烧录工具的选择与实操步骤3559A的烧录方式主要有两种一种是通过串口网口烧录HiTool工具另一种是通过USB烧录。HiTool是海思提供的官方烧录工具运行在Windows上。如果你只有Linux环境可以考虑用fastboot或者SDK自带的烧录脚本。这里以HiTool为例说明烧录流程第一步准备烧录环境。将开发板的调试串口连接到电脑网口也连接到同一网络。开发板上电前确保启动模式跳线设置为烧录模式通常是短接某个跳线帽。第二步配置HiTool。打开HiTool选择芯片型号为3559A配置串口参数波特率通常为115200配置网络参数开发板和电脑的IP要在同一网段。第三步选择烧录文件。在HiTool的烧录配置界面分别指定uboot、kernel、rootfs等镜像文件的路径。注意不同分区对应的文件不能搞混否则系统无法启动。第四步开始烧录。点击烧录按钮然后给开发板上电。HiTool会通过串口发送烧录指令然后通过网口传输镜像数据。烧录过程中不要断电否则可能变砖。第五步切换启动模式。烧录完成后断电将启动模式跳线改回正常启动模式重新上电。如果一切正常你会在串口终端看到系统启动日志。注意烧录前一定要确认分区表配置正确。3559A的分区表通常在osdrv/目录下的某个配置文件中定义包括fastboot分区、kernel分区、rootfs分区等。分区大小和偏移地址必须与镜像文件匹配否则烧录后系统无法启动。4.3 串口终端配置与首次上电检查串口终端是调试3559A最重要的工具。Linux下推荐用picocomsudo picocom -b 115200 /dev/ttyUSB0如果/dev/ttyUSB0不存在检查USB转串口线是否被识别ls /dev/ttyUSB* dmesg | grep tty首次上电后串口终端应该输出uboot的启动信息。如果没有任何输出检查以下几点串口线是否接对TX-RX交叉波特率是否设置为115200开发板是否正常供电启动模式跳线是否正确如果uboot正常启动你会看到类似这样的提示U-Boot 2016.11 (xxx) DRAM: 4 GiB ... Hit any key to stop autoboot: 3在倒计时结束前按下任意键进入uboot命令行。在这里你可以设置启动参数、查看环境变量、手动加载内核等。4.4 网络挂载根文件系统调试效率提升的关键一步每次修改应用都要重新烧录根文件系统效率太低了。正确的做法是通过NFS挂载根文件系统开发主机上改完代码开发板重启就能生效。配置NFS的步骤在开发主机上sudo apt-get install nfs-kernel-server sudo mkdir -p /nfsroot sudo chmod 777 /nfsroot编辑/etc/exports添加/nfsroot *(rw,sync,no_root_squash,no_subtree_check)然后重启NFS服务sudo systemctl restart nfs-kernel-server在开发板上进入uboot命令行设置启动参数setenv bootargs mem4G consolettyAMA0,115200 root/dev/nfs rw nfsroot192.168.1.100:/nfsroot ip192.168.1.200:192.168.1.100:192.168.1.1:255.255.255.0::eth0:off setenv bootcmd tftp 0x40080000 kernel.img; booti 0x40080000 saveenv这里的IP地址需要根据你的实际网络环境修改。192.168.1.100是开发主机的IP192.168.1.200是开发板的IP。配置完成后开发板每次启动都会从NFS服务器加载根文件系统。你在开发主机的/nfsroot目录下做的任何修改开发板重启后都会生效。提示NFS挂载根文件系统需要内核支持NFS客户端。如果之前编译内核时没有勾选NFS支持需要重新配置并编译内核。5. 环境搭建完成后先跑通这几个验证用例5.1 用sample代码验证MPP框架是否正常SDK里的sample/目录包含了大量示例代码覆盖了视频输入、编码、解码、显示等各个模块。环境搭建完成后建议先编译并运行一个最简单的sample验证MPP框架是否正常工作。以视频编码为例cd SDK/sample/venc make编译完成后会在当前目录生成可执行文件。把可执行文件拷贝到开发板的/usr/bin/目录下或者通过NFS直接访问然后运行./sample_venc如果程序正常运行并输出了编码后的视频文件说明MPP框架工作正常。如果报错根据错误码排查。常见的错误码含义错误码含义排查方向0xA001参数无效检查传入的参数是否符合API要求0xA002内存不足检查系统内存是否被其他进程占用0xA003设备未初始化确认MPP系统已经调用初始化接口0xA004通道未创建检查通道ID是否正确0xA005操作不支持确认芯片型号和SDK版本是否匹配5.2 串口和网络的基本功能测试在跑应用之前先确认基础外设工作正常。串口测试在开发板上执行echo test /dev/ttyAMA0然后在串口终端看是否收到。注意调试串口本身也是ttyAMA0直接写可能会导致输出混乱。建议用另一个串口做测试。网络测试开发板上执行ifconfig确认网口已经获取到IP。然后ping开发主机的IP确认网络连通。如果ping不通检查网线、IP配置、防火墙设置。USB测试插入U盘执行lsusb确认设备被识别然后mount /dev/sda1 /mnt挂载看能否访问U盘内容。这些基础测试看起来简单但它们是后续所有开发工作的基础。如果串口不通你连调试信息都看不到如果网络不通NFS挂载和文件传输都无法进行。5.3 一个容易忽略的细节系统时间和时区3559A开发板默认的系统时间可能是1970年或者某个错误的时间。这会导致日志时间戳混乱也会影响某些依赖时间的应用比如证书验证。设置系统时间date -s 2025-01-01 12:00:00 hwclock -whwclock -w把系统时间写入RTC芯片这样下次断电重启后时间不会丢失。如果开发板没有RTC电池断电后时间会重置需要在启动脚本里通过网络时间协议同步时间。时区设置ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime这个细节很多人不在意但当你调试一个跨天运行的应用时时间不对会导致日志分析非常困难。6. 那些只有踩过才知道的环境搭建经验6.1 不要迷信“一键脚本”理解每一步才是关键网上能找到不少3559A环境搭建的“一键脚本”下载下来执行一下环境就配好了。看起来很美好但我强烈建议你不要这么做——至少第一次不要。原因很简单一键脚本隐藏了所有细节。当你的环境出现问题时你不知道是哪一步出了问题也不知道该怎么修复。而3559A的环境搭建涉及工具链、内核、驱动、文件系统、烧录工具等多个环节任何一个环节出问题都会导致整体失败。我的做法是第一次搭建时手动执行每一步记录每个命令的输出。遇到报错就查资料解决把解决过程记录下来。这样搭建完成后你不仅有了一个可用的环境还有了一份完整的排错笔记。后面再搭第二台机器时你完全可以写自己的脚本而且知道每一行在做什么。6.2 版本管理SDK、工具链、内核的版本匹配问题3559A的SDK版本、交叉编译工具链版本、内核版本之间是有匹配关系的。你不能随便拿一个工具链去编译另一个版本的SDK也不能把不同版本的内核源码混用。我遇到过的情况是用SDK A自带的工具链去编译SDK B的内核结果编译出来的内核启动时直接panic。排查了半天才发现是工具链版本不匹配导致的。所以拿到SDK后第一件事是确认它的版本号然后确认它自带的工具链版本。如果你需要升级或降级某个组件先查清楚版本兼容性。SDK的readme或者release_notes文件里通常会说明经过验证的版本组合。6.3 磁盘空间和编译时间的现实预期3559A的完整SDK编译一次在普通配置的机器上比如8核CPU、16GB内存、SSD硬盘大概需要30-60分钟。如果机器配置低或者用的是机械硬盘时间可能翻倍。编译过程中会产生大量中间文件磁盘占用可能达到30-50GB。所以前面说/home分区至少100GB不是随便说的。另外编译时建议用-j参数指定并行编译的核数make -j8-j后面的数字建议设置为CPU核心数或者核心数1。设置太大反而会因为内存不足导致编译失败。6.4 备份备份备份环境搭建完成后第一件事是做备份。备份什么备份编译好的镜像文件uboot、kernel、rootfs备份.config配置文件备份uboot的环境变量printenv的输出保存到文件如果可能用dd命令备份整个开发板的存储介质我见过太多人因为误操作把uboot环境变量清了或者烧录了错误的内核导致系统起不来然后花一整天重新搭建环境。如果提前做了备份恢复只需要几分钟。备份uboot环境变量的命令printenv env_backup.txt恢复时env import -t 0x40080000 ${filesize}或者逐条setenv再saveenv。6.5 关于开发板供电的一个小提醒3559A开发板通常需要12V供电电流要求可能在2A以上。如果你用的电源适配器电流不够开发板可能在启动过程中反复重启或者在某些高负载场景下突然断电。我遇到过的情况是用了一个12V/1A的电源uboot能启动但内核启动到一半就挂了。换了12V/3A的电源后一切正常。所以不要在这上面省钱用质量可靠的电源适配器。另外如果开发板上有多个USB设备或者外设总功耗可能更高。必要时用带外部供电的USB Hub。7. 环境就绪之后下一步往哪走环境搭建只是第一步。当你能正常编译、烧录、启动系统并且跑通了sample代码之后接下来要做的就是理解MPP框架的编程模型以及如何把你的算法集成进去。3559A的MPP框架采用的是典型的流水线设计视频输入VI→ 视频处理VPSS→ 视频编码VENC或者视频输出VO。每个模块都有自己的通道和绑定关系。你需要理解这些模块之间的数据流才能正确地构建你的应用。另外如果你要做AI相关的开发还需要了解NNIE神经网络推理引擎的使用方法包括模型转换工具、算子支持列表、以及如何在MPP管线中嵌入推理节点。这部分内容比较多我会在后续的文章里单独展开。回到环境搭建本身我想再强调一点不要怕折腾。嵌入式开发的环境搭建从来都不是一件轻松的事情但每一次踩坑和排错都会让你对系统的理解更深一层。当你能够独立解决环境问题时你就已经比大多数人走得更远了。最后分享一个我个人的习惯每次搭建完一个新环境我都会写一份“环境搭建记录”包括执行的命令、遇到的报错、解决的方法、以及最终的配置。这份记录不仅方便自己以后查阅也能帮助团队里的其他人快速上手。如果你还没有这个习惯建议从这次开始。
RELATED

相关推荐

安卓跳动频谱播放器:Visualizer+FFT+均衡器联动方案

安卓跳动频谱播放器:Visualizer+FFT+均衡器联动方案

简介:这是一份面向Android开发者的音乐播放器项目Demo,集中展示了在手机应用中实现跳动频谱与均衡器控制的完整思路,整体效果接近经典的千千静听播放器。对于刚接触Android多媒体开发的初学者,这款Demo提供了一条从音频播放到频谱…

📅 2026/10/14 17:59:58
2020美赛LaTeX模板实战指南:环境配置、编译流程与避坑技巧

2020美赛LaTeX模板实战指南:环境配置、编译流程与避坑技巧

简介:美赛LaTeX模板完整套件,面向准备参加美国大学生数学建模竞赛(MCM/ICM)的队伍,重点解决论文排版、格式规范与写作效率问题。模板内含丰富注释,覆盖摘要页、目录、章节图表引用等常用结构,赛…

📅 2026/10/14 17:59:58
Qt鼠标事件与paintEvent绘图组合实战:从事件分发到画板实现

Qt鼠标事件与paintEvent绘图组合实战:从事件分发到画板实现

这期笔记聊一个Qt自学路上绕不开的组合拳:鼠标事件和绘图事件。很多初学者会把这两件事分开学——先学怎么响应点击,再学怎么画图,可真正做东西的时候才发现,它们根本是一套连招:鼠标负责输入坐标和动作,pa…

📅 2026/10/14 17:59:58
MORE NEWS

更多资讯

📰

51单片机流水灯实战教程

继上一篇学会点灯之后,我们就可以做‘流水灯’了。 首先我们要准备一块51开发板,我的是这样的。 软件方面就按照我上一篇文章的来。https://blog.csdn.net/qq_58675272/article/details/165239903?spm1001.2014.3001.5501 然后一定要看自己的原理图&…

📰

工业RFID如何落地智能制造产线:从频段原理到MES集成的技术拆解

引言:产线为什么需要RFID先看一个最常见的痛点。传统产线用条码做物料和工位识别,但要正常识别,得满足三个前提:看得清、对准扫、逐条扫。在节拍越来越快、自动化程度越来越高的产线里,这三个前提几乎都被打破——工件…

📰

ACE前台框架下载与工程化实践指南

简介:本资源为ACE前端框架完整版开发套件,面向Web前端开发者及中高级前端学习者,旨在提供开箱即用的现代化UI解决方案,显著降低响应式管理后台、数据看板等B端应用的搭建门槛。压缩包共3353个文件,涵盖2223个JS脚本&am…

📰

Visual C++ 6.0 安装与最小化配置:Legacy 系统调试与逆向必备工具链

简介:本资源为经典Windows开发环境Visual C 6.0完整安装包,面向C/C初学者、高校教学实践者及遗留系统维护人员,解决老旧项目编译、MFC GUI开发、Windows API入门学习等实际需求。压缩包为ZIP格式,共2001个文件,涵盖873…

📰

身体调理手法核心技术解析与行业现状

1. 身体调理手法行业现状解析最近三年,国内身体调理市场以每年18%的增速扩张,但行业标准尚未统一。作为从业12年的康复理疗师,我见证过从传统推拿到现代运动康复的技术迭代。目前主流手法可分为五大流派:中医经络调理、西方整脊疗…

📰

江西燃气发电机厂家推荐

一、技术摘要燃气发电机以天然气、沼气、煤层气等可燃气体为燃料,经火花点燃式往复发动机驱动同步交流发电机输出电能。其选型与验收的核心不在"品牌知名度",而在功率定额类别是否明确、燃气组分与热值是否核算、机组性能是否按 GB/T 2820&…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬