自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(173)
  • 资源 (26)
  • 收藏
  • 关注

原创 [Linux]学习笔记系列

这篇Linux学习笔记整理了ARM架构和驱动开发相关的学习资料。主要内容分为两部分:第一部分是ARM架构相关,包括汇编、启动流程、调试、内存管理等核心模块;第二部分是Linux驱动开发,涵盖了基础驱动框架、时钟管理、串口驱动等常见驱动模块,以及设备树、GPIO、I2C等硬件接口相关内容。这些笔记以Markdown格式存储在GitHub仓库中,适合Linux内核和驱动开发者参考学习。

2025-08-28 09:35:58 683

原创 u-boot学习笔记系列

这是一个关于U-Boot学习笔记的GitHub仓库,主要包含ART-Pi开发板的构建命令和U-Boot源码分析资料。内容按功能模块分类,包括API、架构(arm)、启动流程(bootm/bootz)、命令系统(cmd)、通用功能(common)、设备驱动模型(dm)等核心组件。每个模块都有对应的Markdown文档,详细记录了U-Boot的关键技术点,如ARM架构、设备树、时钟管理、外设驱动等底层实现原理。该项目适合嵌入式开发者系统学习U-Boot启动流程和驱动开发。

2025-02-27 08:26:55 2010

原创 rtthread学习笔记系列

本文是一个RT-Thread实时操作系统的学习笔记合集,包含44个技术文档,涵盖了RT-Thread系统的核心组件和驱动开发。主要内容包括:文件系统(FATFS、LittleFS)、通信协议驱动(CAN、I2C、SPI、USB)、内核机制(线程调度、内存管理、IPC)、系统工具(FINSH、ULOG)以及底层开发(汇编、链接文件)等。该笔记系统整理了RT-Thread的各个功能模块,为开发者提供了全面的技术参考。

2025-01-16 11:56:57 1014

原创 问题解析:为何单核 CPU 会出现多个 Running 线程?

目前看来,编译器从 AC5 切换到 AC6 是最可疑的根源,它很可能暴露了代码中隐藏的问题或引入了新的兼容性问题。由于问题稳定复现于 AC6,并在 AC5 上消失,可以集中火力排查由编译器差异导致的问题。建议的调试路线图静态代码审查 (重点)仔细检查player线程的整个调用链,特别是与cherryusb和elmfat交互的部分。重点关注共享变量、指针操作、类型转换以及中断上下文中的代码。对比 AC5 和 AC6 的编译选项,特别是优化等级和警告级别。开启 AC6 的所有警告 () 并解决它们。

2025-09-10 10:52:40 336

原创 [Linux]学习笔记系列 -- lib/idr.c IDR/IDA机制(ID-to-Pointer/ID Allocator) 内核对象ID的分配与管理

摘要 IDR/IDA机制是Linux内核中用于动态分配和管理唯一整数ID的核心技术,主要用于将ID与内核对象指针关联(IDR)或仅分配唯一ID(IDA)。其核心采用基数树实现,具有空间效率高、查找速度快的特点,适用于稀疏ID分配场景。该技术广泛应用于字符设备管理、定时器、I/O请求标签等场景。相比哈希表、位图和简单数组,IDR/IDA在稀疏ID分配和映射方面更具优势,但不适用于连续密集ID或非整数键的场景。其发展经历了从IDR到IDA的功能分离过程,现已成为内核中稳定且广泛使用的基础设施。

2025-09-10 10:50:06 499

原创 Python脚本深度解析:实现基于YMODEM的单片机固件自动化升级

这个Python脚本不仅仅是一个简单的工具,它更是一个展示了如何编写健壮、可靠的自动化硬件交互程序的优秀范例。明确的流程化思维: 将复杂的升级任务拆解成一系列清晰、可验证的步骤。事件驱动的通信: 使用“等待-验证”模式替代固定的延时,使脚本能适应不同设备和不同情况下的响应速度。全面的错误处理: 充分考虑各种可能出现的异常,并确保程序能优雅地处理它们,同时保证资源的正确释放。用户体验至上: 从自动检测到清晰的进度提示,再到友好的失败重试机制,处处体现了对使用者的关怀。

2025-09-09 09:10:46 860

原创 [Linux]学习笔记系列 -- lib/hashtable.h & include/linux/hash.h 哈希表与哈希函数(Hash Table & Hash Functions) 内核中快速数

本文介绍了Linux内核中哈希表与哈希函数的核心实现及其应用。哈希表作为高效的数据查找基础设施,通过拉链法解决冲突,平均时间复杂度接近O(1),广泛应用于进程管理、文件系统、网络等领域。文章详细分析了哈希表的历史演进、核心原理、优势与局限性,并与链表、红黑树等数据结构进行了对比。内核通过通用哈希框架(lib/hashtable.h)和多种哈希函数(include/linux/hash.h)优化性能,同时指出其不适用于有序数据、范围查询等场景。

2025-09-09 09:08:36 749

原创 必应搜索错乱:当搜索结果与输入不符时,你该怎么办?

必应搜索结果错乱,虽然令人烦恼,但大多数情况都可以通过调整搜索策略、优化浏览器设置或利用高级搜索语法来解决。掌握这些技巧,你将能够更精准、更高效地从海量信息中获取所需,让搜索引擎真正成为你强大的信息助手。

2025-09-08 09:15:09 814

原创 [Linux]学习笔记系列 -- lib/dump_stack.c 栈回溯打印(Stack Trace Dumping) 内核调试与错误诊断的基石

摘要: lib/dump_stack.c是Linux内核中实现栈回溯打印(Stack Trace Dumping)的核心模块,用于内核调试与错误诊断。其核心功能是通过栈回溯技术,在系统遇到错误或异常时输出函数调用链,帮助开发者快速定位问题。该技术经历了从基于帧指针到ORC/DWARF等高效回溯机制的演进,支持多种架构,并广泛应用于内核错误处理(如WARN_ON、BUG_ON)。 主要优势包括:提供关键上下文信息、支持多种运行环境(进程/中断上下文)、简单易用。但其性能开销较大,不适用于高频代码路径。典型应用

2025-09-08 08:54:07 995

原创 [Linux]学习笔记系列 -- lib/crc32.c 循环冗余校验库(Cyclic Redundancy Check Library) 通用的数据完整性校验算法

本文介绍了Linux内核中lib/crc32.c文件实现的循环冗余校验(CRC32)算法,该算法用于高效检测数据在传输或存储过程中的随机损坏。CRC32通过预计算查找表或硬件加速指令快速计算校验和,广泛应用于文件系统、网络协议等场景。文章详细阐述了CRC32的发展历程、核心原理、优势与局限性,并与简单加法校验和、密码学哈希函数进行了对比分析。CRC32具有高效性和优异的随机错误检测能力,但不适用于安全相关场景。代码解析部分重点介绍了CRC32的计算函数、多项式乘法运算和位移操作扩展等核心实现。

2025-09-06 14:08:40 952

原创 [Linux]学习笔记系列 -- mm\vmstat.c

【代码】[Linux]学习笔记系列 -- mm\vmstat.c。

2025-09-05 09:05:15 346

原创 [Linux]学习笔记系列 -- mm/util.c

本文介绍了Linux内核中关于内存管理的两个关键优化:专用内存分配器memdup_user的初始化和内存过量使用(Overcommit)的sysctl控制接口。 init_user_buckets:在内核启动早期创建专用内存池kmem_buckets,命名为"memdup_user",专为优化频繁的小块内存分配(如用户空间到内核空间的数据复制)而设计。该内存池通过预先分配特定大小的"桶"减少分配延迟,提高CPU缓存命中率。 内存过量使用控制:通过sysctl接口(/p

2025-09-04 09:14:05 932

原创 [Linux]学习笔记系列 -- mm/truncate.c 页面缓存截断(Page Cache Truncation) 文件大小变更的核心内存管理

Linux内核页面缓存截断技术(truncate.c)与页面向量(pagevec.h)分析 摘要: 本文分析了Linux内核中两个关键内存管理模块:页面缓存截断技术(truncate.c)和页面向量(pagevec.h)。页面缓存截断技术负责处理文件大小变更时的内存同步,确保页面缓存与磁盘数据一致,其核心是"先清理内存后释放磁盘"的两阶段处理流程。页面向量则通过批量操作优化多页面处理性能,解决了传统逐个页面处理导致的锁竞争和性能问题。这两种技术共同构成了Linux高效内存管理的基础,广泛

2025-09-03 09:10:58 1005

原创 [Linux]学习笔记系列 -- mm/swap.c 交换机制(Swap Mechanism) 物理内存的虚拟扩展

Linux交换机制(Swap)通过将不活跃的内存页移至磁盘交换区,有效扩展了物理内存容量。该技术起源于UNIX,经历了从进程交换到分页交换、支持交换文件、多交换区优先级等关键演进。核心流程包括换出(选择牺牲页、写入磁盘、更新页表)和换入(触发缺页异常、从磁盘读取)。交换机制的优势在于低成本扩展内存并提高系统稳定性,但存在磁盘I/O性能下降的缺陷。典型应用场景包括内存波动大的服务器、低内存设备及系统休眠,但在实时系统和高性能计算中不适用。与传统回写相比,交换针对匿名页且写入专用交换区;与zswap相比,传统交

2025-09-02 08:51:33 1076

原创 [Linux]学习笔记系列 -- mm/slub.c SLUB内存分配器(The SLUB Allocator) 现代内核对象缓存的核心

SLUB内存分配器:Linux内核高效对象缓存的核心 SLUB分配器是Linux内核中用于管理小对象内存分配的核心组件,旨在解决传统页分配器导致的内存碎片和性能问题。其核心原理是将连续物理内存页分割成固定大小对象,通过Per-CPU缓存实现无锁快速分配。SLUB相比前代SLAB分配器具有设计简洁、性能高、内存开销低等优势,已成为现代Linux内核的默认选择。该技术广泛应用于内核数据结构(如进程描述符、文件对象等)和通用内存分配场景,但不适合大块内存分配或用户空间应用。SLUB通过简化设计提升了多核系统扩展性

2025-09-01 08:43:00 1544

原创 [Linux]学习笔记系列 -- mm/shrinker.c 内核缓存收缩器(Kernel Cache Shrinker) 响应内存压力的回调机制

摘要 Linux内核的mm/shrinker.c实现了缓存收缩器框架,用于统一管理各种内核子系统的内存回收。该技术通过注册回调机制,允许不同子系统(如VFS、Slab)在内存压力时自主释放非必需缓存,解决了内核缓存多样性与内存管理解耦的问题。其核心采用两阶段设计:count_objects快速估算可回收量,scan_objects执行实际释放。该框架具有高度模块化和可扩展性,但效率依赖具体实现。主要应用于内核对象缓存回收(如dentry、inode),不适用于页面缓存。与页面回收机制协同工作,是Linux内

2025-08-29 08:31:02 887

原创 u-boot学习笔记系列(36) -- 构建

摘要 本文档介绍了U-Boot构建命令及Makefile功能解析,主要包括: ART-Pi和STM32F4开发板的构建命令示例 Makefile功能详解: V=1显示完整命令输出 -s静默模式 O=输出目录设置 C=1/2静态检查选项 M=外部模块构建 cc-option编译器选项测试 Kconfig配置系统,列举了多种配置选项(menuconfig、defconfig等)及其用法。为嵌入式系统开发提供了U-Boot构建和配置的实用指南。

2025-08-28 09:09:55 841

原创 [Linux]学习笔记系列 -- mm/shmem 共享内存文件系统(Shared Memory Filesystem) tmpfs与POSIX共享内存的基石

摘要 Linux共享内存文件系统(shmem/tmpfs)是内核中实现高性能临时存储和进程间通信的关键技术。它通过将内存作为文件存储介质,比传统磁盘文件系统快几个数量级,同时支持动态大小调整和数据交换到swap空间。该技术起源于解决ramfs无限制增长的问题,现已发展成稳定成熟的核心组件,广泛应用于/dev/shm、/tmp等场景。其核心优势在于极速I/O和易用性,但存在数据易失性和内存消耗的局限性。相比ramfs和ramdisk,tmpfs提供了更安全可控的内存文件系统实现,成为现代Linux系统的首选方

2025-08-28 08:57:31 1235

原创 [Linux]学习笔记系列 -- mm/percpu

本文介绍了Linux内核中Per-CPU变量的核心实现(mm/percpu.c),重点分析了其解决多核系统并发访问性能问题的技术原理。文章从历史背景出发,阐述了Per-CPU如何通过为每个CPU创建私有副本来避免锁争用和缓存一致性开销。详细解析了其核心工作原理,包括静态变量布局、动态分配机制和快速寻址技术,并对比了与自旋锁、原子变量等方案的性能差异。文章指出Per-CPU是统计计数器、调度队列等高频独立写场景的最佳选择,但也提示了其内存开销大、数据聚合成本高等局限性。最后通过对比表格,直观展示了Per-CP

2025-08-27 10:28:00 1396

原创 [Linux]学习笔记系列 -- mm/page-writeback

本文探讨了Linux内核中的页面回写机制(Page Writeback),这是实现数据持久化的核心技术。该机制通过将写入操作缓存在内存中,解决了RAM与持久存储设备间的性能差距问题,提升了系统响应速度和I/O效率。其发展经历了从bdflush到pdflush,再到现代BDI Flusher的演进,实现了更精细的I/O控制。页面回写机制广泛应用于各种文件操作场景,如数据库系统和Web服务器日志记录,但也存在数据丢失风险和I/O突发等局限性。与Write-through缓存和文件系统日志技术相比,页面回写在性能

2025-08-26 14:23:00 978

原创 [Linux]学习笔记系列 -- mm/page_alloc

本文介绍了Linux内核中的伙伴系统内存分配器(Buddy System Memory Allocator)及其相关技术。伙伴系统是内核物理内存管理的核心组件,通过将物理内存划分为固定大小的页并采用二进制伙伴算法来高效管理内存,解决外部碎片问题。文章详细阐述了其发展历程、核心原理(包括分配/释放过程、合并机制)、优势与局限性,并对比分析了Slab分配器和vmalloc()等相似技术。此外,还介绍了PCP(Per-CPU Pageset)技术,它通过为每个CPU维护本地页面缓存来减少锁争用,优化内存分配性能。

2025-08-25 08:43:33 1182

原创 [Linux]学习笔记系列 -- [mm][nommu]NO-MMU内存管理(NO-MMU Memory Management) 适用于无内存管理单元的系统

文章摘要(148字) NO-MMU内存管理(mm/nommu.c)使Linux能在无内存管理单元(MMU)的微控制器上运行,适用于成本敏感的嵌入式场景(如IoT设备)。其核心原理是直接操作物理内存,牺牲虚拟内存和保护机制以换取硬件兼容性。优势包括低开销和广泛MCU支持,但存在内存碎片、无隔离保护等局限。对比标准MMU Linux,它缺乏进程隔离和动态内存管理;相比RTOS,则提供更丰富的Linux生态。典型应用为资源受限设备,但不推荐安全关键或多任务场景。

2025-08-22 08:30:43 1153

原创 [Linux]学习笔记系列 -- [mm][mmzone]

Linux内存管理中的LRU机制与lruvec结构 摘要:lruvec是Linux内核中用于管理LRU(最近最少使用)页面回收的核心数据结构,定义于mm/vmscan.c。它通过维护多个链表来跟踪不同类型内存页面的使用状态,包括活跃/非活跃的匿名页和文件页等。该技术解决了现代计算机系统中高效内存管理的核心问题:平衡页面回收的开销与准确性,支持NUMA架构扩展性,并实现容器环境下的资源隔离。随着Linux 6.1引入多代LRU(MGLRU)机制,页面回收算法进一步优化,能够更精确识别冷热页面,减少性能开销。作

2025-08-21 11:03:54 930

原创 [Linux]学习笔记系列 -- [mm][mm_init]

Linux 内存模型 FLATMEM 核心解析 FLATMEM 是 Linux 内核最基础高效的内存模型,采用单一的 mem_map 数组管理物理内存。其核心原理是通过 struct page 数组实现物理地址、页帧号和页描述符之间的快速转换,仅需简单算术运算即可完成地址映射,时间复杂度为 O(1)。这种模型在连续内存布局的系统中性能优异,适合大多数消费级和服务器设备。但存在内存浪费问题,无法处理大内存间隙或 NUMA 架构。为此 Linux 发展出更先进的 SPARSEMEM 模型,通过分块管理解决 FL

2025-08-20 10:13:48 1080

原创 Linux GPIO子系统中开漏模式软件仿真机制的深度分析

本文分析了Linux GPIO子系统中开漏模式的软件仿真机制。当硬件不支持原生开漏模式时,系统通过软件模拟实现:输出高电平时设为输入模式实现高阻态,输出低电平时设为推挽输出模式主动拉低。关键点在于分离物理状态与逻辑状态,通过FLAG_IS_OUT标志维护一致性,确保后续操作正确执行。该机制在硬件功能受限时,有效实现了开漏引脚的预期行为。

2025-08-19 15:45:40 1149

原创 STM32高性能DMA架构解析:MDMA与DMA的核心差异及最佳实践

摘要:STM32高性能MCU采用分层DMA架构,包含传统DMA/BDMA和更强的MDMA控制器。DMA/BDMA如同"专属快递员",专注外设数据传输,响应快、功耗低;MDMA则像"中央物流中心",通过64位AXI总线实现高速内存操作,支持复杂任务。二者协同工作可构建高效DMA链,MDMA的链表模式还能实现无CPU干预的分散-聚集操作。设计时应遵循"简单任务用DMA,复杂批量用MDMA"的原则,以优化系统性能与功耗。这种架构使STM32H7/U5系列

2025-08-19 11:17:57 1163

原创 [Linux]学习笔记系列 -- [mm][memblock]

Memblock是Linux内核早期启动阶段的内存管理机制,用于管理物理内存区域,分为memory(可用内存)、reserved(已分配内存)和physmem(实际物理内存)三种类型。它通过memblock_region结构描述内存范围,支持动态调整数组大小。内核启动时通过memblock_add()添加内存区域,提供memblock_phys_alloc()和memblock_alloc()等API进行物理/虚拟内存分配。系统初始化后,memblock数据通常会被释放,除非启用CONFIG_ARCH_KE

2025-08-19 10:33:22 1202

原创 [Linux]学习笔记系列 --[mm][list_lru]

list_lru 是 Linux 内核中的通用 LRU 管理机制,用于高效管理内存对象。它通过链表和计数器实现对象的添加、删除和遍历,支持 NUMA 节点和内存控制组(memcg),并与 shrinker 机制结合优化内存回收。list_lru 适用于文件系统缓存管理和内存回收等场景,具有通用性和高效性,但实现较为复杂。替代方案包括直接 LRU 链表、基于哈希的缓存管理或自定义回收机制。核心函数如 list_lru_add 和 list_lru_del 提供了线程安全的操作,支持内存感知功能。

2025-08-18 20:55:47 1045

原创 [Linux]学习笔记系列 -- [mm][filemap]

Linux内核文件映射(filemap)机制是管理文件系统页面缓存的核心模块,负责页面的读取、写入、缓存管理与回收。其核心通过address_space结构管理缓存,利用xarray高效存储页面。主要功能包括:通过filemap_read处理缓存读取(未命中时触发磁盘回读),filemap_write处理写入并支持写回磁盘,以及内存压力下的页面回收机制。该模块提供通用接口支持ext4/xfs等文件系统,具备高效缓存管理和错误处理能力,但在高并发场景可能存在锁性能瓶颈。替代方案包括直接I/O(绕过缓存)、内存

2025-08-16 09:21:36 1050

原创 [Linux]学习笔记系列 -- [mm][backing-dev]

backing-dev 是 Linux 内核中管理存储设备写回行为的关键模块,通过 backing_dev_info 结构体抽象存储设备特性,提供统一的写回管理接口。核心功能包括: 通过 bdi_wq 工作队列实现异步写回任务调度 支持 NUMA 节点和内存控制组优化 提供设备能力检查机制(如 mapping_can_writeback) 包含调试接口用于性能监控 主要应用于文件系统脏数据同步、异步I/O优化等场景,具有通用性强、支持异步操作等优点,但存在实现复杂、高并发下可能成为性能瓶颈等不足。替代方案包

2025-08-15 11:01:24 1125

原创 解决因取消VMware快照删除导致的虚拟机磁盘损坏问题

摘要: VMware虚拟机在删除快照时若中途取消,可能导致父磁盘损坏无法启动。本文通过案例分析了该问题的根源(日志显示父磁盘链断裂),并给出解决方案:使用vmware-vdiskmanager命令行工具修复损坏的vmdk文件。关键步骤包括定位工具路径、执行-R参数修复命令(需精准指定日志中报错的父磁盘文件)。修复成功后虚拟机即可恢复运行。最后强调操作建议:避免中断快照过程、善用日志诊断、定期备份重要数据。(149字) 核心要点: 问题现象:取消快照删除后虚拟机报错"父磁盘需修复" 修复方

2025-08-14 15:18:25 1004

原创 [Linux]学习笔记系列 -- [block]

Linux 块设备层(block目录)核心解析 Linux内核中的block目录是块设备I/O的核心中枢,负责管理HDD、SSD等存储设备的读写操作。它通过抽象层设计解决了文件系统与硬件驱动间的耦合问题,并提供I/O调度优化机制。关键发展历程包括:从单队列模型到多队列框架(blk-mq)的演进,以适配多核CPU和NVMe高速设备;IO_uring等新技术的引入进一步提升了性能。核心流程为:将文件系统的bio请求转换为request,经调度优化后分发给硬件驱动执行。该层通过sysfs暴露调优接口,支持动态切换

2025-08-14 09:32:24 1188

原创 [Linux]学习笔记系列 -- [arm][process]

本文分析了Linux内核中ARM架构进程管理的相关代码。主要包括三个关键部分: current宏实现:通过__current全局变量获取当前进程的task_struct结构体指针,支持不同ARM架构版本和配置(如SMP)。 预取指令支持:定义了prefetch和prefetchw函数,利用ARM的pld/pldw指令优化缓存访问,其中prefetchw仅在SMP环境下可用。 线程启动机制:详细解析了start_thread宏,展示内核如何通过修改pt_regs结构来设置新程序的寄存器状态,包括程序计数器、栈

2025-08-13 09:07:28 1833

原创 [Linux]学习笔记系列 -- [arm][mm]

ARMv7-M无MMU架构下的ioremap核心实现 该代码展示了ARMv7-M(如STM32H750)无MMU系统中ioremap的本质实现:采用身份映射(物理地址=虚拟地址),忽略size和缓存类型参数,仅返回类型转换后的物理地址指针。核心函数__arm_ioremap_caller直接返回(void __iomem *)phys_addr,而ioremap、ioremap_cache等API通过调用该函数实现兼容性,确保驱动代码可移植。在无MMU系统中,内存属性(如缓存策略)实际由启动时MPU静态配置

2025-08-12 11:47:54 886

原创 [Linux]学习笔记系列 -- [arm][lib]

本文分析了ARM架构下延迟实现的机制,分为硬件定时器和软件循环两种方式。核心文件arch/arm/include/asm/delay.h定义了一个抽象的arm_delay_ops操作集,通过分层设计实现可插拔的延迟方案。对于旧系统,采用基于loops_per_jiffy的校准循环方法;对于支持高精度定时器(如STM32H750的DWT计数器)的新系统,可通过register_current_timer_delay注册硬件定时器实现更精确的延迟。文中详细解析了定点数运算宏、核心数据结构和API设计,重点说明了

2025-08-11 09:45:27 984

原创 [Linux]学习笔记系列 -- [arm][lds]

本文介绍了Linux内核链接脚本vmlinux.lds.h及其相关配置的实现细节。主要内容包括:vmlinux.lds.S预处理生成链接脚本的过程,ARM架构下大端/小端模式的编译选项设置,热插拔CPU相关段的保留与丢弃机制,以及SMP、跳转标签等特殊配置对链接脚本的影响。还分析了压缩内核镜像的链接脚本处理,包括大端模式转换、无害丢弃段定义,以及动态函数跟踪的可修补性控制。这些配置通过条件编译宏灵活控制内核链接时的内存布局,确保生成的内核镜像满足不同架构和功能需求。

2025-08-09 09:54:51 736

原创 [Linux]学习笔记系列 -- [arm[kernel]

本文分析了Linux内核在ARM Cortex-M7架构(如STM32H750)上的启动流程及关键数据结构。内核启动从stext汇编入口开始,通过__lookup_processor_type检查处理器类型,完成处理器初始化后进入__mmap_switched进行内核初始化。重点解析了asm-offsets.c工具的作用,它通过计算内核数据结构(如task_struct、thread_info和pt_regs)的成员偏移量,为汇编代码提供访问C语言结构的"地址地图"。这些偏移量对上下文切

2025-08-08 10:26:51 1049

原创 [Linux]学习笔记系列 -- [arm][include]

本文分析了ARM架构下的几个关键头文件实现: __read_mostly宏用于标记频繁读取的变量,将其放入特殊段,并在内核启动时清零。 arch_xchg_relaxed实现原子交换操作,使用ldrex/strex指令保证原子性,支持1/2/4字节操作,不支持的交换大小会触发链接错误。 BUG_INSTR定义触发bug的指令编码,ARM架构下为0xe7f001f2(udf #2指令),Thumb模式下为0xde02。 BUG()宏实现kernel panic机制,支持详细错误信息记录(文件、行号)或简单触发

2025-08-07 11:22:46 554

原创 实战教程:从“对象文件为空“到仓库重生——修复 Git 仓库损坏全记录

摘要: 本文记录了修复Git仓库损坏的全过程。当开发者遇到fatal: loose object ... is corrupt错误时,通过git fsck诊断发现多个对象文件损坏。修复步骤包括:1)备份.git目录;2)清理空对象文件;3)使用git fsck --full重新诊断;4)从远程仓库获取健康对象;5)重置本地分支到健康状态。最终通过git reset --hard origin/branch彻底修复仓库,证明了只要存在远程备份,大多数Git仓库损坏问题都可解决。

2025-08-06 14:52:00 1155

原创 [Linux]学习笔记系列 -- [arm][debug]

本文分析了Linux内核中STM32系列芯片的UART调试功能实现,主要包括三个关键部分:1)通过addruart宏获取UART物理和虚拟地址;2)使用waituarttxrdy、senduart和busyuart宏实现数据发送流程控制,包括等待发送就绪、写入数据寄存器和等待发送完成;3) printascii函数实现完整的字符串输出逻辑,处理换行符转换并调用底层宏进行实际发送。这些代码位于arch/arm/include/debug/stm32.S等文件中,为STM32H7等平台提供了基于USART1的底

2025-08-06 08:34:38 530

FDM打印材料综述.doc

FDM打印材料综述

2019-12-22

数学建模-数学建模的建立.docx

数学建模_数学建模的建立.docx

2019-12-22

e-LinkS使用方法-3.1 (1)

e-Link是Holtek为新一代具OCDS架构的Flash MCU开发的在线侦错调适器,搭配HT-IDE3000软件,提供客户直接在应用板上做侦错的MCU开发工具。

2018-07-25

液晶显示板revc-20141009-sch-r

液晶显示板revc-20141009-sch-r 液晶显示板revc-20141009-sch-r 液晶显示板revc-20141009-sch-r

2018-07-25

PID控制算法的C语言实现(完整版)

最全PID!PID控制算法的C语言实现(完整版)

2018-08-26

NBM7100 电池能量管理设备.docx

NBM7100 电池能量管理设备.docx

2024-05-06

LM324四重运算放大器TI数据手册中文版

LM324四重运算放大器TI数据手册中文版 谷歌翻译版 LMx24,LMx24x,LMx24xx,LM2902,LM2902x,LM2902xx,LM2902xxx四重 运算放大器

2020-09-20

HAL库串口空闲中断+DMA+FIFO实现

HAL库串口空闲中断+DMA+FIFO实现

2022-01-21

CUBE+STM32F7+FREEMODBUSV1.5 多从机

吐血修改!!! 从别人F1标准库的多从机程序移植到F7HAL库中。 已测试可用。 已知BUG:双串口同时1MS一次收发会有溢出错误。

2022-01-21

双串口MODBUS+DMA+FIFO.7z

1.FREEMODBUSV1.5 支持多从机 2.串口模式为DMA+FIFO

2022-01-24

双串口MODBUS.7z

支持多从机MODBUS通信 基于FREEMODBUS改写。 添加DMA+FIFO缓存。能够双串口进行1MS收发不会OVRERUN

2022-01-25

python爬取飞猪机票.py

python爬取飞猪机票 采用selenium模拟登陆 使用微博账号登陆淘宝跳转飞猪python爬取飞猪机票

2019-12-14

STM32F1必备参考书

STM32F1必备参考书 STM32F1必备参考书STM32F1必备参考书STM32F1必备参考书STM32F1必备参考书STM32F1必备参考书STM32F1必备参考书STM32F1必备参考书STM32F1必备参考书STM32F1必备参考书STM32F1必备参考书STM32F1必备参考书STM32F1必备参考书STM32F1必备参考书STM32F1必备参考书

2018-07-25

RoboMaster M3508直流无刷减速电机

RoboMaster M3508直流无刷减速电机RoboMaster M3508直流无刷减速电机RoboMaster M3508直流无刷减速电机RoboMaster M3508直流无刷减速电机RoboMaster M3508直流无刷减速电机RoboMaster M3508直流无刷减速电机RoboMaster M3508直流无刷减速电机RoboMaster M3508直流无刷减速电机RoboMaster M3508直流无刷减速电机RoboMaster M3508直流无刷减速电机RoboMaster M3508直流无刷减速电机RoboMaster M3508直流无刷减速电机RoboMaster M3508直流无刷减速电机RoboMaster M3508直流无刷减速电机RoboMaster M3508直流无刷减速电机RoboMaster M3508直流无刷减速电机RoboMaster M3508直流无刷减速电机RoboMaster M3508直流无刷减速电机RoboMaster M3508直流无刷减速电机

2018-07-25

C语言+EasyX库生成星空

C语言+EasyX库生成星空

2018-08-26

C51蜂鸣器播放两只老虎和小星星代码

C51蜂鸣器播放两只老虎和小星星代码,怎么根据谱子打表呢。。。自己摸索吧

2018-08-29

STM32F103C8T6程序

STM32F103C8T6模板

2018-07-25

MAX262-V4.0.7z

MAX262程控滤波器

2021-11-04

STC89C52RC代码

当年写的C52代码,需要的下了不要喷我,我当年写的,也是新手。

2018-08-26

层次分析法在大学生转专业问题中的应用.doc

层次分析法在大学生转专业问题

2019-12-22

HT66Fxx+Flash单片机原理与实践+C语言

HT66Fxx+Flash单片机原理与实践+C语言HT66Fxx+Flash单片机原理与实践+C语言

2018-07-25

C语言代码夜夜爱消除

C语言代码,新手写的不要喷我哈C语言代码,新手写的不要喷我哈

2018-08-26

TI-SDK-WF CODE

TI-SDK-WF CODE

2018-07-25

2级C语言整合书籍资料

2级C语言整合书籍资料

2018-08-26

MPU6050资料

MPU6050资料

2018-08-26

CPP中链表代码

CPP中链表代码

2018-08-26

ESK-200電路圖(ESK200-BC)

ESK-200電路圖(ESK200-BC)

2018-07-25

HT66Fxx Datasheet

HT66Fxx Datasheet

2018-07-25

空空如也

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

TA关注的人

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