- 博客(87)
- 资源 (1)
- 收藏
- 关注
原创 Leetcode 每日一题C 语言版 -- 234 basic calculator
【代码】Leetcode 每日一题C 语言版 -- 234 basic calculator。
2025-12-07 14:59:24
172
原创 Leetcode 每日一题C 语言版 -- 274 H-index
先排序,引用次数从小到大排序,例如[3, 0, 6, 1, 5]引用X大于等于1 的有Y个, 5 - 1 = 4个。引用X大于等于3 的有Y个, 5 - 2 = 3个。引用X大于等于5 的有Y个, 5 - 3 = 2个。引用X大于等于6 的有Y个, 5 - 4 = 1个。引用X大于等于0 的有Y个, 5 - 0 = 5个。-> [0, 1, 3, 5, 6], 遍历数组。X>=Y时, Y即为H-index。
2025-12-06 08:44:40
195
原创 Leetcode 每日一题C 语言版 -- 45 jump game ii
遍例当前位置~这个最远位置,得到一个更新后的最远位置p2。遍历到p1 时, 一定可以跳到p2, 将位置更新到p2。记录最远能跳到的位置,然后跳到这个位置p1。
2025-12-06 07:43:37
330
原创 Leetcode 每日一题C 语言版 -- 80 remove duplicates from sorted array
第26题的升级版,同样思想,难度提升为mid.
2025-11-22 10:34:39
250
原创 Leetcode 每日一题C 语言版 -- 26 remove duplicates from sorted array
双指针思想经典应用,slow 不等于fast 时,nums[++slow] = nums[fast]
2025-11-22 10:04:10
181
原创 中断线程化:RT-Preempt实时性优化的核心技术解析
中断线程化技术通过将中断处理转化为可调度的内核线程,从根本上改善了Linux系统的实时性能。使用替代传统的中断注册合理设置中断线程的优先级和调度策略利用RT-Preempt提供的实时调度机制通过优先级继承避免优先级反转。
2025-11-20 22:32:53
796
原创 嵌入式Linux根文件系统实战:深入解析初始化脚本与系统服务
对于需要长期运行的服务,我们可以创建服务管理脚本。在/bin/shstart);;stop);;;*)exit 1;;esac// 第一次fork// 父进程退出// 创建新会话// 第二次fork// 设置文件权限掩码umask(0);// 更改工作目录chdir("/");// 关闭标准文件描述符// 重定向标准文件描述符到/dev/null。
2025-11-20 07:53:42
670
原创 Leetcode 每日一题C 语言版 --1716 calculate money in leetcode bank
‘’‘bashHercy wants to save money for his first car. He puts money in the Leetcode bank every day.He starts by putting in $1 on Monday, the first day. Every day from Tuesday to Sunday, he will put in $1 more than the day before. On every subsequent Monday,
2025-11-20 07:51:36
436
原创 #嵌入式Linux电源管理实战:深入解析CPU调频governor原理与优化
CPU调频governor的工作原理和不同类型的特点如何在实际项目中配置和优化调频策略通过代码示例掌握监控和调整governor的方法常见问题的排查技巧和性能优化建议。
2025-11-18 22:17:00
263
原创 嵌入式网络编程实战:从Socket基础到高并发优化
本文详细介绍了嵌入式Linux环境下的Socket网络编程,从基础概念到高级优化技巧。Socket编程的基本流程和API使用高并发服务器的实现方案嵌入式环境特有的优化策略实际调试和问题排查方法。
2025-11-14 21:32:07
377
原创 嵌入式Linux电源管理深度优化之系统休眠与唤醒机制实战解析
理解了Linux电源管理的核心机制和状态转换掌握了设备树中唤醒源的配置方法学会了在驱动程序中实现电源管理回调熟悉了用户空间控制休眠唤醒的接口。
2025-11-12 23:01:38
429
原创 Linux内核驱动开发实战 --从零构建字符设备驱动
理解结构体的作用和实现掌握设备号分配和设备注册的完整流程学会实现基本的读写接口和内存管理熟悉驱动模块的编译、加载和调试方法。
2025-11-11 22:25:24
711
原创 Linux内核调试利器--动态调试与Tracepoint实战指南
动态调试和Tracepoint是嵌入式Linux开发中不可或缺的调试工具。动态调试提供了灵活的运行时控制能力,适合在开发阶段进行详细的代码路径跟踪;而Tracepoint则提供了更加结构化和高性能的跟踪方案,适合在生产环境中进行问题诊断和性能分析。动态调试通过debugfs接口提供运行时控制Tracepoint提供静态定义的性能分析点两种技术都可以在不重启系统的情况下启用深入学习ftrace系统的其他功能探索perf工具与Tracepoint的结合使用了解eBPF技术在跟踪调试中的应用。
2025-11-09 16:05:45
559
原创 设备树调试与验证实战 --从原理到问题排查
设备树调试是嵌入式Linux开发中的关键技能。快速定位设备树配置问题深入理解设备树在内核中的工作机制掌握实用的调试代码和工具进一步学习方向深入研究设备树绑定文档(Binding Documentation)学习设备树覆盖(Device Tree Overlay)技术掌握设备树与ACPI的异同及应用场景设备树的正确使用和调试能力,将直接影响嵌入式项目的开发效率和质量。建议在实际项目中不断实践和总结经验,逐步掌握这一重要技术。
2025-11-08 09:40:36
500
原创 嵌入式Linux系统性能优化:深入剖析I/O性能瓶颈
通过本文的深入分析,我们掌握了嵌入式Linux系统中I/O性能瓶颈的识别和优化方法。熟练使用iostat、iotop等工具监控I/O性能理解Linux I/O栈的工作原理和关键组件掌握直接I/O和异步I/O的编程技巧能够根据存储设备特性选择合适的调度器和优化参数深入研究Linux内核I/O子系统源码学习使用SystemTap或Perf进行深度性能分析探索NVMe等新型存储技术的优化策略研究容器环境下的I/O性能隔离技术。
2025-11-06 22:47:47
839
1
原创 嵌入式Linux安全启动全解析:从原理到实战
摘要:本文详细探讨了嵌入式Linux系统中的安全启动实现方案。从建立信任链的技术原理出发,介绍了从Bootloader到内核再到用户空间的完整验证流程。重点解析了Linux内核中的IMA和EVM机制,并提供了具体的实现方法,包括密钥生成、U-Boot配置和内核完整性验证设置。文章还包含两个核心代码示例:一个是内核IMA策略的自定义实现,另一个是用户空间的签名验证工具。这些内容为开发者构建安全的嵌入式系统提供了实用参考。
2025-11-05 23:14:36
565
原创 嵌入式网络编程深度优化 --网络协议栈配置实战指南
缓冲区调优:合理设置socket缓冲区大小,平衡延迟和吞吐量连接管理:优化连接跟踪和队列长度,提高并发处理能力算法选择:根据应用场景选择合适的TCP拥塞控制算法中断优化:通过NAPI和中断亲和性减少CPU开销。
2025-11-04 22:54:53
557
原创 build rootfs 编译踩坑总结 --第一题SIGSTKSZ missing binary operator before token --持续更新中
那是一个平凡的下午,我像往常一样敲击着键盘,突然屏幕上跳出了一个让我眉头紧锁的错误:这个看似简单的编译错误,却开启了我一段奇妙的调试之旅。如果你也曾被类似的C库版本问题困扰,或者对Linux系统编程中的信号栈机制感到好奇,那么请跟随我的脚步,一起探索这个问题的来龙去脉。
2025-11-03 23:28:26
690
原创 嵌入式Linux电源管理实战 --深入解析CPU调频governor原理与优化
本文深入探讨了Linux内核中的CPU调频机制(CPUFreq)及其governor策略实现。首先介绍了CPU动态调频的技术背景和核心原理,包括采样机制、决策过程和频率切换方法。文章详细解析了Linux内核预置的各种governor类型及其适用场景,如性能优先(performance)、省电优先(powersave)和按需调频(ondemand)等。通过实际操作示例展示了如何查看、配置和优化governor参数,并提供了两个关键代码示例:一个自定义简单governor的内核模块实现,以及一个用户空间调频控制
2025-11-03 22:36:59
390
原创 内核调试利器:KGDB远程调试实战指南
摘要: 本文详细介绍了KGDB内核远程调试技术的实现与应用。首先阐述了KGDB的工作原理及其在内核调试中的优势,随后提供了完整的环境配置指南,包括内核编译选项设置和启动参数调整。文章包含两个实用代码示例,展示如何在内核模块中触发断点并进行复杂场景调试。针对常见问题提供了排查方法,如连接问题和符号表加载,并给出性能优化建议。最后总结了核心技术要点,并指出进一步学习方向,为开发者构建高效内核调试体系提供了实用指导。(150字)
2025-11-01 23:38:21
847
2
原创 Git Diff大揭秘:读懂代码变更的“心电图“
git diff使用基于LCS(最长公共子序列)的算法:找出两个版本的公共部分标记新增和删除的内容生成人类可读的对比结果这种算法保证了diff的高效性和准确性。git diff是一个强大的代码分析工具,掌握它的解读技巧对每个开发者都至关重要。通过本文的详细解读,你应该能够:✅ 准确理解diff的每个字段含义✅ 识别代码改动的意图和影响✅ 发现潜在的代码问题✅ 提高代码审查的效率记住:看懂diff只是第一步,理解diff背后的代码逻辑才是真正的价值所在。
2025-11-01 09:34:32
395
原创 嵌入式Linux根文件系统制作 --深入理解目录结构规范
根文件系统必须符合FHS标准,确保系统组件的有序组织关键目录如/bin、/sbin、/etc、/lib等必须正确配置init进程是用户空间的第一个进程,负责系统初始化虚拟文件系统(proc、sysfs、tmpfs)对系统运行至关重要。
2025-11-01 08:11:13
851
原创 交叉编译工具链深度解析 --静态库与动态库编译实战指南
交叉编译工具链中静态库和动态库的正确使用是嵌入式Linux开发的关键技能。静态库适合对启动速度和独立性要求高的场景,而动态库在存储空间受限和多进程共享的场景中更具优势。技术要点回顾正确配置交叉编译环境是成功的基础理解位置无关代码(PIC)对动态库编译的重要性掌握库文件的版本管理和符号控制熟悉目标平台的库依赖管理进一步学习方向深入研究ELF文件格式和动态链接过程学习使用pkg-config管理复杂的库依赖探索CMake和Autotools在交叉编译中的应用。
2025-10-30 22:31:26
448
原创 嵌入式网络编程深度探索:无线网络驱动开发实战指南
本文深入探讨了嵌入式Linux无线网络驱动开发的核心技术。主要内容包括:无线驱动的工作原理(硬件抽象层、MAC层处理、协议栈接口)和Linux内核支持机制(cfg80211、mac80211框架);具体的实现步骤(硬件初始化、驱动注册)和关键配置参数;完整的代码示例(驱动框架、数据传输处理);以及调试方法(工具使用、问题排查)和优化建议(中断合并、内存管理)。文章最后总结了技术要点,并建议进一步学习最新无线标准、安全机制等方向,为开发者提供了一套完整的无线网络驱动开发指南。
2025-10-29 22:33:49
349
原创 深入剖析SLAB分配器原理与优化实战
SLAB分配器作为嵌入式Linux系统中重要的内存管理机制,通过对象缓存和预分配策略,有效解决了小内存频繁分配导致的性能问题和内存碎片问题。在实际嵌入式项目开发中,合理使用SLAB分配器可以显著提升系统性能。SLAB通过对象缓存机制减少内存分配开销合理配置缓存参数对系统性能至关重要构造/析构函数可以自动化对象生命周期管理监控和调试工具是优化SLAB使用的关键研究SLUB分配器(SLAB的改进版本)的特性与优势深入学习内存碎片整理机制探索cgroup内存控制与SLAB的配合使用。
2025-10-28 22:27:15
268
原创 深入剖析平台设备驱动与设备树匹配机制
本文深入探讨了Linux内核中平台设备驱动与设备树匹配机制的实际应用。通过分析设备驱动开发的技术原理,详细介绍了从设备树节点定义到平台驱动注册的完整实现流程。文章提供了设备树节点定义和平台驱动实现的代码示例,涵盖资源获取、中断处理等关键环节。同时总结了常见问题排查方法和性能优化建议,包括设备树语法检查、驱动匹配状态查看等实用技巧。最后指出进一步学习Linux设备模型和其他总线类型驱动的方向,为嵌入式Linux系统开发提供了全面的技术指导。
2025-10-27 22:45:44
1332
原创 Linux内核驱动开发 - 字符设备驱动深度解析
本文深入探讨Linux字符设备驱动开发,重点解析驱动核心原理与实现方法。文章首先介绍字符设备驱动在Linux系统中的角色,管理如串口、传感器等以字节流交换数据的设备。技术原理部分详细讲解struct cdev和file_operations结构,以及设备号管理、内存映射等关键内核机制。实战部分提供完整的驱动实现步骤:从设备号分配、cdev结构初始化到设备注册和节点创建。文中包含两个代码示例:基础框架展示了open/read/write等基本操作实现,增强版本则引入互斥锁解决多进程访问同步问题。示例代码涵盖动
2025-10-26 17:12:16
974
原创 当“Make”坏了,我们该如何“Make”
摘要:作者在构建Buildroot时遭遇了GNUMake的版本Bug,试图调试时意外损坏了make工具,导致无法重新编译make。通过查阅官方文档,发现可以使用gmake外援和项目自带的build.sh脚本进行初始构建,成功生成新的make工具。文章进一步探讨了历史上第一个make工具的诞生过程,指出它最初是用更底层的工具或手工编译而来,最终实现了自举(Bootstrapping)。这个案例展现了计算机工具链中"鸡生蛋蛋生鸡"的哲学问题及其解决方案。
2025-10-24 23:23:47
679
原创 【一文搞懂 repo 工作原理】
这篇指南全面介绍了Google开发的Repo工具,该工具用于管理由多个Git仓库组成的大型项目(如Android)。主要内容包括:Repo的双层架构设计(启动器+主程序)、核心配置文件Manifest的解析、初始化与同步的工作原理、常见问题解决方案(如Python兼容性、网络问题等)、高级用法(本地配置、批量操作)以及性能优化技巧。文章还提供了系统化的故障排除方法和最佳实践建议,帮助开发者高效管理复杂项目。理解Repo的架构设计和工作流程是有效使用该工具的关键。
2025-09-28 22:32:32
620
原创 从零构建 ARM64 内核?QEMU 踩坑全记录:差点删库跑路!
从迷茫到清晰,这一系列的“踩坑”过程让我对 Linux 系统的启动流程有了更深刻的理解。最常见的原因:你在 x86 的电脑上编译了一个 x86 的 BusyBox,然后扔给了 ARM64 的虚拟机去执行……:在 Linux 生态中,Glibc 是“主流”,但 musl-libc 和 uclibc 在 。musl 对静态链接的支持非常友好,是嵌入式领域的首选。,就相当于告诉内核“我要自杀”,内核只好“跟着一起死”(Panic)。 的 BusyBox 是你的好朋友,能避免 99% 的库依赖问题。
2025-09-09 22:39:54
1145
原创 ubuntu 系統使用過程中黑屏問題分析
摘要:系统出现黑屏并显示"VGA无信号"错误,日志显示AMD GPU操作超时(seq=102898/102899),随后GPU重置失败(错误码-110)。进一步检查发现Xorg服务器无法创建监听套接字,提示"server already running"。建议排查方向:1)观察键盘大小写指示灯状态;2)尝试切换至tty终端(Ctrl+Alt+F3),以区分是Xorg问题还是GPU完全失效。问题可能涉及GPU驱动超时和Xorg服务冲突。
2025-09-06 22:24:34
370
原创 RK3399 启动流程 --从复位到系统加载
RK3399启动流程解析:从ROMCode到系统加载。启动始于A53核心从0xFFFF0000执行ROMCode,依次检测SPI Nor/NAND、eMMC、SD卡等存储设备,验证IDBLOCK后进入启动流程。若无有效设备则转入USB下载模式。初始化过程经过SRAM阶段加载DDR代码、配置内存控制器、最终转移至DDR内存。系统采用多级引导架构,包含DDR Image、Loader Image等阶段,具有容错机制、安全验证和性能优化等特点,为嵌入式开发提供重要参考。
2025-08-02 21:54:49
420
原创 uboot armv8 启动流程之 linker script
本文描述了嵌入式系统启动代码的内存布局结构。主要包括中断向量表vectors、启动入口代码start.o、普通代码段text、ARM/Thumb2交互代码glue等核心部分。重点说明了关键段落的定义和功能:__image_copy_start标记代码段起始位置,用于DDR内存搬运;.rodata存放只读变量;.data存放已初始化变量;u-boot的init入口统一管理机制;binman维护生成的二进制文件;__image_copy_end标记需搬运内容结束位置;.rel.dyn重定位表用于计算偏移;最后是
2025-08-02 10:37:01
4866
原创 kthread、kthread_worker 和 workqueue 的区别与联系
这三种都是Linux内核中的任务执行机制,用于异步处理任务,但它们有不同的设计目的和使用场景。特性kthreadworkqueue抽象级别低中高线程管理手动半自动自动任务队列无有有并发处理需自行实现单线程多线程池系统资源占用较多中等可共享(使用系统工作队列)复杂性高中等低适用场景长期运行复杂任务顺序执行多个任务通用异步任务处理。
2025-07-13 14:22:06
862
原创 ARMV8 RK3399 u-boot TPL启动流程分析 --crt0.S
在__main函数中,主要完成了U-Boot的初始化流程,分为几个关键步骤。首先,准备board_init_f的运行环境,并跳转到该函数。接着,设置board_init_f申请的栈和全局数据(GD)。随后,执行relocate_code,将U-Boot代码重定位到board_init_f计算出的目标地址,TPL和SPL会跳回crt0。之后,设置board_init_r的运行环境,完整U-Boot的剩余工作由c_runtime_cpu_setup完成,最后跳转到board_init_r。在board_init
2025-05-12 23:15:47
679
原创 ARMV8 RK3399 u-boot TPL启动流程分析 --start.S
armv8 RK3399 uboot TPL启动流程分析 --start.S
2025-05-11 21:10:13
504
原创 Ubuntu/Windows 双系统睡眠唤醒崩溃问题终极调试指南
Windows 快速启动(Fast Startup)导致硬件状态未完全重置,Ubuntu 无法正确接管硬件。进入 Ubuntu 后,Ubuntu 睡眠唤醒异常(键盘灯亮但黑屏→自动重启)。出现唤醒崩溃,"关机" 后正常 → 确认是 Windows 硬件状态残留问题。- 选择 "关机" → 手动开机 → 进入 Ubuntu → 测试睡眠唤醒。- 选择 "重启" → 进入 Ubuntu → 测试睡眠唤醒。# 等待 10 秒后按键盘唤醒,观察是否正常。(非重启)后进入 Ubuntu 测试。
2025-05-04 15:04:59
1103
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅