- 博客(26)
- 收藏
- 关注
原创 【Linux驱动开发】并发与竞争详解——自旋锁实验
本文介绍了Linux驱动开发中并发控制的核心机制——自旋锁(Spinlock)的实现与应用。通过一个GPIO LED驱动实例,详细讲解了自旋锁的工作原理和使用方法:1. 在设备结构体中定义spinlock_t类型锁和共享状态变量dev_status 2. 驱动初始化时使用spin_lock_init()初始化自旋锁 3. 在open/release等可能产生竞争的操作中使用spin_lock()/spin_unlock()保护临界区 4. 通过测试APP验证锁的有效性,确保设备只能被单进程独占访问 文章重点
2026-06-30 22:10:28
226
原创 【Linux驱动开发】并发与竞争详解——原子操作、自旋锁、信号量与互斥体
本文深入探讨了Linux驱动开发中的并发与竞争问题及其解决方案。文章首先通过打印机共享的案例形象说明并发访问导致的数据混乱问题,分析了Linux系统中并发产生的四大原因(多线程、抢占式调度、中断和多核访问)。然后详细介绍了四种主要处理机制: 原子操作:适用于整型变量和位操作,保证操作的不可分割性,但功能有限 自旋锁:短时间轻量级加锁方案,不会引起休眠,但会消耗CPU资源 信号量:适合长时间资源占用,可使等待线程休眠,但不能用于中断 互斥体:专业互斥方案,支持休眠,推荐作为互斥访问的首选 文章对各机制的API
2026-06-29 21:32:38
383
原创 基于 i.MX6ULL 的 GPIO 蜂鸣器驱动实战:从设备树适配到字符设备驱动开发
本文以i.MX6ULL平台蜂鸣器驱动开发为例,详细讲解了Linux字符设备驱动的完整实现流程。通过硬件原理分析、设备树节点配置(解决GPIO复用冲突)、驱动框架搭建(字符设备注册+GPIO子系统调用)到应用测试的全过程,展示了嵌入式Linux驱动开发的基本方法。特别指出了驱动初始化错误处理、GPIO电平控制等关键细节的优化空间,并提供了Makefile自动化编译方案。该案例涵盖了设备树适配、资源管理、用户空间交互等核心知识点,是理解Linux驱动开发架构的典型范例,适合作为嵌入式开发的实践参考。
2026-06-20 23:06:23
356
原创 【正点原子I.MX6ULL】GPIO LED字符设备驱动开发实战
本文详细介绍了在正点原子I.MX6ULL开发板上基于Linux设备树实现GPIOLED字符设备驱动的完整流程。主要内容包括:1. 设备树配置:修改引脚复用,添加自定义gpioled节点,并禁用原有LED节点。2. Makefile编写:实现驱动模块和设备树的一键编译功能。3. 驱动开发:构建完整的字符设备框架,实现GPIO初始化、文件操作接口等核心功能。4. 测试流程:涵盖设备树编译、镜像烧录、驱动加载等关键步骤。文章提供了完整的代码实现和操作说明,适合嵌入式Linux驱动开发初学者学习参考,帮助掌握设备树
2026-06-15 22:55:18
353
原创 i.MX6ULL pinctrl 子系统和gpio 子系统
本文详细介绍了在i.MX6ULL嵌入式Linux系统中GPIO驱动的开发方法。主要内容包括:1. GPIO使用两大核心子系统:pinctrl子系统负责引脚复用和电气属性配置,gpio子系统负责功能实现。2. 设备树配置详解:分析IOMUX控制器结构、PIN配置宏定义及驱动源码执行流程。3. GPIO驱动开发步骤:从设备树修改、IO冲突检查到驱动编写和测试。4. 完整示例代码:提供GPIO驱动框架及操作方法。5. 开发五步法总结:配置pinctrl→检查冲突→添加节点→编写驱动→测试验证。文章强调理解两个子系
2026-06-15 22:43:05
218
原创 i.MX6ULL 自定义设备树制作教程:修改分辨率 + 新增硬件节点适配驱动
本文介绍了如何为自定义硬件配置修改i.MX6ULL开发板的设备树文件,避免污染原厂配置。主要内容包括:1. 复制并重命名原厂设备树文件,独立维护自定义配置;2. 修改LCD分辨率适配7寸1024*600屏幕;3. 添加自定义LED设备节点,包含完整的寄存器配置;4. 创建专用Makefile实现一键编译驱动和设备树;5. 通过U-Boot临时加载验证新设备树,不影响原有配置。这套方案实现了硬件配置与内核源码的分离,便于后续驱动开发和硬件更换,同时保证了原厂配置的完整性。
2026-06-14 22:27:54
325
原创 Linux 设备树 OF API 详解:基于 backlight 背光节点的属性读取驱动实战
本文详细介绍了如何在Linux驱动开发中使用设备树(Device Tree)的OF API接口解析硬件信息。以一个实际的PWM背光节点为例,演示了从设备树中查找节点、读取字符串属性、数值属性以及数组属性的完整流程。文章包含驱动模块的完整代码实现,逐段解析核心逻辑,并提供了Makefile编译脚本和上机测试步骤。通过本示例,开发者可以掌握设备树驱动开发中最常用的OF API操作,包括节点查找、属性读取、内存管理以及错误处理等关键技术要点。所有代码均保留完整注释,可直接在ARM架构开发板上编译运行。
2026-06-14 20:29:01
152
原创 Linux 设备树 (DTS)入门:基于 i.MX6ULL 的语法、编译与内核 OF 操作的基础解析
本文深入解析了嵌入式Linux开发中的设备树技术。首先介绍了设备树的背景和优势,它解决了传统硬编码模式导致的内核臃肿和维护困难问题。文章详细讲解了设备树的核心概念、DTS语法规范、编译流程及内核匹配机制,包括节点结构、标准属性、分层复用设计等关键技术要点。通过i.MX6ULL平台的实例分析,展示了设备树在实际开发中的应用,包括内存映射、中断处理、外设配置等场景。最后阐述了设备树在内核中的实现方式及OF操作函数的使用方法。设备树实现了硬件描述与内核驱动的分离,是嵌入式Linux驱动开发的重要基础技术。
2026-06-14 16:57:40
406
原创 【Linux 驱动开发入门】第一个字符设备驱动 ——LED 驱动
本文基于i.MX6ULL平台详细讲解了Linux字符设备驱动的开发流程,从内核基础概念到完整代码实现。主要内容包括:字符设备驱动的核心框架(设备号管理、cdev注册、文件操作集等)、LED驱动的硬件初始化与寄存器操作、文件操作函数集的实现、模块加载与卸载流程。文章提供了可直接复用的工程化驱动模板,并总结了新手常见的8个开发陷阱。通过这个LED驱动示例,读者可以掌握字符设备驱动的开发方法,为后续开发更复杂的外设驱动打下基础。文章最后还给出了通用字符设备驱动模板,只需修改硬件相关部分即可适配不同设备。
2026-06-14 14:26:48
314
原创 使用WSL进行Linux驱动编程环境搭建
本文介绍了在Windows11系统中使用WSL搭建I.MX6ULL开发板Linux驱动编程环境的完整方案。主要内容包括:1)Linux内核编译步骤,从依赖库安装到编译脚本编写;2)VSCode+WSL开发环境配置,解决头文件路径问题;3)驱动Makefile编写规范;4)对比传统虚拟机方案,突出WSL在启动速度、资源占用和文件共享等方面的优势。该方案兼具Linux环境完整性和Windows操作便利性,是嵌入式开发的理想选择。关键配置如内核路径需根据实际环境调整。
2026-06-14 10:05:39
266
原创 适用于Windows的QT下OpenCV的搭建
本文详细介绍了在Windows系统下为QT配置OpenCV开发环境的完整流程。主要内容包括:1)下载OpenCV4.5.1稳定版本;2)安装CMake跨平台编译工具;3)配置系统环境变量和Mingw编译路径;4)使用CMake编译OpenCV源码并生成Makefile;5)执行make和make install命令完成编译;6)配置OpenCV的bin目录环境变量;7)在QT工程中添加OpenCV的include和lib路径。通过这一系列步骤,读者可以成功搭建OpenCV开发环境。
2026-04-09 22:00:31
513
原创 有关qmake编译时multimedia的错误问题
摘要:在QT编译过程中,若出现"Unknown module(s) in QT: multimedia multimediawidgets"错误,可能是qtmultimedia模块未正确编译安装。解决方法为:1)检查源码是否包含qtmultimedia;2)进入qtmultimedia源码目录手动执行qmake和make编译;3)确认编译生成的库文件是否存在于指定目录。若问题仍未解决,可尝试安装qtmultimedia5-dev。注意:操作时需根据实际环境修改源码路径,避免直接复制粘贴导
2026-03-13 21:33:26
71
原创 适用于I.MX6ULL的字库
本字库以轻量化设计实现高效字体渲染,支持多类型小型嵌入式设备运行环境,是开发者值得信赖的优质资源。如需基于该字库开展二次开发,建议严格遵守开源协议,保留原作者版权声明,并在合理范围内进行功能扩展。因使用或修改字库产生的任何技术问题与法律纠纷,原作者将不承担相关责任,感谢各位开发者的理解与配合。
2025-06-02 21:04:28
1068
原创 基于GEC6818的刮刮乐游戏(含账号的注册、登录与找回)
本项目实现了基于触摸屏的完整刮刮乐游戏系统,包含用户注册登录、密码找回、游戏交互等功能模块。系统采用粤嵌GEC6818开发板,通过arm-linux-gcc交叉编译链开发。主要技术特点包括:1) 使用本地文件存储实现账号永久保存与状态管理;2) 集成Libfont.a字库实现安全密码输入;3) 随机数生成验证码实现密码找回;4) BMP图片处理实现刮刮乐游戏图层效果;5) 触摸屏交互设计实现全流程操作。项目界面包含登录注册、密码找回、游戏主界面等交互模块等
2025-06-02 20:32:49
1187
原创 在GEC6818上使用字库
文章介绍字库使用与字符串处理函数。字库使用包括初始化、设置大小、输出框等操作及编译指令;字符串处理函数有 strstr、strlen、strtok 等,介绍了各函数功能、头文件、原型、参数、返回值、注意事项及示例。
2025-06-02 20:06:42
818
原创 嵌入式Linux C初步2
摘要:本文介绍了嵌入式技术的基本概念,重点讲解了文件操作在Linux系统中的实现方法。主要内容包括:1)嵌入式技术定义,即软硬件结合将应用程序移植到硬件平台;2)文件存储的必要性,解释了如何通过文件IO实现数据持久化;3)Linux系统的文件分类(7种)及其特性;4)文件操作API(open/close/read/write/lseek)的使用方法和注意事项;5)文件描述符的本质及其管理机制。文中通过多个代码示例详细演示了文件读写、偏移量控制等核心操作,为嵌入式开发中的文件处理提供了实用指导。
2025-06-02 19:54:16
834
原创 切割算法在GEC6818开发板的使用
摘要:本文介绍了图像处理和图形绘制的两个技术实现。第一部分展示了绘制蓝色圆形的方法,给出了圆的数学公式(x-x0)²+(y-y0)²=r²,示例为半径50的居中蓝圆。第二部分详细说明图像缩小算法,通过每隔4行取一行像素,每4个像素取一个点的方式将800×480图像缩小为200×120,并提供了具体代码实现。最后介绍了如何在指定位置显示缩小后的图像。
2025-06-02 19:36:30
212
原创 基于GEC6818开发的弹跳球小游戏
本文介绍了一个基于GEC6818嵌入式Linux平台的弹跳球游戏实现。游戏采用C语言开发,运用多线程技术控制小球运动和板子交互,支持LCD图形渲染和触摸屏操作。系统架构包括小球运动模块(模拟反弹效果)、板子控制模块(读取触摸屏坐标)和碰撞检测模块(判断小球与板子接触)。关键技术涉及mmap内存映射实现高效屏幕操作、pthread多线程同步、触摸屏事件处理等,并通过速度分级和排行榜功能增强游戏体验。该项目为嵌入式图形应用开发提供了实用参考,未来可扩展更多游戏元素和交互功能。
2025-06-02 19:24:22
1278
原创 GEC6818开发板的多线程使用
本文介绍了Linux多线程编程的基本方法,重点讲解了pthread_create()、pthread_join()等线程操作函数的使用。通过斐波那契数列计算示例,展示了如何创建两个线程分别计算数列不同项,并通过pthread_join()获取计算结果。文章分析了多线程并行计算的优势,如提升CPU利用率、缩短计算时间等,并指出在CPU多核情况下双线程计算速度可接近单线程的两倍。最后总结了线程安全、参数传递和返回值处理等注意事项。编译时需添加-pthread参数链接线程库。
2025-06-02 19:01:24
428
原创 在GEC6818的LCD屏幕显示颜色
摘要:本文介绍了Linux系统如何将LCD设备抽象为文件进行操作。LCD设备文件(如/dev/fb0)包含分辨率(如800×480像素)、像素结构(ARGB四字节)等信息。通过文件IO可以控制LCD显示,示例代码演示了如何打开设备文件、写入颜色数据(如全屏红色)并关闭文件。还展示了如何绘制法国国旗(三色垂直条纹),通过分区写入蓝、白、红三色实现。核心原理是将硬件操作转化为文件读写,体现了Linux“一切皆文件”的设计思想。
2025-06-02 18:42:30
308
原创 嵌入式GEC6818的触摸屏使用
本文介绍了Linux触摸屏编程的基本原理和实现方法。主要内容包括:1)触摸屏事件处理,通过/dev/input/event0设备文件读取输入事件;2)input_event结构体解析,包括事件类型(EV_KEY/EV_ABS)、编码(BTN_TOUCH/ABS_X/ABS_Y)和值;3)提供了两个示例代码,分别演示如何处理压力事件(触摸状态)和坐标事件(位置信息),其中针对不同屏幕分辨率(800×480和1024×600)进行了坐标比例调整。这些代码展示了如何通过底层输入子系统实现触摸屏的基本交互功能。
2025-06-02 18:38:54
382
原创 在嵌入式GEC6818的LCD上显示BMP图片并制作电子相册
摘要:本文介绍了如何在嵌入式系统中通过LCD显示BMP图片。主要内容包括:1)主流图片格式对比;2)BMP文件结构解析(54字节头数据+颜色数据);3)正确获取800*480分辨率BMP图片的方法;4)使用mmap内存映射技术将BMP像素数据写入LCD帧缓冲区的完整C代码实现。重点说明了BGR转RGB格式的数据处理过程,以及通过内存映射提高显示效率的关键技术。代码示例展示了从文件读取、数据转换到屏幕显示的全流程实现。
2025-06-02 18:34:23
462
1
原创 GEC6818开发板(教学板)
GEC6818是基于三星S5P6818芯片(ARM Cortex-A53)的教学开发板,配备1GB RAM和8GB存储,支持Linux系统。文章介绍了开发板的使用方法:连接电源和串口线,安装驱动,通过SecureCRT进行通信。重点讲解了代码编译和文件传输流程,强调使用arm-linux-gcc编译ARM架构程序,并通过rx命令或tftp工具传输文件。此外还提供了U盘传输(FAT32/NTFS格式支持)和网络传输配置方法,以及中文乱码解决方案。文章最后附上作者GitHub项目地址。
2025-06-01 22:45:43
2242
1
原创 GEC6818的Linux环境安装
本文介绍了在Windows系统下通过WSL安装和使用Ubuntu 18.04 Linux子系统的详细步骤。内容包括:1) WSL的基本概念和安装方法;2) 设置WSL1版本的命令操作;3) 从微软商店下载安装Ubuntu 18.04的流程;4) 系统配置步骤,包括更新软件源、安装gcc编译器;5) 交叉编译链arm-linux-gcc的安装和使用方法,用于开发ARM架构程序;6) 常见问题处理方法,如Ubuntu闪退的解决方案。文中所有工具和环境都包含在WSL.zip压缩包中,并提供了详细的操作命令说明。
2025-06-01 22:25:37
953
1
原创 Linux C的命令学习
删除文件夹:rm + 空格 + 目标文件夹 + 空格 + -ls -a// all显示所有的文件,包含隐藏文件。删除文件: rm + 空格 + 目标文件。移动(重命名)文件: mv + 空格 + 目标文件 + 空格 + 目标路径。-rwxrwxrwx: r 读权限(read)、w写权限(write)、x执行权限(execute)./// 上一级路径。复制文件: cp + 空格 + 目标文件 + 空格 + 拷贝的路径。复制文件夹:cp + 空格 + 目标文件夹 + 空格 + 拷贝的文件夹的名字 + -
2025-06-01 22:05:18
849
1
原创 嵌入式Linux C初步1
本文系统梳理了C语言的核心知识点,主要包括:1)C语言框架(main函数与文件结构);2)数据类型(基本/非基本类型及格式说明);3)变量定义规则与内存分配;4)全局/局部变量区别;5)运算符分类;6)常量定义方式;7)控制流结构;8)函数分类与自定义方法;9)指针概念与操作;10)数组定义与指针关联;11)结构体定义与使用。全文采用模块化讲解方式,覆盖C语言编程基础要点,为学习者提供结构化复习指南。
2025-06-01 21:47:40
888
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅