自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(55)
  • 资源 (1)
  • 收藏
  • 关注

原创 linux Zram

zram是Linux内核中的压缩内存模块,通过在RAM中创建压缩块设备来扩展可用内存。它使用lz4、zstd等算法动态压缩数据,可作为交换空间或临时存储,相比传统磁盘交换能显著提升I/O性能。zram起源于2008年的compcache项目,2014年正式进入内核主线,现被Android、Fedora等广泛采用。其工作原理是将内存页面压缩存储在zsmalloc分配器中,支持多线程压缩和写回功能。配置通过sysfs接口完成,可选择压缩算法和内存限制。

2026-02-03 17:26:59 499

原创 Linux Swap 交换分区

摘要:Linux系统中的Swap(交换空间)通过将不活跃的内存页转移到磁盘来扩展物理内存,防止内存耗尽导致的系统崩溃。Swap可以是分区或文件,核心机制包括Swap Out(移出内存)和Swap In(读回内存),但磁盘访问速度较慢可能影响性能。Swap的大小和优先级可配置,参数如swappiness控制交换倾向。优化策略包括使用zRAM压缩内存、调整NUMA本地化,但需权衡性能与磁盘磨损风险。监控工具如free和vmstat可跟踪Swap使用情况。

2026-02-03 16:09:40 750

原创 匿名页与文件页

本文详细解析了Linux内核虚拟内存管理中的两种核心内存页类型:匿名页(Anonymous Pages)和文件页(File Pages)。匿名页没有后备文件支持,主要用于进程私有数据(如堆栈),必须通过Swap回收;文件页与磁盘文件关联,作为页面缓存加速I/O,可直接丢弃干净页进行回收。文章从定义、来源、管理机制、优缺点等方面对比分析了两类内存页,指出匿名页灵活但回收成本高,文件页共享性强但依赖文件系统。最后提供了监控工具(如/proc/meminfo)和调优建议(如调整swappiness参数)

2026-02-02 14:34:17 848

原创 Swap 与 Zram

本文全面解析Linux系统中的Swap与ZRAM技术。Swap作为传统虚拟内存机制,通过磁盘扩展内存空间,但存在I/O性能瓶颈;ZRAM则采用内存压缩技术,显著提升响应速度但增加CPU开销。文章从历史演变、工作原理、配置方法、性能对比等多维度展开分析,指出Swap适用于大内存服务器,ZRAM更适合移动设备和低端系统。同时探讨了混合部署方案及性能调优技巧,为不同场景下的内存管理提供技术指导。通过详实的基准测试数据,帮助开发者根据实际需求选择最优方案。

2026-02-02 09:36:51 915

原创 RT-Thread 链接脚本(link.lds 或 .ld 文件)

摘要:RT-Thread链接脚本(.lds/.ld文件)是构建嵌入式系统的关键文件,负责定义内存布局、段组织和符号导出。它通过MEMORY命令指定ROM/RAM区域,ENTRY设置程序入口点,SECTIONS命令管理代码(.text)、数据(.data/.bss)等段的映射。RT-Thread扩展了标准链接脚本,支持组件化初始化表和符号表。启动时通过Reset_Handler完成数据初始化,确保代码在Flash、运行时数据在RAM的正确位置。链接脚本需根据芯片内存配置调整,避免溢出,并保持段对齐。

2026-01-26 14:18:43 553

原创 Keil 编译添加时间信息

在Keil uVision环境中,你可以通过几种方式来添加编译时间到你的项目中,以便在程序运行时显示或记录编译时间。‌定义宏‌:在你的项目中定义一个预处理器宏来表示编译时间。方法1:使用预处理器定义。方法2:在代码中直接使用。

2026-01-16 10:50:13 62

原创 内存碎片整理(Memory Compaction)

Linux内存碎片管理主要解决外部碎片问题,通过memory compaction机制迁移可移动页来形成连续空闲块。碎片分为内部(页内浪费)和外部(空闲页零散)两种,compaction主要针对后者。Buddy分配器在频繁分配释放不同大小页面时易产生碎片,特别是不可移动页会阻碍整理。compaction通过两个扫描器并行工作,迁移可移动页到空闲区域,其效果受不可移动页比例限制。可通过/proc/buddyinfo等工具监控碎片情况,并采用THP、CMA等策略预防碎片。

2026-01-16 09:50:30 642

原创 Linux OOM Killer

Linux 的(Out-Of-Memory Killer)是内核在时触发的最后一道防线,它会来释放内存,避免整个系统彻底卡死(完全无响应,需要硬重启)。

2026-01-15 16:47:27 583

原创 函数指针实现状态机

本文介绍了在C语言中使用函数指针实现状态机的两种方法:1)状态即函数指针法,每个状态对应一个处理函数,通过函数指针直接跳转,适用于简单场景;2)表驱动法,使用转移表集中管理状态转换规则,适合复杂状态机。第一种方法执行效率高但事件处理分散,第二种方法便于维护扩展但需要查找开销。文中提供了门控状态机和ATM机两个示例代码,并建议根据场景复杂度选择合适方案,函数指针的使用实现了高效的"跳转表"机制。

2026-01-08 16:22:30 346

原创 Modbus 使用详解

摘要:Modbus是工业自动化领域广泛应用的串行通信协议,采用客户端-服务器架构,支持四种数据模型(线圈、离散输入、保持寄存器和输入寄存器)和多种功能码。协议包含RTU、ASCII、TCP等变体,具有简单开放但无内置安全机制的特点。开发中可使用Python的pymodbus或C的libmodbus库实现客户端/服务器功能,支持TCP、RTU等多种通信方式。该协议主要应用于PLC、SCADA等工业控制系统,规范文档可从Modbus.org免费获取。

2026-01-07 17:35:32 518

原创 如何新加netlink

摘要:本文详细介绍了在Linux内核中添加Netlink指令的两种方法。推荐使用Generic Netlink(genl)方式,它通过动态分配family ID、支持多命令和属性、提供内置权限控制,无需修改内核头文件。文章展示了实现MY_CMD_ECHO命令的完整代码示例,包括命令定义、属性验证、处理函数和用户空间调用。同时对比了传统的原生Netlink方式,指出其需要固定协议号、手动解析等缺点。建议新开发优先采用Generic Netlink,仅维护旧代码时考虑原生方式。

2026-01-07 09:32:46 372

原创 cmdline使用详解

Linux系统中,bootloader通过kernel commandline向内核传递参数和数据。常见bootloader如GRUB、U-Boot等通过配置修改添加自定义参数(如mydata=hello)。内核启动时解析这些参数,未识别的参数会传递给init进程。用户空间程序可通过/proc/cmdline读取,内核模块则使用module_param获取。

2026-01-06 21:31:42 567

原创 Linux4.4使用AW9523

Linux内核4.4版本不包含AW9523驱动,需使用第三方开源驱动。推荐使用GitHub上的aw9523b-linux-driver,该驱动支持GPIO扩展、LED模式(256级亮度)、中断等功能,兼容Linux4.x系列。驱动采用regmap-i2c架构,提供完整的GPIO和LED控制功能。安装时需编译内核模块并配置设备树,可通过/sys/class/leds接口控制LED亮度(0-255)。该方案无需额外应用即可实现LED控制,支持心跳、定时器等触发器功能,是Linux4.4上控制AW9523芯片的理

2026-01-06 20:52:56 777 2

原创 Linux 平台设备驱动框架详解

本文详细介绍了Linux内核中的平台设备(PlatformDevice)驱动框架。该框架通过虚拟的"平台总线"管理SoC中的非可发现设备,如GPIO、UART等。文章从框架概述、核心数据结构(platform_device、platform_driver)、注册流程、probe/remove实现等方面进行解析,并提供了LED驱动的完整示例代码。重点阐述了设备树匹配机制、资源管理方法及现代内核推荐实践,同时对比了平台驱动与字符设备的差异。最后还总结了注意事项和高级主题,包括电源管理支持、错

2026-01-06 16:40:33 518

原创 Linux 杂项设备驱动框架详解

本文详细介绍了Linux内核中的杂项设备(misc)驱动框架。该框架是字符设备驱动的简化版本,适用于简单硬件设备,具有固定主设备号(10)和动态分配次设备号的特点。文章从框架概述、关键数据结构(struct miscdevice)、注册流程(misc_register/misc_deregister)等方面进行解析,并提供了完整的驱动示例代码,包括文件操作实现(read/write等)。同时指出了注意事项,如手动创建设备节点、并发安全处理等。相比完整字符设备驱动,misc框架更简单易用但功能有限,适合初学者

2026-01-06 16:06:30 575

原创 MCU 裸机时间片调度系统

本文介绍了一种基于SysTick定时器的轻量级时间片轮询调度器,适用于Cortex-M系列MCU裸机开发。系统以1ms中断为时间基准,在中断中执行最高优先级任务,主循环则通过任务数组轮询执行不同周期的任务。该方案具有代码精简(仅需全局计数器、任务结构体和调度逻辑)、确定性高、易于调试维护等特点。文章详细说明了实现架构、数据结构、任务调度机制和使用方法,并提供了性能优化建议和适用场景分析。该调度器特别适合资源受限且需要多任务管理的嵌入式应用,如电机控制、传感器采集等中等复杂度系统。

2026-01-05 14:38:09 1853

原创 make menuconfig 使用详解

摘要:makemenuconfig是Linux内核的图形化配置工具,基于ncurses库实现,用于生成和修改内核配置文件.config。该工具将Kconfig选项以菜单形式呈现,支持三种配置状态:禁用(n)、模块(m)和内置(y)。使用流程包括安装ncurses库、进入内核源码目录执行命令,提供搜索、快捷键等高效操作方式,支持保存/加载配置文件。常用操作包括驱动启用、内核精简等,配合其他配置命令可实现快速内核定制。掌握该工具能有效提升内核配置效率,适用于从嵌入式到桌面系统的各种场景。

2026-01-05 14:17:49 604

原创 Kconfig使用详解

Linux 内核的系统用于管理内核配置选项,通过 make menuconfig 等工具生成配置界面,并最终产生 .config 文件控制编译行为。Kconfig 文件分布在内核源码各子目录中,使用特定语法定义配置项、菜单、依赖关系等。

2026-01-05 11:57:10 804

原创 Linux Hotplug 机制详解

适用于旧系统或自定义处理。假设通过 /proc/sys/kernel/hotplug 调用。Bash。

2025-12-26 11:15:10 518

原创 bitbake使用详解

本文详细介绍了BitBake构建工具的核心概念和使用方法。BitBake是嵌入式Linux开发中Yocto项目的核心组件,负责解析元数据、管理依赖并高效执行构建任务。文章首先阐述了BitBake的基本功能,包括任务执行、依赖管理和并行处理等特性。随后深入解析了关键概念如recipes、tasks、layers和配置文件的结构与作用。重点说明了BitBake的命令行调用方式,包括通用选项、任务控制选项和执行控制选项的详细参数及使用示例。最后通过memtester、内核模块等具体案例,演示了单独编译recipe

2025-12-26 10:57:14 931

原创 memtester使用详解

memtester是一个常用的内存测试工具,用于检测计算机系统的 RAM 是否存在问题。它通过在内存中执行模式化的写入和读取操作,检查可能出现的硬件故障。适用于 Linux 系统。

2025-11-13 15:56:18 700

原创 RISC-V架构常见gcc编译选项

下面是 RISC‑V 平台上“最常用、最容易踩坑”的 GCC 选项速查。按类别整理,并给出常见组合示例与自检方法。常用 RISC‑V 专属/相关选项。

2025-08-12 10:14:22 683

原创 Linux 系统中设置开机启动脚本

如果你想在用户登录到图形桌面环境 (如 GNOME, KDE, XFCE) 时启动一个脚本或应用程序,可以使用桌面环境的自启动功能。如果你的系统还在使用 SysVinit (例如非常老的系统,或者像 Devuan 这样的发行版),你需要将脚本放在。选择哪种方法取决于你的具体需求、脚本的复杂性以及你所使用的 Linux 发行版。是一个在所有其他系统服务启动完成后,用户登录前执行的脚本。无论哪种方法,核心都是让系统在启动过程中的某个阶段执行你的脚本。(同上,确保可执行,使用绝对路径)。

2025-05-12 17:33:33 1295

原创 Linux I2C 子系统

/ 所属的 I2C 控制器。CONFIG_I2C_CHARDEV=y # 提供 /dev/i2c-* 接口。

2025-04-09 10:57:24 1120

原创 linux驱动gpio模拟iic

通过 Linux 内核的i2c-gpio驱动,可以方便地使用 GPIO 模拟 I2C 总线。设备树中定义 GPIO 引脚和 I2C 设备,内核驱动通过标准的 I2C 接口与设备通信。这种方法适用于没有硬件 I2C 控制器的情况。

2025-03-21 14:56:02 742

原创 linux 内核 定时器(timer)

内核定时器使用

2025-03-18 10:03:36 747

原创 Systemd 服务文件(service)

编写systemd服务文件是管理 Linux 服务的重要技能。通过合理配置[Unit][Service]和[Install]部分,可以灵活地控制服务的行为。建议在编写完成后,仔细测试并查看日志,确保服务按预期运行。

2025-03-11 14:38:23 2134

原创 DEVICE_ATTR使用

在 Linux 内核开发中,是一个非常有用的宏,用于在设备驱动中创建设备属性(device attributes)。这些属性可以通过 sysfs 文件系统暴露给用户空间,允许用户空间程序读取或修改设备的某些特性。是 Linux 设备模型的一部分,广泛用于驱动开发。本文将详细讲解的用法,并提供一个简单的例程。

2025-03-05 14:54:09 1525

原创 module_init 详解

是一个宏,定义在 Linux 内核头文件中。是 Linux 内核模块开发中的核心宏,用于指定模块的初始化函数。初始化函数负责模块的初始化工作,返回0表示成功,非0表示失败。使用__init和__exit修饰符优化内存。注意错误处理、资源管理和调试信息的输出。理解模块加载和卸载的生命周期,确保模块的正确性和稳定性。通过掌握的使用方法,你可以更好地开发和调试 Linux 内核模块,为内核功能扩展提供支持。

2025-02-28 10:41:06 1509

原创 nandflash坏块管理

NAND Flash 的坏块管理是存储系统设计中的核心问题,直接影响设备的可靠性、性能和寿命。通过合理的坏块标记、识别和管理策略,可以有效延长 NAND Flash 的使用寿命,减少数据丢失的风险。坏块来源:出厂坏块和运行时坏块。坏块标记与识别:通过坏块标记和运行时检测识别坏块。坏块管理策略:坏块表、坏块替换、坏块跳跃、ECC、磨损均衡等。优化与挑战:减少管理开销、提高可靠性、适配不同厂商的 NAND Flash。

2025-02-27 17:13:08 1958

原创 字符设备驱动

编写一个简单的字符设备驱动。实现基本的读写功能。自动或手动创建设备节点。测试设备的读写功能。

2025-02-19 17:13:05 977

原创 C语言队列

队列(Queue)是一种先进先出(FIFO,First-In-First-Out)的线性数据结构。它类似于现实生活中的排队,新元素被添加到队尾,而从队首移除元素。为了避免“假溢出”现象(即队列还有空间,但 rear 指针已经到达数组末尾),通常使用循环队列。循环队列通过取模运算 (%) 来实现队首和队尾指针的循环移动。选择哪种实现方式取决于具体应用场景的需求。如果队列大小已知且固定,

2024-12-11 17:21:14 796

原创 linux-SLUB分配器

SLUB 是 Linux 内核中的一种高效的内存分配器,专门用于处理小块内存的分配和释放。它简化了内存管理的设计,减少了内存碎片,并提供了强大的调试功能,因此在现代 Linux 系统中被广泛使用。

2024-08-22 16:03:13 835

原创 kmemleak使用

kmemleak是 Linux 内核中用于检测内存泄漏的工具,其设计目的是帮助开发人员发现内核中的内存分配与释放不匹配的情况。了解kmemleak的工作原理对开发和调试内核模块非常重要。下面将详细介绍kmemleak的原理、实现机制和相关细节。

2024-08-22 15:48:21 809

原创 Linux内核中内存申请与释放的函数接口详解

总之,Linux内核中的内存申请与释放函数接口为内核开发者提供了灵活而强大的工具。因此,内核开发者必须深入了解这些函数接口的工作原理和最佳实践,以确保内存的正确使用和有效管理。Linux内核中的内存管理是一个复杂而关键的部分,它负责为内核数据结构、进程、系统调用等提供必要的内存资源。不同,它分配的内存不是物理上连续的,但在虚拟地址空间中是连续的。时,必须确保释放的内存块是之前通过兼容函数分配的,并且该内存块在释放后不应再被访问。是一个较低级的函数,它只分配一个物理页面,并返回一个指向该页面的指针。

2024-02-21 11:14:22 1194

原创 UBI文件系统

UBI文件系统的主要目的是提供闪存设备的可靠性和可用性,并减少闪存器件上的坏块影响。请注意,UBI文件系统通常是在底层闪存设备驱动程序之上构建的,因此它需要与特定的MTD(Memory Technology Device)驱动程序一起使用。总之,UBI文件系统是一种用于闪存设备的可靠和灵活的文件系统解决方案。在Linux中,与UBI(Unsorted Block Images)相关的命令主要用于管理UBI卷和UBI文件系统。使用ubiformat命令时,你需要指定要格式化的UBI设备的路径作为命令的参数。

2023-12-04 16:45:50 1900

原创 Linux工作队列

在模块初始化函数中,我们使用kmalloc为工作项分配内存,并使用INIT_WORK宏初始化工作项,将处理函数my_work_func与工作项关联起来。它是在标准工作队列的基础上增加了延时功能,允许将工作项推迟到未来的某个时间点执行。使用schedule_delayed_work函数将工作项添加到延时工作队列中,并指定延时时间。在模块初始化函数中,使用INIT_DELAYED_WORK宏初始化工作项,并将其与工作项处理函数关联起来。// 将延时工作项添加到延时工作队列,并设置延时时间为5秒(5000毫秒)

2023-12-04 16:33:23 490

原创 linux中printk详解

是Linux内核中用于日志记录的重要函数。通过合理使用日志级别标记和适当的格式字符串,可以有效地记录内核消息并提供故障排除和调试的有用信息。是日志级别标记,用于指定消息的重要性级别。这些标记可以与消息文本一起传递,以便内核日志系统对消息进行适当的处理和过滤。但请注意,直接修改这些值可能会影响系统的稳定性和调试能力,所以在明确知道你在做什么的情况下才进行修改。是一种用于打印内核消息的函数。Linux内核的日志打印级别。函数,但专门用于内核日志记录。如果你想修改这些值,你可以直接往。的返回值是打印的字符数。

2023-11-24 16:04:51 1076 1

原创 C语言位操作

位操作是计算机编程中的一个基本概念,它允许程序员直接操作整数的二进制位。C语言提供了一系列位操作符,使得我们可以对整数进行位级别的操作。最后,虽然位操作为我们提供了底层控制的能力,但也要谨慎使用,确保它们不会使代码过于复杂或难以维护。

2023-11-24 14:28:30 278 1

原创 C语言位域使用

如果要在不同的平台或编译器之间共享数据,最好避免使用位域,或者确保对位域的访问和解析方式在所有目标平台上是一致的。综上所述,位域是一种在C语言中紧凑存储数据的方法,适用于一些特定的内存敏感场景。在使用位域时,需要考虑可移植性和平台相关性的问题,并谨慎使用以确保代码的正确性和稳定性。C语言中的位域(Bit Fields)是一种在结构体中存储数据的方式,它允许在结构体中定义一些字段,每个字段占用指定的位数。当使用位域定义结构体后,可以通过结构体的实例来访问和存储位域字段的值。一、位域的定义和使用。

2023-11-24 14:25:08 231 1

hex-to-bin.exe

可以直接将hex格式文件转换为bin格式文件。添加到环境变量可以直接在cmd中使用。 命令hex_to_bin <offset_hex> <input.hex> <output.bin> hex_to_bin 0x08004000 app.hex app.bin

2026-01-07

curl-8.7.1.tar.bz2

curl-8.7.1.tar.bz2

2026-01-05

memtester-4.7.0.tar.gz

参考文章:https://blog.csdn.net/ACMIII/article/details/154791790?spm=1001.2014.3001.5501

2026-01-05

memtester-4.7.1.tar.gz

参考文章:https://blog.csdn.net/ACMIII/article/details/154791790?spm=1001.2014.3001.5501

2026-01-05

memtester-4.4.0.tar.gz

memtester-4.4.0.tar

2026-01-05

nrf-mdk-8-35-0-keil4-nordiclicense.msi

nrf52***使用keil开发安装pack

2025-05-12

linux的系统组件,调用

linux的系统组件,调用

2025-02-28

gcc-9.5.0.tar.xz

gcc-9.5.0.tar.xz

2024-04-16

查看笔记本电脑健康度,直接双击会出现battery_report.html文件,打开即可显示

查看笔记本电脑健康度

2021-12-09

空空如也

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

TA关注的人

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