<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[黑猫奥利奥的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/ZXDDBK</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; ZXDDBK]]></copyright><item><title><![CDATA[存储芯片千问千答第11问：对于磨损类用例，waf越大的模型磨损的更快，还是waf更小的模型磨损的更快？]]></title><link>https://blog.csdn.net/ZXDDBK/article/details/169171091</link><guid>https://blog.csdn.net/ZXDDBK/article/details/169171091</guid><author>ZXDDBK</author><pubDate>Mon, 26 Oct 2026 23:38:12 +0800</pubDate><description><![CDATA[在EOL测试中，选择小WAF模型可加速磨损。尽管大WAF导致更少GC、减少命令开销，但小WAF因频繁触发GC，需多次读取数据并搬移，额外写入加剧磨损。虽GC占用时间，但其本身产生的写入操作显著提升磨损效率。综合来看，小WAF模型通过高频GC与读写交互，实现更快的寿命耗尽，故更优。]]></description><category></category></item><item><title><![CDATA[存储芯片千问千答第10问：FAT32支持的单个文件最大容量真的是4GB吗？]]></title><link>https://blog.csdn.net/ZXDDBK/article/details/164430176</link><guid>https://blog.csdn.net/ZXDDBK/article/details/164430176</guid><author>ZXDDBK</author><pubDate>Sun, 06 Sep 2026 20:01:59 +0800</pubDate><description><![CDATA[<think>我们只需要根据内容生成摘要，≤150字。内容讲FAT32限制：卷容量规范支持2TB但微软格式化工具限制32GB；单文件最大4GB-1字节，因为32位无符号整数记录文件大小。实验验证4GB不行，少1MB可以。摘要要简洁，包含关键点。</think>FAT32规范支持单卷最大2TB，但微软格式化工具将FAT32选项限制在32GB以下；单文件大小上限为4GB减1字节，因文件大小用32位无符号整数记录，最大值为4294967295字节。实验验证4GB文件无法拷贝，少1MB可以。]]></description><category></category></item><item><title><![CDATA[拆解一台“古董”台扇：没有电路板的纯机械时代]]></title><link>https://blog.csdn.net/ZXDDBK/article/details/164428414</link><guid>https://blog.csdn.net/ZXDDBK/article/details/164428414</guid><author>ZXDDBK</author><pubDate>Sun, 06 Sep 2026 16:20:20 +0800</pubDate><description><![CDATA[<think>我们只需要根据内容生成摘要，≤150字。注意摘要要简洁概括文章核心：拆解老式钻石牌风扇，发现没有电路板，只有电机、开关和定时器；定时器为发条式机械原理；电机用电容实现启动，电容让副绕组电流超前形成旋转磁场。语言精炼。</think>老式钻石牌风扇拆解：内部无电路板，仅电机、琴键开关和发条式定时器。定时器靠齿轮减速实现一小时定时；单相电机通过CBB61电容移相，使副绕组电流超前，形成旋转磁场驱动转子。简洁机械设计承载时代智慧。]]></description><category></category></item><item><title><![CDATA[存储芯片千问千答第9问：Nand warm-up cycle是什么]]></title><link>https://blog.csdn.net/ZXDDBK/article/details/164427537</link><guid>https://blog.csdn.net/ZXDDBK/article/details/164427537</guid><author>ZXDDBK</author><pubDate>Sun, 06 Sep 2026 14:38:49 +0800</pubDate><description><![CDATA[warm-up cycles是NAND闪存接口在高速信号传输时用于稳定数据同步的机制，在800MB/s以上的接口速率下使用。它通过在读写操作开始前插入几个空闲周期（dummydata），帮助DQ/DQS信号对齐采样窗口，提升数据传输准确性。具体实现上，NAND和控制器端可通过设定寄存器来配置读/写方向的warm-up周期数（可独立设置），例如Micron和KIOXIA的规格中对此有明确说明。该机制能有效改善高速信号的完整性问题，是NV-DDR2及以上接口的重要特性之一。]]></description><category></category></item><item><title><![CDATA[存储芯片千问千答第8问：ROM和NorFlash的关系]]></title><link>https://blog.csdn.net/ZXDDBK/article/details/164187260</link><guid>https://blog.csdn.net/ZXDDBK/article/details/164187260</guid><author>ZXDDBK</author><pubDate>Sun, 30 Aug 2026 11:35:18 +0800</pubDate><description><![CDATA[ROM (Read-Only Memory，只读存储器)：这是一个大类，泛指那些断电后数据不会丢失的存储器。它的核心特点是“只读”（传统意义上），但现代技术已经允许在某些条件下写入。传统的 ROM 包括：Mask ROM（出厂固化，无法改写）、PROM（可编程一次）、EPROM（紫外线擦除可编程）。Nor Flash：这是一种具体的、可电擦除的非易失性存储器。它属于 ROM 这个大家族里的“现代成员”。文章为个人辛苦整理，付费内容，已加入原创侵权保护，禁止私自转载。]]></description><category></category></item><item><title><![CDATA[黑猫带你学UFS协议第28篇：生产状态感知（PSA）]]></title><link>https://blog.csdn.net/ZXDDBK/article/details/164187038</link><guid>https://blog.csdn.net/ZXDDBK/article/details/164187038</guid><author>ZXDDBK</author><pubDate>Sun, 30 Aug 2026 11:23:21 +0800</pubDate><description><![CDATA[Production State Awareness (PSA) 生产状态感知UFS的PSA功能和eMMC基本上大差不差的。UFS设备可以利用其是否在生产环境中的信息，从而在现场运作时进行不同的操作。例如，在设备低温焊接（soldering）前，将数据写入UFS，可能导致数据出错，而正在焊接期间写入数据，出错的概率可能会更大。在低温焊接之前，UFS设备可以使用一种特定的内部操作去加载内容，这样就能减少数据出错的概率，而在低温焊接后进行常规的操作就行了。]]></description><category></category></item><item><title><![CDATA[【驱动开发常见问题】编译找不到gcc：arm-linux-androideabi-gcc: Command not found]]></title><link>https://blog.csdn.net/ZXDDBK/article/details/164001343</link><guid>https://blog.csdn.net/ZXDDBK/article/details/164001343</guid><author>ZXDDBK</author><pubDate>Sun, 23 Aug 2026 19:31:42 +0800</pubDate><description><![CDATA[那这问题就好解决了，根据个人经验，这就是文件格式不对，果然，查看了arm-linux-androideabi-gcc文件时dos格式的，所以在linux上没找到这个文件。使用dos2unix arm-linux-androideabi-gcc命令，将该文件转成unix格式就好了！可是在这个路径下，明明存在arm-linux-androideabi-gcc的，但是就是说找不到。不知道是git搞鬼还是哪里的问题，把文件格式给弄出问题了，研究了半天。上面说的都尝试过了，就是不行！]]></description><category></category></item><item><title><![CDATA[【驱动开发常见问题】编译出现rm: cannot remove `asm/arch‘: Is a directory]]></title><link>https://blog.csdn.net/ZXDDBK/article/details/164001312</link><guid>https://blog.csdn.net/ZXDDBK/article/details/164001312</guid><author>ZXDDBK</author><pubDate>Sun, 23 Aug 2026 19:29:14 +0800</pubDate><description><![CDATA[代码本地编译成功，上传SVN 后再下载先来就不能编译了，报错如下：rm: cannot remove `asm/arch’: Is a directory。]]></description><category></category></item><item><title><![CDATA[【驱动开发常见问题】bash: ./a.sh: /bin/bash^M: bad interpreter: No such file or directory的解决方法]]></title><link>https://blog.csdn.net/ZXDDBK/article/details/164001290</link><guid>https://blog.csdn.net/ZXDDBK/article/details/164001290</guid><author>ZXDDBK</author><pubDate>Sun, 23 Aug 2026 19:26:36 +0800</pubDate><description><![CDATA[参考链接：https://blog.csdn.net/youzhouliu/article/details/79051516。常常使用linux共享文件夹，所以写代码就在windows写，在linux下执行，就容易出现这种错误。之后:wq保存退出即可。]]></description><category></category></item><item><title><![CDATA[【驱动开发常见问题】make报错： *** No rule to make target ‘.../Module.symvers‘, needed by ‘xxx.ko‘. stop]]></title><link>https://blog.csdn.net/ZXDDBK/article/details/164001267</link><guid>https://blog.csdn.net/ZXDDBK/article/details/164001267</guid><author>ZXDDBK</author><pubDate>Sun, 23 Aug 2026 19:24:41 +0800</pubDate><description><![CDATA[摘要：编译字符驱动代码时出现"Missing Module.symvers"错误，原因是内核源码未编译。解决方法是在内核源码目录下执行make modules命令生成Module.symvers文件。该文件是编译内核模块所必需的符号表，只有完整编译内核后才能在外部Makefile中正确构建驱动模块。]]></description><category></category></item><item><title><![CDATA[【驱动开发常见问题】~/bin/sh: ./mytest:not found]]></title><link>https://blog.csdn.net/ZXDDBK/article/details/164001042</link><guid>https://blog.csdn.net/ZXDDBK/article/details/164001042</guid><author>ZXDDBK</author><pubDate>Sun, 23 Aug 2026 19:05:45 +0800</pubDate><description><![CDATA[简单来说，它的作用是：把我的应用程序打包成一个标准的“描述符”结构体，并强制放在内存的一个特定区域（.apps段）里。这样LK的启动代码就可以在开机时，去这个特定区域扫描，找到所有需要启动的程序，并自动调用它们。它告诉编译器（GCC）：“请把这个变量 _app_aboot，专门放到一个名为 .apps的特殊内存段（Section）里去，不要放在默认的数据段。总结一下：在lk代码里写 APP_START，实际上是在向系统的“启动清单”里提交一份简历。接下来笔者详细讲解一下。代码中的这两个宏，必须配对使用。]]></description><category></category></item><item><title><![CDATA[【ARM架构与汇编】第1篇：基于u64打印数值不正确来看栈指针字节对齐的要求]]></title><link>https://blog.csdn.net/ZXDDBK/article/details/164000451</link><guid>https://blog.csdn.net/ZXDDBK/article/details/164000451</guid><author>ZXDDBK</author><pubDate>Sun, 23 Aug 2026 18:19:03 +0800</pubDate><description><![CDATA[本文依据网络资料及工作与学习经验整理而成，如有错误请留言。文章为付费内容，已加入原创侵权保护，禁止私自转载，违者必究。文章所在专栏：《文 / 黑猫学长。]]></description><category></category></item><item><title><![CDATA[【kernel】第6篇：kernel中的硬件访问技术之寄存器读写]]></title><link>https://blog.csdn.net/ZXDDBK/article/details/163020471</link><guid>https://blog.csdn.net/ZXDDBK/article/details/163020471</guid><author>ZXDDBK</author><pubDate>Sun, 19 Jul 2026 15:13:16 +0800</pubDate><description><![CDATA[本文介绍了Linux内核中寄存器与内存访问的区别，以及读写寄存器的相关API及使用建议。主要内容包括：1）寄存器操作可能产生副作用（如中断状态寄存器读取后自动清零）；2）对比了readl和ioread32等寄存器读写函数的差异，推荐使用更具通用性的ioread32系列；3）说明volatile关键字在内核中的隐式处理，无需显式声明；4）介绍了内核提供的位操作宏（如set_bit、clear_bit等），用于高效安全的寄存器位级操作。文章强调遵循内核API规范以保证代码可移植性和稳定性，适合嵌入式开发者参考。]]></description><category></category></item><item><title><![CDATA[【kernel】第5篇：kernel中的硬件访问技术之端口IO]]></title><link>https://blog.csdn.net/ZXDDBK/article/details/163019876</link><guid>https://blog.csdn.net/ZXDDBK/article/details/163019876</guid><author>ZXDDBK</author><pubDate>Sun, 19 Jul 2026 15:06:20 +0800</pubDate><description><![CDATA[本文介绍了嵌入式Linux驱动开发中的端口IO（Port I/O）操作，重点针对x86架构。文章首先对比了内存映射IO（MMIO）与端口IO的区别，指出端口IO是x86特有的硬件特性，需使用专用IN/OUT汇编指令访问独立的IO地址空间，而ARM等嵌入式架构仅支持MMIO。 内容涵盖Linux内核中端口IO的标准操作流程：1) 使用request_region申请端口资源；2) 通过inb/outb等封装函数进行读写操作（底层转换为汇编指令）；3) 最后用release_region释放资源。文中提供了代码]]></description><category></category></item><item><title><![CDATA[【kernel】第4篇：kernel中的硬件访问技术之内存映射MMIO]]></title><link>https://blog.csdn.net/ZXDDBK/article/details/163000963</link><guid>https://blog.csdn.net/ZXDDBK/article/details/163000963</guid><author>ZXDDBK</author><pubDate>Sat, 18 Jul 2026 21:01:49 +0800</pubDate><description><![CDATA[本文介绍了Linux系统中硬件寄存器地址映射的两种方式：静态映射和动态映射。动态映射通过ioremap函数实现，需注意内存屏障与Cache一致性问题；静态映射通过map_desc结构在内核启动时自动完成。文章详细对比了readl与ioread32等寄存器读写API的区别，推荐使用ioread32系列以提高代码通用性。同时阐述了volatile关键字的适用场景，并介绍了Linux内核提供的位操作宏（如set_bit、clear_bit等），为嵌入式驱动开发中的寄存器操作提供了完整解决方案。文中强调通过官方AP]]></description><category></category></item><item><title><![CDATA[【kernel】第2篇：linux内核链表详解]]></title><link>https://blog.csdn.net/ZXDDBK/article/details/163000590</link><guid>https://blog.csdn.net/ZXDDBK/article/details/163000590</guid><author>ZXDDBK</author><pubDate>Sat, 18 Jul 2026 20:29:25 +0800</pubDate><description><![CDATA[本文对比了传统链表与Linux内核链表的实现差异，重点分析了内核链表的设计优势及实现原理。传统链表存在类型绑定和拓扑单一两大缺陷，而内核链表采用侵入式设计，通过纯指针钩子struct list_head实现通用性。文章详细解读了container_of宏的反向寻址机制，列举了核心操作函数（INIT_LIST_HEAD、list_add等），并通过图示分析了四种链表构建方式的拓扑结构。最后剖析了list_entry的实现原理，说明如何通过指针偏移量获取宿主数据，强调该设计具有高度可移植性。]]></description><category></category></item><item><title><![CDATA[【kernel】第3篇：linux进程管理子系统]]></title><link>https://blog.csdn.net/ZXDDBK/article/details/163000314</link><guid>https://blog.csdn.net/ZXDDBK/article/details/163000314</guid><author>ZXDDBK</author><pubDate>Sat, 18 Jul 2026 19:35:21 +0800</pubDate><description><![CDATA[本文深入解析Linux进程管理的核心机制。首先阐述进程四要素：执行实体、内核栈、task_struct结构和独立用户空间。重点剖析task_struct中的关键字段及进程六大状态（运行态、可中断睡眠、不可中断睡眠等）及其转换关系。随后详细讲解Linux调度机制，包括五种调度策略（SCHED_NORMAL、SCHED_FIFO等）、两种调度触发方式（主动/被动）以及基于preempt_count的内核抢占安全机制，最后描述进程上下文切换的四步流程。文章源自付费专栏《黑猫带你深入嵌入式系统》，提供嵌入式系统从裸]]></description><category></category></item><item><title><![CDATA[【Little Kernel】第1篇：LK中的自动注册机制]]></title><link>https://blog.csdn.net/ZXDDBK/article/details/162945917</link><guid>https://blog.csdn.net/ZXDDBK/article/details/162945917</guid><author>ZXDDBK</author><pubDate>Fri, 17 Jul 2026 23:30:00 +0800</pubDate><description><![CDATA[本文解析了LK（Little Kernel）中通过宏定义实现的应用程序自动注册机制。该机制利用APP_START/APP_END宏对将应用程序描述符结构体强制存放在特定的".apps"内存段中，并通过链接脚本标记该段的起止地址。系统启动时，apps_init()函数会遍历该内存段，自动调用所有注册应用的初始化函数。这种设计实现了模块化自动加载，核心是通过编译器指令__SECTION(".apps")将分散定义的应用程序描述符集中存放，再由链接脚本和运行时代码配合完成自动发现和初始化流程。文章通过代码示例详细]]></description><category></category></item><item><title><![CDATA[codex CLI使用技巧]]></title><link>https://blog.csdn.net/ZXDDBK/article/details/162581920</link><guid>https://blog.csdn.net/ZXDDBK/article/details/162581920</guid><author>ZXDDBK</author><pubDate>Sat, 04 Jul 2026 15:13:16 +0800</pubDate><description><![CDATA[本文介绍了在嵌入式开发中使用Codex CLI（命令行界面）的优势和实用技巧。文章首先分析了通过Windows访问Linux代码的常见问题（权限、路径错误等），以及双系统同步方案（如FileZilla）的四大痛点，建议直接在Ubuntu安装CLI工具。随后提供核心使用指南：包括基础启动方式（codex命令直接中文提问）、常用命令提示（输入/自动显示功能列表）、历史对话恢复（codex resume）和模型强度调整（/model选择推理等级）。针对权限管理，详解了通过修改config.toml文件或命令行参数]]></description><category></category></item><item><title><![CDATA[CodeX安装教程]]></title><link>https://blog.csdn.net/ZXDDBK/article/details/162398060</link><guid>https://blog.csdn.net/ZXDDBK/article/details/162398060</guid><author>ZXDDBK</author><pubDate>Sun, 28 Jun 2026 21:53:04 +0800</pubDate><description><![CDATA[手把手教你安装codex环境]]></description><category></category></item></channel></rss>