<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Mr_-G，一名勤奋底层软件开发工程师的博客]]></title><description><![CDATA[分享各种编程入门和底层软件开发相关知识，欢迎各位友友们三连，三连必回~]]></description><link>https://blog.youkuaiyun.com/pythonsys</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; pythonsys]]></copyright><item><title><![CDATA[软件测试全景指南：从基础概念到工程实践]]></title><link>https://blog.youkuaiyun.com/pythonsys/article/details/163950221</link><guid>https://blog.youkuaiyun.com/pythonsys/article/details/163950221</guid><author>pythonsys</author><pubDate>Fri, 21 Aug 2026 16:49:04 +0800</pubDate><description><![CDATA[在软件开发中，测试从来不是“写完代码顺便做做”的事情。它是一门艺术与科学的结合——既需要系统化的方法论指导，也离不开工程化的工具与实践。无论你是开发工程师、测试工程师，还是技术管理者，理解软件测试的完整图景，都是保障软件质量的基本功。本文将从基本原则出发，系统梳理软件测试的分类体系常用方法核心工具链以及现代工程实践，力求为你呈现一幅完整的软件测试知识地图。软件测试不是孤立的活动，而是一个贯穿整个软件开发生命周期的系统工程。从开发人员编写的单元测试，到测试团队执行的系统测试，再到用户参与的验收测试；]]></description><category></category></item><item><title><![CDATA[“包含函数指针的结构体”，再配合“指向该结构体的指针（即句柄）”，是 C 语言中实现接口封装最典型、最核心的特征]]></title><link>https://blog.youkuaiyun.com/pythonsys/article/details/163946453</link><guid>https://blog.youkuaiyun.com/pythonsys/article/details/163946453</guid><author>pythonsys</author><pubDate>Fri, 21 Aug 2026 14:54:47 +0800</pubDate><description><![CDATA[包含函数指针的结构体”是“接口类”，定义了行为标准；“指向该结构体的指针（句柄）”是“对象实例”，携带具体状态并指向行为实现。两者结合，让过程式的C语言拥有了面向接口编程的能力，既保留了C的高性能和底层控制力，又实现了模块间的最大解耦——这恰恰是操作系统内核、嵌入式框架和大型C项目长盛不衰的底层架构基石。]]></description><category></category></item><item><title><![CDATA[如何基于AOSP配置一套适合自己公司产品的BSP（实战经验，欢迎私信交流）]]></title><link>https://blog.youkuaiyun.com/pythonsys/article/details/163943643</link><guid>https://blog.youkuaiyun.com/pythonsys/article/details/163943643</guid><author>pythonsys</author><pubDate>Fri, 21 Aug 2026 14:39:48 +0800</pubDate><description><![CDATA[本文是一篇面向嵌入式/车载/Android底层工程师的BSP开发实战指南，基于真实车载工程案例，系统讲解从AOSP定制BSP的全流程。文章指出BSP开发的核心是配置而非移植，重点解析了产品骨架搭建、硬件属性定义、分区规划、内核与Bootloader接入、HAL定制、vendor集成、安全策略等关键环节，并提供了多板卡管理、工具链锁定等实用技巧。通过分析128MB系统分区设计、多核多域启动链、交换机HAL等典型车载场景，揭示了企业级BSP的架构要点。]]></description><category></category></item><item><title><![CDATA[Android等大型系统的编译前流程，核心正是通过一系列标准化的命令和脚本]]></title><link>https://blog.youkuaiyun.com/pythonsys/article/details/163753345</link><guid>https://blog.youkuaiyun.com/pythonsys/article/details/163753345</guid><author>pythonsys</author><pubDate>Fri, 14 Aug 2026 13:58:28 +0800</pubDate><description><![CDATA[摘要： Android编译前流程通过标准化命令解决“在哪编译”、“用什么编译”、“编译什么”三个核心问题。环境准备（source build/envsetup.sh）配置路径、工具链及产品配置；目标设定（lunch）指定设备型号（如aosp_arm）、发布配置和构建变体（eng/userdebug/user），明确编译目标。两步完成后，执行make即可启动编译。流程确保工具链、架构适配及目标清晰，为高效构建奠定基础。]]></description><category></category></item><item><title><![CDATA[识别后缀文件]]></title><link>https://blog.youkuaiyun.com/pythonsys/article/details/163730209</link><guid>https://blog.youkuaiyun.com/pythonsys/article/details/163730209</guid><author>pythonsys</author><pubDate>Thu, 13 Aug 2026 17:10:31 +0800</pubDate><description><![CDATA[这篇文章以做菜为类比，系统讲解了C程序从源码到运行的四个阶段： 源码阶段：.c文件（具体实现）和.h文件（函数声明）； 编译阶段：生成.o目标文件（机器码但未定址）； 链接阶段： 静态库.a（代码复制到程序中，独立但体积大）； 动态库.so（运行时加载，共享但依赖外部文件）； 运行阶段：生成可执行文件（如a.out或.exe）。 文章还介绍了其他编译相关文件（如.i、.s），并通过“做菜”比喻帮助理解各阶段作用，强调动态库.so的“共享”特性。]]></description><category></category></item><item><title><![CDATA[头文件被 #include，本质上是一种纯粹的“文本复制粘贴”操作]]></title><link>https://blog.youkuaiyun.com/pythonsys/article/details/163730102</link><guid>https://blog.youkuaiyun.com/pythonsys/article/details/163730102</guid><author>pythonsys</author><pubDate>Thu, 13 Aug 2026 16:56:10 +0800</pubDate><description><![CDATA[C/C++中的#include指令本质是预处理阶段的文本替换操作，预处理器会将头文件内容原封不动插入到指令位置。其核心作用是让编译器提前获取函数/变量的声明信息，避免&quot;未声明&quot;错误。标准库头文件用&lt;&gt;包含，自定义头文件用&quot;&quot;包含且优先查找当前目录。关键注意事项包括：禁止包含.c文件（会导致重复定义）、必须使用#ifndef宏守卫防止重复包含。整个过程类似于组装电脑时先查阅说明书了解接口规格，而具体实现代码相当于已封装好的硬件组件。]]></description><category></category></item><item><title><![CDATA[AOSP体系是什么]]></title><link>https://blog.youkuaiyun.com/pythonsys/article/details/163642396</link><guid>https://blog.youkuaiyun.com/pythonsys/article/details/163642396</guid><author>pythonsys</author><pubDate>Mon, 10 Aug 2026 17:34:27 +0800</pubDate><description><![CDATA[全称是。它不仅仅是一些代码，更是一个完整的、开源的移动操作系统框架。“AOSP体系”可以理解为这个框架本身及其一整套的总和。它由Google发起和维护，为所有Android设备提供了一个通用的、可修改的基础。你可以把它看作是Android系统的“地基”和“骨架”。]]></description><category></category></item><item><title><![CDATA[Linux字符设备驱动read读操作标准函数签名]]></title><link>https://blog.youkuaiyun.com/pythonsys/article/details/162909462</link><guid>https://blog.youkuaiyun.com/pythonsys/article/details/162909462</guid><author>pythonsys</author><pubDate>Wed, 15 Jul 2026 16:50:20 +0800</pubDate><description><![CDATA[本文深入剖析Linux字符设备驱动中read系统调用的标准函数签名与实现规范。作为字符设备最核心的同步IO接口，read函数具有严格固定的四参数签名：ssize_t (*read)(struct file *, char __user *, size_t, loff_t *)，自Linux 2.6内核沿用至今未变。文章从内核调用栈、参数语义、返回值规范三个维度展开：首先解析每个参数的作用，包括文件实例上下文、用户空间缓冲区标记、请求长度和偏移指针。]]></description><category></category></item><item><title><![CDATA[嵌入式软件开发流式缓冲（Stream Buffer）]]></title><link>https://blog.youkuaiyun.com/pythonsys/article/details/162908945</link><guid>https://blog.youkuaiyun.com/pythonsys/article/details/162908945</guid><author>pythonsys</author><pubDate>Wed, 15 Jul 2026 16:28:12 +0800</pubDate><description><![CDATA[FreeRTOS流式缓冲（StreamBuffer）是专为嵌入式实时系统设计的单生产者-单消费者字节流传输组件。它通过环形字节FIFO实现高效数据缓冲，融合任务阻塞唤醒、中断安全接口、水位触发机制和直接任务通知等核心功能，完美解决外设连续数据流传输的三大痛点：裸机环形缓冲缺乏同步机制、RTOS队列处理不定长数据效率低、消息缓冲区强制附加消息头的问题。 ]]></description><category></category></item><item><title><![CDATA[嵌入式 Linux 工程师的日常核心流程：从零到话题通信]]></title><link>https://blog.youkuaiyun.com/pythonsys/article/details/162818687</link><guid>https://blog.youkuaiyun.com/pythonsys/article/details/162818687</guid><author>pythonsys</author><pubDate>Mon, 13 Jul 2026 15:59:09 +0800</pubDate><description><![CDATA[本文为嵌入式Linux工程师提供了ROS2开发的完整实践指南，重点讲解从功能包创建到话题通信测试的核心流程。主要内容包括： 环境准备：ROS2安装、工作空间配置、colcon编译工具使用 开发流程： 创建工作空间与功能包 编写C++节点（发布者/订阅者示例） CMakeLists.txt配置与编译 话题通信测试与调试方法 嵌入式开发要点： 硬件驱动集成思考 实时性优化策略 从模拟到真实硬件的迁移路径 常用调试工具介绍 ]]></description><category></category></item><item><title><![CDATA[嵌入式Linux软件开发并发编程]]></title><link>https://blog.youkuaiyun.com/pythonsys/article/details/162817821</link><guid>https://blog.youkuaiyun.com/pythonsys/article/details/162817821</guid><author>pythonsys</author><pubDate>Sun, 12 Jul 2026 20:06:37 +0800</pubDate><description><![CDATA[《嵌入式Linux并发编程核心要点》摘要：本文系统阐述了嵌入式Linux并发编程的关键技术与工程实践。针对嵌入式设备资源受限、实时性要求高的特点，重点分析了四大并发模型（多进程、多线程、信号驱动、异步IO）的适用场景与实现原理，深入讲解了同步互斥机制（互斥锁、自旋锁、条件变量等）的嵌入式优化方案。文章揭示了数据竞争、死锁等典型问题的根治方法，对比了七种IPC通信机制的选型策略，并提供了线程架构、实时性、功耗等维度的工程级优化建议。]]></description><category></category></item><item><title><![CDATA[【ROS 2入门实战】Windows + WSL2 搭建Ubuntu 22.04 + ROS 2 Humble 完整开发环境（全网最细避坑指南）]]></title><link>https://blog.youkuaiyun.com/pythonsys/article/details/162817703</link><guid>https://blog.youkuaiyun.com/pythonsys/article/details/162817703</guid><author>pythonsys</author><pubDate>Sun, 12 Jul 2026 19:55:19 +0800</pubDate><description><![CDATA[摘要：本文详细记录了在Windows系统通过WSL2搭建ROS2 Humble开发环境的完整流程。关键步骤包括：启用WSL2功能、安装Ubuntu 22.04 LTS子系统、使用鱼香ROS一键脚本安装Humble版本（含国内源配置），并通过Talker/Listener测试验证环境。针对常见问题（如环境变量错误、APT锁冲突、命令执行环境混淆）提供了具体解决方案。最终搭建的环境支持ROS2核心功能与colcon编译工具，为后续机器人开发奠定了基础。]]></description><category></category></item><item><title><![CDATA[第 55 天：嵌入式 Linux 核心进阶 ——UART 串口驱动与 TTY 子系统]]></title><link>https://blog.youkuaiyun.com/pythonsys/article/details/162396184</link><guid>https://blog.youkuaiyun.com/pythonsys/article/details/162396184</guid><author>pythonsys</author><pubDate>Sun, 28 Jun 2026 17:53:31 +0800</pubDate><description><![CDATA[文章摘要： 本文深入解析Linux TTY终端子系统与UART串口驱动的分层架构，从异步通信本质出发，系统讲解UART设备树配置、用户态编程及内核驱动开发三大核心技能。通过对比UART与SPI/I2C的差异，强调波特率等参数匹配的重要性，并针对嵌入式开发中常见的串口乱码、丢包等问题提供实战解决方案。文章包含设备树配置示例、用户态串口工具完整代码（支持多参数配置与原始模式），以及内核态serdev总线接口应用，覆盖从硬件验证到软件调试的全流程，帮助开发者掌握这一嵌入式通用通信方案。]]></description><category></category></item><item><title><![CDATA[第 54 天：嵌入式 Linux 核心进阶 ——SPI 总线设备驱动开发]]></title><link>https://blog.youkuaiyun.com/pythonsys/article/details/162396121</link><guid>https://blog.youkuaiyun.com/pythonsys/article/details/162396121</guid><author>pythonsys</author><pubDate>Sun, 28 Jun 2026 17:43:46 +0800</pubDate><description><![CDATA[本文深入探讨了嵌入式Linux系统中SPI总线驱动开发的完整流程。首先分析了SPI总线硬件原理，包括四线制结构、四种通信模式及与I2C的核心区别。接着详细讲解了Linux SPI子系统的三层架构、核心组件和必备API，重点介绍了设备树配置规范。以W25Q64 SPI Flash为例，展示了从设备树配置、驱动代码编写到交叉编译的完整开发过程，实现了读ID、数据读写、扇区擦除等核心功能。]]></description><category></category></item><item><title><![CDATA[深刻理解 BSS段、数据段、只读段、堆、栈 的区别]]></title><link>https://blog.youkuaiyun.com/pythonsys/article/details/161970980</link><guid>https://blog.youkuaiyun.com/pythonsys/article/details/161970980</guid><author>pythonsys</author><pubDate>Sun, 14 Jun 2026 09:09:24 +0800</pubDate><description><![CDATA[本文详细解析了C/C++程序运行时内存的五大逻辑区域：BSS段、数据段、只读段、堆和栈。BSS段存储未初始化或零初始的全局/静态变量，加载时自动清零；数据段存放已初始化的全局/静态变量；只读段包含代码和常量；堆用于动态内存分配，需手动管理；栈存储局部变量和函数调用信息，自动分配释放。各区域在生命周期、访问权限、分配方式上存在显著差异，理解这些区别对内存管理和程序优化至关重要。通过代码示例和对比表，文章系统性地阐述了不同变量的存储位置及其特性。]]></description><category></category></item><item><title><![CDATA[二级指针、函数指针、数组指针、指针数组辨析]]></title><link>https://blog.youkuaiyun.com/pythonsys/article/details/161970955</link><guid>https://blog.youkuaiyun.com/pythonsys/article/details/161970955</guid><author>pythonsys</author><pubDate>Sun, 14 Jun 2026 09:07:02 +0800</pubDate><description><![CDATA[本文解析了C语言中四种指针概念的差异：1. 二级指针（int**）存储指针地址，用于修改指针或管理指针数组；2. 函数指针（int()(int)）指向函数入口，实现回调机制；3. 数组指针（int()[5]）指向整个数组，操作二维数组行；4. 指针数组（int*[5]）存储多个指针，用于字符串列表等。关键区别在于声明语法（括号位置决定类型）、内存模型（指向对象不同）和使用场景（动态修改/回调/多维数组等）。理解这些概念需注意运算符优先级，通过声明形式识别本质特征。]]></description><category></category></item><item><title><![CDATA[【嵌入式开发学习】第 52 天：嵌入式 Linux 核心基础 —— 字符设备驱动开发]]></title><link>https://blog.youkuaiyun.com/pythonsys/article/details/157464342</link><guid>https://blog.youkuaiyun.com/pythonsys/article/details/157464342</guid><author>pythonsys</author><pubDate>Wed, 28 Jan 2026 09:19:54 +0800</pubDate><description><![CDATA[本文深入解析Linux字符设备驱动开发，重点介绍GPIO输出（LED）和输入（按键中断）两种典型场景的实现方法。文章从驱动开发的核心思维转变开始，强调内核态编程规范，详细讲解字符设备驱动的五大核心组件：设备号管理、驱动注册、file_operations接口、设备文件创建和硬件操作函数。针对嵌入式开发特点，提供完整的LED驱动和按键驱动代码实现，包括GPIO子系统API使用、中断处理架构（顶半部+底半部）、tasklet应用等关键技术。]]></description><category></category></item><item><title><![CDATA[【嵌入式开发学习】第51天：嵌入式 Linux 核心基础 —— 内存管理]]></title><link>https://blog.youkuaiyun.com/pythonsys/article/details/157128572</link><guid>https://blog.youkuaiyun.com/pythonsys/article/details/157128572</guid><author>pythonsys</author><pubDate>Mon, 19 Jan 2026 09:22:53 +0800</pubDate><description><![CDATA[本文深入探讨嵌入式Linux内存管理的核心机制与优化策略。针对嵌入式系统资源受限的特点，分析了虚拟内存管理、物理内存分配（伙伴系统/Slab）、内存回收等内核机制，并对比了用户态(malloc/free)和内核态(kmalloc/vmalloc)的内存管理方法。重点提出了嵌入式场景下的三大解决方案：内存泄漏检测（Valgrind/Kmemleak）、内存碎片治理（内存池技术）和栈溢出预防。文章还总结了嵌入式优化的核心原则：最小化内存占用、内存锁定和共享内存复用。]]></description><category></category></item><item><title><![CDATA[Git 实战分享]]></title><link>https://blog.youkuaiyun.com/pythonsys/article/details/156560650</link><guid>https://blog.youkuaiyun.com/pythonsys/article/details/156560650</guid><author>pythonsys</author><pubDate>Sun, 04 Jan 2026 09:42:40 +0800</pubDate><description><![CDATA[摘要：本文针对Git学习中的常见误区，提出"场景化学习"方法，通过6个核心工作场景串联Git指令，帮助开发者从"会用指令"升级为"能解决问题"。文章首先梳理Git核心概念（工作区、暂存区、本地/远程仓库），然后详细讲解：1)本地项目推送远程；2)日常协作开发；3)多分支开发；4)临时切换分支；5)版本回退；6)项目发布等场景的操作流程。每个场景包含原理拆解、步骤详解、指令用法和常见问题解决方案，并强调"先拉后推"、"小步提交"、"分支隔离"等核心原则，最后提供高频指令速查表。]]></description><category></category></item><item><title><![CDATA[2025创作复盘：以文字迭代沉淀成长，用技术化分享构建同行连接链路]]></title><link>https://blog.youkuaiyun.com/pythonsys/article/details/156427536</link><guid>https://blog.youkuaiyun.com/pythonsys/article/details/156427536</guid><author>pythonsys</author><pubDate>Tue, 30 Dec 2025 17:24:24 +0800</pubDate><description><![CDATA[2025年创作复盘：超额完成年度目标并实现价值跃迁。年度核心指标超额达成：输出393篇原创内容（超额555%），总阅读量46.6万+，标杆内容单篇突破4000阅读量。完成两次关键版本迭代：从"技巧堆砌"升级为"逻辑拆解+案例验证"模式，并建立"价值输出导向"评价体系。突破创作瓶颈期，沉淀"素材结构化建模"SOP，构建"工作-创作"双向赋能链路。实现从数量达标到价值跃迁的转变，初步形成同行协作网络。2026年将聚焦个人成长赛道，启动"创作成长营"项目，持续优化价值输出能力。]]></description><category></category></item></channel></rss>