自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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

原创 基于qemu linux 仿真环境搭建

基于qemu linux 仿真环境搭建

2025-09-11 23:10:24 89

原创 从零构建 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

原创 RK3399 封装尺寸解读

2025-05-27 23:06:17 108

原创 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

原创 Ubuntu 连接 air pods

Ubuntu 连接 air pods

2025-02-16 17:17:53 482

原创 Rockchip 下载工具rkdeveloptool工作流程分析

rkdeveloptool工作流程分析

2024-12-28 22:50:18 214

原创 基於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

原创 QEMU 仿真RISC-V freeRTOS 程序

文章成功實現qemu 仿真RISC-V freeRTOS 程序

2023-08-27 15:56:07 1387

原创 platform_driver_registerAPI使用说明及原理分析

platform_driver_register 原理分析

2023-04-01 13:33:35 742 2

原创 linux kernel iio 架构

linux kernel iio 架构

2023-02-26 13:37:23 2428

原创 make menuconfig defconfig savedefconfig 区别

make menuconfig defconfig savedefconfig 区别

2023-02-19 21:51:15 557

原创 Leetcode 爬楼问题

Leetcode 爬楼问题

2023-01-26 22:48:58 189 1

原创 Leetcode 开根号并返回向下取整结果

Leetcode 开根号并返回向下取整结果

2023-01-25 22:56:01 390

原创 Leetcode 数组存储大整数加一

Leetcode 数组存储大整数加一

2023-01-24 23:03:04 597

原创 Leetcode获取字符串最后一个单词长度

Leetcode获取字符串最后一个单词长度

2023-01-23 21:34:14 174

原创 Leetcode 每日一题 --查找有序数组插入位置

Leetcode 每日一题 --查找有序数组插入位置

2023-01-22 22:45:21 1610

原创 Leetcode 每日一题 --合并单向链表

Leetcode 每日一题 --合并单向链表

2023-01-21 17:57:15 117

原创 Leetcode 每日刷题 --删除数组指定值元素

Leetcode 每日刷题 --删除数组指定值元素

2023-01-21 13:32:49 158

原创 Leetcode 每日刷题 --有序数组去重

Leetcode 每日刷题 --有序数组去重

2023-01-21 12:13:47 239

原创 Leetcode 每日刷题 --左右括号匹配

Leetcode 每日刷题 --括号匹配

2023-01-19 00:09:51 434 2

build rootfs SIGSTKSZ 修复patch

build rootfs SIGSTKSZ 修复patch

2025-11-03

Solidworks 软件自动卸载工具

1。 自动识别电脑安装solidworks 软件, 2。UI 操作,简单方便,彻底解决solidworks 重新安装失败问题。

2022-10-12

串口调试工具虚拟串口.exe

调试串口时,一般需要两台主机,或主机与开发板之间有物理连接。 通过虚拟串口调试工具,创建一对虚拟串口端号,避免了物理连接,不需要硬件也可以调试串口

2020-07-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除