- 博客(64)
- 收藏
- 关注
原创 基于 MX6UL 的 DHT11 温湿度传感器 驱动开发
设备树:重点关注compatible匹配、GPIO 编号、引脚复用配置;驱动层:时序精准性(自旋锁保护、延迟函数选择)、数据校验、混杂设备简化注册;应用层:通过标准字符设备接口与驱动交互,逻辑简洁。
2026-04-28 10:50:02
577
原创 基于 i.MX6UL 的 DS18B20 温度传感器驱动
设备树引脚配置需兼顾 “复用模式” 和 “电气特性(上拉)”;单总线时序是驱动的核心,必须严格遵循 DS18B20 的数据手册;Linux 驱动框架(misc+platform)的合理使用,可大幅简化设备管理;调试时优先通过内核日志定位问题,硬件上拉电阻是最易忽略的关键项。
2026-04-28 10:37:31
358
原创 基于 imx6ull平台按键驱动开发:input子系统+中断子系统+platform总线
本文基于 MX6UL 平台,完整实现了 “设备树 + 平台驱动 + input 子系统 + 中断 + 消抖” 的按键驱动开发流程。
2026-04-25 17:15:30
523
原创 基于 Linux SPI 子系统的 ADXL345 加速度传感器驱动开发
本文从设备树配置、内核驱动开发、应用层测试三个维度,讲解了 ADXL345 SPI 驱动的实现过程。设备树需严格匹配驱动的compatible和 SPI 时序;Linux SPI 子系统的spi_driver和miscdevice简化了驱动开发;内核与用户空间数据交互必须使用;硬件时序和连接是 SPI 通信成功的关键。
2026-04-25 16:49:26
421
原创 I2C 总线框架下LM75A 温度传感器 Linux驱动开发:
Linux I2C 驱动开发需遵循 “设备树匹配 + probe 函数初始化 + 字符设备封装” 的核心逻辑;LM75A 的 I2C 通信需先发送寄存器地址,再读取数据,数据解析需结合传感器寄存器规范;杂项设备(misc)是简化字符设备开发的高效方式,无需手动管理主设备号;驱动与应用层的数据交互需通过,避免直接访问用户空间。
2026-04-25 16:36:29
416
原创 IMX6ULL Linux 驱动开发:GPIO 子系统 + misc 框架实现按键输入驱动开发
c运行// 保存从设备树解析出的GPIO编号,全局供read接口使用gpiokeynum为全局静态变量,在驱动入口函数中完成 GPIO 编号的解析与赋值,在 read 接口中用于读取引脚电平。c运行.minor = MISC_DYNAMIC_MINOR, // 内核自动分配次设备号.name = "key_misc", // 设备节点名,注册成功后生成/dev/key_misc.fops = &fops, // 绑定文件操作集这是 misc 驱动的结构体。
2026-04-14 23:51:32
566
原创 i.MX6ULL 平台 Linux 字符设备驱动:LED 驱动解析
c运行// 驱动私有数据指针,静态变量限制作用域仅在本文件内这里仅定义了一个静态的结构体指针,所有资源都在入口函数中动态申请,而非定义全局结构体变量。本文拆解的 LED 驱动,虽然功能简单,却完整覆盖了 Linux 字符设备驱动开发的所有核心知识点:从设备号管理、cdev 字符设备注册,到用户 / 内核空间数据交互、硬件寄存器映射、并发竞态保护、sysfs 调试节点、设备节点自动创建,完全遵循 Linux 内核驱动的开发规范和字符设备驱动框架。
2026-04-14 23:24:36
380
原创 IMX6ULL Linux 驱动开发流程:从环境搭建到系统启动与内核编译
嵌入式 Linux 驱动开发的核心,是建立「硬件平台 - 引导程序 - 内核 - 根文件系统 - 用户程序」的完整链路认知,本文覆盖的环境搭建、系统启动流程、内核编译、根文件系统制作,是所有外设驱动开发的基础。
2026-04-12 20:52:23
711
原创 i.MX6ULL 裸机 ECSPI 驱动开发详解:
通信前拉低 CS,通信全程保持 CS 低电平,通信结束后拉高 CS。c运行// 拉低片选,选中ADXL345// 拉高片选,取消选中本文从零实现了 i.MX6ULL ECSPI3 的主机模式裸机驱动,基于 SPI 全双工特性设计了通用的读写接口,完整覆盖了引脚配置、寄存器时序、实际使用的全流程。
2026-04-12 19:58:04
512
原创 IMX6ULL 裸机开发:RGB LCD 显示与 PWM 背光控制
头文件完成了帧缓存地址定义、LCD 设备结构体封装、驱动函数声明,是整个驱动的基础。c运行// 帧缓存首地址,确保内存连续且未被占用// LCD设备结构体,封装屏幕所有参数,提高可移植性// 屏幕宽度(像素)// 屏幕高度(像素)// 单像素字节数// 行时序参数// 场时序参数// 前景色// 背景色// 帧缓存首地址// 驱动函数声明代码说明帧缓存地址0x89000000。
2026-04-08 22:03:39
436
原创 IMX6ULL ADC 驱动开发解析:
ADC 的全称是 Analog-to-Digital Converter,即模拟 - 数字转换器,它的核心作用是将连续变化的模拟电压信号,转换为数字系统可以识别、处理的离散数字信号。完整的物理量采集链路如下:现实世界的温度、压力、光照等物理量,首先通过传感器转换为对应的模拟电压信号,再由 ADC 将模拟电压转换为二进制数字量,最终送入 MCU 等数字系统进行计算、显示、控制等操作。
2026-04-07 22:32:47
557
1
原创 IMX6ULL 平台 I2C 总线:从硬件原理到裸机驱动
本文实现的 IMX6ULL I2C 裸机驱动,兼顾了通用性和可移植性,兼容多字节寄存器地址,通过统一的传输接口,可快速适配 OLED、RTC、加速度传感器等绝大多数 I2C 外设。
2026-04-07 22:11:15
672
原创 IMX6ULL UART 串口开发解析:
这篇文章就以 IMX6ULL 平台为基础,从最底层的通信概念讲起,一步步拆解原理图、寄存器配置、驱动代码编写,再到标准 stdio 库移植和实战命令控制。
2026-03-31 22:21:03
712
原创 从启动到中断:基于i.MX6UL的ARM Cortex-A7中断系统详解
层次组件作用硬件层GIC、GPIO中断信号的产生和分发汇编层向量表、现场保存/恢复中断入口和退出管理层中断注册和分发设备层gpio_init具体外设中断配置理解这一层次结构,对于嵌入式系统开发者来说至关重要。在调试中断相关问题时,可以按照这个层次逐一排查:先检查硬件引脚配置,再确认GPIO中断使能,然后验证GIC配置,最后检查向量表是否正确定位。这种结构化思维能显著提高调试效率。
2026-03-30 21:28:15
662
原创 IMX6ULL 时钟系统配置与定时器 (EPIT/GPT)
时钟是嵌入式系统的心脏,所有外设的运行都离不开时钟信号。做 IMX6ULL 裸机开发,第一步就是把时钟树搞明白,把系统时钟配置好,后面的 GPIO、串口、定时器、SPI 这些外设,才能正常工作。EPIT 和 GPT 是最基础的两个定时器,EPIT 适合做固定周期的中断任务,GPT 适合做精准的硬件延时,这两个工具掌握了,后面做按键消抖、传感器数据采集、PWM 输出、串口超时判断这些功能,都能得心应手。
2026-03-30 21:09:55
794
原创 ARM 架构知识解析:从基础概念,到指令集,再到异常处理
本文将基于 ARM 架构的基础知识点,从指令集架构、核心寄存器、硬件功能单元、总线体系、存储系统、编译流程、工作模式与异常处理等进行拆解,同时搭配原理示意图帮助理解。
2026-03-24 20:53:25
707
原创 依赖51 单片机的 Modbus 协议温度采集与外设控制系统的实现
模块化设计:将 UART、DS18B20、LED、Modbus 等功能拆分为独立模块,便于维护和扩展;中断驱动:UART 接收采用中断方式,避免主循环阻塞,提升实时性;轻量化协议:自定义 Modbus 帧格式适配 51 单片机资源,简化校验逻辑。
2026-03-23 20:18:08
726
原创 通信概念,51UART的使用,以及MODBUS的简单应用
使用SCL(时钟线)和SDA(数据线)两根线。半双工,支持多主多从,通过设备地址寻址。适合连接多个低速设备,如传感器、EEPROM。协议特点适用场景UART简单、异步、全双工调试、模块通信I2C两线、半双工、多设备传感器、EEPROMSPI高速、全双工、片选显示屏、SD卡CAN差分、多主、高可靠汽车电子、工业控制Modbus主从、应用层协议工业自动化。
2026-03-21 22:39:41
687
原创 51单片机:硬件基础、开发工具与核心外设详解
51单片机作为嵌入式入门的经典芯片,虽然架构简单,但它包含了微控制器最核心的组成部分:CPU、RAM、ROM、定时器、中断、UART等。本文基于实际学习笔记整理,结合代码示例与硬件图示,带你快速上手51单片机开发。MCU(Microcontroller Unit,微控制器)将CPU、RAM、ROM、定时器、I/O接口等集成在一块芯片上,成本低、功耗小,适用于控制类应用。
2026-03-20 20:40:46
624
原创 用C语言制作一个简易HTTP服务器:实现手机商城用户认证与搜索
通过这个项目,亲手实现了一个包含网络通信、HTTP协议解析、数据库操作和前端交互的简易Web服务器。虽然最终的成果存在诸多安全漏洞和功能缺陷,或者玩笑话的讲又花了点时间做了个玩具,但正是这些不足让我更深刻地理解了生产级Web服务器需要关注的诸多问题,以及认识到了未来的路还有很长。Socket编程与epoll事件驱动模型HTTP报文结构及手动解析方法SQLite3嵌入式数据库的基本使用前后端分离的简单重定向交互建议读者在此基础上,逐步完善,打造一个更安全、更完整的HTTP服务器。
2026-03-15 17:21:33
724
原创 用C语言和SQLite构建一个轻量级英汉词典
希望通过本文的分析,能帮助大家更好地理解这段代码,也欢迎读者在此基础上继续完善,打造属于自己的词典工具。int flag;}mean_t;ptmp = arg;return 0;if(ret!return -1;");if(ret!return -1;return -1;rewind(fd);");if(ret!return -1;if(ret!
2026-03-10 19:39:14
601
原创 SQLite数据库:终端命令使用和C程序调用
函数说明打开数据库文件,返回数据库句柄返回最近错误的英文描述执行一条 SQL 语句,对于 SELECT 可通过回调函数处理结果集释放由 SQLite 分配的内存(如 errmsg)关闭数据库连接。
2026-03-09 20:45:46
857
原创 TCP并发服务器:poll和epoll的多路复用
阻塞I/O:进程调用recvfrom等系统调用后,数据未准备好时进程阻塞,直至数据到达内核并复制到用户空间。非阻塞I/O:通过设置文件描述符为非阻塞,调用后立即返回,若数据未准备好则返回EAGAIN错误,需要轮询。I/O多路复用:使用selectpollepoll同时监视多个描述符,当其中任何一个就绪时通知应用程序,再由应用程序调用相应的I/O操作。异步I/O:应用程序发起操作后立即返回,内核完成所有操作(数据拷贝到用户空间)后通知进程。其中,I/O多路复用是构建高并发网络服务器的核心技术。
2026-03-07 18:06:13
683
原创 TCP并发服务器与I/O多路复用(select)
多线程/多进程模型为每个客户端创建一个独立的线程或进程,在每个线程内部使用阻塞I/O。这样,一个客户端的阻塞不会影响其他客户端。优点:编程简单直观。缺点:资源开销大(每个连接占用一个线程/进程),当连接数巨大时系统难以承受。I/O多路复用模型通过一个系统调用同时监视多个文件描述符,一旦某个描述符就绪(可读/可写/异常),就通知应用程序进行处理。优点:只需一个线程即可管理大量连接,资源消耗小。缺点:编程相对复杂。通过select。
2026-03-06 21:09:07
848
原创 基于C语言和HTTP API的天气查询客户端实现与分析
本文通过一个简单的天气查询客户端,回顾了C语言网络编程的基础知识,包括Socket使用、HTTP协议交互、字符串处理等。同时揭示了代码中存在的安全风险、健壮性问题和可维护性缺陷。在实际开发中,应遵循安全编码规范,使用合适的库函数,并充分考虑网络通信的复杂性和数据的可变性。通过重构和优化,可以将这个简陋的示例转化为可靠、可扩展的应用程序。希望这篇博客能帮助读者加深对C网络编程的理解,并在实践中写出更高质量的代码。
2026-03-05 22:30:55
972
1
原创 Linux软件编程:TCP通信
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它在网络编程中广泛应用于需要可靠数据传输的场景,如文件传输、网页访问、邮件传输等。TCP通过三次握手建立连接,通过四次挥手释放连接,并提供了确认机制、流量控制、拥塞控制等功能,保证数据有序、无差错、不重复地传输。在Linux系统中,TCP网络编程主要通过套接字(Socket)接口实现。
2026-03-04 21:37:59
721
原创 Linux软件编程:UDP通信与Wireshark抓包调试技术
UDP通信简单高效,适合对实时性要求高、允许少量丢包的场景。通过Linux套接字编程,我们可以快速实现UDP客户端/服务器。而Wireshark作为抓包利器,能直观呈现网络协议细节,是调试网络程序的必备工具。理解UDP协议头部和编程接口,结合抓包分析,可以深入掌握网络通信原理。
2026-03-03 20:28:11
650
原创 基于Mplayer的媒体播放器管理软件实现
本项目通过C语言和Linux系统编程,实现了一个功能完备的终端媒体播放器管理软件。它展示了如何利用外部播放器(Mplayer)的slave模式进行进程间控制,如何管理播放列表,以及如何通过信号实现自动播放。尽管项目存在一些细节问题(如信号处理安全性、gets的不安全使用),但作为学习示例和原型系统,它已经能够稳定运行。未来可改进的方向包括:使用动态数据结构管理播放列表,支持更多文件。采用epoll或select同时处理终端输入和串口输入。增加对音乐元数据的读取和显示(如歌名、艺术家)。
2026-03-02 21:30:10
756
原创 Linux软件编程:网络编程的一些基本概念
协议是通信双方约定的一套标准,它定义了数据格式、传输规则等,确保不同设备之间能够正确交换信息。本文从网络协议基础出发,介绍了 OSI 和 TCP/IP 模型、IP 地址与子网掩码、Linux 网络配置命令,并重点讲解了 UDP 通信编程中几个关键函数的使用。掌握这些知识后,你可以进一步探索 TCP 编程、多线程并发服务器等更复杂的内容。通过实践编写简单的 UDP 程序,并配合ifconfig和ping命令调试网络,能够帮助你快速入门 Linux 网络编程。
2026-03-02 21:13:25
851
原创 Linux软件编程:进程间通信(消息队列、共享内存与信号灯)
IPC方式特点适用场景消息队列消息有类型,可选择性接收;内核维护队列;数据有边界。需要按类型分类处理的通信,如客户端-服务器。共享内存最快,无需数据拷贝;但需要同步机制。大量数据交换,配合信号灯使用。信号灯用于同步与互斥,可操作多个信号量。控制对共享资源的访问,实现进程同步。这三种IPC方式灵活强大,但也需要谨慎管理资源(及时删除IPC对象),避免内存泄漏和死锁。熟练掌握它们,将为你的Linux系统编程打下坚实基础。作业练习利用消息队列实现两个进程的聊天功能。
2026-02-27 20:43:57
830
原创 Linux软件编程:进程间的管道通信以及信号通信
数据共享:多个进程需要访问共同的数据任务协作:多个进程协同完成复杂任务模块解耦:不同功能模块运行在不同进程中,通过通信进行交互通知事件:一个进程需要通知另一个进程某些事件的发生Linux系统支持多种进程间通信方式:管道(Pipe):最简单、最方便的通信方式无名管道:只能用于具有亲缘关系的进程间通信有名管道:可用于任意进程间的通信信号(Signal):用于通知进程发生了某种事件消息队列(Message Queue):以消息形式进行数据交换共享内存(Shared Memory):最高效的通信方式信号灯(Sema
2026-02-26 20:36:43
854
原创 Linux软件编程: 线程属性与线程间通信详解
线程属性决定线程的回收方式互斥锁解决资源竞争问题信号量实现线程同步合理组合这些机制可以实现复杂的多线程应用掌握这些知识对于编写高效、稳定的多线程程序至关重要。
2026-02-25 20:26:39
798
原创 Linux软件编程: 进程管理进阶以及线程管理
/ 使用PATH搜索。// 不会输出"Hello"// 会输出"Hello":进程退出状态,通常0表示正常,非0表示异常。:占用内核进程表项,若大量僵尸进程会导致无法创建新进程。:阻塞等待指定线程结束,并回收其资源,获取退出状态。:结束当前线程,可返回一个指针(指向退出状态)。:可指定等待某个子进程,并可设置为非阻塞模式。:成功不返回,失败返回-1并设置errno。:成功返回0,失败返回错误码(非-1)。:成功返回子进程PID,失败返回-1。
2026-02-11 18:13:17
871
原创 Linux软件编程:进程管理
静态的,存储在硬盘上的指令和数据的集合。:程序的一次执行过程,是系统进行资源分配和调度的基本单位,具有创建、执行、调度和终止的生命周期。
2026-02-10 20:49:28
921
原创 Linux IO编程函数接口对比表
特性标准IO文件IO目录IO头文件<stdio.h><fcntl.h><unistd.h><dirent.h>缓存有缓存(全/行/无)无缓存无缓存接口类型库函数系统调用库函数/系统调用操作对象文件流(FILE*)文件描述符(int)目录流(DIR*)适用场景普通文件设备文件、通信文件目录文件性能较高(有缓存)较低(无缓存)中等移植性高(ANSI C标准)较低(POSIX标准)较低(POSIX标准)使用难度较低较高中等。
2026-02-09 20:40:53
701
原创 Linux软件编程:IO编程,文件IO,目录IO,以及一些常用的时间函数接口
text│ Linux IO系统 ││ │ 标准IO │ │ 文件IO │ ││ │ (库函数) │ │ (系统调用) │ ││ │ 目录IO │ │。
2026-02-09 20:30:59
977
原创 Linux软件编程:IO编程,标准IO(2)
适合处理二进制文件,如图片、音频等。fseek可用于随机访问文件内容。rewind是快速回到文件开头的便捷方式。这些函数是Linux C编程中文件处理的核心工具,掌握它们能让你更高效地操作文件系统。
2026-02-07 20:41:34
1010
原创 Linux软件编程:IO编程,标准IO(1)
流名称文件指针文件描述符缓存类型用途标准输入stdin0行缓存键盘输入标准输出stdout1行缓存屏幕输出标准错误stderr2无缓存错误输出统一文件模型:Linux将所有I/O对象抽象为文件三层I/O体系:标准I/O(缓存)、文件I/O(无缓存)、目录I/O缓存机制:理解全缓存、行缓存、无缓存的区别与应用场景错误处理:始终检查I/O函数返回值,使用perror/strerror。
2026-02-06 20:27:57
948
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅