![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux
文章平均质量分 82
未来未来_
个人学习理解笔记
展开
-
从零写UVC摄像头驱动(二)数据传输
当USB插上主机,就会产生两个接口(VC和VS),然后获取到USB描述符并解析,从而设置摄像头(比如分辨率、格式);然后分配缓冲区,启动摄像头,便从USB得到摄像头采集数据,保存到缓冲区供应用程序使用。详细过程看这两篇:。我们在设置FORMAT时只是简单的使用video->streaming->format[fmt->index]等数据,这些数据哪来的?b. 启动ubuntu,修改/etc/default/grub。应是设备被枚举时设置的,也就是分析它的描述符时设置的。原创 2024-07-15 16:44:55 · 392 阅读 · 0 评论 -
从零写UVC摄像头驱动(三)设置属性
uvc_ctrl.c里数组: static struct uvc_control_info uvc_ctrls[].entity = UVC_GUID_UVC_PROCESSING, // 属于哪个entity(比如PU).selector = PU_BRIGHTNESS_CONTROL, // 用于亮度。原创 2024-07-15 16:44:42 · 548 阅读 · 0 评论 -
Linux--USB驱动开发(二)插入USB后的内核执行程序
USB设备描述符(usb_device_descriptor)USB配置描述符(usb_config_descriptor)USB接口描述符(usb_interface_descriptor)USB端点描述符(usb_endpoint_descriptor)一个设备描述符可以有多个配置描述符;一个配置描述符可以有多个接口描述符(比如声卡驱动就有两个接口:录音接口和播放接口)一个接口描述符可以有多个端点描述符;原创 2024-07-12 13:05:10 · 867 阅读 · 0 评论 -
从零写UVC摄像头驱动(一)驱动框架
probe:2.1. 分配video_device:video_device_alloc2.2. 设置.fops.ioctl_ops (里面需要设置11项)如果要用内核提供的缓冲区操作函数,还需要构造一个videobuf_queue_ops2.3. 注册: video_register_deviceid_table: 表示支持哪些USB设备UVC驱动:drivers\media\video\uvc\原创 2024-07-11 13:20:13 · 362 阅读 · 0 评论 -
669、修剪二叉搜索树
给定一个二叉搜索树,同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>=L)。你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。题解:与二叉搜索树删除节点操作一样,不同的是要遍历整个树,需要注意的是单层逻辑的实现。返回修剪后的节点嫁接到上层节点。原创 2024-07-06 22:23:44 · 207 阅读 · 0 评论 -
Linux--USB驱动开发(一)USB简介
USB全称为,翻译过来就是通用串行总线。由英特尔与众多电脑公司提出来,用于规范电脑与外部设备的连接与通讯。目前 USB接口已经得到了大范围的应用,已经是电脑、手机等终端设备的必配接口,甚至取代了大量的其他接口。原创 2024-07-06 14:37:25 · 1040 阅读 · 0 评论 -
Linux--V4L2摄像头驱动框架及UVC浅析
对于一个usb摄像头,它的内核驱动源码位于/drivers/media/usb/uvc/核心层:V4L2_dev.c文件硬件相关层: uvc_driver.c文件本篇记录基于对6.8.8.8内核下vivid-core.c文件(虚拟视频驱动程序)的分析,梳理Linux系统中vedio视频设备的驱动框架。原创 2024-07-04 14:50:07 · 1034 阅读 · 0 评论 -
235、二叉搜索树的最近公共祖先
重点在return上,满足条件进入左子树递归时,就只会一直沿着左边递归,有结果了就直接结束函数返回或者满足条件进入了向右方向的递归,总之,递归了一条线然后就返回。中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]本题就是标准的搜索一条边的写法,遇到递归函数的返回值,如果不为空,立刻返回。原创 2024-07-03 22:28:45 · 220 阅读 · 0 评论 -
Linux--平台设备、平台驱动的注册源码分析
设备树dts文件中定义了设备节点,描述了硬件信息,比如寄存器信息,引脚信息等,内核将从设备树中解析得到的platform_device注册到平台总线中。具体设备树在内核中的编译流程可以看。原创 2024-07-03 21:07:45 · 846 阅读 · 0 评论 -
Linux--V4L2应用程序开发(二)改变亮度
创建一个新线程用来控制亮度,线程通过读取用户输入来增加或减少亮度值,并使用ioctl函数将新亮度值设置到视频设备。原创 2024-07-02 16:10:23 · 306 阅读 · 0 评论 -
Linux--V4L2应用程序开发(二)获取数据
ioctl VIDIOC_REQBUFS:申请buffer,APP可以申请很多个buffer,但是驱动程序不一定能申请到ioctl VIDIOC_QUERYBUF和mmap:查询buffer信息、映射如果申请到了N个buffer,这个ioctl就应该执行N次执行mmap后,APP就可以直接读写这些bufferioctl VIDIOC_QBUF:把buffer放入"空闲链表"如果申请到了N个buffer,这个ioctl就应该执行N次ioctl VIDIOC_STREAMON:启动摄像头。原创 2024-06-28 16:20:16 · 730 阅读 · 0 评论 -
Linux--V4L2应用程序开发(一)数据采集及问题
Video for Linux two(Video4Linux2)简称V4L2,是V4L的改进版。(Video4Linux2)是 Linux 内核中用于捕获视频数据的框架和 API。它提供了一套标准化的接口,方便开发者与各种视频硬件设备进行交互,并支持丰富的视频格式和功能。通过使用 V4L2,开发者可以构建高效的视频捕获和处理应用程序。方式(mmap)、方式(read)和。内存映射的方式采集速度较快,一般用于连续视频数据的采集,实际工作中的应用概率更高;原创 2024-06-24 16:45:48 · 1312 阅读 · 0 评论 -
Linux--视频推流及问题
方案一:·mjpg-streamer,它运行在ARM板上·在手机上使用浏览器直接观看视频方案二:推流端(Fmpeg)--rtmp-->Nginx(流媒体服务器)--rtmp/httpflv/hls-->浏览器、播放器此篇文章记录方案二的具体细节。原创 2024-06-20 21:30:35 · 1185 阅读 · 0 评论 -
音视频的编解码基础总结
日常生活中我们会遇到各种后缀的音视频文件,比如:avi,rmvb,mp4,flv,mkv等等,这些后缀名代表的其实是一种,何为封装格式?就是把视频数据和音频数据打包成一个文件的规范。仅仅靠看文件的后缀,很难能看出具体使用了什么。总的来说,不同的封装格式之间差距不大,各有优劣。原创 2024-06-18 15:34:50 · 1269 阅读 · 0 评论 -
Linux--(三)MQTT协议参数
QoS是的缩写,所以中文名便是服务质量。一个物联网通信中有些信息非常重要,我们需要确保这类重要信息可以准确无误的发送和接收,而有些信息则相对不那么重要,这类信息如果在传输中丢失不会影响系统的运行;QoS 便用于告诉客户端或服务器哪些信息是重要信息,需要准确无误的传输、不可丢失;哪些信息不是那么重要,即使在传输过程中丢失也无妨!MQTT设计了一套保证消息稳定传输的机制,包括消息应答、存储和重传。在这套机制下,提供了三种不同级别的 QoS),也就是MQTT协议有三种服务质量等级:⚫。原创 2024-06-17 16:10:39 · 779 阅读 · 0 评论 -
Linux--MQTT(二)通信基本原理
订阅”信息这一操作很像我们在使用微信时“关注”了某个公众号,当公众号的作者发布新的文章时,微信官方会向关注了该公众号的所有用户发送信息,告诉他们有新文章更新了,以便用户查看。而对于订阅消息的客户端来说,可通过订阅“主题”来订阅消息,这样当其它客户端或自己(当前客户端)向该主题发布消息时,MQTT 服务端就会将该主题的信息发送给该主题的订阅者(客户端)。只有在客户端订阅该主题后,服务端接收到该主题的新消息时,服务端才会将最新接收到的该主题消息推送给客户端。客户端要想接收消息,首先要订阅该消息的主题。原创 2024-06-15 15:15:00 · 892 阅读 · 0 评论 -
Linux--MQTT(一)简介
MQTT 5.0 在 MQTT 3.1.1 的基础上增加了许多新功能和改进,使协议更加灵活、健壮和适应现代物联网应用的需求。这些改进包括属性机制、改进的错误报告、共享订阅、会话和消息的过期间隔、用户自定义属性、流量控制、增强的订阅选项以及具体的断开原因码等。通过这些特性,MQTT 5.0 提供了更强的可扩展性和可管理性,适用于更加复杂和多样化的应用场景。原创 2024-06-14 23:01:46 · 1015 阅读 · 1 评论 -
Linux信号基础
也可以把它称为软件中断。信号与硬件中断的相似之处在于能够 打断程序当前执行的正常流程,其实是在软件层次上对中断机制的一种模拟。大多数情况下,是无法预测信号达到的准确时间,所以,信号提供了一种处理异步事件的方法。总的来看,信号的目的都是用于通信的,当发生某种情况 下,通过信号将情况“告知”相应的进程,从而达到同步、通信的目的。信号由谁接收就由谁处理,当信号到达后,进程会对信号进行相应的处理,处理方式有3种。1)忽略该信号 2)捕获信号,进程收到信号后执行预先绑定好的信号处理函数。原创 2024-06-10 16:21:55 · 565 阅读 · 0 评论 -
144、二叉树的前序递归遍历
此题目中,因为要打印遍历后的节点值,所以递归函数需要传入vector来存放节点值,也不需要返回值。终止条件就是当传入节点为NULL时,单层逻辑是将传入的节点的值记录下来。操作系统也是用栈的方式实现递归,那么如果不写终止条件或者终止条件写的不对,都会导致出现栈溢出的情况。1)确定递归函数的参数和返回值。要确定每次递归所要用到的参数以及需要返回的值。1)vector容器的使用,放入元素:vec.push_back()2)注意传递的参数设置,要修改哪些参数就要传入哪些参数。3)确定单层递归逻辑后再开始递归。原创 2024-06-09 21:41:21 · 364 阅读 · 0 评论 -
文件属性与目录
符号链接文件( link )类似于 Windows 系统中的快捷方式文件,是一种特殊文件,它的内容指向的是另 一个文件路径,当对符号链接文件进行操作时,系统根据情况会对这个操作转移到它指向的文件上去,而不是对它本身进行操作,譬如,读取一个符号链接文件内容时,实际上读到的是它指向的文件的内容。,链接文件可以通过这个路径找到被链接的源文件,它们之间类似于一种“主从”关系,当源文件被删除之后,软链接文件依然存在,但此时它指向的是一个无效的文件路径,这种链接文件被称为悬空链接。,当系统关机时,设备文件都会消失;原创 2024-06-08 10:44:07 · 802 阅读 · 0 评论 -
Linux--标准IO库
从图中自上而下,1)首先应用程序调用标准I/O库函数将用户数据写入到stdio缓冲区中,stdio缓冲区是 由 stdio库所维护的用户空间缓冲区。2)针对不同的缓冲模式,当满足条件时,stdio库会调用文件I/O(系统 调用 I/O)将stdio缓冲区中缓存的数据写入到内核缓冲区中,内核缓冲区位于内核空间。3)最终由内核向磁 盘设备发起读写操作,将内核缓冲区中的数据写入到磁盘(或者从磁盘设备读取数据到内核缓冲区)。应用程序调用库函数可以对stdio。原创 2024-06-07 15:51:31 · 1212 阅读 · 0 评论 -
Linux--Socket编程基础
套接字(socket)是Linux下的一种进程间通信机制(socket IPC), 使用 socket IPC可以使得在不同主机上的应用程序之间进行通信(网络通信),当然也可以是同一台主机上 的不同应用程序。socket IPC通常使用客户端服务器这种模式完成通信,多个客户端可以同时连接到服务器中,与服务器之间完成数据交互。内核向应用层提供了socket接口,对于应用程序开发人员来说,我们只需要调用socketsocket是应用层与TCP/IP。原创 2024-06-02 21:52:59 · 1076 阅读 · 0 评论 -
Linux--网络通信(一)概述
它是体系结构中的最高层,直接为用户的应用进程(例如电子邮件、 文件传输和终端仿真)提供服务。但是实时应用通常不希望过分的延迟报文段的传送,且能容忍一部分数据丢失。,每个数据包都要确保可靠传输,当它出错时就重传,这会导致后续的数据包被阻滞,视频效果反而不好。无连接的,数据传输的单位是用户数据报,不保证提供可靠的交付,只能提供“:面向连接的,数据传输的单位是报文段,能够提供可靠的交付。向它的应用程序提供了面向连接的服务。,偶尔的丢包、偶尔的花屏时可以忍受的;2)无需建立连接,不会引入建立连接时的延迟。原创 2024-05-20 13:21:57 · 752 阅读 · 0 评论 -
UBOOT介绍
U-boot全称 Universal Boot Loader,是遵循GPL条款的开放项目,uboot 是一个裸机代码,可以看作是一个裸机综合例程,执行启动内核的功能。补充:GPL条款(GNU General Public License,GNU通用公共许可证)是一种自由软件许可证,而GNU代表“GNU's Not Unix”,是开源的操作系统项目,大多数GNU系统使用开源的Linux内核,GPL条款保证了开源内核的自由性,使用GPL条款后,原创 2024-05-10 20:08:51 · 525 阅读 · 0 评论 -
Linux--IIC驱动编程实验
对于I2C主机驱动,一旦编写完成就不需要再做修改,其他的I2C设备直接调用主机驱动提供的 API函数完成读写操作即可。这个正好符合Linux的驱动分离与分层的思想,因此Linux内核也将 I2C驱动分为两部分:①、I2C总线驱动,I2C总线驱动就是SOC的I2C控制器驱动,也叫做I2C适配器驱动。②、I2C设备驱动,I2C设备驱动就是针对具体的I2C设备而编写的驱动。原创 2024-05-06 22:17:47 · 1036 阅读 · 0 评论 -
常见通信协议
如果是带IIC的单片机,会有地址寄存器,寄存器里的值即为它作为从机时的地址。原创 2024-05-06 16:26:29 · 814 阅读 · 0 评论 -
静态库与动态库
①后缀名:Linux下.a,Windows下.lib1.1 简介之所以称之为【静态库】,是因为在链接阶段,会将汇编生成的目标文件.o 与 引用的库一起链接到可执行文件中。对应的链接方式称为 静态链接。如果多个进程需要引用到【静态库】,在内存中就会存在多份拷贝。1.2【静态库】的特点:①静态库对函数库的链接是在编译期完成的。执行期间代码装载速度快。②使可执行文件变大,浪费空间和资源(占空间)。③对程序的更新、部署与发布不方便,需要全量更新。转载 2024-05-06 10:38:35 · 15 阅读 · 0 评论 -
应用编程之线程(二-同步篇)
线程的主要优势在于,资源的共享性,譬如通过全局变量来实现信息共享,不过这种便捷的共享是有代价的,那就是多个线程并发访问共享数据所导致的数据不一 致的问题。一、为什么需要线程同步线程同步是为了对共享资源的访问进行保护。保护的目的是为了解决数据一致性的问题。出现数据一致性问题其本质在于进程中的多个线程对共享资源的并发访问(同时访问)。二、互斥锁互斥锁(mutex)又叫互斥量,从本质上说是一把锁,在访问共享资源之前对互斥锁进行上锁,在访问完成后释放互斥锁(解锁)。互斥锁使用。原创 2024-04-21 15:20:27 · 689 阅读 · 0 评论 -
proc 文件系统
proc 文件系统挂载在系统的/proc 目录下,对于内核开发者(譬如驱动开发工程师)来说,proc 文件系统给了开发者一种调试内核的方法:通过查看/proc/xxx 文件来获取到内核特定数据结构值,在添加了 新功能前后进行对比,就可以判断此功能所产生的影响是否合理。内核构建 proc 虚拟文件系统,它会将内核运行时的一些关键数据信息以文件的方式呈现在 proc 文件系统下的一些特定文件中,这样相当于将一些不可见的内核中的数据结构以可视化的方式呈现给应用层。但是与普通文件不同的是,原创 2024-05-05 16:33:04 · 218 阅读 · 0 评论 -
cmake 简介
Makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全按照 Makefile 文件定义的编译规则进行自动编译,极大的提高了软件开发的效率。大都数的IDE都有这个工具, 譬如 Visual C++的nmakelinux下的GNU makeQt的qmake等等,这些make工具遵循着不同的规范和标准,对应的 Makefile。原创 2024-05-04 21:37:57 · 915 阅读 · 0 评论 -
Linux--LCD驱动实验
LCD的驱动文件为。原创 2024-05-02 23:10:56 · 1104 阅读 · 0 评论 -
Linux--蜂鸣器驱动
蜂鸣器常用于计算机、打印机、报警器、电子玩具等电子产品中,常用的蜂鸣器有两种:有源蜂鸣器和无源蜂鸣器,这里的有“源”不是电源,而是震荡源,有源蜂鸣器内部带有震荡源(晶体振荡器、RC振荡器、LC振荡器),所以有源蜂鸣器只要通电就会叫。无源蜂鸣器内部不带震荡源,直接用直流电是驱动不起来的,需要 2K-5K 的方波去驱动。有源蜂鸣器只要通电就会叫,所以我们可以做一个供电电路,这个供电电路可以由一个IO来控制其通断,一般使用三极管来搭建这个电路。为什么我们不能像控制 LED。原创 2024-04-26 16:00:13 · 356 阅读 · 1 评论 -
Linux--系统烧写
MfgTool工具是NXP提供的专门用于给I.MX系列CPU烧写系统的软件,可以在NXP 官网下载到。该软件需要在Windows环境下使用。这是使用正点原子提供的已经下载好的NXP烧写工具:L4.1.15_2.0.0-ga_mfg-tools.tar.gz。将软件包解压,里面还有2个.gz 压缩包,一个是带rootfs,一个是不带rootfs,我们是需要烧写文件系统的,所以选择 mfgtools-with-rootfs.tar.gz 这个压缩包,继续解压。Profiles文件夹。原创 2024-04-24 20:17:09 · 614 阅读 · 0 评论 -
Linux--根文件系统移植
BusyBox是一个集成了大量的 Linux命令和工具的软件,像lsmvifconfig等命令BusyBox都会提供。BusyBox就是一个大的工具箱,这个工具箱里面集成了 Linux的许多工具和命令。一般下载BusyBox的源码, 然后配置 BusyBox,选择自己想要的功能,最后编译即可。BusyBox可以在其官网下载到,官网地址为:,官网比较简陋,BusyBox 准备好以后就可以构建根文件系统了。原创 2024-04-24 14:20:48 · 833 阅读 · 0 评论 -
关于Linux系统的配置文件(UBOOT、Kernel、rootfs)
对于编译 U-Boot、内核和根文件系统,每个部分都需要相应的配置文件,这些配置文件指定了编译过程中的选项、参数和设置。原创 2024-04-24 13:51:51 · 342 阅读 · 0 评论 -
Linux--内核移植(二)移植流程及驱动修改
一、官方开发板内核测试本文来总结一下如何将 NXP官方提供的Linux内核移植到正点原子的开发板上。一、官方开发板内核测试NXP提供的Linux源码肯定是可以在自己的开发板上运行下去的,所以我们肯定是以 I.MX6ULL EVK开发板为参考,然后将Linux内核移植到开发板上的。1.修改顶层Makefile修改顶层Makefile,直接在顶层Makefile文件里面定义ARCH和这两个的变量值为 arm和 arm-linux-gnueabihf-。原创 2024-04-23 22:54:25 · 1509 阅读 · 0 评论 -
Linux--内核移植(一)Kernel编译启动流程
解压完成后给予该脚本可执行权限,然后运行,编译的时候会弹出Linux图形配置界面, 这里不需要做任何的配置, 直接按两下ESC键退出图形界面之后会自动开始编译Linux内核。编译完成以后就会在这个目录下生成一个zImage文件,该文件就是要用的Linux镜像文件。另外也会在下生成很多.dtb 文件,这些.dtb 就是设备树文件。原创 2024-04-23 16:39:20 · 359 阅读 · 0 评论 -
U-BOOT图形化配置
不过不知道从什么时候开始,uboot 也支持图形化配置了。体现出来时因为我们是直接在 mx6ull_alientek_emmc.h。2)或者通过文件mx6ull_alientek_emmc.h。.config 里面并没有宏CONFIG_CMD_PING。生成基于文本的图形界面,因此需要先在。和CONFIG_CMD_DHCP,而。ping 命令,这不是冲突了吗?是一套图形化的配置工具,需要。是不支持图形化配置,只有。”来打开图形化配置界面,命令,但是在图形化界面中。的方法,就是图形化配置。原创 2024-04-23 16:03:31 · 303 阅读 · 0 评论 -
Linux--uboot移植(三)新uboot驱动修改
uboot移植到此结束,简单总结一下uboot移植的过程:①、不管是购买的开发板还是自己做的开发板,基本都是参考半导体厂商的dmeo板,而半导体厂商会在他们自己的开发板上移植好 uboot和rootfs等,最终制作好BSP 包提供给用户。我们可以在官方提供的 BSP包的基础上添加我们的板子,也就是俗称的移植。②、我们购买的开发板或者自己做的板子一般都不会原封不动的照抄半导体厂商的demo板,都会根据实际的情况来做修改,既然有修改就必然涉及到uboot下驱动的移植。③、一般。原创 2024-04-23 15:30:53 · 1274 阅读 · 0 评论 -
Linux--uboot移植(二)新UBOOT配置
右端灰色的为原厂开发板的相关文件,黄色的为模仿原厂文件,新添加并修改的自己开发板的文件。原创 2024-04-22 21:37:28 · 969 阅读 · 0 评论