- 博客(29)
- 收藏
- 关注
原创 RK3399 电子相册进阶:目录遍历 + 链表存储,实现自动加载图片(附完整项目)
本文介绍了一个基于RK3399开发板的电子相册项目,通过自动扫描图片目录和链表存储实现动态图片加载。主要内容包括:1.使用Linux目录操作API(opendir/readdir)自动获取指定文件夹下的图片文件;2.采用双向循环链表动态存储图片路径,解决数组固定大小的限制;3.整合JPEG显示功能实现图片循环播放,支持ESC键退出。项目亮点在于实现了"一键启动、自动加载、循环播放"的完整功能,代码结构清晰,包含链表实现、文件操作和图形显示等核心技术,适合嵌入式开发学习和简历项目展示。
2025-11-26 21:00:40
1242
原创 RK3399 嵌入式开发:libjpeg 库移植与 JPEG 图片显示实战(含 BMP 转 JPEG)
本文详细介绍了在RK3399嵌入式Linux平台上实现JPEG图片显示的全过程。主要内容包括:1. 准备工作:硬件平台搭建和libjpeg库移植;2. JPEG显示实现:通过LCD显存操作和libjpeg解码流程;3. 功能扩展:实现循环播放相册和BMP转JPEG功能。文章提供了完整的代码实现和详细的步骤说明,所有功能均经过实际验证,可直接应用于嵌入式项目开发。关键技术点包括:交叉编译配置、显存映射操作、JPEG编解码流程等,为嵌入式图像处理提供了实用解决方案。
2025-11-26 20:54:28
1273
原创 Linux fb 子系统实战:从原理到 RK3399 屏幕显示(含 BMP 图片显示)
本文详细介绍了Linux fb子系统在RK3399开发板上的应用实践,从原理到代码实现。主要内容包括:fb子系统核心概念(帧缓冲、色深、设备节点等)和RK3399屏幕参数解析;应用层编程流程:设备打开、参数获取、显存映射、数据写入;三个实战案例:获取屏幕信息、显示纯色、BMP图片显示(含BGR转RGB和行顺序修正);实用技巧与常见问题解决方案。通过mmap直接操作显存实现高效显示,特别适合嵌入式Linux开发场景。文章提供了完整的示例代码和避坑指南,帮助开发者快速掌握fb子系统的使用。
2025-11-24 19:46:00
672
原创 Linux Platform 总线 LED 驱动实战代码包
摘要:本文介绍了一个嵌入式Linux平台的LED驱动开发包,支持RK3399、树莓派等开发板。包含驱动代码、设备树片段和测试脚本,提供两种设备匹配方式:设备树匹配(推荐)和传统模块匹配。驱动代码实现LED控制功能,包括GPIO和寄存器两种操作方式,并提供了字符设备接口。详细说明了代码结构、编译方法和测试流程,同时给出常见问题解决方案。该开发包可直接编译验证,适用于嵌入式Linux系统的LED设备驱动开发。
2025-11-20 20:53:30
627
原创 Linux 平台总线驱动模型(platform)从入门到实战:适用于嵌入式开发
本文介绍了Linux平台总线驱动开发的核心概念与实践方法。平台总线作为虚拟总线,通过解耦设备端(硬件属性)和驱动端(操作逻辑)实现代码复用,解决无专用总线外设的驱动开发问题。文章详细讲解了platform_device和platform_driver的数据结构、API接口及3种匹配方式(设备树匹配优先级最高),并以RK3399开发板的LED控制为例,给出了完整的设备端和驱动端代码实现。最后介绍了设备树适配方案和常见调试技巧,帮助开发者快速掌握平台总线驱动开发。该架构显著提升驱动代码的可移植性,是嵌入式Lin
2025-11-20 20:16:50
487
原创 RK3399 平台总线设备驱动开源项目(多设备扩展版)
摘要: RK3399-Platform-Device-Suite项目为RK3399开发板实现了完整的平台总线驱动,包含LED、按键、ADC和PWM风扇4类核心设备的驱动解决方案。项目提供模块注册和设备树两种设备声明方式,采用平台总线模型实现设备与驱动分离。每个设备包含独立的设备模块和驱动模块,支持通过QT可视化控制端进行交互,并配套测试脚本验证功能。项目结构清晰,包含设备树配置、内核模块代码、用户空间控制程序和详细部署文档,实现了从硬件资源管理到用户控制的全流程解决方案,特别展示了中断处理(按键)、内存映射
2025-11-19 20:28:40
523
原创 从入门到实战:RK3399 Linux 平台总线驱动模型全解析(附开源控制项目)
本文详细介绍了Linux平台总线(PlatformBus)模型在RK3399开发板上的应用。该模型通过分离设备信息(device)和驱动逻辑(driver),实现了硬件布局变更时只需修改设备信息而无需重写驱动代码的灵活架构。文章首先解析了平台总线的三大核心实体(设备、驱动、总线)及其解耦价值,然后深入讲解了关键数据结构、匹配流程以及实战开发步骤,包括编写LED设备模块(driver.c)和驱动模块(driver.c)。最后提出了一个开源项目设计:基于QT的RK3399平台设备可视化控制中心,能够通过GUI。
2025-11-19 20:22:51
1033
原创 Linux 中断核心模块(rk3399 平台适配)
本文介绍了基于rk3399平台(ARM64架构)的Linux内核四大核心模块开发:顶半部中断、定时器、tasklet和workqueue。每个模块都提供了API汇总、适用场景说明和可直接编译运行的代码示例。重点内容包括:GPIO中断处理(含按键消抖)、定时器使用、tasklet轻量级任务处理以及三种workqueue实现方式(共享队列、私有队列和延迟任务)。文章详细说明了rk3399平台的GPIO编号规则和交叉编译方法,并提供了完整的Makefile模板。所有代码均针对rk3399平台优化,兼顾实用性。
2025-11-18 20:57:13
836
原创 Linux 中断控制与实现:通俗原理 + 流程 + 设计初衷
Linux中断机制通过"顶半部+底半部"架构实现高效响应与处理:顶半部快速响应中断(如按键检测),底半部异步处理耗时任务(如消抖)。提供多种工具选择:定时器(timer)用于延迟执行,tasklet处理轻量级任务(中断上下文),workqueue处理耗时可阻塞任务(进程上下文)。该设计平衡了响应速度与CPU利用率,解决了外设与CPU速度不匹配问题。典型应用如按键中断采用"顶半部启动timer+底半部消抖处理"的组合方案。选择组件时需根据任务特性(延迟、耗时、可阻塞等)
2025-11-18 20:43:58
1123
原创 Linux 中断:从基础到实战的深度解析
Linux中断机制是系统的"神经反射系统",通过异步事件通知实现高效外设响应。文章系统讲解中断原理与开发实践:1) 介绍中断分类(硬件/软件)及处理流程;2) 分析顶半部(快速响应)与底半部(耗时处理)的分工机制;3) 提供设备树配置到驱动开发的完整案例,包含按键中断+Tasklet实现;4) 给出调试工具与优化技巧;5) 拓展中断共享与优先级管理。通过类比急诊分诊等生活实例,深入浅出地解析了这一核心机制,为开发者提供实用指南。
2025-11-17 21:09:03
833
原创 Linux 系统中断控制与实现:从基础到实战(附完整代码)
本文介绍了Linux驱动开发中的中断机制,包括基本原理和实战应用。主要内容涵盖:中断的核心概念(IRQ、ISR、顶/底半部)、关键API(request_irq、free_irq等)、定时器实现按键消抖(jiffies、timer_list)、以及两种底半部处理方式(tasklet和工作队列)。文章通过代码示例和对比表格,详细讲解了中断处理流程及注意事项,适合驱动开发初学者掌握中断处理的基本方法和最佳实践。
2025-11-17 21:00:14
969
原创 Linux 系统模块编程从入门到实战:手把手教你写内核模块
本文介绍了Linux内核模块编程的核心技术与实践方法。Linux模块(.ko)作为动态扩展内核功能的载体,支持运行时加载/卸载,具有灵活性、高效性和轻量化三大优势。文章详细解析了模块开发的四大必备组件:头文件引入、加载函数(__init)、卸载函数(__exit)和许可证声明(GPL),并提供了HelloWorld模块代码示例。同时讲解了基于内核源码的模块编译方法,包括Makefile编写要点和编译步骤,以及模块操作命令(insmod/rmmod/lsmod/dmesg)的使用技巧。最后强调了内核版本一致性
2025-11-16 23:54:55
402
原创 Linux 系统模块编程从入门到实战:手把手教你写内核模块前言
本文详细介绍Linux内核模块编程,从基础概念到实战应用。主要内容包括:Linux模块的作用与优势,支持动态加载/卸载以灵活扩展功能;模块的基本构成(头文件、加载/卸载函数、许可证声明等)和可选功能(符号导出、模块信息);模块编译流程与Makefile编写;常用操作命令(加载、卸载、查看模块信息);通过四个实战示例(最小模块、日志等级、模块间调用、参数传递)演示核心开发技巧。文章还提供了常见问题排查方法,帮助开发者快速上手Linux内核模块开发,为后续驱动开发奠定基础。
2025-11-16 23:51:00
741
原创 从入门到实战:Linux GPIO_LED 驱动开发(ioctl 接口实现)
本文介绍了嵌入式Linux中通过ioctl接口控制LED的驱动开发流程。ioctl是Linux内核提供的设备控制接口,支持"命令+数据"交互方式,适合LED等外设控制。文章详细解析了ioctl命令码的32位组成结构,包括传输方向、数据大小、魔数和命令编号。开发流程涉及杂项设备注册、GPIO操作和ioctl命令交互等核心内容,配套代码可直接编译运行,帮助初学者快速掌握GPIO外设开发技能。
2025-11-15 12:02:15
1220
原创 RK3399 LED 驱动调试排错手册(基于杂项字符设备)
本文提供了一份RK3399 LED驱动开发的实用调试手册。重点介绍了三类常见问题:编译阶段报错(头文件缺失、路径错误等)、加载阶段报错(设备冲突、符号未定义等)和运行阶段问题(功能异常、内核崩溃等),并给出具体解决方法。手册详细阐述了寄存器验证的三种方法:在驱动中打印寄存器值、使用devmem工具直接读写、对照数据手册验证,帮助开发者精准定位硬件控制问题。同时介绍了内核日志分析技巧,包括常用命令、日志解读方法和分析步骤,以及推荐的调试工具。最后总结了一个清晰的调试流程,帮助开发者高效解决问题。
2025-11-14 21:23:02
855
2
原创 从 0 到 1 理解 RK3399 杂项字符设备 LED 驱动开发
本文详细讲解了基于RK3399开发板的杂项字符设备(LED)驱动开发。从核心概念入手,介绍了杂项设备的简化特性(共享主设备号10)、GPIO控制原理及关键结构体。随后拆解了完整驱动代码框架,包括地址映射、时钟使能、GPIO配置、文件操作接口实现等核心模块。通过Makefile编译和测试应用程序验证了驱动功能,并总结了常见问题解决方案。该驱动利用了misc_register简化注册流程,自动创建设备节点,适用于简单外设控制场景。文章通过原理讲解与代码实践相结合的方式,帮助开发者掌握杂项字符设备驱动的开发逻辑。
2025-11-14 21:17:26
1075
原创 Linux字符设备驱动模型
本文详细解析Linux字符设备驱动的三种实现模型。首先介绍字符设备驱动的基本概念和核心结构体file_operations,它是连接应用层与硬件的关键接口。然后重点讲解杂项设备驱动模型,其主设备号固定为10,开发简单但资源有限;早期经典模型支持多个设备但需手动创建设备节点;Linux 2.6标准模型采用dev_t设备号和cdev结构体,资源充足且扩展性强。文章通过完整代码示例演示各模型的实现方法,包括驱动注册、设备节点创建等关键流程,并提供三种模型的对比总结,建议按照杂项→早期→标准的顺序学习。
2025-11-13 19:59:08
555
原创 五、“笨办法” 学 K8s:亲手组装一个 Kubernetes 节点,彻底理解集群启动
《手动搭建单节点K8s集群:从零到精通的实践指南》 摘要:本文详细介绍了手动搭建单节点Kubernetes集群的全过程,强调通过"笨办法"深入理解K8s核心组件协作原理。内容包括:环境准备(系统配置、依赖安装)、五大核心步骤(二进制组件安装、TLS证书生成、containerd配置、K8s组件启动、Flannel网络部署),以及常见问题排查方法。重点讲解了kubelet、apiserver等组件的配置细节,揭示了自动化工具隐藏的实现原理。通过手动搭建,读者能够掌握证书管理、组件通信等关键
2025-11-13 14:53:10
1182
原创 四、解构 K8s 节点:核心组件在 Linux 上是如何协同工作的?
本文以 “K8s 节点 = 高效办公室” 的通俗类比,解构了 kubelet、containerd、kube-proxy 等核心组件的协作逻辑及与 Linux 内核的交互原理:containerd 作为 “施工队” 直接调用 Namespace(隔离)和 cgroups(资源管控)API 实现容器生命周期管理;kubelet 作为 “项目经理” 通过 CRI 接口协调 containerd,同时监控 Linux 内核资源状态。
2025-11-12 19:41:57
739
原创 三、告别资源争夺:Linux cgroups 如何实现容器资源管家的公平与公正?
摘要:本文深入解析Linux控制组(cgroups)技术,揭示其在容器资源管控中的核心作用。文章首先通过实例说明资源隔离的必要性,详细拆解CPU、内存等5个关键子系统的功能配置。核心部分包含手动实验,演示如何通过cgroups文件系统为进程设置内存限制。同时关联K8s资源配置原理,说明Pod资源限制的底层实现机制。最后提供常见问题排查指南,帮助读者掌握容器资源管控的底层逻辑,从理论到实践全面理解cgroups技术。
2025-11-12 19:25:51
1039
原创 二、容器隔离的魔法:深入剖析 Linux 命名空间
本文深入解析Linux命名空间技术,揭示容器隔离的核心原理。通过6大命名空间剖析:PID隔离进程ID、Network隔离网络栈、Mount隔离文件系统、UTS隔离主机名、IPC隔离进程通信、User隔离用户权限。作者用unshare命令实操演示如何手动创建带PID和Mount隔离的简易容器,验证隔离效果。文章指出容器的本质是被命名空间包裹的一组进程,6大命名空间共同构建了容器的独立运行环境。这种内核级隔离机制是Docker、Kubernetes等容器技术的底层基础,理解后能更深入掌握容器网络、存储等高级特性
2025-11-11 21:04:46
1250
原创 为什么说 Linux 是 K8s 的土壤?没有 Linux,就没有 K8s!
Kubernetes(K8s)依赖Linux内核的Namespaces和cgroups机制实现容器隔离与资源控制。Namespaces为容器创建隔离的虚拟环境,cgroups限制容器资源使用。实验证明容器本质是宿主机上被隔离和限制的进程。K8s通过调用这些Linux底层功能实现容器管理,因此必须运行在Linux系统上。Windows/macOS只能通过虚拟机模拟Linux环境进行开发调试,无法直接部署K8s集群。理解K8s与Linux的内在联系有助于深入掌握容器技术的底层原理。
2025-11-10 00:38:24
978
原创 一文搞懂 ARM 处理器架构(含代码示例与硬件电路设计)
本文深入解析ARM处理器架构,从嵌入式基础概念到ARM核心特性详解,涵盖指令执行流程、存储体系、RISC优势等理论内容。重点讲解了ARM架构发展历程、数据类型、工作模式切换及寄存器组等核心机制,并通过代码示例演示内存管理、外设访问等关键技术。同时以Cortex-M4为例,提供完整的硬件电路设计流程,包括原理图绘制、PCB布局到调试环节,为开发者提供ARM项目开发的全套技术方案。文章兼顾理论与实操,适合嵌入式开发者快速掌握ARM架构并落地项目。
2025-11-08 11:43:42
1656
原创 嵌入式 Linux 移植与系统启动全解析(含完整烧写流程与代码示例)
本文详细讲解了嵌入式Linux系统的移植流程,主要包含三大核心组件:U-Boot引导程序移植、Linux内核裁剪与适配以及根文件系统构建。首先深入解析U-Boot的两阶段启动机制及编译配置方法,包括汇编阶段的硬件初始化和C语言阶段的外设配置;其次阐述Linux内核的裁剪技巧与编译步骤,重点说明设备树和内核镜像的生成过程;最后通过BusyBox构建最小根文件系统,并详细介绍了SD卡和eMMC两种烧写方式的具体操作步骤。全文提供了完整的代码示例和详细注释,为嵌入式开发人员提供了可直接应用于项目实践的技术指南。
2025-11-08 11:37:12
911
原创 嵌入式开发的 “偷懒” 艺术:高效实践指南(附完整代码示例)
作为嵌入式开发者,我们的价值不在于编写多少行代码,而在于用最少的代码实现稳定、高效的功能。掌握这些 “偷懒” 技巧,不仅能提升开发效率,更能降低维护成本,让嵌入式开发从 “繁琐重复” 走向 “简洁高效”。
2025-11-07 20:25:31
712
原创 CAN 通信的基本原理与 STM32 实现方法详解
摘要:本文详细讲解了CAN总线通信的原理与STM32实现方法。首先介绍了CAN总线的基本概念、物理层特性(差分信号抗干扰优势)和协议层机制(报文结构、仲裁机制)。然后重点解析了STM32内置bxCAN控制器的寄存器配置、发送邮箱和接收FIFO工作机制。通过CubeMX配置示例展示了500Kbps波特率的设置方法,并提供了完整的轮询和中断两种接收模式的实现代码。实验验证表明,基于HAL库的CAN通信方案稳定可靠,文中还总结了波特率匹配、终端电阻配置等常见问题处理要点为嵌入式开发者快速掌握CAN通信提供实用指南
2025-11-07 20:10:19
1393
原创 I2C死锁解决与协议全解析
摘要: I2C协议是一种广泛应用于嵌入式系统的串行通信标准,具有双线制、支持多主从架构、半双工同步传输等特点。本文系统介绍了I2C的核心特性,包括其硬件基础(SCL时钟线和SDA数据线)、通信帧结构(起始位/地址位/数据位/应答位/停止位)、仲裁机制和典型死锁问题解决方案,并提供了基于STM32 HAL库的实战代码示例。文章还详细解析了7位/10位寻址方式、不同速率模式的应用场景,以及常见故障排查方法,为开发者提供了从协议原理到工程实践的完整指南。
2025-11-05 19:54:35
1219
原创 Shell编程100例,建议收藏!
本文总结了100个实用Shell脚本示例,涵盖系统管理、网络监控、文件操作、用户管理、游戏开发等多个应用场景。主要包括以下内容: 基础命令:输出"Hello World"、创建用户、备份日志等基础操作脚本 系统管理:一键部署LNMP/LAMP环境、监控内存磁盘、优化内核参数等系统管理脚本 网络操作:测试网段主机状态、配置防火墙规则、监控HTTP服务等网络相关脚本 实用工具:猜数字游戏、石头剪刀布、进度条显示等交互式脚本 数据处理:文件批量重命名、统计日志信息、排序数字等数据处理脚本等
2025-11-03 23:56:09
306
原创 linux系统中常见的命令
本文总结了Linux系统中常用的命令操作,涵盖系统管理、文件操作、网络配置等核心功能。主要内容包括:系统信息查询命令(如uname、dmidecode);文件目录操作(cd、ls、cp、rm等);用户权限管理(chmod、chown);软件包管理(rpm、yum);网络配置(ifconfig、netstat);文本处理(grep、sed);以及VIM编辑器使用技巧。文章还详细介绍了磁盘管理、进程控制、压缩解压等实用命令,为Linux系统管理员和开发者提供了全面的参考指南。
2025-10-10 20:46:28
878
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅