当前位置: 首页 > news >正文

在Ubuntu 22.04上编译OpenWrt 23.05.2,我踩过的坑和解决方案都在这了

在Ubuntu 22.04上编译OpenWrt 23.05.2的深度排错指南编译OpenWrt固件是许多网络爱好者和开发者的必经之路但这个过程往往伴随着各种意想不到的挑战。本文将分享我在Ubuntu 22.04系统上编译OpenWrt 23.05.2时遇到的实际问题及其解决方案希望能帮助遇到类似困境的开发者少走弯路。1. 环境准备那些官方文档没告诉你的细节Ubuntu 22.04作为长期支持版本理论上应该是编译OpenWrt的理想平台。但实际操作中我发现官方文档列出的依赖包并不完全准确。以下是经过验证的完整依赖安装命令sudo apt update sudo apt install -y build-essential clang flex bison g gawk \ gcc-multilib g-multilib gettext git libncurses-dev libssl-dev \ python3-distutils rsync unzip zlib1g-dev file wget qemu qemu-utils \ libelf-dev python3-setuptools ccache注意qemu-utils这个包经常被忽略但如果你计划生成VDI/VMDK格式的虚拟机镜像它是必不可少的。我在第一次编译时就因为缺少它而失败。提示使用ccache可以显著加快后续的编译速度特别是当你需要多次尝试不同的配置时。2. 源代码管理从克隆到版本切换的陷阱获取OpenWrt源代码看似简单但有几个关键点需要注意git clone https://git.openwrt.org/openwrt/openwrt.git cd openwrt git checkout v23.05.2常见问题及解决方案问题1fatal: destination path openwrt already exists and is not an empty directory.解决方法删除或重命名现有目录或者指定不同的克隆路径。问题2切换版本后feeds不匹配解决方法务必在切换版本后执行以下命令./scripts/feeds update -a ./scripts/feeds install -a我遇到的最棘手的问题是feeds更新不完整部分包无法安装。经过多次尝试发现这是网络连接不稳定导致的。解决方案是多次重复执行feeds更新命令检查feeds目录下的.index文件是否完整必要时可以手动删除feeds目录重新开始3. 递归依赖错误python3-pymysql案例分析执行make defconfig时我遇到了典型的递归依赖错误tmp/.config-package.in:33826:error: recursive dependency detected! tmp/.config-package.in:33826: symbol PACKAGE_python3-pymysql depends on PYTHON3_PYMYSQL_SHA_PASSWORD_SUPPORT feeds/packages/lang/python/pymysql/Config.in:4: symbol PYTHON3_PYMYSQL_SHA_PASSWORD_SUPPORT depends on PACKAGE_python3-pymysql排查过程在OpenWrt官方GitHub的Issues中搜索相关错误发现这是已知问题#22668分析发现是feeds/packages/lang/python/pymysql路径下的Makefile存在依赖冲突解决方案需要修改pymysql的Makefile文件主要变更包括将PKG_RELEASE从1改为2重构包定义分离基础包和SHA密码支持功能添加新的python3-pymysql-sha-pwd元包修改后的关键部分如下define Package/python3-pymysql $(call Package/python3-pymysql/Default) DEPENDS:python3 endef define Package/python3-pymysql-sha-pwd $(call Package/python3-pymysql/Default) TITLEw/ SHA256 password auth DEPENDS:python3-pymysql $(RUST_ARCH_DEPENDS) PACKAGE_python3-pymysql-sha-pwd:python3-cryptography endef这个案例教会我遇到编译错误时首先仔细阅读错误信息在官方Issue tracker中搜索相关错误理解问题的根本原因再应用修复4. 镜像生成失败qemu-img缺失问题在编译接近完成时系统报错WARNING: Install qemu-img to create VDI/VMDK images make[5]: *** [Makefile:158: /path/to/openwrt-23.05.2-x86-64-generic-squashfs-combined.vmdk] Error 1原因分析在make menuconfig中选择了生成VMDK格式的镜像系统缺少qemu-img工具来进行格式转换解决方案安装缺失的软件包sudo apt install qemu qemu-utils或者如果不必须使用VMDK格式重新运行make menuconfig取消选择VMDK镜像格式只保留需要的格式如squashfs或ext4经验分享首次编译建议使用make -j1 Vs以便更好地查看错误成功编译一次后可以使用make -j$(nproc)加速后续编译编译生成的镜像位于bin/targets目录下5. 编译优化与调试技巧经过多次尝试我总结出以下提高成功率的技巧准备工作确保至少有20GB的可用磁盘空间使用SSD可以显著加快编译速度保持网络连接稳定编译命令make -j$(($(nproc)1)) download make -j$(($(nproc)1)) world调试方法查看详细日志添加Vs参数检查特定包的编译日志在build_dir目录下查找对应包的日志清理特定包make package/name/clean常见问题速查表问题现象可能原因解决方案下载失败网络问题多次重试或更换网络环境依赖错误包版本冲突更新feeds或手动修改Makefile权限不足未使用sudo检查命令权限需求空间不足磁盘空间不够清理空间或扩大分区6. 个性化配置建议成功编译基础系统后你可能想添加一些个性化功能常用配置选项LuCI界面中文支持LuCI → Modules → Translations → Chinese Simplified (zh_Hans)常用工具在Network或Utilities类别中选择需要的工具内核模块根据硬件需求添加特定驱动配置技巧先使用官方配置作为基础make defconfig小步迭代修改配置每次测试编译备份成功的.config文件经过这些调整和优化我最终成功编译出了满足需求的OpenWrt固件。整个过程虽然曲折但解决问题的过程让我对OpenWrt的构建系统有了更深入的理解。
http://www.gsyq.cn/news/1335439.html

相关文章:

  • 统信UOS/麒麟KYLINOS批量部署神器:用dpkg -i和yes命令搞定交互式deb包静默安装
  • TortoiseGit实战:用‘拣选’功能精准移植单个提交,告别全量合并的烦恼
  • STM32CubeMX实战:用一阶卡尔曼滤波给HC-SR04超声波测距数据‘降噪’(附完整代码)
  • 别再为龙芯装系统发愁了!保姆级教程:从下载UOS到用Deepin工具制作启动盘
  • 红日靶场实战复盘:我是如何利用phpMyAdmin日志写入拿到WebShell的
  • 保姆级教程:Halcon20.11在Windows系统下的完整安装与破解配置(附常见问题解决)
  • 学校开始查AI率了!知网AIGC检测到底是什么原理?
  • 实战:如何用OpenPCDet训练你自己的“树”检测模型(附完整数据集与配置文件)
  • 别再傻傻分不清!用打电话、对讲机、广播这些生活例子,5分钟搞懂串行通信里的单工、半双工和全双工
  • mg3640s,g2800,ts9000,ts9020,ts9080,ts3380,ts3440,ts9180如何清零详细教程报错5B00,P07,E08,1700,5b04废墨垫清零,亲测有用。
  • 告别CPU轮询:用HC32F4A0的AOS+DMA实现ADC自动搬运数据
  • 云原生开发的新趋势:Kubernetes、Serverless与边缘计算
  • 用Field II和MATLAB搞定超声波声场仿真:从理论推导到代码实战(附源码)
  • 2026年兰州景观亮化靠谱厂家TOP5:兰州建筑亮化、兰州建筑泛光照明、兰州文旅亮化、兰州旅游景区亮化、兰州景观泛光照明选择指南 - 优质品牌商家
  • Electron在鸿蒙PC上注册全局快捷键,我被热键冲突和权限回收搞疯了
  • 从零搭建企业级网络准入:用Agile Controller-Campus + 华为交换机实战802.1X认证
  • STM32G431时钟树配置避坑指南:从CubeMX图形化到代码实战,手把手教你调出80MHz主频
  • 实战避坑:基于STM32或全志平台调试MIPI-DSI屏的常见问题与排查指南
  • LabVIEW事件驱动状态机:从原理到实战的混合编程架构解析
  • 别再死记硬背ELMo、GPT、BERT的区别了!一张图带你搞懂它们的核心差异与适用场景
  • DHT11温湿度数据不准?可能是时序问题!用51单片机(STC12)和逻辑分析仪调试避坑指南
  • 当流程图XML“损坏”时:手把手教你用Activiti API解析与修复BPMN文件
  • 为什么顶尖思想家团队只用Perplexity搜名言?——独家披露哈佛肯尼迪学院实测数据:准确率92.4%,响应延迟<1.7s(附配置白皮书)
  • WebRTC只管流不管控——自研信令服务器的状态机设计
  • SAP-ABAP:数据类型与数据对象(8篇) 第七篇:进阶优化篇——基于类型与对象特征的性能优化技巧
  • #SAP-ABAP:数据类型与数据对象(8篇) 第六篇:操作实践篇——数据对象的常用操作与异常处理方案
  • 从下载到上线:用CobaltStrike 4.8汉化版快速搭建你的第一个渗透测试实验室
  • 避坑指南:VMware安装RockyLinux后网络不通、SSH连不上的常见问题排查与修复
  • 从Matlab仿真到上板验证:手把手完成Xilinx DDS多项数据生成的全流程
  • 人工智能,应用层和算法层到底该怎么选?