- 博客(70)
- 资源 (1)
- 收藏
- 关注
原创 嵌入式网络编程深度优化 --网络协议栈配置实战指南
缓冲区调优:合理设置socket缓冲区大小,平衡延迟和吞吐量连接管理:优化连接跟踪和队列长度,提高并发处理能力算法选择:根据应用场景选择合适的TCP拥塞控制算法中断优化:通过NAPI和中断亲和性减少CPU开销。
2025-11-04 22:54:53
373
原创 build rootfs 编译踩坑总结 --第一题SIGSTKSZ missing binary operator before token --持续更新中
那是一个平凡的下午,我像往常一样敲击着键盘,突然屏幕上跳出了一个让我眉头紧锁的错误:这个看似简单的编译错误,却开启了我一段奇妙的调试之旅。如果你也曾被类似的C库版本问题困扰,或者对Linux系统编程中的信号栈机制感到好奇,那么请跟随我的脚步,一起探索这个问题的来龙去脉。
2025-11-03 23:28:26
423
原创 嵌入式Linux电源管理实战 --深入解析CPU调频governor原理与优化
本文深入探讨了Linux内核中的CPU调频机制(CPUFreq)及其governor策略实现。首先介绍了CPU动态调频的技术背景和核心原理,包括采样机制、决策过程和频率切换方法。文章详细解析了Linux内核预置的各种governor类型及其适用场景,如性能优先(performance)、省电优先(powersave)和按需调频(ondemand)等。通过实际操作示例展示了如何查看、配置和优化governor参数,并提供了两个关键代码示例:一个自定义简单governor的内核模块实现,以及一个用户空间调频控制
2025-11-03 22:36:59
202
原创 内核调试利器:KGDB远程调试实战指南
摘要: 本文详细介绍了KGDB内核远程调试技术的实现与应用。首先阐述了KGDB的工作原理及其在内核调试中的优势,随后提供了完整的环境配置指南,包括内核编译选项设置和启动参数调整。文章包含两个实用代码示例,展示如何在内核模块中触发断点并进行复杂场景调试。针对常见问题提供了排查方法,如连接问题和符号表加载,并给出性能优化建议。最后总结了核心技术要点,并指出进一步学习方向,为开发者构建高效内核调试体系提供了实用指导。(150字)
2025-11-01 23:38:21
793
2
原创 Git Diff大揭秘:读懂代码变更的“心电图“
git diff使用基于LCS(最长公共子序列)的算法:找出两个版本的公共部分标记新增和删除的内容生成人类可读的对比结果这种算法保证了diff的高效性和准确性。git diff是一个强大的代码分析工具,掌握它的解读技巧对每个开发者都至关重要。通过本文的详细解读,你应该能够:✅ 准确理解diff的每个字段含义✅ 识别代码改动的意图和影响✅ 发现潜在的代码问题✅ 提高代码审查的效率记住:看懂diff只是第一步,理解diff背后的代码逻辑才是真正的价值所在。
2025-11-01 09:34:32
367
原创 嵌入式Linux根文件系统制作 --深入理解目录结构规范
根文件系统必须符合FHS标准,确保系统组件的有序组织关键目录如/bin、/sbin、/etc、/lib等必须正确配置init进程是用户空间的第一个进程,负责系统初始化虚拟文件系统(proc、sysfs、tmpfs)对系统运行至关重要。
2025-11-01 08:11:13
826
原创 交叉编译工具链深度解析 --静态库与动态库编译实战指南
交叉编译工具链中静态库和动态库的正确使用是嵌入式Linux开发的关键技能。静态库适合对启动速度和独立性要求高的场景,而动态库在存储空间受限和多进程共享的场景中更具优势。技术要点回顾正确配置交叉编译环境是成功的基础理解位置无关代码(PIC)对动态库编译的重要性掌握库文件的版本管理和符号控制熟悉目标平台的库依赖管理进一步学习方向深入研究ELF文件格式和动态链接过程学习使用pkg-config管理复杂的库依赖探索CMake和Autotools在交叉编译中的应用。
2025-10-30 22:31:26
391
原创 嵌入式网络编程深度探索:无线网络驱动开发实战指南
本文深入探讨了嵌入式Linux无线网络驱动开发的核心技术。主要内容包括:无线驱动的工作原理(硬件抽象层、MAC层处理、协议栈接口)和Linux内核支持机制(cfg80211、mac80211框架);具体的实现步骤(硬件初始化、驱动注册)和关键配置参数;完整的代码示例(驱动框架、数据传输处理);以及调试方法(工具使用、问题排查)和优化建议(中断合并、内存管理)。文章最后总结了技术要点,并建议进一步学习最新无线标准、安全机制等方向,为开发者提供了一套完整的无线网络驱动开发指南。
2025-10-29 22:33:49
314
原创 深入剖析SLAB分配器原理与优化实战
SLAB分配器作为嵌入式Linux系统中重要的内存管理机制,通过对象缓存和预分配策略,有效解决了小内存频繁分配导致的性能问题和内存碎片问题。在实际嵌入式项目开发中,合理使用SLAB分配器可以显著提升系统性能。SLAB通过对象缓存机制减少内存分配开销合理配置缓存参数对系统性能至关重要构造/析构函数可以自动化对象生命周期管理监控和调试工具是优化SLAB使用的关键研究SLUB分配器(SLAB的改进版本)的特性与优势深入学习内存碎片整理机制探索cgroup内存控制与SLAB的配合使用。
2025-10-28 22:27:15
257
原创 深入剖析平台设备驱动与设备树匹配机制
本文深入探讨了Linux内核中平台设备驱动与设备树匹配机制的实际应用。通过分析设备驱动开发的技术原理,详细介绍了从设备树节点定义到平台驱动注册的完整实现流程。文章提供了设备树节点定义和平台驱动实现的代码示例,涵盖资源获取、中断处理等关键环节。同时总结了常见问题排查方法和性能优化建议,包括设备树语法检查、驱动匹配状态查看等实用技巧。最后指出进一步学习Linux设备模型和其他总线类型驱动的方向,为嵌入式Linux系统开发提供了全面的技术指导。
2025-10-27 22:45:44
1313
原创 Linux内核驱动开发 - 字符设备驱动深度解析
本文深入探讨Linux字符设备驱动开发,重点解析驱动核心原理与实现方法。文章首先介绍字符设备驱动在Linux系统中的角色,管理如串口、传感器等以字节流交换数据的设备。技术原理部分详细讲解struct cdev和file_operations结构,以及设备号管理、内存映射等关键内核机制。实战部分提供完整的驱动实现步骤:从设备号分配、cdev结构初始化到设备注册和节点创建。文中包含两个代码示例:基础框架展示了open/read/write等基本操作实现,增强版本则引入互斥锁解决多进程访问同步问题。示例代码涵盖动
2025-10-26 17:12:16
952
原创 当“Make”坏了,我们该如何“Make”
摘要:作者在构建Buildroot时遭遇了GNUMake的版本Bug,试图调试时意外损坏了make工具,导致无法重新编译make。通过查阅官方文档,发现可以使用gmake外援和项目自带的build.sh脚本进行初始构建,成功生成新的make工具。文章进一步探讨了历史上第一个make工具的诞生过程,指出它最初是用更底层的工具或手工编译而来,最终实现了自举(Bootstrapping)。这个案例展现了计算机工具链中"鸡生蛋蛋生鸡"的哲学问题及其解决方案。
2025-10-24 23:23:47
667
原创 【一文搞懂 repo 工作原理】
这篇指南全面介绍了Google开发的Repo工具,该工具用于管理由多个Git仓库组成的大型项目(如Android)。主要内容包括:Repo的双层架构设计(启动器+主程序)、核心配置文件Manifest的解析、初始化与同步的工作原理、常见问题解决方案(如Python兼容性、网络问题等)、高级用法(本地配置、批量操作)以及性能优化技巧。文章还提供了系统化的故障排除方法和最佳实践建议,帮助开发者高效管理复杂项目。理解Repo的架构设计和工作流程是有效使用该工具的关键。
2025-09-28 22:32:32
553
原创 从零构建 ARM64 内核?QEMU 踩坑全记录:差点删库跑路!
从迷茫到清晰,这一系列的“踩坑”过程让我对 Linux 系统的启动流程有了更深刻的理解。最常见的原因:你在 x86 的电脑上编译了一个 x86 的 BusyBox,然后扔给了 ARM64 的虚拟机去执行……:在 Linux 生态中,Glibc 是“主流”,但 musl-libc 和 uclibc 在 。musl 对静态链接的支持非常友好,是嵌入式领域的首选。,就相当于告诉内核“我要自杀”,内核只好“跟着一起死”(Panic)。 的 BusyBox 是你的好朋友,能避免 99% 的库依赖问题。
2025-09-09 22:39:54
1057
原创 ubuntu 系統使用過程中黑屏問題分析
摘要:系统出现黑屏并显示"VGA无信号"错误,日志显示AMD GPU操作超时(seq=102898/102899),随后GPU重置失败(错误码-110)。进一步检查发现Xorg服务器无法创建监听套接字,提示"server already running"。建议排查方向:1)观察键盘大小写指示灯状态;2)尝试切换至tty终端(Ctrl+Alt+F3),以区分是Xorg问题还是GPU完全失效。问题可能涉及GPU驱动超时和Xorg服务冲突。
2025-09-06 22:24:34
348
原创 RK3399 启动流程 --从复位到系统加载
RK3399启动流程解析:从ROMCode到系统加载。启动始于A53核心从0xFFFF0000执行ROMCode,依次检测SPI Nor/NAND、eMMC、SD卡等存储设备,验证IDBLOCK后进入启动流程。若无有效设备则转入USB下载模式。初始化过程经过SRAM阶段加载DDR代码、配置内存控制器、最终转移至DDR内存。系统采用多级引导架构,包含DDR Image、Loader Image等阶段,具有容错机制、安全验证和性能优化等特点,为嵌入式开发提供重要参考。
2025-08-02 21:54:49
371
原创 uboot armv8 启动流程之 linker script
本文描述了嵌入式系统启动代码的内存布局结构。主要包括中断向量表vectors、启动入口代码start.o、普通代码段text、ARM/Thumb2交互代码glue等核心部分。重点说明了关键段落的定义和功能:__image_copy_start标记代码段起始位置,用于DDR内存搬运;.rodata存放只读变量;.data存放已初始化变量;u-boot的init入口统一管理机制;binman维护生成的二进制文件;__image_copy_end标记需搬运内容结束位置;.rel.dyn重定位表用于计算偏移;最后是
2025-08-02 10:37:01
2470
原创 kthread、kthread_worker 和 workqueue 的区别与联系
这三种都是Linux内核中的任务执行机制,用于异步处理任务,但它们有不同的设计目的和使用场景。特性kthreadworkqueue抽象级别低中高线程管理手动半自动自动任务队列无有有并发处理需自行实现单线程多线程池系统资源占用较多中等可共享(使用系统工作队列)复杂性高中等低适用场景长期运行复杂任务顺序执行多个任务通用异步任务处理。
2025-07-13 14:22:06
819
原创 ARMV8 RK3399 u-boot TPL启动流程分析 --crt0.S
在__main函数中,主要完成了U-Boot的初始化流程,分为几个关键步骤。首先,准备board_init_f的运行环境,并跳转到该函数。接着,设置board_init_f申请的栈和全局数据(GD)。随后,执行relocate_code,将U-Boot代码重定位到board_init_f计算出的目标地址,TPL和SPL会跳回crt0。之后,设置board_init_r的运行环境,完整U-Boot的剩余工作由c_runtime_cpu_setup完成,最后跳转到board_init_r。在board_init
2025-05-12 23:15:47
662
原创 ARMV8 RK3399 u-boot TPL启动流程分析 --start.S
armv8 RK3399 uboot TPL启动流程分析 --start.S
2025-05-11 21:10:13
489
原创 Ubuntu/Windows 双系统睡眠唤醒崩溃问题终极调试指南
Windows 快速启动(Fast Startup)导致硬件状态未完全重置,Ubuntu 无法正确接管硬件。进入 Ubuntu 后,Ubuntu 睡眠唤醒异常(键盘灯亮但黑屏→自动重启)。出现唤醒崩溃,"关机" 后正常 → 确认是 Windows 硬件状态残留问题。- 选择 "关机" → 手动开机 → 进入 Ubuntu → 测试睡眠唤醒。- 选择 "重启" → 进入 Ubuntu → 测试睡眠唤醒。# 等待 10 秒后按键盘唤醒,观察是否正常。(非重启)后进入 Ubuntu 测试。
2025-05-04 15:04:59
1030
原创 基於RISC-V QEMU 仿真運行Linux 系統環境搭建
文章詳細說明如何從堶零開始基於RISC-V QEMU 仿真運行Linux 系統環境搭建,是Linux 小白入門教程不二之選
2023-09-17 11:34:45
777
原创 QEMU 啓動gdb 調試
上一章介紹了如何使用QEMU 運行RISC-V 程序, GDB 作爲強大的代碼調試工具,對軟件開發至關重要,本章介紹如何啓動GDB 調試
2023-09-02 14:25:26
532
原创 make menuconfig defconfig savedefconfig 区别
make menuconfig defconfig savedefconfig 区别
2023-02-19 21:51:15
557
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅