资讯动态

3559A嵌入式开发环境搭建全攻略:交叉编译工具链、SDK与内核编译实战

发布时间:2026/10/13 19:13:39 来源:尧图企业网站定制
1. 为什么3559A的开发环境值得单独写一篇搞嵌入式这行的朋友大多有个共识拿到一块新板子最磨人的不是写业务代码而是把开发环境跑通。3559A这颗芯片在视频处理、边缘计算、智能视觉这些场景里出镜率很高算力够用、接口丰富很多做多路视频分析和AI推理落地的项目都会选它。但它的开发环境搭建说实话第一次上手的人踩坑概率相当高——交叉编译工具链版本对不上、SDK目录结构看不懂、内核编译报一堆莫名其妙的错、烧录镜像后板子起不来这些都是家常便饭。这篇记录就是把我自己在3559A上从零搭环境的完整过程梳理出来。核心关键词就几个交叉编译工具链、SDK包结构、内核与uboot编译、根文件系统、烧录与串口调试。适合谁看刚拿到3559A开发板、面对一堆压缩包不知道从哪下手的嵌入式新手以及之前搞过其他ARM平台、想快速迁移到3559A的老手。我不打算写成官方文档的复读机而是把每一步背后的逻辑、我实际踩过的坑、以及那些文档里不会写的细节都摊开讲。环境搭好了后面写驱动、调算法才有底气这一步偷懒后面全是债。2. 开发环境整体设计与方案选型2.1 宿主机系统的选择逻辑搭3559A的开发环境第一步是选宿主机系统。官方SDK一般推荐Ubuntu某个LTS版本我实测下来16.04和18.04兼容性最好20.04也能跑但偶尔会有依赖库版本偏新的小问题。为什么不直接用最新版因为SDK里的编译脚本、工具链、以及一些预编译的二进制工具都是针对特定glibc版本编译的。宿主机glibc太新跑老工具链时可能报“GLIBC_2.xx not found”这类错误排查起来很烦。我的建议是专门用一台机器或者一个虚拟机装Ubuntu 18.04 64位磁盘至少留100G因为SDK解压后加上编译中间文件占用空间相当可观。内存建议8G起步编译内核时16G会更从容。如果你习惯用虚拟机VMware或者VirtualBox都行但要注意USB设备直通——后面烧录和串口调试都要用到USB虚拟机里得把USB控制器配置好否则识别不到串口线。提示不要用WSL来搭这套环境。WSL的文件系统性能和USB设备支持在嵌入式开发场景下限制很多烧录和串口调试会非常别扭老老实实装原生Ubuntu或者虚拟机。2.2 交叉编译工具链的选型与获取3559A是ARM Cortex-A73/A53大小核架构64位所以需要的是aarch64架构的交叉编译工具链。SDK包里通常会自带一个工具链压缩包名字类似aarch64-mix210-linux这种。我的建议是优先用SDK自带的工具链不要自己从网上下载通用的aarch64工具链。原因很简单SDK里的内核、uboot、以及各种库都是配套这个工具链编译验证过的你换一个版本轻则编译警告重则链接失败或者运行时崩溃。工具链解压后需要把它的bin目录加到环境变量PATH里。这一步很多人会忘记导致后面执行aarch64-mix210-linux-gcc时提示command not found。具体操作是在~/.bashrc末尾追加一行export然后source一下。验证方法是执行aarch64-mix210-linux-gcc -v能看到版本信息就说明配置成功了。2.3 SDK目录结构的理解拿到SDK压缩包解压后你会看到一堆目录第一次看确实容易懵。我把它归纳成几个核心部分uboot目录负责引导程序kernel目录是Linux内核源码rootfs或者busybox目录是根文件系统相关tools目录放各种编译和打包工具sample或者mpp目录是芯片原厂提供的多媒体处理示例代码。理解这个结构很重要因为后面编译的每一步都对应其中一个目录。我见过有新手把整个SDK丢到一个中文路径或者带空格的路径下结果编译脚本各种报错。路径里绝对不能有中文和空格这是硬性要求。建议放在/home/用户名/3559A/这种纯英文无空格的路径下。3. 核心细节解析与实操要点3.1 依赖库的安装清单Ubuntu刚装好的时候很多编译需要的库是没有的。我整理了一份必装清单这些库缺一个都可能导致编译中断build-essential基础编译工具集gcc、make这些libncurses5-dev内核menuconfig配置界面依赖libssl-dev很多加密相关组件需要bc内核编译时会用到flex和bison语法分析工具内核和uboot编译需要lib32z1和lib32ncurses5部分32位工具需要u-boot-tools生成uboot镜像相关device-tree-compiler设备树编译工具dtcdosfstools和mtools制作FAT文件系统镜像需要安装命令就是一条apt install把这些包名串起来。我建议一次性装完别等编译报错了再一个个补那样来回折腾很浪费时间。3.2 环境变量的配置细节除了工具链的PATH还有几个环境变量需要配置。一个是ARCH编译内核和uboot时要指定为arm64另一个是CROSS_COMPILE指定交叉编译工具链的前缀。这两个变量可以在命令行临时export也可以写进脚本里。我的习惯是写一个env.sh脚本每次开新终端先source一下这样环境干净可控。注意CROSS_COMPILE的值是工具链前缀比如aarch64-mix210-linux-注意末尾那个横杠不能少。少了横杠编译时会找不到编译器。3.3 串口调试工具的配置板子调试离不开串口。你需要一根USB转串口线接到板子的调试串口上。Ubuntu下用minicom或者picocom都行。我更喜欢picocom轻量、退出方便。配置参数一般是波特率115200、8位数据位、1位停止位、无校验、无流控。设备节点通常是/dev/ttyUSB0但如果你插了多个USB串口设备编号可能会变用ls /dev/ttyUSB*确认一下。连接命令类似picocom -b 115200 /dev/ttyUSB0。退出是CtrlA然后按CtrlX。第一次用的人经常不知道怎么退出卡在里面干着急。4. 实操过程与核心环节实现4.1 工具链解压与环境验证假设SDK放在/home/user/3559A/下工具链压缩包在tools目录里。解压命令是tar -xzf 工具链包名.tar.gz -C /opt/我习惯解压到/opt下路径短、权限清晰。解压完确认一下/opt/工具链目录/bin/下有aarch64-mix210-linux-gcc这个文件。然后编辑~/.bashrc在末尾加上export PATH/opt/工具链目录/bin:$PATH export ARCHarm64 export CROSS_COMPILEaarch64-mix210-linux-保存后执行source ~/.bashrc。验证环节执行aarch64-mix210-linux-gcc -v输出里能看到gcc版本和target信息就对了。这一步看着简单但我见过不少人卡在这里要么是路径写错要么是忘了source要么是工具链解压不完整。4.2 uboot编译与镜像生成uboot是板子启动的第一段程序负责初始化硬件、加载内核。进入SDK的uboot目录通常先执行make distclean清理一下然后make 配置文件_defconfig加载默认配置。配置文件的名字每个SDK可能不同一般是xxx_defconfig这种你可以在configs目录下找到对应3559A的那个。配置加载完执行make -j8开始编译-j8表示用8个线程并行编译数字根据你CPU核心数调整核心多就写大点能明显加快速度。编译成功后会在目录下生成u-boot.bin之类的镜像文件。有些SDK还需要额外执行一个打包脚本把uboot和别的固件合并成最终烧录用的镜像这个要看具体SDK的说明。实操心得uboot编译报错时先看第一个error不要被后面一堆连锁错误吓到。第一个错误往往就是根因比如某个头文件找不到通常是依赖库没装或者环境变量没配对。4.3 内核编译与设备树配置内核编译是整个环境搭建里最耗时的一步也是最容易出问题的一步。进入kernel目录先make distclean然后加载默认配置。3559A的默认配置文件一般叫xxx_defconfig执行make xxx_defconfig。接下来是可选但推荐的一步make menuconfig。这个命令会打开一个文本图形界面让你调整内核配置。新手可以先不动直接用默认配置编译。但如果你想裁剪内核体积或者加某个驱动就在这里操作。menuconfig里用方向键导航空格键切换选项状态Y是编进内核M是编成模块N是不编译。配置好后执行make -j8编译。编译时间取决于机器性能一般十几分钟到半小时。编译完成后内核镜像在arch/arm64/boot/目录下设备树文件在arch/arm64/boot/dts/下。设备树是ARM平台很重要的东西它描述了板子上的硬件资源内核靠它来识别外设。3559A的设备树文件名字里通常带板子型号编译时会自动生成对应的dtb文件。4.4 根文件系统的制作根文件系统是系统启动后挂载的第一个文件系统里面包含基本的目录结构、库文件、以及各种可执行程序。SDK一般会提供现成的根文件系统镜像或者提供busybox源码让你自己编译。如果用现成的直接找到对应的镜像文件即可。如果自己编译busybox流程是解压busybox源码make menuconfig配置注意在配置里指定交叉编译工具链前缀和安装路径然后make和make install。安装完的目录就是根文件系统的雏形还需要手动创建dev、proc、sys这些目录并拷贝必要的库文件进去。提示根文件系统里的库文件必须和交叉编译工具链的库版本一致否则程序运行时会报找不到库或者版本不匹配。这是新手最容易忽略的点。4.5 镜像烧录与首次启动烧录方式取决于板子的启动模式。3559A一般支持从eMMC或者SD卡启动。烧录工具通常是原厂提供的一个上位机软件在Windows下运行通过USB连接板子。你需要把uboot、内核、设备树、根文件系统这几个镜像按顺序烧录到对应分区。烧录完成后把板子设成从eMMC启动接上串口线上电。串口终端里应该能看到uboot的启动日志然后是内核启动日志最后出现登录提示。如果卡在某一步日志就是最好的排查线索。我第一次烧录时板子没起来串口里一片空白。排查了半天发现是烧录工具的驱动没装好USB根本没识别到板子。所以烧录前一定要确认设备管理器里能看到对应的USB设备。5. 常见问题与排查技巧实录5.1 编译类问题速查问题现象可能原因解决思路提示找不到交叉编译器PATH没配或没source检查.bashrc并重新source编译报GLIBC版本错误宿主机glibc太新换Ubuntu 18.04或装兼容库menuconfig打不开缺libncurses5-devapt安装该库内核编译中途报错缺bc、flex、bison等按依赖清单补齐链接时报库找不到工具链和库版本不匹配统一用SDK自带工具链5.2 烧录与启动类问题板子起不来是最让人头疼的。我的排查顺序是先看串口有没有输出。完全没输出检查供电、串口线连接、波特率设置。有uboot输出但卡住看卡在哪一步通常是镜像烧录不完整或者分区配置错误。内核启动到一半panic多半是设备树和实际硬件不匹配或者根文件系统挂载失败。还有一种情况是串口有乱码。这通常是波特率不对3559A的调试串口一般是115200但个别板子可能用别的波特率查一下板子手册确认。5.3 独家避坑经验几个文档里不会写但很重要的点。第一编译前先make distclean尤其是你改过配置或者换过工具链之后不清理直接编译很容易出玄学问题。第二保留一份编译成功的完整环境备份虚拟机打个快照后面搞崩了能快速回滚比重头搭一遍省太多时间。第三串口日志重定向到文件用picocom的时候可以配合tee把日志存下来出问题时方便慢慢分析不用盯着屏幕回忆。第四SDK里的编译脚本有时候会依赖一些绝对路径如果你移动了SDK目录位置脚本可能就失效了。所以SDK解压后位置就定下来别随便挪。第五编译内核时如果报某个dts文件语法错误多半是你手动改设备树时格式写错了dtc对语法比较严格括号、分号、逗号都要仔细检查。6. 环境搭建后的验证与下一步环境搭完怎么确认它真的可用我的做法是编译一个最简单的hello world程序用交叉编译器编成aarch64的可执行文件拷到板子上运行。能正常打印hello world说明工具链、根文件系统、运行环境这条链路是通的。这一步花不了几分钟但能帮你提前发现很多潜在问题。再进一步可以编译SDK里自带的sample程序比如视频采集或者编码的示例。这些sample通常依赖芯片的多媒体库能跑通说明你的库路径配置、依赖关系都没问题。到这一步开发环境就算真正可用了后面写自己的应用或者驱动就有了坚实的基础。我个人在实际操作中的体会是3559A的环境搭建难点不在于某一步特别复杂而在于环节多、依赖杂任何一个细节没注意到都可能卡住。把每一步的原理搞清楚比死记命令有用得多。遇到报错别慌从第一个错误看起顺着依赖关系往上找大部分问题都能定位到。环境这东西搭一次是折磨搭三次就是肌肉记忆了。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑