
1. 环境准备与源码获取第一次接触IPQ5018平台开发的朋友可能会被QSDK复杂的目录结构吓到。我刚开始编译时也踩过不少坑后来发现只要环境配置正确整个流程就会顺利很多。这里分享下我的实战经验。首先需要准备一台64位Linux开发机推荐Ubuntu 20.04 LTS。内存建议16GB以上因为编译过程非常吃资源。实测8GB内存的机器在并行编译时经常卡死后来换了32GB的机器就再没出过问题。获取源码有两种主要途径直接联系高通认证的技术支持公司获取完整SDK包通过方案商提供的定制化版本我建议新手选择第二种方式因为原厂SDK包含的组件太多初次编译容易迷失方向。拿到压缩包后文件名通常是这样的格式qca-networking-2021-spf-11-5_qca_oem-r11.5_00003.0-xxxxxxxxxxxxxxxxxxx.tar.gz解压时有个小技巧先用tar命令查看目录结构tar tvf your_sdk_package.tar.gz | head -20这样可以避免解压后出现多层嵌套目录。我遇到过有的版本解压后还要再进三层目录才能看到核心文件特别影响后续操作。2. SDK初始化与目录结构调整解压完成后第一件事就是清理不必要的组件。QSDK默认包含大量针对不同平台的代码我们只需要保留IPQ5018相关的部分。执行以下命令rm -rf BOOT.AK.1.0 BOOT.BF.3.3.1 BOOT.XF.0.3 BOOT.BF.3.1.1 TZ.BF* TZ.AK.1.0 rm -rf TZ.WNS.5.1 IPQ4019.ILQ.11.* IPQ80* IPQ6018.ILQ.11.* RPM.* WIGIG.*接下来是最关键的repo初始化步骤。这里有个坑要注意国内访问codeaurora.org可能会超时。建议先测试下git clone速度time git clone git://codeaurora.org/quic/qsdk/releases/manifest/qstak如果超过30秒还没反应就需要配置代理或者改用镜像源。初始化命令如下repo init -u git://codeaurora.org/quic/qsdk/releases/manifest/qstak \ -b release -m caf_AU_LINUX_QSDK_NHSS.QSDK.11.5_TARGET_ALL.11.5.0.7762.7876.xml \ --repo-urlgit://codeaurora.org/tools/repo.git --repo-branchcaf-stable同步代码时建议限制并发数避免服务器拒绝连接repo sync -j4 --no-tags -qc这个过程视网速可能需要1-3小时。我在公司内网实测用了42分钟在家用宽带则花了2个半小时。3. 关键组件配置3.1 Wi-Fi固件部署IPQ5018的Wi-Fi驱动比较特殊需要手动部署多个固件文件。首先创建目录结构mkdir -p qsdk/dl mkdir -p qsdk/qca/feeds/qca-wifi然后复制这些关键组件cp -rf apss_proc/out/proprietary/Wifi/qsdk-qca-art/* qsdk/ cp -rf apss_proc/out/proprietary/Wifi/qsdk-qca-wifi/* qsdk/ cp -rf wlan_proc/src/components/QCA8074_v1.0/qca-wifi-fw-src-component-cmn-* qsdk/dl/特别注意QCA9888和QCA9984的固件版本要匹配cp -rf cnss_proc/bin/QCA9888/hw.2/* qsdk/dl/ cp -rf cnss_proc/bin/QCA9984/hw.1/* qsdk/dl/3.2 64位环境特殊配置IPQ5018支持32位和64位两种模式我们要针对64位进行特别配置mkdir -p qsdk/staging_dir/target-aarch64_cortex-a53_musl-1.1.16/usr/lib/ cd qsdk/prebuilt/ipq50xx_64/ipq_premium/ tar zxpvf qti-mfg-provision_1.0-1_ipq.ipk cp -rf ./usr/lib/libprovision.so ../../../staging_dir/target-aarch64_cortex-a53_musl-1.1.16/usr/lib/还需要创建provides文件mkdir -p qsdk/staging_dir/target-aarch64_cortex-a53_musl-1.1.16/pkginfo/ touch qsdk/staging_dir/target-aarch64_cortex-a53_musl-1.1.16/pkginfo/qti-mfg-provision.provides echo libprovision.so qsdk/staging_dir/target-aarch64_cortex-a53_musl-1.1.16/pkginfo/qti-mfg-provision.provides4. EZMESH功能集成4.1 源码配置如果有EZMESH需求需要额外配置三个组件EZMESH-SRC核心算法源码EZMESH-BIN预编译二进制EZMESH-ALG加速库先解压源码包到指定位置cp -rf {yourpath}/qca-networking-2021-spf-11-5_qca_oem_ezmesh-src.git/NHSS.QSDK.11.5/apss_proc/out/proprietary/RSRC-EZMESH/qsdk-ezmesh-src/* qsdk/然后修改Makefile配置sed -i s/HYD_MODULE_STRATEGYy/HYD_MODULE_STRATEGYn/g qsdk/qca/src/qca-ezmesh/ezmeshConfig.defs sed -i 0,/ifeq/{/ifeq/d;} qsdk/qca/feeds/qca-ezmesh/qca-ezmesh/Makefile4.2 二进制部署复制预编译好的二进制文件cp -rf {yourpath}/qca-networking-2021-spf-11-5_qca_oem_ezmesh-bin.git/NHSS.QSDK.11.5/apss_proc/out/proprietary/RBIN-EZMESH/qsdk-ezmesh-bin/* qsdk/加速库的部署方式类似cp -rf {yourpath}/qca-networking-2021-spf-11-5_qca_oem_ezmesh-alg.git/NHSS.QSDK.11.5/apss_proc/out/proprietary/RBIN-EZMESH-ALG/qsdk-ezmesh-alg-bin/* qsdk/5. 编译配置与系统构建5.1 基础配置更新feed并应用配置cd qsdk ./scripts/feeds update -a ./scripts/feeds install -a -f选择64位目标平台cp qca/configs/qsdk/ipq_premium.config .config sed -i s/TARGET_ipq_ipq806x/TARGET_ipq_ipq50xx_64/g .config mv prebuilt/ipq50xx_64/ipq_premium/* prebuilt/ipq50xx_64/5.2 功能定制根据需求调整功能模块echo CONFIG_PACKAGE_whc-meshn .config echo CONFIG_PACKAGE_qca-ezmeshy .config echo CONFIG_PACKAGE_qca-ezmesh-algy .config5.3 开始编译首次编译建议先做defconfigmake defconfig正式编译时建议记录日志make Vs -j$(nproc) | tee build.log遇到错误时可以grep日志快速定位grep -i error build.log | less6. 镜像生成与打包6.1 准备构建环境创建必要的目录结构mkdir -p common/build/ipq_x64 mkdir -p apss_proc/out/meta-scripts复制打包工具和配置文件cp qsdk/qca/src/u-boot-2016/tools/pack.py apss_proc/out/meta-scripts/pack_hk.py cp -r apss_proc/out/proprietary/QSDK-Base/meta-tools apss_proc/out/6.2 收集固件组件复制所有必需的二进制文件cp -rf qsdk/bin/ipq/dtbs/* common/build/ipq_x64/ cp -rf wlan_proc/build/ms/bin/5018.wlanfw.eval/* common/build/ipq_x64/ cp -rf btfw_proc/out/IPQ5018/bin/FW_IMAGES/bt_fw_patch_* common/build/ipq_x646.3 生成最终镜像执行打包脚本cd common/build export BLD_ENV_BUILD_IDP python update_common_info.py这个过程会生成以下关键文件openwrt-ipq50xx-64-xxx-squashfs-single.imgopenwrt-ipq50xx-64-xxx-squashfs-nand.ubiopenwrt-ipq50xx-64-xxx.manifest7. 常见问题排查在多次编译过程中我总结出几个典型问题的解决方法repo sync失败通常是网络问题导致可以尝试设置git全局超时git config --global http.postBuffer 524288000使用SSH替代git协议内存不足编译时遇到internal compiler error: Killed错误说明内存不足。解决方法减少并行编译任务make -j2创建swap分区sudo fallocate -l 8G /swapfileWi-Fi固件缺失如果启动后Wi-Fi无法工作检查qsdk/dl目录下是否有对应型号的固件确认Makefile中的PKG_VERSION是否正确64位支持问题遇到非法指令错误时检查.config中是否设置了TARGET_ipq_ipq50xx_64是否复制了正确的prebuilt库文件镜像启动失败如果设备无法启动新镜像确认uboot版本是否匹配检查分区表配置是否正确验证设备树文件是否适合你的硬件版本