自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(67)
  • 资源 (1)
  • 收藏
  • 关注

原创 《rk3399:基于一个物理网卡设置两个网络接口》

针对需要在系统中(只有物理网卡),添加一个虚拟网卡并给定其一个静态IP以供调试使用,同时不影响另一个正常的网卡进行DHCP获取IP的需求,可以在系统中增加一个macvlan虚拟网卡。macvlan 一种虚拟网卡解决方案。macvlan 一种虚拟网卡解决方案。

2023-09-10 10:26:18 349

原创 《rk3399:各显示接口的dts配置》

rk3399有两个VOP,每个VOP均可接不同的显示接口,比如eDP、MIPI(DSI)、HDMI、DP。不过两个VOP支持的最大输出有所区别。针对不同的显示接口,需要在dts中配置不同的显示通路。本文详细列出屏显示接口的相关DTS的配置节点,同时讲解针对于不同的屏接口,需要配置的dts节点内容。firefly上edp接口和mipi接口在硬件上,背光脚、使能脚、复位脚是一样的。实际上复位脚一样基本上就决定了这两屏不能同时启用。会导致以下错误。一般需要使用两屏接口都用的情况下,硬件上都会使用不同的复位脚。

2023-09-06 09:00:00 865

原创 《Linux驱动:中断编程》

今天简单整理了下中断的相关概念,以及Linux内核中断处理程序架构,并整理了下中断编程会使用到的相关API、顶半部和底半部机制(tasklet、工作队列、软中断、线程化irq)的使用。关于底半部机制的具体实现,后续有空的时候再去深入学习。

2023-04-09 21:32:50 196 1

原创 《音视频:给图片添加黑色边框》

本文旨在给一个jpg图片添加一个黑色边框,比如原jpg图片的分辨率为128128,需要用它生成一张1280720分辨率的图片,该生成的图片样式为jpg图片放置在正中间、周围填充黑色背景。类似于给图片添加黑色边框的效果。涉及的知识有,yuv420p格式,YUV分量的对应关系,以及YUV在内存中的存储格式,libjpeg-turbo库的使用。

2023-03-13 10:50:29 586 1

原创 《音视频:从h264裸流数据中提取各NALU单元》

本文旨在将h264裸流数据分解成一个个NALU单元,以便后续对每一个NALU单元进行RTP封包将其发送出去。h264裸流数据中一般以“00 00 00 01”或者“00 00 01”来分隔NALU单元,所有要做的就是识别到这两种头,将两个头之间的所需要的NALU数据提取出来。直接上代码。

2022-12-03 20:55:18 392

原创 《Linux驱动:设备节点文件的创建过程》

之前学习字符设备驱动开发时,提到调用class_device_create函数会为设备创建一个设备节点文件(/dev/xxx)。那么这个创建的过程是怎样的呢?在这里便来简单分析一下。涉及的知识点主要有uevent机制、Sysfs文件系统、mdev程序的调用和实现(创建设备节点文件)。

2022-11-27 20:29:06 828

原创 《Linux驱动:DMA直接内存访问》

DMA(Direct Memory Aaccess)直接内存访问,意思是不通过CPU的干涉直接将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。它的作用就是解决大量数据传输过度消耗CPU资源的问题。DMA节省了大量的CPU资源,使CPU专注于更加实用的操作。

2022-11-13 22:30:12 982

原创 《Linux驱动:使用音频设备驱动框架-OSS构建音频设备驱动》

OSS(Open Sound System(开放声音系统)),是unix平台上一个统一的音频接口。ALSA (Advanced Linux Sound Architecture(高级Linux声音体系)) 是为声卡提供驱动的Linux内核组件,替代OSS。在这里先来分析简单的OSS,后面有时间再研究下ALSA。分析OSS的基本框架,最后通过一个例子总结下OSS框架下实现一个音频设备驱动的一般步骤。

2022-10-29 23:37:56 1839

原创 《C语言笔记:数组和指针并不相同》

在初学C编程的时,总是会听见说“数组和指针是相同的”,这是一种非常危险的说法。今天通过对《C专家编程》的学习,重新认识下指针和数组,分析下它们之间“并不相同”的原因。

2022-10-25 08:30:00 396

原创 《音视频:wireshark抓rtp包,提取出H264裸流数据》

wireshark抓取网络RTP数据包,并从中提取出h264裸流数据生成裸流文件。

2022-10-24 21:22:11 2743

原创 《Linux驱动:register_chrdev、alloc_chrdev_region、register_chrdev_region》

Linux内核提供了多种注册字符设备驱动的接口,register_chrdev接口一般在Linux 2.6之后建议不再使用,推荐使用alloc_chrdev_region或者register_chrdev_region。这里分析下它们三者的实现,总结下三者的异同。使用register_chrdev注册字符设备,默认主设备下的0~255个次设备均对应于同一个设备驱动(使用同一个file_operations结构体的接口)。

2022-10-22 16:47:54 1699

原创 《Linux驱动:I2C驱动看这一篇就够了》

通常来说为某个特定的IIC设备去构建IIC设备驱动、针对平台硬件资源构建IIC适配器便是IIC驱动相关开发所需要做的工作,IIC核心相关、IIC总线驱动相关的部分,系统中一般已经存在。构建IIC设备驱动一般需要做的工作设置struct i2c_driver结构体,提供attach_adapter、detach_client接口。

2022-10-20 08:30:00 4552

原创 《Linux驱动:I2C协议分析》

I2C总线支持设备之间的短距离通信,用于处理器和一些外围设备之间数据传输,它只需要两根信号线来就能完成数据传输。在分析I2C总线驱动之前,需要先了解下i2c协议。

2022-10-16 15:18:09 631

原创 《音视频:将h264裸流转为YUV》

本文旨在将h264裸流数据转为yuv数据,分为两种情况一种是读取h264文件,一次性将读取到的所有h264数据给到解码器转为yuv,一种是从网络中接收含h264数据的RTP,这种情况下需要先对RTP包进行解包提取出h264数据,然后判断接收到一个完整的帧数据后再交给解码器转为yuv。最后生成的yuv文件可以使用ffmpeg正常播放。对RTP包进行解包提取出h264数据的方法在前一篇文章中分析过,这里不在赘述。

2022-10-03 13:40:14 1424 1

原创 《Linux驱动:DM9000网卡驱动分析》

前面分析了网络设备驱动的框架以及构建设备驱动的一般流程,现在通过对DM9000C网卡驱动程序的分析进一步加强对网络设备驱动的理解。构建网络设备驱动程序的一般流程(设备驱动功能层)调用alloc_netdev接口申请分配一个net_device结构体。设置net_device结构体,至少提供一个发包函数。根据硬件电路申请一个网卡相关中断,在中断中接收网卡接收到的其他设备发送过来的数据,通过netif_rx函数发送给上层处理。调用register_netdev接口注册该驱动。

2022-10-03 11:00:07 714

原创 《Linux驱动:网络设备驱动》

发包:网络协议层调用网络协议接口层dev_queue_xmit( )接口发包;设备驱动功能层给网络设备接口层的net_device结构体的hard_start_xmit成员赋值,即提供发包函数;dev_queue_xmit( )函数调用该发包函数将数据通过网卡传输给其他网络设备。收包:一般是在设备驱动功能层中,创建一个中断,在中断中接收网卡传输过来的数据,然后通过网络协议接口层接口netif_rx发送给网络协议层处理->传输层处理->应用层处理。

2022-10-02 11:32:03 1112

原创 《音视频:从RTP数据包中解析H264裸流》

本文旨在从传输h264编码的RTP数据包中,解析出h264裸流数据。对于传输h264数据的rtp数据包,一般有三种类型,单包、单一时间的组合包(STAP-A)、FU-A分片包。本文提取出这三种类型的数据,保存到文件中,得到的h264裸流文件可以通过ffmpeg播放。

2022-10-01 11:37:24 1875 1

原创 《Linux驱动:Nor flash驱动看这一篇就够了》

这一篇主要总结Nor Flash驱动的工作方式和逻辑,熟悉nor flash驱动的框架,并分析了不同规范的Nor Flash芯片的识别过程,比如CFI规范和JEDEC规范的nor flash。Nor flash驱动构建一般分为以下几个步骤根据硬件电路和芯片书册设置struct map_info结构体。调用do_map_probe接口识别对应规范的Nor Flash芯片,并获取到一个对应芯片的struct mtd_info结构体。

2022-09-24 16:09:46 3888

原创 《Linux驱动:nand flash驱动看这一篇就够了》

nand flash驱动开发总结,涉及到s3c2440芯片nand flash控制器的设置及操作、K9F2G08U0C nand flash的设置及操作、平台总线-驱动-设备模型等相关知识。系统启动,内核初始化时加载mtdchar模块,调用init_mtdchar,将 struct mtd_notifier 结构注册到mtd_notifiers链表中,供后续nand flash驱动程序使用。if(!

2022-09-11 20:24:58 2106

原创 《Linux驱动:块设备的读写流程( ll_rw_block 接口分析)》

在内核空间构建了块设备驱动程序,创建了块设备的设备节点,那么用户空间的APP如果通过该设备节点去读写对应的块设备呢?接下来便逐步分析这个过程。分析用户程序是如何一步步读写到块设备的数据的。用户程序通过块设备驱动节点,读写块设备数据的流程块设备驱动程序初始化时调用blk_init_queue接口初始一个i/o请求队列,并为该队列提供一个队列"请求处理函数";用户程序调用read()/write(),会转换成通用块层ll_rw_block接口的调用;

2022-09-05 09:00:00 1456

原创 《Linux驱动:块设备驱动--构建基本流程》

LINUX 驱动针对的对象是存储器和外设,而不是针对cpu内核。字符设备块设备网络设备字符设备指那些必须以串行顺序依次进行访问的设备,如触摸屏、鼠标等。块设备可以按任意顺序进行访问,以块为单位进行操作,如硬盘、eMMC等。字符设备和块设备的驱动设计有很大的差异,但对于用户(应用程序)而言,它们都使用文件系统的接口(open()、write()、read()、close())来进行访问和操作。在这里学习块设备驱动的基本架构,以及构建一个块设备驱动的基本步骤,最后通过内存模拟了一个块设备,并构建了其块设备驱动。

2022-09-04 16:09:44 640

原创 《Linux驱动:USB设备驱动看这一篇就够了》

这一篇学习分析USB设备驱动程序,主要涉及到USB驱动基本概念,USB版本对比、USB主从结构、USB设备的传输类型、USB设备描述符关系、USB的数据传输对象;详细分析了USB总线驱动框架,USB Core、USB HCD、USB总线-设备-驱动模型;最后总结了USB驱动开发中的一般流程并模拟实现一个USB设备驱动程序。USB core注册了一个USB总线,并向USB总线中注册了三个驱动,分别是USB接口驱动、HUB驱动、USB设备驱动。......

2022-08-28 15:37:45 14314 5

原创 《Linux驱动:USB设备驱动》

这一篇学习分析USB设备驱动程序,主要涉及到USB子系统概览、USB总线驱动框架、USB总线-设备-驱动模型。最后模拟实现一个USB设备驱动程序。

2022-08-22 21:59:31 393

原创 《Linux驱动:s3c2440 lcd 驱动分析--终结篇》

s3c2440 lcd 驱动分析,涉及到的内容有,LCD图像显示原理、s3c2440的LCD控制器的操作、LCD驱动使用平台总线-设备-驱动模型的实例、LCD相关参数的设置、fb字符设备驱动实例、framebuffer的注册和管理、以及一次LCD显示的完整过程分析。

2022-08-20 10:14:18 363

原创 《Linux驱动:s3c2440 lcd 驱动分析》

s3c2440 lcd 驱动分析,涉及到的内容有,LCD图像显示原理、s3c2440的LCD控制器的操作、LCD驱动使用平台总线-设备-驱动模型的实例、LCD相关参数的设置、fb字符设备驱动实例、framebuffer的注册和管理、以及一次LCD显示的完整过程分析。...

2022-08-14 22:50:37 302

原创 《Linux驱动:s3c2410/s3c2440 ts驱动分析 -- 终结篇》

前面结合“平台总线-设备-驱动”模型分析了ts(触摸)驱动的加载过程,现在进入驱动程序分析下其具体的实现。涉及到输入子系统详解、input输入子系统核心层程序分析、evdev输入子系统事件处理层程序分析、ts输入子系统设备驱动层程序分析、字符设备驱动分析、主设备号和次设备号的使用、以及s3c2440的ADC转换和触摸控制器的操作。.........

2022-08-13 11:03:01 1769

原创 《Linux驱动:s3c2410/s3c2440 ts驱动分析 之二》

前面结合“平台总线-设备-驱动”模型分析了ts(触摸)驱动的加载过程,现在进入驱动程序分析下其具体的实现。涉及到输入子系统详解、核心层程序分析、evdev事件处理层程序分析、ts设备驱动层程序分析以及s3c2440的ADC转换和触摸控制器的操作。.........

2022-08-10 23:28:29 183

原创 《Linux驱动:s3c2410/s3c2440 ts驱动分析》

前面结合“平台总线-设备-驱动”模型分析了ts(触摸)驱动的加载过程,现在进入驱动程序分析下其具体的实现。涉及到输入子系统、s3c2440的ADC转换和触摸控制器。

2022-08-09 23:15:27 294

原创 《Linux 驱动:s3c2410_ts加载过程》

s3c2410_ts加载过程;总线 驱动 设备 模型;MACHINE_START;MACHINE_START(SMDK2410, "SMDK2410") ;输入子系统;bus-driver-device;platform_add_devices;platform_driver_register;input_register_device;

2022-08-01 22:44:22 1455

原创 《Linux 驱动:输入子系统》

输入子系统作为一个模块存在,向上,为用户层提供调用接口;向下,为驱动层程序提供统一的注册接口。这样,就能够使输入设备的事件通过输入子系统发送给用户层应用程序,用户层应用程序也可以通过输入子系统通知驱动程序完成某项功能。(Linux中在用户空间将所有的设备都当作文件来处理,在一般的驱动程序中都有提供fops接口,以及在/dev下生成相应的设备文件nod,现在这些操作在输入子系统中由事件处理层统一完成)。Linux 输入子系统 事件处理层 核心层 设备驱动层 设备节点.........

2022-07-26 20:32:04 442

原创 《linux驱动:字符设备驱动之四 定时器消按键抖动》

物理按键触发电平不是很稳定,会呈现锯齿状使得一次按键状态触发多个中断,导致应用程序读取按键值产生错误。驱动层使用内核定时器可以解决此种错误,每次中断到来时触发定时器10ms后再对该中断进行处理。这样一次按键状态因为抖动而触发的多个中断,最终只会去处理一次。Linux内核定时器采用系统时钟来实现,与硬件定时器功能一样,当超时时间到了以后设置的定时处理函数就会执行。内核定时器不需要一大堆寄存器的配置工作,并且内核定时器执行完超时处理函数以后就会自动关闭。............

2022-07-17 17:06:33 318

原创 《linux驱动:字符设备驱动之三 poll机制》

前一篇虽然在驱动层面使用了中断的方式,但是应用层面还是需要不断在死循环里面执行读取函数,应用程序不能去做其它事情。poll机制解决了这个问题,当有事件发生时,才去执行读read函数,按键事件没有按下时,去执行其它的处理函数。并可通过设置超时时间,调整应用层等待的时间。先分析内核中Poll的运行机制,然后使用之。............

2022-07-17 09:13:11 571

原创 《linux驱动:字符设备驱动之二 中断与休眠唤醒》

linux字符设备驱动。使用中断以及休眠唤醒的方式来获取按键状态。休眠唤醒流程,相关函数DECLARE_WAIT_QUEUE_HEAD、wait_event_interruptible、wake_up_interruptible 。中断服务程序。

2022-07-10 17:30:36 513

原创 《linux驱动:字符设备驱动之一》

学习linux驱动三个大类驱动设备,字符设备、块设备、网络设备。学习linux驱动的框架,熟悉所涉及的各个数据结构和函数,并结合具体代码分析。字符设备驱动的一般流程。

2022-07-03 16:14:42 1874

原创 《数据结构和算法:链表实现队列》

写出先入先出队列的结构体Queue定义,并实现以下函数:(15分)1,Queue *create(int size):创建一个能放size个int类型的队列,返回队列的指针。2,int put(Queue *queue, int value):将value入队,返回0表示成功,-1表示出错。3,int get(Queue *queue, int *pvalue):将数据出队并存入p...

2020-12-27 11:01:00 216

原创 《C语言笔记:符号的链接属性》

三种链接属性1,程序的生成过程:编译+链接。编译以文件为单位,编译器将所有的源文件依次读进来,单个文件进行编译,最后将函数/变量等变成.o的二进制机器码;链接以工程为单位,链接器将编译之后产生的.o文件整体的输入,然后处理链接成一个可执行程序。2,链接属性就是在链接过程中,对于一个.o文件中的符号被链接的范围。3,链接属性1 外链接属性变量和函数可以在整个程序范围内(可以跨文...

2020-11-21 19:32:00 194

原创 《C语言笔记:变量的生命周期》

一,栈变量的生命周期1,局部变量存储在栈上,生命周期是临时的。从定义变量处诞生到变量最近的 ‘}’处消亡。2,比如一个函数内定义的局部变量,在这个函数的每一次调用时都会被创建一次,然后使用,最后在函数返回时消亡。二,堆变量的生命周期1,堆空间是客观存在的,是由操作系统维护的。程序只是申请然后使用后释放。2,从malloc申请时诞生,然后使用,最后到free后消亡。malloc之...

2020-11-21 19:31:00 616

原创 《C语言笔记:存储类相关的关键字》

一,auto1,修饰局部变量,表示这个变量是自动局部变量,自动局部变量分配在栈上,使用前如果不初始化它的值就是随机的。2,定义auto局部变量时auto可以省略,平时定义普通局部变量时就是auto类局部变量。二,static1,两种用法一种是修饰全局变量/函数和普通的全局变量/函数对比static修饰的全局变量/函数本质改变的是全局变量和函数的链接属性。一种是修...

2020-11-21 19:29:00 65

原创 《C语言笔记:linux下C程序的内存映像》

一,内存图示二,各内存段的作用1,代码段、只读数据段对应着程序中的代码(函数),代码段在Linux中也叫做文本段(.text)只读数据段就是程序在运行时只能读不能写的数据,const修饰的常量就有可能存放在只读数据段。2,数据段、.bss段数据段存放,显示初始化为非0的全局变量和显示初始化为非0的静态局部变量。.bss段存放,显示初始化为0或者未显示初始化的全...

2020-11-21 19:28:00 122

原创 《C语言笔记:结构体内存对齐》

一,什么是对齐  1,现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问都可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问。  2,所以这就需要各类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。内存对齐又分为自然对齐和规则对齐。  3,对于内存对齐问题,主要存在于struct和union等复合结...

2020-11-18 22:46:00 66

视频会议+OWT服务端+最全操作脚本

OWT服务端最全操作脚本 # 向房间输入发布RTSP流 ``` stream_input.sh ip roomid rtsp://xxxx ``` # 更新房间流 ``` stream_output.sh ip roomid roomStramId ``` # 删除房间内的某一条流 ``` stream_delete.sh ip roomid streamId ``` # 删除房间内所有流 ``` stream_all_delete.sh roomid ``` # 开启录制 ``` stream_record.sh ip roomid recordStreamId ``` # 结束房间内某条录制 ``` stream_record_stop.sh ip roomid recordId ``` # 输出房间流融屏流到rtsp服务器 ``` stream_output.sh ip roomId rtsp://xxxx ``` # 输出房间内某条流到rtsp服务器 ``` stream_signal_output.sh ip roomId streamId rtsp://xxx

2023-01-12

wireshark从RTP包中提取出H264裸流数据脚本

wireshark从RTP包中提取出H264裸流数据脚本 wireshark RTP H264 H265

2022-10-24

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

TA关注的人

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