自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux应用开发(君正T23):监控文件管理系统+TLSF内存管理算法

本文介绍了一个面向嵌入式Linux监控设备的SD卡文件管理系统设计方案。该系统采用三大策略:1)按"年-月-日/时-分-秒"结构化存储录像文件,提高检索效率;2)实施"保底空间+循环覆盖"机制,自动删除最旧录像目录确保空间可用;3)使用静态TLSF内存池和线程锁来解决嵌入式环境下内存碎片和多线程安全问题。系统核心包括初始化模块、文件管理接口和辅助工具函数,通过TLSF算法优化内存分配,实现高效、稳定的SD卡录像存储管理。该方案针对嵌入式设备资源受限特点进行了专门优化,

2025-09-16 18:48:40 1233

原创 Linux应用开发(君正T23):三网智能切换及配网功能

文章摘要: 本文详细记录了一个监控项目中实现网络自动切换功能的技术方案。项目要求设备支持网口、WiFi和4G三种联网方式,并在网络不佳时自动切换以保证监控数据持续上传。作者采用模块化设计,通过两个核心线程实现功能:网络监控线程负责三网状态检测与切换(基于优先级和质量评分),配网线程通过状态机管理WiFi配置流程。文章提供了完整的初版代码实现,包括网络状态监测、质量评分计算、自动切换逻辑等核心功能,并重点分析了后续优化方向:1)将分散的状态机逻辑重构为状态表结构,提升可扩展性;2)使用原生API替代系统命令调

2025-09-14 21:03:17 1197

原创 Linux的V4L2视频框架学习笔记

视频硬件的形态千差万别:从 USB 摄像头、笔记本内置摄像头,到嵌入式 SoC 内置的图像信号处理器(ISP)、PCIe 视频采集卡,再到专业的工业相机(如 GigE 相机),不同硬件的通信协议(USB UVC、MIPI CSI-2、PCIe)、数据格式(原始 Bayer 数据、YUV 数据)、控制逻辑(曝光、对焦调节)差异极大。:通过内核驱动屏蔽不同视频硬件(摄像头、编码器、采集卡等)的差异,通过用户空间库与工具提供统一交互接口,让应用程序无需关心底层硬件细节(如传感器型号、总线类型、编解码芯片差异)。

2025-09-10 17:34:54 1207

原创 Linux的ALSA音频框架学习笔记

ALSA(Advanced Linux Sound Architecture,高级 Linux 声音架构)是 Linux 系统中音频处理的核心框架,负责管理音频硬件、提供统一的音频接口,支持复杂的音频功能(如多设备并发、硬件混音、采样率转换等)。ALSA 的核心用户空间库,提供统一的 API(如 PCM 播放 / 录制、音量控制、设备枚举等),封装了内核接口的复杂细节(如 ioctl 调用、内存映射等)。核心层通过一系列精心设计的数据结构,将分散的音频功能(如 PCM、控制、MIDI 等)组织成有机整体。

2025-08-19 19:03:04 1406

原创 Linux应用开发(全志V536平台):编译学习出现的问题笔记(持续更新)

在我学习理解进程间的通信命名管道fifo这一块的时候,我写了一个小demo然后我刚开始用gcc编译后脑子抽了忽略了那是x86架构的代码并不是板子的arm架构的代码,所以跑不起来,然后我更改makefile的交叉编译器路径,增加了编译选项和链接选项,随后进行编译发现也无法进行编译,后面查原因发现是静态链接时缺少 ARM 异常处理相关的库文件,且编译器未找到正确的库路径(因未定义),需要通过正确加载 SDK 环境补充链接必要的库来解决。

2025-08-11 19:07:20 1025

原创 Linux的线程相关学习笔记(持续更新补充)

本文深入解析了线程与进程的核心区别及线程在提升系统并发性中的关键作用。线程作为轻量级执行单元,共享进程资源但拥有独立执行流,通过合理拆分任务、优先级调度和同步机制,可显著提高系统效率。文章详细剖析了pthread_create函数的参数、线程ID底层实现及线程属性配置,包括栈大小、分离状态、调度策略等关键属性。特别针对嵌入式系统场景,提供了优化线程使用的实用策略,如分离I/O与计算任务、设置实时优先级、使用轻量同步工具等,为开发者提供了从理论到实践的完整指导。

2025-08-08 17:51:44 797

原创 Linux的进程相关学习笔记(持续更新补充)

本文介绍了Linux进程管理中常见的孤儿进程和僵死进程现象,以及相关处理函数。孤儿进程是父进程终止后由内核自动接管给init进程(PID=1)的子进程,内核通过修改子进程PCB中的父进程ID实现。僵死进程则是已终止但未被父进程回收资源的子进程,会占用系统资源。文章详细讲解了wait()和waitpid()函数的使用方法,以及如何通过它们防止僵死进程出现。此外,还对比了进程创建函数fork()和vfork()的区别,并分析了exit()、_exit()等进程终止方式的特性。全文通过生动的比喻和技术解释,帮助理

2025-08-07 11:25:39 1174

原创 Linux的I/O模型笔记

Linux系统提供了五种I/O模型,主要区别在于数据就绪和数据处理的方式:1)阻塞I/O会挂起进程直至数据就绪;2)非阻塞I/O会立即返回结果,需轮询检查;3)复用式I/O通过select/epoll集中管理多个I/O;4)信号驱动I/O通过内核信号通知就绪状态;5)异步I/O由内核完成全部操作后通知进程。其中阻塞和非阻塞模型适合简单场景,复用式适合高并发,信号驱动和异步I/O则能进一步提升效率。理解这些模型有助于针对不同场景优化I/O性能。

2025-08-06 11:00:28 974

原创 Linux的文件操作函数笔记

本文介绍了Linux系统编程中的核心文件操作函数,主要包括三类:1.基础文件操作函数(open、read、write、lseek、close),用于文件的打开、读写、定位和关闭;2.文件描述符复制函数(dup/dup2),用于实现文件描述符的重定向;3.数据同步函数(sync、syncfs、fsync、fdatasync),用于确保数据从缓冲区写入磁盘。文章详细说明了各函数的用途、参数和返回值,并通过代码示例演示其具体用法。这些函数是处理文件I/O和进程通信的基础,理解其原理对Linux系统编程至关重要。

2025-08-05 15:51:10 1050

原创 Linux应用开发(全志V536):泛用性项目代码系统进程架构

本文介绍了一个嵌入式系统的命令处理框架,采用五层架构实现从外部命令到内部执行的闭环流程。外部通过FIFO管道发送命令(如echo命令),系统解析后经SystemV消息队列分发到各功能模块,包括视频处理、存储管理等。框架特点是:1)优先级区分处理机制;2)命令注册映射实现扩展性;3)异步消息队列解耦模块;4)完备的线程安全和状态管理。该设计适用于需要外部控制与内部协同的嵌入式设备,如具备拍照、录像等功能的智能硬件。

2025-08-04 17:11:01 781

原创 Linux系统与单片机的内存布局对比学习

本文对比了Linux系统和STM32单片机在程序内存布局、加载执行流程的关键差异。Linux基于虚拟内存管理(MMU),通过ELF格式和动态链接实现灵活的内存分配与隔离,加载过程涉及execve系统调用、ld.so动态链接器等多层协作。STM32则直接操作物理地址,依赖链接脚本硬编码Flash/RAM地址,启动流程由硬件复位向量和启动代码(Reset_Handler)静态初始化.data/.bss段。核心差异体现在:Linux具备动态性(ASLR、按需加载)、多进程隔离,而STM32强调静态性(固定地址)、

2025-08-02 12:04:48 1532

原创 学习理解Linux的PinCtrl子系统笔记(对比学习)

在设备树中,通过pinctrl节点定义一组引脚的复用和配置信息,称为 “引脚组”。例如:虽然 NXP i.MX6UL 和全志(Allwinner)V536 的引脚配置在设备树中的表现形式不同,但核心目的都是定义引脚复用功能和电气特性(驱动强度、上下拉等)。全志的配置方式更直接地将参数暴露在设备树中,而非通过宏封装,下面具体解释全志全志 Tina V536 引脚配置解析(以为例,在sun8iw16p1-pinctrl.dtsi中)全志 V536 的 SPI1 引脚组// 引脚物理编号(对应芯片引脚)

2025-07-25 22:50:19 1225

原创 Linux 传感器驱动3:IIO子系统框架

本文介绍了如何在Linux内核中为ICM-42670陀螺仪编写IIO驱动程序的详细过程。主要内容包括: IIO框架简介:IIO是Linux内核中专门用于工业传感器和执行器的驱动框架,提供标准化的驱动接口和用户空间访问方式。 IIO核心结构体解析: struct iio_dev:IIO设备的核心载体,整合设备的所有关键信息 struct iio_info:用户空间与硬件交互的核心接口结构体 struct iio_chan_spec:描述传感器通道的核心结构体 IIO驱动框架搭建: SPI框架的标准化实现 II

2025-07-23 16:47:15 1337

原创 Linux 传感器驱动2:SPI子系统

本文以ICM-42670陀螺仪为例,详细解析了Linux SPI驱动框架的三层架构:用户空间(Application)、内核空间(SPI设备驱动层/核心层/控制器驱动层)和硬件空间。重点阐述了SPI设备模型的匹配机制、消息队列的传输调度逻辑,以及核心层与硬件驱动的交互接口。通过分析全志平台(Allwinner)的SPI控制器驱动与Linux通用框架的源码,揭示了设备树匹配、控制器注册、消息传输等关键流程的实现原理。文章还对比了同步(spi_sync)和异步(spi_async)传输方式的实现差异,并提供了实

2025-07-19 20:08:55 784

原创 Linux 传感器驱动1:寄存器读写访问与位操作简易总结

本文介绍了嵌入式开发中寄存器操作的核心技术与实践方法,重点围绕Linux内核的Regmap框架展开。主要内容包括:1. Regmap框架的使用方法,包括初始化配置和基本API调用;2. 寄存器位操作技巧,如掩码生成和位域处理;3. 多字节寄存器读写的大小端处理;4. 寄存器值的拆分与合并;5. 寄存器间接访问的Bank机制及其在ICM-42670陀螺仪中的应用。文章通过具体代码示例,详细讲解了如何利用Linux内核提供的工具高效地进行寄存器操作,特别强调了跨总线兼容性和位域处理等实用技巧,为嵌入式开发提供了

2025-07-17 16:12:15 1177 3

空空如也

空空如也

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

TA关注的人

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