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

嵌入式Linux开发常见问题解决:内核编译与NFS根文件系统启动卡住

在移植Linux系统到ARM开发板的过程中编译内核和通过NFS启动根文件系统是两个常见环节但也经常遇到各种“小坑”。本文结合两个实际案例分析问题原因并给出解决方案。一、编译内核时出现lzop: not found错误问题现象在执行make zImage编译内核时终端输出类似如下错误/bin/sh: 1: lzop: not found arch/arm/boot/compressed/Makefile:180: recipe for target arch/arm/boot/compressed/piggy.lzo failed make[2]: *** [arch/arm/boot/compressed/piggy.lzo] Error 1 make[1]: *** [arch/arm/boot/compressed/vmlinux] Error 2 make: *** [zImage] Error 2原因分析内核编译过程中为了生成压缩的内核映像zImage需要根据配置如CONFIG_KERNEL_LZO将内核映像压缩为 LZO 格式。Makefile 会调用系统命令lzop来完成压缩。 你的系统中没有安装lzop工具导致 Shell 找不到该命令从而编译失败。解决方案安装lzop即可Ubuntu / Debian 系统sudo apt-get update sudo apt-get install lzopCentOS / RHEL / Fedorasudo yum install lzop # 或 sudo dnf install lzop安装完成后重新执行编译命令问题解决。 提示如果希望使用其他压缩格式如 gzip、xz可以在内核配置中修改CONFIG_KERNEL_*选项但安装lzop是最直接的方法。二、内核启动卡在Sending DHCP requests ... timed out!问题现象开发板上电后串口输出如下信息并卡住不再继续启动fec 20b4000.ethernet eth0: Link is up - 100Mbps/Full - flow control rx/tx Sending DHCP requests ...... timed out! IP-Config: Retrying forever (NFS root)... fec 20b4000.ethernet eth0: Freescale FEC PHY driver [Generic PHY] ... Sending DHCP requests ...... ... (无限重试)原因分析从日志中的IP-Config: Retrying forever (NFS root)...可以看出内核启动参数bootargs配置为使用 NFS 作为根文件系统root/dev/nfs并且没有指定静态 IP因此内核尝试通过 DHCP 自动获取 IP 地址。 但网络中并没有 DHCP 服务器例如开发板直连 PC 主机而主机未开启 DHCP 服务导致 DHCP 请求超时内核进入无限重试状态从而“卡死”在启动阶段。解决方案有三种常用的解决方法根据你的实际网络环境选择一种即可。方案一使用静态 IP 配置 NFS 根文件系统推荐在 U-Boot 命令行中修改bootargs添加静态 IP 参数格式如下setenv bootargs consolettymxc0,115200 root/dev/nfs nfsroot服务器IP:/path/to/nfs/root,rw nfsvers3 ip板子IP:服务器IP:网关IP:子网掩码::eth0:off saveenv boot示例板子静态 IP192.168.1.123NFS 服务器 IP192.168.1.3网关192.168.1.1子网掩码255.255.255.0setenv bootargs consolettymxc0,115200 root/dev/nfs nfsroot192.168.1.3:/home/linux/nfs/rootfs,rw nfsvers3 ip192.168.1.123:192.168.1.3:192.168.1.1:255.255.255.0::eth0:off saveenv boot 注意nfsroot路径是 NFS 服务器上导出export的根文件系统目录需要提前配置好/etc/exports并启动 NFS 服务。方案二搭建 DHCP 服务器如果必须使用动态 IP若开发环境要求使用 DHCP可以在 PC 主机Ubuntu上安装 DHCP 服务器sudo apt-get install isc-dhcp-server配置/etc/dhcp/dhcpd.conf例如subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.100 192.168.1.200; option routers 192.168.1.1; option domain-name-servers 8.8.8.8; }并将网卡接口如ens33加入 DHCP 服务然后启动服务sudo systemctl restart isc-dhcp-server确保开发板与主机在同一网段重启开发板内核即可通过 DHCP 获取 IP 并挂载 NFS。方案三改为从本地存储启动不使用 NFS如果开发板上已经烧写了根文件系统例如在 SD 卡或 eMMC 中可以直接从本地分区启动setenv bootargs consolettymxc0,115200 root/dev/mmcblk1p2 rootwait rw saveenv boot注意/dev/mmcblk1p2要根据实际分区情况修改例如有些板子的 SD 卡为/dev/mmcblk0p2。三、嵌入式Linux开发环境搭建要点结合笔记根据提供的学习笔记一个典型的嵌入式开发环境需要配置以下内容1. 网络配置Ubuntu 宿主机将虚拟机网络适配器改为桥接模式并桥接到宿主机的有线网卡。编辑/etc/network/interfaces配置静态 IPauto ens33 iface ens33 inet static address 192.168.1.3 netmask 255.255.255.0 gateway 192.168.1.1重启网络服务或虚拟机。2. U-Boot 环境变量常用命令命令说明printenv查看所有环境变量setenv name value设置变量setenv name删除变量saveenv保存变量ping ip测试网络连通性tftp addr file通过 TFTP 下载文件到内存3. 通过 TFTP 下载内核和设备树tftp 0x80800000 zImage tftp 0x83000000 myboard.dtb bootz 0x80800000 - 0x830000004. NFS 挂载根文件系统开发板端手动挂载如果内核启动后想挂载 NFS 共享目录非根文件系统可以在开发板 Linux 系统内执行mount -o nolock,nfsvers3 192.168.1.3:/home/linux/nfs /mnt5. U-Boot 完整 NFS 启动示例setenv ipaddr 192.168.1.123 # 板子 IP setenv serverip 192.168.1.3 # TFTP/NFS 服务器 IP setenv bootargs consolettymxc0,115200 root/dev/nfs nfsroot${serverip}:/home/linux/nfs/rootfs,nfsvers3 ip${ipaddr}:${serverip}:192.168.1.1:255.255.255.0::eth0:off tftp 0x80800000 zImage tftp 0x83000000 myboard.dtb bootz 0x80800000 - 0x83000000四、其他注意事项日志中出现的wm8960: probe failed、No vqmmc regulator found等错误通常不影响系统基本启动可后续再调试驱动。确保 NFS 服务器已正确导出目录并且防火墙允许 NFS 端口111, 2049 等。使用init/linuxrc指定根文件系统挂载后启动的第一个进程通常是 init 或 shell。总结本文解决了两个嵌入式 Linux 开发中的常见问题编译内核时缺少lzop工具通过 NFS 启动时因 DHCP 超时而卡死。同时整理了嵌入式开发环境的基本配置流程。希望这篇博客能帮助你顺利绕过这些“小坑”更专注于业务驱动的开发。遇到问题先看日志大多数错误都有明确的提示信息对症下药即可。祝你开发顺利

相关文章:

嵌入式Linux开发常见问题解决:内核编译与NFS根文件系统启动卡住

在移植Linux系统到ARM开发板的过程中,编译内核和通过NFS启动根文件系统是两个常见环节,但也经常遇到各种“小坑”。本文结合两个实际案例,分析问题原因并给出解决方案。一、编译内核时出现 lzop: not found 错误问题现象在执行 make zImage 编…...

某手热门短剧逆向AI直接秒

地址:aHR0cHM6Ly93d3cua3VhaXNob3UuY29tL3NlYXJjaC8lRTclODMlQUQlRTklOTclQTglRTclOUYlQUQlRTUlODklQTc一、为什么要做这个? 你是不是想自动获取快手的搜索结果,却发现直接调用API会被“风控”拦截?别担心,这是因为快手用了加密参…...

支付密钥硬编码、调试模式未关闭、日志泄露token——PHP生产环境支付接口的3大“自杀式配置”

第一章:支付接口安全配置的致命认知误区许多开发者将“启用HTTPS”等同于“支付接口已安全”,却忽视了服务端密钥管理、签名验证逻辑与回调校验机制的根本性缺陷。这种简化式安全观,恰恰是黑产批量盗刷和中间人劫持事件频发的核心诱因。误信客…...

详细解析Spring如何解决循环依赖问题事

AI训练存储选型的演进路线 第一阶段:单机直连时代 早期的深度学习数据集较小,模型训练通常在单台服务器或单张GPU卡上完成。此时直接将数据存储在训练机器的本地NVMe SSD/HDD上。 其优势在于IO延迟最低,吞吐量极高,也就是“数据离…...

体系结构论文(九十八):NPUEval: Optimizing NPU Kernels with LLMs and Open Source Compilers

NPUEval: Optimizing NPU Kernels with LLMs and Open Source Compilers 【AMD 2025报告】一、这篇文章在做什么这篇文章讨论的不是一般的软件代码生成,而是一个更窄、也更难的问题:大语言模型能不能为 NPU 写出“既能跑、又真正高效”的 kernel 代码&am…...

GEO 科普指南

GEO 科普指南 什么是 GEO? GEO(Generative Engine Optimization) 即「生成式引擎优化」,是针对 AI 搜索引擎(如 ChatGPT、Claude、Perplexity 等)进行内容优化的新兴策略。 简单来说:SEO 是让 G…...

Spire实现Wod与Pdf相互转换

在 Java 中使用 Spire 库进行 Word 和 PDF 的转换,你需要用到两个不同的库:Word 转 PDF:使用 Spire.Doc for Java (免费版)PDF 转 Word:使用 Spire.PDF for Java (免费版)重要提示: 免费版(Free Spire&…...

IOFILE结构体的介绍与House of orange轮

认识Pass层级结构 Pass范围从上到下一共分为5个层级: 模块层级:单个.ll或.bc文件 调用图层级:函数调用的关系。 函数层级:单个函数。 基本块层级:单个代码块。例如C语言中{}括起来的最小代码。 指令层级:单…...

Untrunc视频修复工具:让损坏的MP4文件重获新生

Untrunc视频修复工具:让损坏的MP4文件重获新生 【免费下载链接】untrunc Restore a damaged (truncated) mp4, m4v, mov, 3gp video. Provided you have a similar not broken video. 项目地址: https://gitcode.com/gh_mirrors/unt/untrunc 当你熬夜剪辑完成…...

、SEATA分布式事务——XA模式泳

MySQL 中的 count 三兄弟:效率大比拼! 一、快速结论(先看结论再看分析) 方式 作用 效率 一句话总结 count(*) 统计所有行数 最高 我是专业的!我为统计而生 count(1) 统计所有行数 同样高效 我是 count(*) 的马甲兄弟…...

加州大学洛杉矶分校、腾讯混元等推出Unify-Agent

这项由加州大学洛杉矶分校、腾讯混元、香港中文大学和香港科技大学联合研究团队发表于2026年3月的研究(arXiv:2603.29620v1),彻底改变了我们对AI图像生成的认知。想象一下,如果你请AI画一个不太知名的动漫角色或者某个地方的特色小…...

rapidocr v3.8.0发布了

🚀 功能特性 在 ClawHub 中添加 RapidOCR Skill (https://clawhub.ai/rapidai/rapidocr)(docker) 为每个引擎添加 Docker 开发环境 (#649),由 LocNgoXuan23 在 1f78b76 中贡献(python) 为 API 和 CLI 添加 model_root_dir(模型根目录&#x…...

【国家级数字农场认证标准】:PHP可视化配置合规性检查清单(含GDPR+农业农村部2024新规适配)

第一章:国家级数字农场认证标准的农业数字化背景与合规性演进农业正经历从机械化、自动化向数字化、智能化的历史性跃迁。国家层面推动“数字乡村”战略与“智慧农业三年行动计划”,将数据要素深度融入耕、种、管、收全链条,催生对可验证、可…...

3大技术突破重新定义多模态交互:AudioCLIP的跨模态语义对齐解决方案

3大技术突破重新定义多模态交互:AudioCLIP的跨模态语义对齐解决方案 【免费下载链接】AudioCLIP Source code for models described in the paper "AudioCLIP: Extending CLIP to Image, Text and Audio" (https://arxiv.org/abs/2106.13043) 项目地址:…...

视频分析神器video-analyzer:5分钟学会AI智能视频内容理解终极指南

视频分析神器video-analyzer:5分钟学会AI智能视频内容理解终极指南 【免费下载链接】video-analyzer Analyze videos using LLMs, Computer Vision and Automatic Speech Recognition 项目地址: https://gitcode.com/gh_mirrors/vi/video-analyzer 面对海量视…...

mysql如何在本地开发环境模拟生产环境_利用Docker克隆

用Docker快速拉起与生产一致的MySQL实例需:拉取对应版本镜像(如mysql:8.0.33)、挂载生产my.cnf、显式指定字符集(utf8mb4)和SQL模式、处理GTID导致的导入失败(加--set-gtid-purgedOFF或RESET MASTER&#x…...

20个核心AI概念拆解:小白也能轻松入门大模型,收藏这份学习秘籍!

本文以通俗易懂的方式,拆解了20个AI领域的核心概念,涵盖神经网络、迁移学习、Transformer架构、大语言模型等。通过比喻和实例,帮助读者理解AI底层逻辑,消除学习AI的障碍。文章强调AI并非高不可攀,只要掌握基本原理&am…...

ESP32/8266利用闪存文件系统创建 Web服务实现交互控制

ESP32/8266利用SPIFFS(闪存文件系统)创建 Web服务实现交互控制 ✨从ESP8266 Arduino Core 2.7.0版本开始被官方标记为“已弃用”,并推荐使用LittleFS作为替代方案。 在本教程中,将展示如何构建一个web服务,以提供存储在ESP32/8266文件系统中的HTML和CSS文件,创建的HTML和CS…...

Java 线程、进程、CPU缓存、MESI

一、进程&线程 1、什么是进程(process) 进程是操作系统中运行的一个任务(一个应用程序运行在一个进程中)。 进程是一块包含了某些资源的内存区域,操作系统利用进程把它的工作划分为一些功能单元。 进程中包含的…...

3分钟开启浏览器编程:Core72在线IDE零配置开发指南 [特殊字符]

3分钟开启浏览器编程:Core72在线IDE零配置开发指南 🚀 【免费下载链接】core Online IDE powered by Visual Studio Code ⚡️ 项目地址: https://gitcode.com/gh_mirrors/core72/core 还在为复杂的开发环境配置而烦恼吗?Core72在线ID…...

终极指南:5分钟快速配置OpenTabletDriver开源数位板驱动

终极指南:5分钟快速配置OpenTabletDriver开源数位板驱动 【免费下载链接】OpenTabletDriver Open source, cross-platform, user-mode tablet driver 项目地址: https://gitcode.com/gh_mirrors/op/OpenTabletDriver 还在为昂贵的数位板驱动软件发愁吗&#…...

AI 时代:祛魅、适应与重新定义磐

指令替换 项目需求:将加法指令替换为减法 项目目录如下 /MyProject ├── CMakeLists.txt # CMake 配置文件 ├── build/ #构建目录 │ └── test.c #测试编译代码 └── mypass2.cpp # pass 项目代码 一,测试代码示例 test.c // test.c #includ…...

实时行情系统设计:从协议选择到高可用架构,再到数据源选型壤

一、核心问题及解决方案(按踩坑频率排序) 问题 1:误删他人持有锁——最基础也最易犯的漏洞 成因:释放锁时未做身份校验,直接执行 DEL 命令删除键。典型场景:服务 A 持有锁后,业务逻辑耗时超过锁…...

长沙心理科门诊指南:暖心案例分享与就诊复盘

行业痛点分析 当前长沙心理领域面临多重技术挑战。一方面,公众对心理疾病的认知仍存在偏差,病耻感导致轻症患者延误干预,重症患者因恐惧社会评价而回避治疗。测试显示,长沙市18-45岁人群中有近35%存在不同程度的情绪困扰&#xf…...

、SEATA分布式事务——XA模式咀

MySQL 中的 count 三兄弟:效率大比拼! 一、快速结论(先看结论再看分析) 方式 作用 效率 一句话总结 count(*) 统计所有行数 最高 我是专业的!我为统计而生 count(1) 统计所有行数 同样高效 我是 count(*) 的马甲兄…...

HARMONYOS的@builderparam的功能及使用案例

一、@BuilderParam 核心功能(一句话总结) @BuilderParam 是 ArkTS 中用于接收 @Builder 构建函数的装饰器,作用是让父组件向子组件动态注入 UI 片段/逻辑,实现组件“插槽(slot)”能力,解耦子组件固定结构、提升复用灵活性。 本质:UI 占位符,子组件只定义位置,父组件…...

DotNetPy:现代.NET 与 Python 互操作 实战指南胀

我为什么会发出这个疑问呢?是因为我研究Web开发中的一个问题时,HTTP请求体在 Filter(过滤器)处被读取了之后,在 Controller(控制层)就读不到值了,使用 RequestBody 的时候。 无论是…...

redis docker安装

一、获取镜像 查看镜像版本 docker search redis 拉取镜像 docker pull redis 查看是否拉取成功 docker images -a 二、配置准备 a. 新建目录 /home/minner/redis/conf /home/minner/redis/data /home/minner/redis/log b.下载配置文件 查看redis版本: [rootloc…...

从心所欲不逾矩:一种自感澄明的儒家工夫现象学——兼论“自我即自感”与儒家心性论的对话

从心所欲不逾矩:一种自感澄明的儒家工夫现象学——兼论“自我即自感”与儒家心性论的对话岐金兰摘要本文以“自我即自感”理论为现象学视域,对孔子“七十而从心所欲不逾矩”的生命境界进行创造性重诠。核心论点为:此境界并非道德规范的内化&a…...

RDMA 核心原理:RoCE v2 与传输操作详解

一、RDMA原理操作 RDMA 传输符合 RoCE v2 协议 RDMA over Converged Ethernet (RoCE) 是一种网络协议,它利用远程直接内存访问 (RDMA) 功能来显着加速托管在服务器集群和存储阵列上的应用程序之间的通信。RoCE 结合了IBTARDMA 语义,允许设备在应用程序级…...