海思SD3403/SS928开发(二)环境搭建:从零到一构建高效开发环境的实战指南

张开发
2026/4/11 9:03:18 15 分钟阅读

分享文章

海思SD3403/SS928开发(二)环境搭建:从零到一构建高效开发环境的实战指南
1. 环境准备Ubuntu系统选择与基础配置第一次接触海思SD3403/SS928开发板时最让我头疼的就是开发环境的搭建。官方文档虽然提供了基本指引但实际操作中会遇到各种坑。这里分享我反复折腾三次才验证通过的完整流程。Ubuntu版本选择是第一个关键点。官方明确要求Ubuntu 18.04我最初不信邪尝试了20.04结果SDK编译时出现各种奇怪的glibc版本冲突。后来用虚拟机安装Ubuntu 18.04.6 LTSBionic Beaver才解决问题。建议直接到Ubuntu官网下载历史版本ISO别用第三方修改版。安装系统时有个细节容易忽略磁盘分区建议手动设置swap空间。编译内核时内存消耗极大我给虚拟机分配了16GB内存8GB swap才避免OOM崩溃。具体操作是在安装时选择其他选项添加一个swap分区大小建议为物理内存的50%-100%。装完系统后立即要做三件事更换国内软件源推荐阿里云或清华源执行sudo apt update sudo apt upgrade -y更新所有软件包安装必备网络工具sudo apt install openssh-server nfs-kernel-server samba vim -y2. 开发环境依赖安装避坑指南按照官方文档安装依赖包时我遇到了几个典型问题。首先是dash与bash的兼容性问题必须执行sudo dpkg-reconfigure dash然后在弹出界面选择No将默认shell改为bash。不这么做的话后续编译脚本会报各种语法错误。接下来是重点依赖安装命令sudo apt install make libc6-i386 lib32z1 lib32stdc6 zlib1g-dev \ libncurses5-dev ncurses-term libncursesw5-dev g u-boot-tools \ texinfo texlive gawk libssl-dev openssl bc p7zip-full gperf \ bison flex diffutils git unzip -y常见问题解决方案ncurses报错如果遇到Unable to find the ncurses package需要额外安装sudo apt install libncurses5-dev libncursesw5-dev -ybison缺失当出现/bin/sh: 1: bison: not found时说明bison没装好重新安装后验证版本sudo apt install --reinstall bison bison --version # 应显示3.0.4或更高3. SDK工具链配置实战拿到官方SDK包通常是SS928V100_SDK_Vx.x.x.x.tgz后解压时要注意tar zxvf SS928V100_SDK_Vx.x.x.x.tgz -C ~/workspace cd ~/workspace/SS928V100_SDK_Vx.x.x.x绝对不要用root权限解压否则后续编译会出现权限问题。工具链配置是关键步骤需要修改bashrcecho export PATH$PATH:~/workspace/SS928V100_SDK_Vx.x.x.x/toolchain/bin ~/.bashrc source ~/.bashrc验证工具链是否生效aarch64-mix210-linux-gcc -v应该能看到类似gcc version 7.3.0的输出。环境变量陷阱有些文档会建议设置CROSS_COMPILE但在SDK环境中反而会导致冲突。建议保持干净的环境变量只在make时通过参数指定。4. MTD工具链问题深度解决编译mtd-utils时遇到的依赖问题最棘手报错信息通常是configure: error: missing one or more dependencies这是因为Ubuntu默认安装的库路径不被pkg-config识别。完整解决方案如下首先安装基础依赖sudo apt install zlib1g-dev liblzo2-dev uuid-dev pkg-config automake -y然后设置pkg-config路径必须每开新终端都执行export PKG_CONFIG_PATH$PKG_CONFIG_PATH:/usr/lib/x86_64-linux-gnu/pkgconfig验证是否生效pkg-config --list-all | grep lzo2应该能看到liblzo2的相关输出。5. 全系统编译实战技巧当所有依赖就绪后可以尝试全系统编译cd ~/workspace/SS928V100_SDK_Vx.x.x.x/osdrv make BOOT_MEDIAspi CHIPss928v100 all -j$(nproc)关键参数说明BOOT_MEDIAspi/nand/emmc对应不同启动介质-j$(nproc)自动按CPU核心数设置并行编译任务数内存不足的临时解决方案 如果物理机内存不足可以减少并行任务数make -j4创建临时swap文件sudo fallocate -l 8G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile6. 内核单独编译技巧有时需要单独修改内核配置流程比全系统编译更复杂cd open_source/linux tar xf linux-4.19.90.tar.gz mv linux-4.19.90 linux-4.19.y cd linux-4.19.y patch -p1 ../linux-4.19.90.patch cp arch/arm64/configs/ss928v100_defconfig .config make ARCHarm64 CROSS_COMPILEaarch64-mix210-linux- menuconfig make ARCHarm64 CROSS_COMPILEaarch64-mix210-linux- uImage -j$(nproc)常见问题如果menuconfig界面显示异常检查是否安装了所有ncurses相关包出现fatal error: openssl/opensslv.h错误时执行sudo apt install libssl-dev7. 文件系统制作经验分享文件系统制作是最容易出问题的环节不同启动介质需要不同格式SPI Flash使用jffs2osdrv/pub/bin/pc/mkfs.jffs2 -d osdrv/pub/rootfs_glibc_xxx -l -e 0x10000 -o rootfs.jffs2NAND Flash使用ubifs./tools/pc/ubi_sh/mkubiimg.sh ss928v100 2k 128k osdrv/pub/rootfs_glibc_xxx 32MeMMC使用ext4dd if/dev/zero ofrootfs.ext4 bs1M count1024 mkfs.ext4 rootfs.ext4 ./open_source/e2fsprogs/out/pc/contrib/populate-extfs.sh osdrv/pub/rootfs_glibc_arm64 rootfs.ext4文件系统启动失败排查 如果出现Synchronous Abort错误建议检查uboot环境变量是否正确确认文件系统与内核版本匹配尝试使用官方预编译的文件系统测试

更多文章