<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[niuTyler的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/niuTyler</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; niuTyler]]></copyright><item><title><![CDATA[RK3568 Linux SDK 详解：SDK 是什么、板级差异与完整构建流程]]></title><link>https://blog.youkuaiyun.com/niuTyler/article/details/166737807</link><guid>https://blog.youkuaiyun.com/niuTyler/article/details/166737807</guid><author>niuTyler</author><pubDate>Sun, 27 Sep 2026 16:40:25 +0800</pubDate><description><![CDATA[SDK 是芯片级的。嵌入式 Linux SDK 是一整棵能编译出 bootloader + kernel + rootfs 完整固件的代码树，由芯片厂商发布，跟着 SoC 走。板级差异是配置级的。同一 SoC 的不同板子共用一套 SDK，差异集中在device/的 BoardConfig、内核下的设备树、分区表和少量硬件参数。构建流程是固定的。选板（）→ 编译（）→ 打包（）→ 烧录（没有官方 SDK 和板子原理图无法从零造轮子，但在 EVB 基线上做适配，是每个嵌入式开发者都能走通的路。]]></description><category></category></item><item><title><![CDATA[VMware 虚拟机「一边上网、一边 ping 开发板」：NAT + 桥接双网卡完整方案（含 DUP! 详解）]]></title><link>https://blog.youkuaiyun.com/niuTyler/article/details/166364920</link><guid>https://blog.youkuaiyun.com/niuTyler/article/details/166364920</guid><author>niuTyler</author><pubDate>Tue, 22 Sep 2026 15:09:42 +0800</pubDate><description><![CDATA[整个问题的本质，是把两种职责不同的虚拟网络硬塞进一块网卡NAT 的职责是"借道主机上网"，它看不见物理设备；桥接的职责是"挂进物理网段"，它不负责给你联网。两块网卡、两条通路、两套 IP，互不抢路由。配置固化在 netplan 里，以后只要板子上电、网线插好，开机即用，重启不丢。回顾这次踩坑链：桥接误选 WiFi → 误用仅主机 →169.254地址 → VMnet1 改网段引发 DUP → netplan 缩进全灭 → 网卡名对不上 → 热切换不生效，每一步都很典型。]]></description><category></category></item><item><title><![CDATA[飞腾 FT-2000/4 Ubuntu 内存卡 / NVMe SSD 系统制作完整指南]]></title><link>https://blog.youkuaiyun.com/niuTyler/article/details/166137355</link><guid>https://blog.youkuaiyun.com/niuTyler/article/details/166137355</guid><author>niuTyler</author><pubDate>Sun, 20 Sep 2026 17:31:25 +0800</pubDate><description><![CDATA[本文基于飞腾 FT-2000/4 嵌入式平台，详细介绍如何制作 SD 卡启动系统以及 NVMe SSD 启动系统，涵盖分区、格式化、根文件系统制作、U-Boot 环境变量配置、网口自启动等完整流程，并记录了实际开发中遇到的各种坑点。]]></description><category></category></item><item><title><![CDATA[Repo 多仓库管理实战教程：解决全志SDK多Git仓库代码溯源问题]]></title><link>https://blog.youkuaiyun.com/niuTyler/article/details/165353186</link><guid>https://blog.youkuaiyun.com/niuTyler/article/details/165353186</guid><author>niuTyler</author><pubDate>Mon, 14 Sep 2026 19:40:48 +0800</pubDate><description><![CDATA[Repo 不是用来替代 Git 的，它是基于Python封装的Git批量调度工具。Git 管单个仓库，Repo 管一堆 Git 仓库。它的核心依赖清单文件，文件中记录了当前整套工程包含的所有子仓库地址、存储路径、绑定分支，Repo 通过读取该配置，实现对所有子仓库的统一管控。1. Repo 是多Git仓库批量管理工具，不替代Git，是大型SDK、系统源码开发的必备工具；2. 核心逻辑：通过manifest清单统一管理上百个子仓库，实现一键同步、分支管控、状态排查；3.]]></description><category></category></item><item><title><![CDATA[Ubuntu 22.04 搭建全志 T113-i 编译环境：完整步骤与踩坑记录]]></title><link>https://blog.youkuaiyun.com/niuTyler/article/details/164614297</link><guid>https://blog.youkuaiyun.com/niuTyler/article/details/164614297</guid><author>niuTyler</author><pubDate>Tue, 08 Sep 2026 14:18:31 +0800</pubDate><description><![CDATA[硬件：创龙 TLT113‑i 评估板SDK版本：T113‑i_v1.0，Buildroot‑2019.02 + Linux5.4 + gcc‑linaro‑5.3.1宿主环境：Ubuntu 22.04。系统新版本glibc、gcc、Python版本过高，和老SDK存在大量兼容性问题。]]></description><category></category></item><item><title><![CDATA[STM32 + DAC 正弦波生成方案详解：从入门到高频优化]]></title><link>https://blog.youkuaiyun.com/niuTyler/article/details/164025098</link><guid>https://blog.youkuaiyun.com/niuTyler/article/details/164025098</guid><author>niuTyler</author><pubDate>Mon, 24 Aug 2026 15:47:31 +0800</pubDate><description><![CDATA[是一种用数字方式精确控制输出频率的技术。核心思想是用一个相位累加器按固定步长递增，每次溢出时完成一个周期。查表法用空间换时间，是嵌入式高频正弦波的首选方案。256 点查表是工程最佳平衡点。用 32 位累加器实现亚像素级频率精度，比简单的sin(2πft)循环精确得多。死循环 + 延时 = 阻塞所有任务。必须用定时器中断或DMA来驱动输出。通用场景 →方案①：定时器中断 + DDS 查表固定频率 →方案②：定时器 + DMA + 预计算简单低频 →。]]></description><category></category></item><item><title><![CDATA[积分、微分与 PID —— 从直觉到公式]]></title><link>https://blog.youkuaiyun.com/niuTyler/article/details/163948444</link><guid>https://blog.youkuaiyun.com/niuTyler/article/details/163948444</guid><author>niuTyler</author><pubDate>Fri, 21 Aug 2026 15:55:39 +0800</pubDate><description><![CDATA[目标值 ──→(+)──→ e(t) ──┬──→ ×Kp ──────────────→(+)──→ 输出│ │└──────── 实际值 ←──── 被控对象 ←───────┘（反馈回路）项数学直觉管什么风险PKp × e偏多少纠多少响应速度稳态误差IKi × ∫e dt偏了多久补多少稳态精度过冲/振荡/饱和DKd × de/dt快到了就刹车阻尼/平稳噪声放大🟢一句话记住 PID：P 看现在（偏了多少），I 看过去（偏了多久），D 看未来（正在以多快速度偏）。]]></description><category></category></item><item><title><![CDATA[AI辅助Linux驱动开发指南]]></title><link>https://blog.youkuaiyun.com/niuTyler/article/details/163943226</link><guid>https://blog.youkuaiyun.com/niuTyler/article/details/163943226</guid><author>niuTyler</author><pubDate>Fri, 21 Aug 2026 11:37:11 +0800</pubDate><description><![CDATA[理解什么是驱动，为什么需要驱动。：实现第一个可运行的驱动。：理解驱动的基本结构。]]></description><category></category></item><item><title><![CDATA[Linux驱动开发完整教程！！！！！！！！！！！框架-重要]]></title><link>https://blog.youkuaiyun.com/niuTyler/article/details/163942938</link><guid>https://blog.youkuaiyun.com/niuTyler/article/details/163942938</guid><author>niuTyler</author><pubDate>Fri, 21 Aug 2026 11:24:42 +0800</pubDate><description><![CDATA[驱动是内核空间和用户空间用户程序 → 驱动 → 硬件设备让内核能够识别和控制硬件提供统一的接口给用户程序✅这样做先理解基本概念用AI获取模板和解释分步提问，逐步完善每写一段代码就理解原理测试、调试、修改、再测试记录遇到的问题和解决方法❌不要这样做直接复制粘贴不问原理不测试就认为完成了遇到错误就全部重来不查看内核日志不理解API就乱用。]]></description><category></category></item><item><title><![CDATA[【Linux驱动开发完全指南】从零开始搞定IMX6ULL驱动开发——小白入门 + 完整流程 + 面试攻略]]></title><link>https://blog.youkuaiyun.com/niuTyler/article/details/163942503</link><guid>https://blog.youkuaiyun.com/niuTyler/article/details/163942503</guid><author>niuTyler</author><pubDate>Fri, 21 Aug 2026 11:12:19 +0800</pubDate><description><![CDATA[多动手、多看内核源码。这篇文章从环境搭建到ADC/PWM子系统，基本覆盖了嵌入式Linux驱动入门所需的核心知识。但真正的理解必须来自实际敲代码、碰到报错、翻内核源码解决问题的过程。hello驱动→ LED驱动（GPIO子系统）→ 设备树重构LED驱动→ GPIO中断（按键）→ 中断消抖（定时器）→ 阻塞/非阻塞/poll/异步通知→ input子系统→ PWM/ADC子系统每一步都要真正跑通，不只是复制代码。🚀参考资料《Linux设备驱动程序》（LDD3）]]></description><category></category></item><item><title><![CDATA[音频总线协议与接口全解析：小白入门指南]]></title><link>https://blog.youkuaiyun.com/niuTyler/article/details/163940125</link><guid>https://blog.youkuaiyun.com/niuTyler/article/details/163940125</guid><author>niuTyler</author><pubDate>Fri, 21 Aug 2026 10:28:50 +0800</pubDate><description><![CDATA[协议（Protocol）是一种通信规则，规定了数据是如何在两个设备之间传输的。你可以把它理解为两个人对话时使用的“语言”和“语法规则”。协议关注的是数据格式、时序要求、信号含义等逻辑层面的东西。举例来说：I2S协议规定了音频数据应该如何打包、时钟和帧同步信号如何配合、每个bit应该在哪个时刻传输。接口（Interface）是硬件层面的连接通道，是实现协议所需的物理电路。你可以把它理解为“电话机”——虽然两人用普通话（协议）交流，但需要通过电话机（接口）来传输声音。]]></description><category></category></item><item><title><![CDATA[EDMA3详解：OMAP L138的高速数据传输引擎]]></title><link>https://blog.youkuaiyun.com/niuTyler/article/details/163939523</link><guid>https://blog.youkuaiyun.com/niuTyler/article/details/163939523</guid><author>niuTyler</author><pubDate>Fri, 21 Aug 2026 10:20:29 +0800</pubDate><description><![CDATA[不要怕复杂：EDMA3看起来复杂，但用起来很简单从简单开始：先实现单次传输，再尝试高级功能理解原理：明白"为什么"比记住"怎么做"更重要动手实践：写代码、调试、优化，实践出真知立即行动：不要只看不练！下载代码示例在开发板上运行修改参数，观察效果设计自己的小项目记住：每个嵌入式高手都是从"小白"开始的！💪。]]></description><category></category></item><item><title><![CDATA[嵌入式IAP/OTA升级方案全景综述：从串口到5G，从裸写到工业级安全]]></title><link>https://blog.youkuaiyun.com/niuTyler/article/details/163724068</link><guid>https://blog.youkuaiyun.com/niuTyler/article/details/163724068</guid><author>niuTyler</author><pubDate>Thu, 13 Aug 2026 13:35:02 +0800</pubDate><description><![CDATA[IAP/OTA不是一个单一技术，而是一个技术栈传输层选什么通道（串口/WiFi/4G/…）存储层怎么放固件（单分区/A/B/外部Flash）安全层怎么防攻击（签名/加密/安全启动）可靠性层怎么防变砖（校验/回滚/断点续传）入门用串口Ymodem，半天就能跑通；工业级方案需要A/B+差分+签名+回滚，可能需要几周甚至几个月。不要一上来就做最复杂的，根据产品阶段和可靠性需求，逐步迭代。先跑通基础升级，再加安全，最后加A/B和差分。你现在用的是哪种升级方案？遇到了什么坑？欢迎评论区交流。]]></description><category></category></item><item><title><![CDATA[STM32 底层原理详解：从硅片到代码的完整旅程]]></title><link>https://blog.youkuaiyun.com/niuTyler/article/details/163632875</link><guid>https://blog.youkuaiyun.com/niuTyler/article/details/163632875</guid><author>niuTyler</author><pubDate>Mon, 10 Aug 2026 11:23:59 +0800</pubDate><description><![CDATA[STM32 的本质是 ARM Cortex-M 内核 + ST 设计的外设矩阵 封装在一块硅片上。
关键总线说明：STM32 的时钟系统极其复杂，这是理解底层的关键。
时钟源层级：为什么需要这么复杂的时钟树？当你按下复位键，发生了一系列硬件级别的操作：
内存映射关键点：

二、软件层面：代码是怎么"跑"起来的
2.1 编译链接的幕后
你写的 C 代码要变成芯片能懂的机器码，经历以下过程：
链接脚本（.ld）的关键作用：链接器根据脚本决定：Cortex-M 内核内置了 NVIC（Nested Vectored]]></description><category></category></item><item><title><![CDATA[McASP 音频接口详解：从小白到能配寄存器]]></title><link>https://blog.youkuaiyun.com/niuTyler/article/details/163630203</link><guid>https://blog.youkuaiyun.com/niuTyler/article/details/163630203</guid><author>niuTyler</author><pubDate>Mon, 10 Aug 2026 10:34:54 +0800</pubDate><description><![CDATA[/ 释放帧同步复位，启动 McASP// 帧同步发生器启动// 再确认串行器释放// 使能 TX/RX// 清状态// McASP 开始跑了！① GBLCTL = 0 （全局复位）② 设置 PLL 和 AUXCLK （时钟源）③ 配 SRCTLn （引脚功能）④ 配 TXFMT / RXFMT （数据格式）⑤ 配 ACLKXCTL / AHCLKXCTL / AFSXCTL （时钟和帧同步）⑥ 按顺序释放 GBLCTL 各子模块复位 （使能硬件）]]></description><category></category></item><item><title><![CDATA[电源电路设计从入门到精通：LDO 与 DC-DC 完全指南]]></title><link>https://blog.youkuaiyun.com/niuTyler/article/details/163528504</link><guid>https://blog.youkuaiyun.com/niuTyler/article/details/163528504</guid><author>niuTyler</author><pubDate>Thu, 06 Aug 2026 10:50:43 +0800</pubDate><description><![CDATA[稳定：负载突变后，输出电压很快回到设定值不稳定（振荡）：输出电压以某个频率持续正弦波动，幅值几十到几百 mV原因：反馈环路的相位裕度不足→ 输出变化 → 反馈检测 → 芯片调整 → 传递到输出→ 如果每一步的延迟累积使得"负反馈"在某个频率变成了"正反馈"→ 振荡！1. 输入是什么？范围多大？→ 定拓扑（Buck / Boost / Buck-Boost / LDO）2. 输出需要多少电压、多少电流？→ 定功率等级，判断 LDO 能否扛住3. 噪声要求多高？]]></description><category></category></item><item><title><![CDATA[GD32单片机开发实战：从STM32/CubeMX 迁移到快速上手]]></title><link>https://blog.youkuaiyun.com/niuTyler/article/details/163445305</link><guid>https://blog.youkuaiyun.com/niuTyler/article/details/163445305</guid><author>niuTyler</author><pubDate>Mon, 03 Aug 2026 16:09:10 +0800</pubDate><description><![CDATA[从 STM32/CubeMX 切换到 GD32，最大的变化不是技术栈，而是心态不要期待 100% 对等的图形化工具标准库开发反而更贴近底层，更可控GD32 Embedded Builder 在快速进步，可作为辅助核心口诀下库 → 建工程 → 配路径 → 写 GPIO → 加延时 → 扩外设 → 看手册按照这个流程，3 天内你就能从 STM32 开发者变成 GD32 开发者。]]></description><category></category></item><item><title><![CDATA[UIO 驱动 vs 传统内核驱动]]></title><link>https://blog.youkuaiyun.com/niuTyler/article/details/163305417</link><guid>https://blog.youkuaiyun.com/niuTyler/article/details/163305417</guid><author>niuTyler</author><pubDate>Wed, 29 Jul 2026 14:46:21 +0800</pubDate><description><![CDATA[传统内核驱动UIO 驱动内核代码行数~200 行~40 行用户态代码行数~20 行（应用层）~40 行（就是驱动本身）总代码量~220 行~80 行需要理解的概念ioremapiowrite32、字符设备注册、主次设备号openmmap、指针操作硬件寄存器操作方式（和普通 C 变量一样）每次 I/O 的系统调用每次read()write()都走只在mmap时走一次调试printkdmesgprintfgdb传统内核驱动 = 住在内核里，性能高但开发难、崩了死系统。]]></description><category></category></item><item><title><![CDATA[嵌入式调试技巧：影子寄存器——不靠 printf，也能看清芯片“脑子里“被写了什么]]></title><link>https://blog.youkuaiyun.com/niuTyler/article/details/163248778</link><guid>https://blog.youkuaiyun.com/niuTyler/article/details/163248778</guid><author>niuTyler</author><pubDate>Mon, 27 Jul 2026 17:49:57 +0800</pubDate><description><![CDATA[/ 覆盖写入，只保留最新值适合：排查"最终配置是什么"、“哪个值被覆盖了”维度printf影子寄存器性能开销大（串口 IO）无（RAM 写入）对时序的影响严重无信息量单次全量历史回溯能力无随时查看开关成本改代码、重编译一行注释/宏适用场景慢速业务流程硬件寄存器配置、时序敏感代码核心思想：用 RAM 空间换调试可见性。1KB 的 RAM 在 STM32 上可能不算小，但比起"花两天时间排查一个时序 bug"，这 1KB 的代价太值得了。]]></description><category></category></item><item><title><![CDATA[CAT24C16 EEPROM 驱动开发指南：从数据手册到工程代码]]></title><link>https://blog.youkuaiyun.com/niuTyler/article/details/163136148</link><guid>https://blog.youkuaiyun.com/niuTyler/article/details/163136148</guid><author>niuTyler</author><pubDate>Thu, 23 Jul 2026 17:18:52 +0800</pubDate><description><![CDATA[CAT24C16 的 11 位地址 = I2C 设备地址的低 3 位（A10~A8）+ Word Address 的 8 位（A7~A0）I2C 总线上实际发送：└── I2C 设备地址 ──┘ └──── Word Address ────┘│ CAT24C16 EEPROM 驱动开发要点 ││ ││ 1. 2KB = 2048 字节 = 128 页 × 16 字节 ││ ││ 2. I2C 地址 = 0xA0 | ((addr >> 7) & 0x0E) │。]]></description><category></category></item></channel></rss>