嵌入式开发星球
以培养优质嵌入式工程师为目的,持续分享优质嵌入式内容;答疑解惑,获取资源,可添加博主微信:18270720391;关注公众号:“嵌入式开发爱好者”,输入:“1024” 领取资料。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
嵌入式Ubuntu22.04安装过程详解实现
本文详细介绍了在VMware Workstation Pro 17上安装Ubuntu 22.04 LTS虚拟机的完整流程。首先说明了系统要求(双核2GHz处理器/4GB内存/25GB存储),然后分步骤指导VMware安装、许可证激活、虚拟机创建配置(包括处理器2核、4GB内存、桥接网络等设置)。接着详细说明Ubuntu安装过程(跳过汉化、最小化安装等选项),并重点介绍了共享文件夹的配置方法及常见问题解决方案。最后补充了Linux终端的常用快捷键。该教程适合需要搭建Linux开发环境的用户参考。原创 2025-08-29 17:10:59 · 0 阅读 · 0 评论 -
嵌入式linux中多线程编程控制与实现
本文详细介绍了Linux多线程编程的基本概念和应用场景,分为线程使用和控制两大部分。首先阐述了多线程的必要性,如文件拷贝进度显示和双向数据传输等场景,然后讲解了线程的创建(pthread_create)、标识(pthread_t)和参数传递方法。在控制部分,重点讨论了临界资源访问问题及互斥锁(pthread_mutex)的解决方案,以及通过信号量(semaphore)实现线程执行顺序控制。文章通过多个示例代码(如线程创建、参数传递、资源回收等)具体演示了相关API的使用方法,包括pthread_join、p原创 2025-07-25 13:47:49 · 59 阅读 · 0 评论 -
嵌入式linux中常见文件类型分析与详解
嵌入式linux中文件常见类型分析原创 2025-07-22 09:12:11 · 62 阅读 · 0 评论 -
嵌入式Linux内存管理子系统控制与实现
Linux内存管理子系统采用多层次架构,实现高效内存资源管理。其核心包括用户空间接口层(malloc/mmap等)、系统调用层(sys_brk/sys_mmap等)、虚拟内存管理(进程地址空间、页表)、物理内存管理(伙伴系统、slab分配器)以及内存回收机制(kswapd、LRU算法)。通过硬件抽象层支持MMU、TLB和NUMA架构,实现虚拟地址转换和缓存一致性。该系统通过模块化设计平衡了用户程序灵活性和物理内存使用效率,为理解Linux内存管理提供了宏观框架。原创 2025-07-16 19:39:36 · 76 阅读 · 0 评论 -
嵌入式AI项目综合应用分享
本文介绍了7个提升AI开发效率的开源工具:EdgeOne Pages MCP(HTML部署)、Chrome MCP(浏览器自动化)、Firecrawl MCP(网页抓取)、Context7 MCP(代码准确性)、Sequential Thinking MCP(结构化思考)、Shrimp Task Manager MCP(任务拆解)和Interactive Feedback MCP(交互式确认)。这些工具通过MCP(模块化协作平台)技术,分别解决了内容发布、浏览器控制、网页爬取、代码生成、逻辑推理、任务管理和原创 2025-06-28 08:54:01 · 183 阅读 · 0 评论 -
嵌入式linux中PWM脉冲宽度调制控制与实现
PWM(脉冲宽度调制)是一种通过调节脉冲宽度来等效模拟信号的技术。它通过改变占空比(高电平时间占周期的百分比)来控制信号或能量,广泛应用于调光电路、电机驱动等领域。本文详细介绍了PWM的基本原理、参数配置(如周期、占空比、极性等),以及在Linux系统中的实现方法。通过sysfs接口和内核驱动编程示例,展示了如何配置PWM参数并控制设备输出。此外,还提供了设备树修改和用户层应用测试代码,为PWM技术开发提供了实用参考。原创 2025-06-24 17:20:58 · 191 阅读 · 0 评论 -
嵌入式Linux中RTC实时时钟使用方法
嵌入式Linux系统中RTC实时时钟的使用 RTC(Real-Time Clock)为系统提供精确的实时时间,Linux系统以1970年1月1日(Epoch Time)为基准,用秒数差值表示时间。系统包含系统时间(CPU维护)和硬件时间(RTC芯片维护)两种时钟机制,通过date和hwclock命令分别管理。 编程方面,Linux提供了多种时间相关数据结构(如time_t、struct tm)和函数(如time()、localtime()、strftime()等)。示例程序展示了时间显示、日期计算等功能,包原创 2025-06-24 16:35:34 · 82 阅读 · 0 评论 -
嵌入式Linux应用中GPIO编程开发详解
摘要:本文介绍了IMX6ULL开发板的GPIO编程基础及操作方法。首先讲解GPIO的基本功能(输入/输出)及其应用场景,然后详细说明使用sysfs文件系统控制GPIO的编程接口,包括export/unexport接口、方向设置(direction)和电平控制(value)。针对IMX6ULL开发板,提供了LED(GPIO5_3)和按键(GPIO5_1、GPIO4_14)的GPIO编号计算方法,并给出完整的编程示例代码。实验部分包括LED输出控制、按键输入检测以及两者的综合应用,通过操作/sys/class/原创 2025-06-22 15:03:08 · 188 阅读 · 0 评论 -
嵌入式linux系统中声卡ALSA音频控制方法
本文介绍了嵌入式Linux音频系统的核心概念。主要内容包括:音频数字化的采样与量化原理,采样频率的奈奎斯特理论(至少两倍于信号最高频率),量化位数对音质的影响(位数越高动态范围越大),以及ALSA(Advanced Linux Sound Architecture)音频架构的组成(包含驱动包、开发包等7个子项目)。文章指出ALSA相比OSS具有更友好的编程接口,并兼容OSS,是Linux音频系统的标准解决方案。原创 2025-06-22 10:00:36 · 440 阅读 · 0 评论 -
嵌入式Linux中V4L2库的应用与操作实现方法
摘要:V4L2(Video for Linux two)是Linux系统下的视频采集通用API接口,支持mmap内存映射、read直接读取和用户指针三种数据采集方式。本文重点介绍内存映射方式,其工作流程为:1)打开设备文件(/dev/videoX);2)查询设备属性并设置图像格式;3)申请帧缓冲区并映射到用户空间;4)启动采集循环处理数据。通过VIDIOC_REQBUFS等ioctl命令与驱动交互,使用双缓冲队列机制实现连续采集。采集完成后需释放资源,包括取消内存映射和关闭设备。文中详细解析了各步骤的核心数原创 2025-06-18 11:36:36 · 243 阅读 · 0 评论 -
嵌入式linux应用中多线程编程控制与实现
本文介绍了Linux多线程编程的核心概念与实现方法。前半部分讲解了线程的基本操作:线程创建(pthread_create)、线程标识(pthread_t)、参数传递、线程退出(pthread_exit)和资源回收(pthread_join)。重点阐述了多线程的优势,如提高并行处理效率(文件拷贝进度显示)、实现阻塞与非阻塞并行操作(网络通信)。 后半部分深入探讨了线程控制技术:通过互斥锁(pthread_mutex)解决临界资源访问冲突问题,使用信号量(semaphore)控制线程执行顺序。文章包含多个代码示原创 2025-06-17 16:44:15 · 193 阅读 · 0 评论 -
嵌入式Linux系统中进程间通信的方法
本文摘要主要介绍了Linux进程间通信的几种方式,包括管道通信、IPC通信、信号通信和socket通信。首先,文章解释了进程与程序的区别,进程是动态执行的过程,程序是静态指令的集合。然后详细讨论了管道通信的无名管道和有名管道,并通过代码示例展示了父子进程间的通信实现。接着介绍了IPC通信的三种方式:共享内存、消息队列和信号量灯,其中共享内存速度快但需同步互斥机制,消息队列克服了管道的格式限制。 信号通信部分解释了信号机制及其常见类型,如SIGINT、SIGQUIT等,并展示了信号发送和捕捉的代码示例。最后,原创 2025-06-17 16:09:39 · 58 阅读 · 0 评论 -
嵌入式linux系统中输入子系统详解
摘要:本文介绍了Linux输入系统的工作原理和应用编程实现。输入系统由三层架构组成(驱动层、核心层、事件层),统一管理键盘、鼠标等输入设备。文章详细解析了input_event结构体,包含时间戳、事件类型和值等关键字段。通过三个实战案例演示了如何读取输入事件:1)USB鼠标事件(相对坐标);2)键盘事件(按键状态);3)触摸屏事件(绝对坐标)。编程步骤均为:打开设备节点、读取事件数据、解析处理事件值,体现了Linux"一切皆文件"的设计思想。每个案例都提供了完整的C语言代码实现,展示了从原创 2025-06-16 20:55:30 · 67 阅读 · 0 评论 -
嵌入式linux中图像处理的基本方法
本文主要介绍了三种常见图像格式(BMP、JPEG、PNG)的处理方法及图像调整算法。首先解析了BMP文件的二进制结构,包括文件头、信息头和数据存储方式,并提供了将BMP转换为RGB格式的代码实现。其次介绍了JPEG文件的libjpeg库使用方法,详细说明了接口函数调用流程。对于PNG格式,阐述了libpng库的编译和使用步骤。在图像调整方面,详细讲解了图像缩放和旋转的算法原理:缩放采用比例映射方法保持像素相对位置;旋转通过坐标转换实现,涉及三角函数计算和图像尺寸调整。最后给出了具体的C语言实现代码,包括内存原创 2025-06-16 19:48:46 · 251 阅读 · 0 评论 -
解决GLIBC_2.29版本缺失问题
文章摘要:当程序运行时出现"version `GLIBC_2.29' not found"错误,表明系统缺少GLIBC 2.29库。解决方法包括:1)从GNU官网下载源代码;2)编译安装到指定目录(如/opt/glibc-2.29);3)更新库文件路径;4)建立软链接。该过程需要执行配置、编译、安装和更新系统库路径等步骤,确保系统优先使用新安装的GLIBC版本。注意操作可能耗时,且需根据系统架构(如aarch64)调整具体路径。原创 2025-06-08 11:18:47 · 422 阅读 · 0 评论 -
嵌入式系统调用底层基本原理分析
系统调用将留给应用程序的内核API接口统一管理硬件访问权限、特权指令。原创 2025-04-23 21:35:03 · 133 阅读 · 0 评论 -
嵌入式linux系统中内存管理的方法与实现
Linux内核的内存管理是操作系统最核心的部分之一,它涉及到物理内存和虚拟内存的划分、内存管理单元(MMU)的工作原理、页表和TLB的协作机制,以及内存申请、释放和映射等操作。在这篇文章中,我们将详细解析Linux内核如何划分物理内存和虚拟内存,页表、MMU(内存管理单元)与TLB(转换后备页表)如何协作,以及如何使用Linux内核接口进行内存申请与释放。操作系统通过页表的管理来实现虚拟内存的抽象,确保每个进程的虚拟内存与物理内存之间的映射正确。理解这两者的差异,是我们深入理解内存管理的第一步。原创 2025-04-19 18:06:25 · 294 阅读 · 0 评论 -
嵌入式Linux系统中设备树基本操作与实现
设备树(Device Tree)是一种硬件描述机制,用于在嵌入式系统和操作系统中描述硬件设备的特性、连接关系和配置信息。使用设备树来剔除相对内核来说的“垃圾代码”,既用设备树来描述硬件信息,用来替代原来的device部分的代码。虽然用设备树替换了原来的device部分,但是平台总线模型的匹配和使用基本不变。并且对硬件修改以后不必重新编译内核。直接需要将设备树文件编译成二进制文件,再通过bootloader传递给内核即可。原创 2025-04-10 17:39:08 · 255 阅读 · 0 评论 -
嵌入式Linux系统文件调度实现
Linux系统中文件调度,是系统调度的重要过程,关注它的运行过程非常重要。Linux文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有Linux用户和程序看到的文件、目录、软连接及文件保护信息等都存储在其中。1:设备节点调度方法2:磁盘文件调度方法。原创 2025-04-10 14:37:29 · 94 阅读 · 0 评论 -
嵌入式字符设备驱动控制代码具体实现方法(详解)
3:Linux系统中Makefile文件具体实现。2:Linux中RTC驱动代码具体实现。1:应用代码控制实现app.c。原创 2025-04-09 22:51:56 · 85 阅读 · 0 评论 -
Linux系统中应用端控制串口的基本方法
函数原型:int tcsetattr(int fd,int actions,const struct termios *termios_p);重点只需要关注:输入模式c_iflag 控制模式c_cflag和传输速度c_ispeed\c_ospeed。//设置数据位为8位。//打开串口uart9设置可读写,不被输入影响,不等待外设响应。原创 2025-03-29 17:59:07 · 340 阅读 · 0 评论 -
linux系统中文件操作调度方式与实现
1:普通文件--用户存储数据的标准文件,常见的有.c、.h、.txt、.bin,这里面除了.bin文件是二进制文件,其他的都是文本文件。2:可以使用linux中对应的函数来获取文件的详细状态信息。它可以用来检索文件相关的属性,如文件的权限、所有者、大小、时间戳等信息。原创 2025-03-29 10:18:06 · 153 阅读 · 0 评论 -
嵌入式linux系统中对应的文件锁详细实现方法
/文件锁:flock用于对文件加锁或者解锁但是只能产生建议性锁,并且同一个文件不会同时具有共享锁和互斥锁。原创 2025-03-28 22:11:04 · 272 阅读 · 0 评论 -
嵌入式linux内核开发中的三大实用特性:标号元素、局部标签与可变参数宏
printfprintfprintf标号元素、局部标签和可变参数宏是内核开发中三大实用特性。它们不仅提高了代码的灵活性和可读性,还在内核开发中发挥了重要作用。通过合理使用这些特性,开发者可以编写出更高效、更可维护的内核代码。希望本文能帮助开发者更好地掌握这些特性,并在实际开发中发挥它们的威力!原创 2025-03-19 12:20:34 · 197 阅读 · 0 评论 -
嵌入式Linux堆栈管理深度解析:从原理到实践
堆栈管理是嵌入式开发的底层核心技能,深入理解其机制能够帮助开发者编写高效、稳定的代码。通过结合理论分析与实践案例,本文系统性地梳理了栈帧操作、堆内存分配策略、内存泄漏防范等关键知识点。后续可通过反汇编调试、性能分析工具进一步巩固这些概念,最终在复杂系统中游刃有余地驾驭内存资源。原创 2025-03-04 20:46:31 · 271 阅读 · 0 评论 -
嵌入式单片机STM32温湿度模块控制与实现详解
3.通信的开始(打电话)需要注意,该过程需要调用40次,因为传输一次数据有40bit:如果采集的温湿度数据超过了用户设置的阈值,比如用户设置的温度上限为24℃,如果实际的温度超过该值,则蜂鸣器报警,并自动打开风扇,注意:用户可以通过手机设置温湿度的阈值。如 “set temp=20\n” // strstr strtok atoi。原创 2025-03-03 19:53:14 · 297 阅读 · 0 评论 -
嵌入式Linux高级编程:深入解析编译、链接与运行机制
优化程序性能:通过分析符号表和重定位信息,减少冗余代码。解决系统级问题:如动态库版本冲突、内存地址错误等。定制化需求:编写链接脚本控制代码布局,适配特殊硬件。原创 2025-03-02 18:46:49 · 454 阅读 · 0 评论 -
嵌入式linux中启动文件init.d详解
在Linux嵌入式系统的开发和维护过程中,了解系统启动和服务管理机制是至关重要的。其中,/etc/init.d/目录扮演了关键角色,它包含了用于初始化、启动、重启或停止各种服务的脚本。本文将深入浅出地介绍这个目录下常见启动文件的作用,帮助读者更好地理解如何管理和优化嵌入式Linux设备。init.d是指包含一系列Shell脚本的目录,这些脚本用于控制服务(也称为守护进程)的生命周期。当系统启动时,init进程会根据预定义的规则执行这些脚本,以确保必要的服务能够正确启动。/etc/init.d/目录下的所有文原创 2025-03-02 10:06:30 · 334 阅读 · 0 评论 -
嵌入式系统启动流程分析:从汇编到C语言环境的过渡分析
嵌入式系统的启动过程通常分为几个阶段,具体流程会因硬件平台和启动加载程序的不同而有所不同。1.上电(Power On):系统硬件上电后,CPU开始执行固化在硬件中的初始指令(通常是ROM中的启动代码)。2.硬件初始化:在这一阶段,CPU、内存、时钟、外设等硬件初始化。3.引导加载程序(Bootloader):加载并执行Bootloader程序,如U-Boot,它负责从存储介质加载操作系统内核。原创 2025-03-02 09:54:07 · 422 阅读 · 0 评论 -
嵌入式系统中C语言从源代码到进程终止调度过程
编译链接:预处理→编译→汇编→链接的完整流程。进程管理:操作系统如何加载、调度和终止进程。系统调用:用户程序与内核交互的桥梁。原创 2025-03-01 17:51:50 · 98 阅读 · 0 评论 -
彻底搞懂TCP通信协议中三次握手与四次挥手详解
通过这篇文章,TCP的三次握手和四次挥手的来龙去脉应该都清楚了。TCP 之所以这样设计,是为了实现可靠的网络通信:三次握手确保双向通信可靠、序列号同步以及避免历史连接;四次挥手则确保数据传输完整、连接优雅关闭,以及防止旧连接影响新连接。看似繁琐的每一次握手和挥手,其实都是为了解决具体的网络通信问题,体现了 TCP 协议的可靠性和严谨性。一旦理解了这些设计背后的原因,也就理解了 TCP 协议的精髓。原创 2025-02-28 21:05:22 · 163 阅读 · 0 评论 -
嵌入式linux利用标准字符驱动模型控制多个设备方法
设备号:由主设备号(Major)和次设备号(Minor)组成cdev结构体:表征字符设备的核心数据结构文件操作集合:file_operations结构体定义设备操作sysfs接口:提供用户空间设备管理能力传统单设备驱动与多设备驱动的关键差异在于:动态设备号分配设备实例管理次设备号的灵活运用本文实现的驱动模型具有以下优势:支持设备热插拔良好的扩展性资源隔离性符合Linux驱动设计规范完整示例代码可在以下Gist获取:[示例代码链接]后续可扩展方向:实现自动设备发现机制。原创 2025-02-19 22:17:36 · 130 阅读 · 0 评论 -
嵌入式linux系统中高级编程控制与实现
函数参数局部变量函数返回值编译器生成的临时变量栈初始化:DDR/SDRAM/SRAM初始化初始化栈指针不同处理器的栈指针:ARM:SP寄存器(R13)、FP(R11)X86:ESP(栈顶指针)、EBP(栈底指针)原创 2025-02-11 21:05:17 · 114 阅读 · 0 评论 -
嵌入式linux系统中VIM编辑工具用法与GCC参数详解
s/^old/new/g将文本中所有以old开头的字符串替换为new。高亮显示::sethls *:光标处单词高亮显示;%s/old/new/g 将文本中所有字符串old替换为new。s/old/new 将当前行的第一个字符串old替换为new。s/old/new/g 将当前行所有字符串old替换为new。普通模式:打开一个文件时的默认模式,按ESC返回普通模式。在当前光标的前/后面插入字符:i/a。若文件已被修改,放弃修改,退出:q!若文件已被修改,保存修改,退出:wq。原创 2025-02-10 22:25:37 · 312 阅读 · 0 评论 -
嵌入式linux系统中对应的docker容器的作用
Docker是一个开源的容器化平台,它允许开发者将应用程序及其所有的依赖(包括库、运行时环境、系统工具等)打包成一个标准化的单元,这个单元被称为容器。容器是一种轻量级的、独立运行的软件包,它在任何安装了Docker引擎的操作系统上都可以运行,并且能够保证运行环境的一致性。与传统虚拟机(VM)相比,Docker容器更加轻量。虚拟机是通过模拟硬件来运行一个完整的操作系统,而容器是直接运行在宿主机的操作系统内核之上,共享宿主机的内核,只是在用户空间进行隔离。原创 2025-02-10 19:42:54 · 228 阅读 · 0 评论 -
嵌入式linux驱动中MMC/SD驱动模型
MMC/SD驱动模型在嵌入式开发中应用比较广,其对应的Linux系统框架可以归类到块设备中,如果想了解IO存储栈的小伙伴可以先从简单的MMC/SD驱动模型入手。原创 2025-02-07 20:25:04 · 120 阅读 · 0 评论 -
05--嵌入式linux系统内核中SPI驱动底层详解
我们常用的是模式0和模式3,因为它们都是在上升沿采样数据,不用去在乎时钟的初始电平是什么,只要在上升沿采集数据就行。CPHA:表示相位,即第一个还是第二个时钟沿采样数据,0为第一个时钟沿,1为第二个时钟沿。* 也可以使用设备树创建一个节点,内核解析设备树时注册platform_device。* 左边注册一个platform_driver结构体,里面是比较固定的、通用的代码。CPOL:表示SPICLK的初始电平,0为电平,1为高电平。在SPI协议中,有两个值来确定SPI的模式。原创 2025-01-21 16:00:06 · 141 阅读 · 0 评论 -
04--嵌入式linux系统内核中UART串口底层详解
实现对应的drv_open/drv_read/drv_write等函数,填入file_operations结构体。* 其他完善:提供设备信息,自动创建设备节点:class_create, device_create。* 有入口函数就应该有出口函数:卸载驱动程序时,出口函数调用unregister_chrdev。* 把file_operations结构体告诉内核:register_chrdev。得有一个入口函数:安装驱动程序时,就会去调用这个入口函数。* 定义自己的file_operations结构体。原创 2025-01-21 15:25:22 · 551 阅读 · 0 评论 -
03--嵌入式linux系统内核中pinctrl底层详解
Pinctrl:Pin Controller,顾名思义,就是用来控制引脚的:* 引脚枚举与命名(Enumerating and naming)* 引脚复用(Multiplexing):比如用作GPIO、I2C或其他功能* 引脚配置(Configuration):比如上拉、下来、open drain、驱动强度等。原创 2025-01-21 13:11:51 · 108 阅读 · 0 评论 -
02--嵌入式linux系统内核中LCD驱动底层详解
[13:12] : 00 : CSC数据不交换(小端模式)默认就为0,不需设置。* [15:14] : 00 : 输入数据不交换(小端模式)默认就为0,不需设置。* [19:16] : 111 :表示ARGB传输格式模式下,传输24位无压缩数据,A通道不用传输)/* fb的物理地址 */* [1] : 0 : 24位数据均是有效数据,默认就为0,不需设置。* [17] : 1 : 设置为1工作在DOTCLK模式。原创 2025-01-20 20:05:53 · 119 阅读 · 0 评论