自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(61)
  • 收藏
  • 关注

原创 【I2C设备驱动专题】概念介绍、与LM75、BH1750传感器实现

本文介绍 I²C 总线原理与 Linux 下 I2C 传感器驱动开发。I²C 为板级低速同步串行总线,仅 SCL、SDA 两根信号线,支持多主多从架构,包含起始、停止、应答等基础时序与 7 位寻址机制。文章讲解 Linux I2C 子系统分层框架,分离适配器总线驱动与外设设备驱动。以 LM75 温度传感器、BH1750 光照传感器为例,介绍器件参数、通信指令,基于 i2c 子系统与 misc 杂项设备完成驱动编码,展示设备树配置、i2c 接口函数调用与数据读取实现,适合嵌入式 Linux 驱动入门学习。

2026-10-22 11:08:35 377

原创 【Linux驱动开发】platform驱动框架详解

本文介绍 Linux platform 虚拟总线驱动框架,该框架将硬件资源信息与驱动代码解耦。设备树普及后,内核解析 DTS 自动生成 platform_device。文章阐述设备与驱动的五层匹配规则,梳理匹配后 probe 函数的调用流程,对比 platform 架构与直接解析设备树的区别。并基于 imx6ull 平台,给出 platform 结合 misc 子系统编写 LED 驱动的完整示例,讲解驱动开发步骤与资源管理要点。

2026-10-21 12:34:12 389

原创 【Linux驱动开发】input子系统详解

Linux input 子系统在 2.4 内核引入,统一管理按键、触摸屏等输入设备,采用三层架构实现软硬件解耦。底层驱动上报事件,input-core 完成分发,通过 evdev 提供 /dev/input/eventX 设备节点。本文介绍其原理与常用接口,以 GPIO 按键为例,讲解带中断消抖的内核驱动编写,搭配用户态程序读取并解析 input 事件。

2026-10-20 13:24:58 360

原创 【Linux驱动开发】内核定时器与延时函数详解

本文基于 Linux 中断按键驱动,针对按键电平毛刺引发误触问题,讲解硬件与软件消抖方案。重点剖析内核`timer_list`定时器原理、jiffies 节拍、定时器 API 与使用方法,区分忙等待 delay 和睡眠型延时函数。结合杂项设备、设备树、中断 + 定时器,实现带软件消抖的按键驱动代码。

2026-10-19 12:00:00 536

原创 【Linux驱动开发】并发控制(原子操作、自旋锁等)

在 Linux 设备驱动开发中,多核、中断与进程调度会引发并发竞态,造成共享资源访问出错。本文系统讲解内核并发控制机制,依次介绍原子操作、自旋锁、信号量、互斥体、完成量的原理、常用 API,并配套内核线程驱动代码示例。对比各类机制差异:原子操作用于整型变量无锁保护;自旋锁为忙等待,支持中断上下文;信号量、互斥体可休眠,适合长时间临界区;完成量专注任务事件同步。同时梳理适用场景与上下文约束,为驱动开发中共享资源的互斥与同步提供选型参考。

2026-10-18 10:53:54 521

原创 【Linux驱动开发】中断、工作队列及中断子系统详解

本文基于 pinctrl 与 gpio 子系统,讲解 Linux 中断、等待队列及中断子系统。借助设备树编写按键中断驱动,通过等待队列实现阻塞读取。介绍中断顶 / 底半部,对比软中断、tasklet、工作队列,区分不同内核上下文特性,并提供集成 tasklet 与工作队列的完整按键驱动代码,掌握中断驱动分层开发思路。

2026-10-17 22:08:33 476

原创 【Linux驱动开发】pincrtl子系统与gpio子系统

本文延续 Linux 设备树驱动内容,讲解 Linux 驱动设计三大核心思想:面向对象、设备与驱动分离、驱动分层。重点介绍 pinctrl 与 GPIO 两大子系统,pinctrl 负责引脚复用与电气特性配置,GPIO 子系统统一引脚读写接口。结合 i.MX6ULL 平台设备树语法与 GPIO 常用 API,改写 LED 驱动示例,不再直接操作寄存器。理清两个子系统协作关系,同类按键、蜂鸣器驱动可复用这套开发思路,同时提示开发中需要注意引脚冲突问题。

2026-10-15 21:54:01 449

原创 【Linux驱动开发】设备树详解,基于设备树实现LED与按键驱动

本文在上篇 misc 杂项 LED 驱动基础上,本文引入 Linux 设备树,讲解设备与驱动分离思想。介绍 dts/dtsi/dtb 文件、设备树节点与核心属性,梳理 dtb 编译、内核加载流程,列举常用 OF 接口函数。以 IMX6ULL 平台为例,讲解在设备树添加节点,读取 reg 寄存器并完成物理地址映射,利用 misc 驱动框架实现按键驱动。同时给出完整按键驱动源码,可通过 sysfs 查看按键状态,帮助理解设备树如何剥离硬件寄存器信息,简化跨平台驱动开发。

2026-10-14 21:44:21 586

原创 【Linux驱动开发】sys文件系统与misc设备驱动(LED驱动完善)

本文在 LED 字符设备驱动基础上,讲解 Linux sysfs 文件系统与 misc 杂项设备驱动。介绍 sysfs 原理、核心目录作用,利用`class_create`、`device_create`实现设备节点自动生成;通过`device_create_file`搭建 sys 调试节点,借助 cat/echo 完成用户态与内核态交互。同时梳理字符设备、块设备常用主设备号信息。misc 本质是主设备号 10 的特殊字符设备,可简化驱动开发,替代设备号申请、cdev 初始化、设备类创建等步骤,减少驱动代码

2026-10-13 12:34:02 444

原创 【Linux驱动开发】字符设备介绍 | LED灯驱动基本实现(自动申请设备号+手动添加节点)

本文基于 IMX6ULL 开发板,讲解 Linux 字符设备 LED 驱动完整开发流程。先梳理字符设备驱动三大核心数据结构`cdev`、`file_operations`、`dev_t`,介绍设备号申请、cdev 注册等基础 API。结合 LED 硬件原理图与寄存器地址,使用`ioremap`完成物理地址映射,编写驱动 open/write 回调函数,实现应用层控制 LED 亮灭。配套用户态测试程序,分析设备树 LED 节点冲突问题并给出解决办法。

2026-10-12 15:57:46 362

原创 【Linux驱动开发】驱动介绍及驱动工程搭建

本文基于 IMX6ULL 平台,在完成 Linux 系统移植基础上,开启 Linux 驱动开发学习。首先讲解驱动本质,区分字符、块、网络三类设备驱动的特性与适用硬件;介绍 ctags、cscope、clangd 等内核代码检索工具。重点阐述驱动两种编译加载方式:静态加载编译进 zImage,开机自动运行;动态加载生成独立 ko 模块,可动态装卸,无需重烧内核。同时讲解 Kconfig、.config、Makefile 三者作用与工程搭建方法,并给出内核树内外驱动工程实例,帮助读者快速搭建驱动开发环境。

2026-10-11 20:00:23 393

原创 【IMX6ULL Linux系统移植】内核编译裁剪 + rootfs 构建 + 完整启动流程梳理

本文基于 IMX6ULL 平台,承接上篇 U‑Boot 相关内容,讲解 Linux4.1.15 内核编译裁剪与设备树编译,说明 U‑Boot 跳转内核的硬件约束,梳理内核从汇编入口到用户进程的启动过程。介绍 NFS 挂载根文件系统,使用 Busybox 构建最小 rootfs,完成库拷贝与系统配置。完整梳理 BootROM‑SPL‑U‑Boot‑内核‑根文件系统的启动全流程,理清嵌入式 Linux 系统移植核心脉络。

2026-10-10 22:20:32 426

原创 【IMX6ULL Linux系统移植】SD卡分区 | uboot详解

本文基于 IMX6ULL 平台,讲解 SD 卡分区布局与 Linux 系统启动链路,剖析 U-Boot 编译、烧录与常用交互命令、环境变量配置。梳理从 Boot ROM、U-Boot 一 / 二阶段直至 bootz 启动内核的完整流程,结合 u-boot.lds 链接脚本与源码,追踪`_start`、`reset`、`board_init_f/r`等核心函数。同时介绍 U-Boot 通过寄存器、bootargs 向 Linux 内核传递启动参数的原理,为嵌入式 Linux 驱动开发与内核裁剪打下基础。

2026-10-08 23:54:56 479

原创 【IMX6ULL Linux系统移植】从零搭建 Linux 移植开发环境,多种系统烧录方式详解

本文基于 IMX6ULL 开发板开展 Linux 系统移植实战,在裸机开发基础上,介绍 U‑Boot、内核镜像、设备树、根文件系统四大组件作用与开发板多种启动方式。详细讲解 VMware 虚拟机 Ubuntu 双网卡配置,完成 minicom 串口、TFTP、NFS 服务器搭建。介绍 SD 卡、EMMC 等多种系统烧录方案,重点讲解开发常用的 U-Boot+TFTP 加载内核 + NFS 挂载根文件系统调试模式,为后续 U-Boot 深入学习与 Linux 驱动开发打下基础。

2026-10-07 22:01:24 410

原创 【ARM 裸机开发 (IMX6ULL-mini)】PWM 背光调节与 GT9147 多点触摸驱动

本文基于 IMX6ULL-mini 裸机开发,实现 LCD 背光 PWM 调光与 GT9147 电容触控驱动。介绍 IMX6ULL PWM 模块原理、引脚复用及寄存器配置,借助 FIFO 中断动态调整占空比,控制屏幕亮度。基于 I2C2 通信驱动 GT9147,完成芯片复位、ID 识别与触控中断配置,读取多点触摸坐标并在 LCD 上显示,完成显示与触控基础裸机驱动。

2026-09-29 22:50:30 851

原创 【ARM 裸机开发 (IMX6ULL-mini)】RGB-LCD 驱动与时序详解

本文基于 IMX6ULL 裸机开发,讲解 LCD 驱动原理与代码实现。先介绍 LCD 基础概念:分辨率、像素格式、色深、显存,对比 CRT 扫描机制,解析行场同步信号 HSYNC、VSYNC、DE 以及 HBP/HFP/VBP/VFP 时序。以 4.3 寸 800×480 ATK4384 屏幕为例,计算像素时钟,配置 PLL5 得到 31MHz 像素时钟;完成 LCD 引脚初始化、LCDIF 寄存器配置,实现清屏与画点基础函数,并介绍小型图像库移植思路。

2026-09-28 22:57:49 494

原创 【ARM 裸机开发 (IMX6ULL-mini)】SPI 协议与ADXL345 三轴加速度传感器

本文在 IMX6ULL-mini 平台讲解 SPI 通信,介绍四线 SPI 引脚、CPOL/CPHA 时序模式,解析 ECSPI 的 FIFO 与关键寄存器。以 ADXL345 三轴加速度传感器为实战对象,该器件使用 SPI 模式 3,读寄存器地址最高位置 1。完成 SPI3 引脚复用与初始化,编写底层读写函数,实现 ADXL345 裸机驱动,读取三轴加速度原始数据并换算 g 值,为嵌入式 SPI 外设驱动开发提供实践参考。

2026-09-27 21:33:17 589 1

原创 【ARM 裸机开发 (IMX6ULL-mini)】嵌入式 ADC 原理及 IMX6ULL 实战开发

ADC是嵌入式设备采集模拟信号的核心外设,可将温度、电压等连续模拟量转换为单片机能识别的数字量。本文详细讲解ADC核心工作原理、采样量化流程与逐次逼近算法,聚焦IMX6ULL芯片ADC模块,介绍其硬件架构、通道分配、关键寄存器功能及硬件校准、均值滤波等特性。同时结合光敏电阻采集实战,讲解引脚配置、参数初始化、软件触发采样、电压换算的完整流程,并提供可直接复用的驱动源码,帮助开发者快速掌握IMX6ULL ADC开发技巧。

2026-09-26 13:10:46 441

原创 【ARM 裸机开发 (IMX6ULL-mini)】I2C协议详解

本文基于 IMX6ULL-mini 开发板,完成串口格式化函数移植与 I2C 驱动开发。先将 printf 映射至 UART1,通过修改 Makefile、补充空 raise 函数实现格式化输出。讲解 I2C 半双工串行总线原理、时序规范与设备寻址机制,介绍 AT24C02 EEPROM 特性。分析 IMX6ULL 的 I2C 相关寄存器,配置引脚复用及时钟分频,编写 I2C 读写驱动,重点实现重复起始信号与 dummy 假读,解决数据错位问题,完成主机与 EEPROM 的 I2C 通信。

2026-09-25 20:29:50 526

原创 【ARM 裸机开发 (IMX6ULL-mini)】EPIT/GPT 定时器、 UART 串口驱动

本文基于 i.MX6ULL-mini 裸机开发,在时钟配置基础上,讲解 EPIT、GPT 定时器与 UART 串口外设原理与驱动编写。EPIT 为递减定时器,支持硬件自动重载实现周期中断;GPT 是递增定时器,利用自由运行模式实现高精度阻塞延时,同时介绍按键软件 / 硬件消抖方案。文章梳理 UART 通信分类、电平标准、流控机制,详解串口寄存器与波特率计算,配套完整裸机 C 代码,帮助掌握定时器中断、延时与串口收发,夯实 ARM 裸机外设开发基础。

2026-09-22 22:15:57 637 1

原创 【ARM 裸机开发 (IMX6ULL-mini)】中断嵌套实现、代码 OCP 改造与时钟配置

本文基于 IMX6ULL-mini 平台开展 ARM 裸机开发,针对 IRQ 模式无法中断嵌套的问题,借助 ARMv6 的 CPS 汇编指令切换处理器工作模式,实现高优先级中断抢占;结合 GIC V2 中断控制器,讲解中断抢占与子优先级配置方法。引入 OCP 开闭原则,利用函数指针数组重构中断管理代码,新增外设中断无需修改核心处理逻辑,完成代码解耦。最后介绍 IMX6ULL 时钟系统,讲解晶振、PLL、PFD 原理,分步完成 ARM 内核及总线根时钟的寄存器配置,为后续外设驱动开发打下基础。

2026-09-21 22:47:09 427

原创 【ARM 裸机开发 (IMX6ULL-mini)】中断篇:代码解耦|GIC 控制器、GPIO 外部按键中断实现

本文基于 IMX6ULL-mini 开发板继续 ARM 裸机开发,遵循高内聚低耦合思想,封装通用 GPIO 驱动,实现按键 GPIO 输入读取。对比 51 单片机中断,讲解 Cortex‑A7 的 GIC V2 通用中断控制器,介绍 SPI/PPI/SGI 三类中断。阐述 CP15 协处理器、SCTLR/VBAR/CBAR 寄存器作用,完成向量表重定向。从 GPIO 中断寄存器配置、GIC 初始化、汇编异常入口到 C 语言中断服务函数,完整实现按键外部中断,讲解裸机 IRQ 中断整套开发流程。

2026-09-20 23:50:36 528

原创 【ARM 裸机开发 (IMX6ULL-mini)】GNU工具、Makefile 工程构建、链接脚本详解|C 语言点灯 + 蜂鸣器驱动

本文为 IMX6ULL-mini ARM 裸机开发系列第二篇,介绍 GNU 工具链各组件作用,从简易 Makefile 逐步升级至支持多目录的通用工程模板,详解 lds 链接脚本与程序各内存段(.text、.rodata、.data、.bss)的布局原理。借助 NXP 官方库,摆脱手动寄存器地址宏定义,使用 C 语言完成 LED 闪烁驱动,同时基于开发板原理图实现有源蜂鸣器控制。搭建规范工程结构,解决裸机开发重复编译的低效问题,为后续外设开发打下工程基础。

2026-09-19 15:14:06 1015 1

原创 【ARM裸机开发(IMX6ULL-mini)】arm上的点灯大师:环境配置、基础知识学习及点亮LED灯

本文基于正点原子 I.MX6ULL‑MINI 开发板进行 ARM 裸机点灯实战。搭建 Windows 与 Ubuntu 文件传输环境,配置 Linaro 交叉编译工具链。基于 Cortex‑A7 异常向量表构建汇编启动框架,配置各模式栈空间;讲解 IO 复用、GPIO 寄存器、外设时钟配置,通过汇编操作 GPIO1_IO03 实现 LED 点亮。完整介绍编译、链接、格式转换及 SD 卡烧录启动流程,适合嵌入式裸机入门。

2026-09-17 22:29:55 538

原创 【ARM芯片的启动程序】汇编学习

ARM 芯片复位后无法直接运行 C 程序,需要汇编启动代码搭建 C 语言运行环境。本文讲解 ARM 汇编基础,包含程序状态寄存器 CPSR、12 位立即数判定规则,系统介绍 MOV、ADD、LDR、STR、B/BL 等常用汇编指令,说明 S 后缀作用与 CPSR 条件码。同时阐述满减栈特性、ARM 与 C 混合编程的参数传递规则,以及利用 MRS/MSR 指令切换处理器至 USER 模式的方法,为编写 ARM 启动汇编代码打下基础。

2026-09-16 22:33:18 405

原创 【初识ARM】ARM相关基础概念

本文从计算机指令集分类入手,对比 CISC 复杂指令集与 RISC 精简指令集差异,介绍 ARM 架构及其 Cortex‑A/R/M 三大内核系列适用场景。讲解 ARM 处理器核心寄存器、流水线、冯诺依曼与哈佛存储架构,AHB/APB 总线,SoC 概念。阐述汇编语言、编译流程与交叉编译原理,介绍 ARM 最小系统、RAM/ROM 区别,ARM 处理器 7 种基础工作模式,以及异常、中断向量表相关原理,系统梳理嵌入式 ARM 底层基础知识点。

2026-09-15 17:45:03 450

原创 【传感器DS18B20】51单片机上实现温度采集

本文主要介绍DS18B20 是单总线数字温度传感器,测温范围 - 55℃~125℃,精度 ±0.5℃,分辨率可配置,默认 12 位(0.0625℃),工作电压 3~5.5V,依靠一根 GPIO 实现半双工串行通信,具备线与特性。文章讲解其温度存储格式、完整采集流程,重点拆解复位、读写时序。配套 51 单片机代码,以 P3.7 作为 DQ 引脚,封装底层时序函数,实现传感器复位、字节读写,完成单节点温度采集与温度换算。

2026-09-14 18:43:17 539

原创 【51单片机通信协议】串口

本文基于 HC6800-MS 51 单片机开发板,讲解嵌入式常用通信协议 UART 串口。先区分单工、半双工、全双工三种通信方式,介绍串行与并行传输差异、UART 通信时序、波特率、TTL/RS232/RS485 电平标准。结合 51 单片机 SBUF 寄存器,讲解串口初始化流程,给出串口中断接收、数据发送代码。最后实现简易 Modbus 主从通信,上位机下发指令,单片机解析后控制 LED、数码管、蜂鸣器并向上位机回复应答,完成串口通信实战演示。

2026-09-13 12:16:34 503

原创 【51单片机】GPIO/中断/定时器/PWM

本文主要是介绍51 单片机核心基础知识点,涵盖 GPIO、按键、中断、定时器与 PWM 五大模块。先介绍 GPIO 通用输入输出原理及 51 与 STM32 的模式差异、按键检测逻辑;重点讲解中断体系,包含各类寄存器、中断源、优先级与配置流程。同时阐述 51 单片机定时器工作原理、定时计算方法及实操配置,最后说明 PWM 原理、占空比概念,搭配蜂鸣器应用案例与完整实操代码,夯实单片机底层开发基础。

2026-09-11 18:20:42 518

原创 【初识嵌入式之C51】成为点灯大师

本文从嵌入式系统基础概念讲起,区分 CPU、MCU、MPU 等各类处理器,介绍 RAM、ROM 存储器与三大总线原理,讲解外设寄存器的作用。重点学习位运算,结合 51 单片机 STC89C52RC 开发板,以共阳极 LED 点灯实验演示寄存器配置与位运算实操。还介绍三极管开关特性,以及 4 位共阴极数码管动态显示原理,是从零入门 51 单片机的基础学习材料,适合嵌入式新手搭建底层硬件与 C 语言编程基础。

2026-09-10 19:32:07 343

原创 【linux应用软件编程】数据库sqlite3

本文围绕嵌入式常用数据库 SQLite3 展开,区分关系型与非关系型数据库差异,介绍 SQLite3 开源轻量、文件型可移植等核心特性,讲解 Linux 环境下的安装方式。梳理 sqlite3 终端操作命令、基础 SQL 语法,涵盖建表、增删改查、模糊与排序查询、主键自增等常用语句。重点解析 sqlite3_open、sqlite3_errmsg、sqlite3_exec 等 C/C++ 核心 API,说明回调函数的工作机制,同时总结数据库开发过程中的关键注意事项,为嵌入式环境下数据库编程提供基础参考。

2026-09-07 20:16:58 421

原创 【linux应用软件编程】TCP并发服务器

本文梳理 Linux 下 TCP 并发服务器各类实现。多进程用 fork 子进程处理连接,隔离性强但开销大;多线程借助 pthread_create,开销更小,需处理参数与线程分离;线程池采用生产者消费者模式,预分配线程规避频繁创建销毁损耗。IO 多路复用依托内核监控多文件描述符,无需新建进程线程:select 有 1024 描述符上限,poll 解除上限但仍需遍历,epoll 基于内核红黑树,支持 LT/ET 触发,高并发性能最优,文中附带各方案 C 代码。

2026-09-05 00:16:15 706

原创 【HTTP协议】HTTP介绍及基础【C语言爬虫实现】

本文介绍应用层HTTP协议相关知识。万维网Web依靠HTTP、URL、HTML实现网络资源访问。URL规定资源定位格式为`<协议>://<主机>:<端口>/<路径>`。HTTP基于TCP,80端口,HTTPS经SSL加密使用443端口,分为请求报文与响应报文,支持长、短连接。简述万维网工作流程,梳理爬虫客户端实现步骤:建立TCP连接、发送HTTP请求、接收响应、关闭连接,并给出C语言socket实现HTTP请求的代码示例,完成简单网络数据获取。

2026-09-04 00:04:13 241

原创 【linux应用软件编程】进程间的通信方式3【网络抓包工具&TCP】

本文主要讲了wireshark工具、TCP协议特点、三次握手四次挥手、TCP编程接口和机制以及粘包问题解决方案。需要精炼概括。</think>本文介绍了TCP协议核心内容:使用Wireshark抓包分析,阐述TCP三次握手、四次挥手及报文标志位;梳理客户端/服务端编程流程与connect、listen、accept、recv等接口;总结应答、超时重传、滑动窗口等机制及粘包问题三种解决方法。

2026-09-02 23:20:43 533

原创 【linux应用软件编程】进程间的通信方式2【网络通信从入门到UDP编程】

本文讲解 Linux 网络通信基础知识,介绍网络通信是不同主机间进程通信,梳理 IP、MAC、端口号作用,对比 OSI 七层、TCP/IP 四层与五层模型及各层典型协议。讲解 IPv4 地址分类、子网掩码、网段、广播号、网关等网络概念,说明数据包封装解封装流程与虚拟机桥接模式网络配置。重点阐述 UDP 用户数据报协议,讲解 C/S 通信模型,解析 socket、sendto、bind、recvfrom 等套接字 API,给出 UDP 客户端与服务端 C 语言示例,实现数据收发。

2026-09-01 10:53:13 560

原创 【linux应用软件编程】进程间的通信方式1【管道&IPC】

本文梳理Linux进程间通信(IPC)各类方式。同一主机通信包含古老通信、System V IPC对象,跨主机依靠Socket。古老方式有无名管道、有名管道、信号,管道依托内核缓冲区实现数据传输,信号属于软中断,可注册捕获处理。System V IPC包含消息队列、共享内存、信号量集,消息队列封装消息体支持类型筛选,共享内存通过内存映射,拷贝次数少,通信效率最高。文中介绍各类通信的适用场景、系统调用接口与关键特性,同时给出相关终端调试命令,对比不同通信方式差异,便于根据业务选型。

2026-08-29 23:39:49 565

原创 【linux应用软件编程】多任务学习2【线程】

本文围绕Linux多线程展开,介绍线程是轻量级进程,为CPU调度最小单位,进程是资源分配最小单位。讲解线程创建、分离属性、退出与资源回收相关API,对比进程与线程差异。阐述线程通信方式,针对临界资源竞争,讲解互斥锁实现互斥、信号量实现线程同步。分析死锁产生的三类现象与四大必要条件,给出锁成对使用、统一加解锁顺序、采用非阻塞锁等死锁解决手段。

2026-08-27 18:44:24 577

原创 【专题】frmaebuffer打印bmp图片

本文围绕framebuffer显示24位BMP图片展开,先讲解BMP文件结构,包含文件头、信息头、图像数据三部分,说明BGR像素顺序、行4字节对齐、图像倒序存储的特点。接着介绍Linux framebuffer原理,梳理打开设备、ioctl获取屏幕参数、mmap内存映射、写像素、释放资源的完整操作流程。最后结合二者给出代码实现,读取BMP头信息与像素缓存,处理BMP存储特殊性,调用打点函数将图片渲染到帧缓冲,同时指出示例代码的适用局限,为Linux终端图片显示提供实践参考。

2026-08-26 15:02:15 576

原创 【linux应用软件编程】多任务学习1【进程】

本文介绍Linux多任务中进程相关知识。进程是程序的一次运行实例,拥有独立虚拟内存,存在七种运行状态,会产生僵尸、孤儿两类特殊进程,可通过多种方式退出。介绍ps、top、kill等进程操作命令。重点讲解fork创建子进程,exit进程退出,wait、waitpid回收子进程资源避免僵尸进程,exec函数簇替换进程执行程序,system调用shell命令等系统API。进程用户空间相互独立,进程间通信需要借助内核IPC机制。

2026-08-25 18:04:34 518

原创 【linux应用软件编程】文件操作学习3【目录IO、出错处理及framebuffer基础操作】

本文在标准IO、文件IO基础之上,补充讲解Linux目录IO相关接口,介绍`opendir`、`readdir`、`closedir`、`mkdir`等目录操作函数并给出目录遍历实例;同时讲解`perror`、`strerror`两种系统出错处理方式;重点剖析Framebuffer帧缓存原理,详细演示通过`open`、`ioctl`、`mmap`内存映射读写显存实现屏幕单点绘图的完整流程,为嵌入式液晶屏开发与五子棋图形项目打下理论基础。

2026-08-24 20:52:43 318

空空如也

空空如也

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

TA关注的人

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