嵌入式开发星球
以培养优质嵌入式工程师为目的,持续分享优质嵌入式内容;答疑解惑,获取资源,可添加博主微信:18270720391;关注公众号:“嵌入式开发爱好者”,输入:“1024” 领取资料。
展开
-
linux系统中USB模块鼠标驱动实现
参考网址:* libusb GIT仓库:https://github.com/libusb/libusb.git* libusb 官网:https://libusb.info/* libusb API接口:https://libusb.sourceforge.io/api-1.0/* libusb 示例:https://github.com/libusb/libusb/tree/master/exampleslibusb是一个使用C编写的库,它提供USB设备的通用的访问方法。原创 2024-08-31 17:58:21 · 1665 阅读 · 0 评论 -
linux系统中USB模块基本原理分析
大家好,今天主要给大家分享一下,USB设备的发展历程。原创 2024-08-26 20:16:53 · 132 阅读 · 0 评论 -
嵌入式Qt5编译qmqtt库使用MQTT协议连接华为云IOT
产品创建完成之后,点击进入产品详情页面,翻到最下面可以看到模型定义。模型简单来说: 就是存放设备上传到云平台的数据。先点击自定义模型。再创建一个服务ID。接着点击新增属性。这里就创建一个温度的属性。我们这个设备用来测温的。cppIP地址:117.78.5.125端口号:1883订阅主题:$oc/devices/65697df3585c81787ad4da82_stm32/sys/messages/down。原创 2024-08-15 23:09:28 · 59 阅读 · 0 评论 -
嵌入式Linux系统中pinictrl框架基本实现
记住pinctrl的三大作用,有助于理解所涉及的数据结构:* 引脚枚举与命名(Enumerating and naming)* 单个引脚* 各组引脚* 引脚复用(Multiplexing):比如用作GPIO、I2C或其他功能* 引脚配置(Configuration):比如上拉、下拉、open drain、驱动强度等。原创 2024-08-04 08:42:56 · 281 阅读 · 0 评论 -
嵌入式linux系统中的经典开源项目
大家好,今天主要给大家分享一下,在Github上,有许多高质量的C语言项目供学习和使用,本次来汇总一波,看看有没有你需要的。原创 2024-07-23 22:39:46 · 118 阅读 · 0 评论 -
嵌入式linux系统中linux文件系统的制作方法
etc/init.d/rcS 文件是linux的运行时配置文件中最重要的一个,其他的一些配置都是由这个文件引出来的。这个文件可以很复杂也可以很简单,里面可以有很多的配置项。PATH=xxx首先从shell脚本的语法角度分析,这一行定义了一个变量PATH,值等于后面的字符串,后面用export导出了这个PATH,那么PATH就变成了一个环境变量。PATH 这个环境变量是 linux 系统内部定义的一个环境变量,含义是操作系统去执行程序时会默认到PATH 指定的各个目录下去寻找。原创 2024-07-23 22:34:06 · 168 阅读 · 0 评论 -
嵌入式linux系统中GDB调试器详解
GDB全称GNU symbolic debugger,它是诞生于GNU开源组织的(同时诞生的还有 GCC、Emacs 等)UNIX及UNIX-like下的调试工具,是Linux下最常用的程序调试器,GDB 支持调试多种编程语言编写的程序,包括C、C++、Go、Objective-C、OpenCL、Ada 等。但是在实际应用中,GDB 更常用来调试C和C++程序。虽然说在Linux系统下我们可以借助诸多集成开发工具来完成程序的编写和调试,但实际上,调试C/C++程序一定是直接或者间接使用GDB完成的。原创 2024-07-14 08:22:31 · 608 阅读 · 0 评论 -
嵌入式linux系统内核启动过程分享
内核的生成步骤可以概括如下:① 先生成 vmlinux,这是一个elf可执行文件。② 然后 objcopy 成 arch/i386/boot/compressed/vmlinux.bin,去掉了原 elf 文件中一些无用的section等信息。③ gzip 后压缩为 arch/i386/boot/compressed/vmlinux.bin.gz。④ 把压缩文件作为数据段链接成 arch/i386/boot/compressed/piggy.o。原创 2024-07-14 08:10:37 · 472 阅读 · 0 评论 -
linux系统中SPI驱动框架以及代码的详解
大家好,今天给大家分享一下,如何使用SPI子系统,详细实现以及具体的操作方法。原创 2024-07-10 22:44:00 · 108 阅读 · 0 评论 -
嵌入式中malloc申请内存时底层发生了什么?
实际上你可以把malloc的工作理解为去停车场找停车位,停车场就是一片malloc持有的内存,可用的停车位就是可供malloc支配的空闲内存,停在停车场占用的车位就是已经分配出去的内存,特殊点在于停在该停车场的车宽度大小不一,malloc需要回答这样一个问题:当有一辆车来到停车场后该停到哪里?有的同学可能会问,为什么我们要理解这背后的原理呢?所谓虚拟内存就是假的、不是真正的物理内存,虚拟内存是给进程用的,操作系统维护了虚拟内存到物理内存的映射,当malloc返回后,程序员申请到的内存就是虚拟内存。原创 2024-07-03 22:40:41 · 141 阅读 · 0 评论 -
嵌入式系统中如何实现一个malloc内存分配器
Next Fit说的是什么呢?我们要考虑到的关键一点就在于,与被释放的内存块相邻的内存块可能也是空闲的。从图中我们可以看到,被释放内存的下一个内存块也是空闲的,如果我们仅仅将这16个字节的内存块标记为空闲的话,那么当下一次申请20字节时图中的这两个内存块都不能满足要求,尽管这两个空闲内存块的总数要超过20字节。使用的内存块其前和其后都是空闲的,在当前的设计中我们可以很容易的知道后一个内存块是空闲的,因为我们只需要从当前位置向下移动16字节就是下一个内存块,但我们怎么能知道上一个内存块是不是空闲的呢?原创 2024-07-01 22:41:44 · 160 阅读 · 0 评论 -
嵌入式系统中mmap函数详解
使用mmap处理大文件要注意一点,如果你的系统是32位的话,进程的地址空间就只有4G,这其中还有一部分预留给操作系统,因此在32位系统下可能不足以在你的进程地址空间中找到一块连续的空间来映射该文件,在64位系统下则无需担心地址空间不足的问题,这一点要注意。这个优势在于处理大文件场景,这里的大文件指的是文件的大小超过你的物理内存,在这种场景下如果你使用传统的read/write,那么你必须一块一块的把文件搬到内存,处理完文件的一小部分再处理下一部分。原创 2024-07-01 22:28:24 · 187 阅读 · 0 评论 -
嵌入式linux系统中线程数与CPU核数关系详解
线程是为那些不懂状态机的人准备的”,这句话在单核时代有它的道理,因为在单核时代,所有的任务都不是在同时向前推进,而是“交错”前进,A前进一点,然后B前进一点,线程并不是实现这种“伪并行”唯一的方法,状态机也可以。假设现在有两个任务,任务A和任务B,每个任务需要的计算时间都是5分钟,那么无论是任务A和任务B串行执行还是放到两个线程中并行执行,在单核环境下执行完这两个任务总需要10分钟,因此有的同学觉得单核下多线程没什么用。但通常来说,线程都需要一定的I/O,可能需要一定的同步互斥,那么这时。原创 2024-06-30 10:03:29 · 65 阅读 · 0 评论 -
Linux系统SPI子系统框架驱动调用实现详解
大家好,今天主要和大家分享一下,如何使用Linux系统中SPI子系统框架,也是分为主机驱动和设备驱动,裸机部分控制的是SPI控制器驱动,可以直接操控。 SPI主机驱动就是SOC的SPI控制器驱动。Linux内核使用spi_master表示主机SPI驱动spi_master 是个结构体,定义在 include/linux/spi/spi.h 文件 中,内容如下。 transfer 函数,和 i2c_algorithm 中的 master_xfer 函数一样,控制器数据传输函原创 2024-06-25 20:33:06 · 177 阅读 · 0 评论 -
嵌入式linux系统中LCD屏驱动实现思路分析
先来回顾一下裸机的时候 LCD 驱动是怎么编写的,裸机 LCD 驱动编写流程如下:①、初始化 I.MX6U 的 eLCDIF 控制器,重点是 LCD 屏幕宽(width)、高(height)、hspw、 hbp、hfp、vspw、vbp 和 vfp 等信息。②、初始化 LCD 像素时钟。③、设置 RGBLCD 显存。④、应用程序直接通过操作显存来操作 LCD,实现在 LCD 上显示字符、图片等信息。原创 2024-06-23 07:41:14 · 197 阅读 · 0 评论 -
嵌入式Linux驱动开研发流程详细解析
device_driver 结构体(设备驱动)中有个名为of_match_table的成员变量,此成员变量保存着驱动的compatible匹配表,设备树中的每个设备节点的 compatible 属性会和of_match_table 表中的所有成员比较,查看是否有相同的条目,如果有的话就表示设备和此驱动匹配,设备和驱动匹配成功以后 probe 函数就会执行。上述 core_funca 的实现中, 会检查底层设备是否重载了 funca(), 如果重载了, 就调用底层的代码, 否则直接使用通用层的。原创 2024-06-21 23:33:30 · 260 阅读 · 0 评论 -
嵌入式系统中常用的参数存储方法
一些常见的软件管理方案如下,这些方案都有其适用的场景,根据存储介质的特点和具体应用场景进行权衡,在使用过程中需要灵活使用,甚至可以配合使用。参数能通过硬件进行存储后,还需要进行软件的管理,比如参数读取、参数写入、参数备份、参数重置、参数更新等软件功能。云存储是一种通过互联网将数据存储在远程服务器上的方法,适用于需要大容量和易于共享的场景。一些常见的参数存储方案如下,每种存储方案在不同的智能硬件产品中都有其独特的应用场景,EEPROM 是一种容量较小的存储器,在产品中需要外挂一片 EEPROM,适用于存储。原创 2024-06-15 17:16:48 · 112 阅读 · 0 评论 -
嵌入式C语言中跨平台TBOX开发库的实现分享
TBOX是一个用c语言实现的跨平台开发库。针对各个平台,封装了统一的接口,简化了各类开发过程中常用操作,使你在开发过程中,更加关注实际应用的开发,而不是把时间浪费在琐碎的接口兼容性上面,并且充分利用了各个平台独有的一些特性进行优化。这个项目的目的,是为了使C开发更加的简单高效。目前支持的平台有: Windows, Macosx, Linux, Android, iOS, * BSD等等。通过xmake支持各种编译模式:Release: 正式版编译,禁用调试信息、断言,各种检测机制,启用编译器优化。原创 2024-06-12 23:29:25 · 268 阅读 · 0 评论 -
嵌入式中C语言面向对象编程详解
接口是面向对象语言中的一个比较重要的概念,接口只对外部承诺实现该接口的实体可以完成什么样的功能,但是不暴露实现的方式。这样的好处是,实现者可以在不接触接口使用者的代码的情况下,对实现进行调整。我们来看看链表的接口定义:清单 1. 链表的接口定义// 定义链表中的节点结构void *data;}Node;// 定义链表结构Node *head;int size;// 函数指针}List;原创 2024-06-09 09:29:19 · 200 阅读 · 0 评论 -
嵌入式Linux中使用PWM应用编程详解
大家好,今天给大家分享一下,如何使用linux系统中PWM实现应用端的控制,以及PWM控制详解。原创 2024-06-07 23:44:10 · 98 阅读 · 0 评论 -
嵌入式Linux系统中GPIO应用控制详解
GPIO(General-Purpose IO Ports),即通用I0接口.GPIO的使用较为简单,主要分为输入和输出两种功能.GPIO主要用于实现一些简单设备的控制.在作为输入型GPIO的情况下,我们可以将该I0连接外部按键或者传感器,用于检测外部状态.当作为输出时,我们可以通过输出高低电平来控制外部设备的运转。原创 2024-06-05 23:51:22 · 231 阅读 · 0 评论 -
嵌入式Linux中常见笔试题目详解
因为tcp传输的数据满足3大条件,不丢失,不重复,按顺序到达。原创 2024-06-05 22:54:19 · 619 阅读 · 0 评论 -
嵌入式linux系统中V4L2摄像头操作详解
Video for Linux two简称V4L2,是linux操作系统下一套用于采集图片,视频和音频数据的通用API接口,配合适当的视频采集设备和相应的驱动程序,可以实现图片、视频、音频等的采集.V4L2像一个优秀的快递员.将视频采集设备的图像数据安全、高效的传递给不同需求的用户.原创 2024-06-04 23:31:43 · 113 阅读 · 2 评论 -
嵌入式Linux内核调试之使用模块参数详解
环境:处理器架构:arm64内核源码:linux-6.6.29ubuntu版本:20.04.1代码阅读工具:vim+ctags+cscope本文主要介绍内核开发中常用的模块传参手段,通过模块参数传递可以通过用户态来获取内核的一些信息,也可以通过用户态写入一些值来控制内核相关行为。一般内核开发者很喜欢使用模块传参来调试内核功能,如damon模块(数据访问监控器)。主要由以下部分组成:常用内核API支持的参数数据类型参数文件访问权限模块参数的读写示例代码参考资料。原创 2024-06-03 23:50:39 · 195 阅读 · 0 评论 -
嵌入式linux系统中图片处理详解
大家好,今天给大家分享一下,嵌入式中如何进行图像处理,常见的处理方式有哪几种?这次将详细分析一下。原创 2024-06-01 20:55:57 · 656 阅读 · 0 评论 -
芯片原厂linux驱动开发的分享
大家好,我是XX,来自湖南XX学院,电子信息18级,也曾在创新基地控制组学习过两三年,毕业后就职于一家芯片原厂的解决方案部,担任驱动工程师的职位,算上实习期,我的工作时长已有两年。在此我想将这两年期间学习与积累到的一些经验输出出来,与大家一同分享。知识面有限,只能简单介绍一些驱动开发方向的一些经验,且由于经验尚浅,文中难免会有一些疏漏和错误之处,还请大家积极地批评指正。原创 2024-05-31 20:38:31 · 148 阅读 · 0 评论 -
嵌入式linux系统中framebuffer应用开发详解
大家好,今天给大家详细分析一下,利用framebuffer进行linux应用开发的详细方法。原创 2024-05-30 23:28:21 · 276 阅读 · 0 评论 -
嵌入式linux系统中USB触摸屏驱动实现方法
大家好,今天给大家分享一下,如何在linux系统下配置与实现USB触摸屏驱动的方法。原创 2024-05-29 23:08:33 · 175 阅读 · 0 评论 -
嵌入式linux系统中NFS文件系统挂载详细实现
大家好,今天主要给大家分享一下,如何利用linux系统实现NFS文件系统挂载的方式与实现。原创 2024-05-28 23:32:58 · 99 阅读 · 0 评论 -
嵌入式linux系统中文件系统制作方法详解
1、掌握嵌入式Ubuntu系统的构建方法2、熟悉嵌入式Ubuntu文件系统映射压缩打包方法3、掌握RK3399linux系统单文件系统更新方法Ubuntu根文件系统制作完成之后,把制作好的ubuntu文件系统映射文件在出厂系统的基础上替换原有的ubuntu根文件系统,即对 Linux系统进行根文件系统的局部更新。ubuntu根文件系统更新完成后,开发板也可以正常工作,说明自己制作的 Ubuntu系统方法和步骤是正确的。原创 2024-05-25 22:16:30 · 583 阅读 · 0 评论 -
嵌入式中uboot与linux内核裁剪方法
大家好,今天给大家分享一下,linux内核裁剪与配置与烧录方法,本节是学习 Uboot和Linux内核的裁剪及编译,编译生成Uboot和Linux内核映像文件后,把这些文 件在现有出厂系统的基础进行局部更新,更新完成后,开发板也可以正常工作,说明替换为自己编译得到的 Uboot和Linux内核映像也是可用的。原创 2024-05-23 23:05:51 · 276 阅读 · 0 评论 -
嵌入式萤火虫开发平台固件更新方法
Firefly-rk3399是萤火虫精心打造的高性能开源主板,主频高达2.0GHz,具备4G、PCIE高性能接口,支持常用的外接设备,接口多,稳定性好。原创 2024-05-22 00:49:22 · 199 阅读 · 1 评论 -
嵌入式linux系统中TCP协议原理详解
前面讲到,最简单的运输层协议,就是提供进程之间的独立通信 ,但底层的实现,是socket之间的独立通信。例如:接收方收到了 123 567,六个字节,编号为4的字节丢失了。根据前面的可靠传输原理,TCP通信双方需要为对方准备一个接收缓冲区可以接收对方的数据、记住对方的socket知道怎么发送数据、记住对方的缓冲区来调整自己的窗口大小等等,这些记录,就是一个连接。如果我们伪造IP和端口,向一个服务器进行海量的请求,会使得服务器创建了大量的创建一半的TCP连接,使得其无法正常响应用户的请求,导致服务器瘫痪。原创 2024-05-17 22:30:53 · 197 阅读 · 0 评论 -
ARM/Linux嵌入式面试题分享
线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix System V及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。线程是独立调度和分派的基本单位。线程可以为操作系统内核调度的内核线程,如Win32线程;原创 2024-05-06 22:26:40 · 297 阅读 · 0 评论 -
嵌入式UBoot如何跳转Kernel—uboot与linux交界分析
不知道你是否有这种感觉,就是学习了Uboot,学习了kernel,学习了安卓。• 不知道你是否在做启动方案的时候,在宏观上知道了整个启动链路流程,但是却在汪洋的代码中迷了路?那么这篇文章必定对你有点用处。如果没有,那请当我没说。是时候让我们看一下,这个过程可不只是简单的设置一个PC指针那么简单的操作哦。按照我的习惯,从宏观和微观两个角度:宏观了解整流程?微观了解小步骤?原创 2024-04-25 22:57:15 · 241 阅读 · 0 评论 -
嵌入式linux中uboot的启动过程分析
之前对这个uboot的源码了解有些许遗忘。最近做AVB校验,需要uboot到kernel的这个过程。这里再复习一下。与大多数BootLoader一样,uboot的启动过程分为BL1和BL2两个阶段。BL1阶段通常是开发板的配置等设备初始化代码,需要依赖依赖于SoC体系结构,通常用汇编语言来实现;BL2阶段主要是对外部设备如网卡、Flash等的初始化以及uboot命令集等的自身实现,通常用C语言来实现。原创 2024-04-23 07:24:44 · 359 阅读 · 0 评论 -
嵌入式linux中利用QT控制蜂鸣器方法
大家好,今天给大家分享一下,如何控制开发板上的蜂鸣器。原创 2024-04-20 22:09:57 · 360 阅读 · 0 评论 -
嵌入式Linux系统调用执行基本流程
当计算机启动的时候,CPU处于Ring0状态,这个时候所有的指令都可以执行,通过主引导程序将磁盘扇区中的操作系统程序加载到内存中,从而启动操作系统(需要注意一下,本文的操作系统 以Linux0.12为例子也就是说当Linux0.12启动的时候,是在权限最高级别的内核态运行的;同时对内存进行划分,划出一部分(内核区)专门给内核使用,这部分内存只能被内核使用;主内存区域给其他应用软件使用。对这部分感兴趣地,可以看看笔者之前的文章Linux0.12内核源码解读(6)-main.c。原创 2024-04-08 19:38:37 · 151 阅读 · 0 评论 -
嵌入式linux系统中opendir函数与触摸屏库tslib使用
使用以下代码,必须先移植号tslib库,通过libts库写的触摸屏函数,加了单按和左右滑动判断。touch.c---源文件的具体实现。main.c--源代码的具体实现。touch.h---具体定义。原创 2024-03-21 11:33:58 · 320 阅读 · 0 评论 -
嵌入式Linux的确实是有门槛的
Linux 的优秀之处自然不必多说。如果将操作系统比作一辆汽车,那 Linux 就是一辆性能出色的多功能越野车,上山下海飞天无所不能。如果你拥有了它,一定不会只满足于驾驶它上下班,不能只会挂挡、踩油门和控制方向之类的基本操作。我们想充分了解并掌握它,挖掘其更多潜能。但是,这个过程有相当的难度。原创 2024-03-20 10:35:16 · 405 阅读 · 0 评论