<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[qq_40709487的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/qq_40709487</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qq_40709487]]></copyright><item><title><![CDATA[《rk3399：基于一个物理网卡设置两个网络接口》]]></title><link>https://blog.youkuaiyun.com/qq_40709487/article/details/132788444</link><guid>https://blog.youkuaiyun.com/qq_40709487/article/details/132788444</guid><author>qq_40709487</author><pubDate>Sun, 10 Sep 2023 10:26:18 +0800</pubDate><description><![CDATA[针对需要在系统中（只有物理网卡），添加一个虚拟网卡并给定其一个静态IP以供调试使用，同时不影响另一个正常的网卡进行DHCP获取IP的需求，可以在系统中增加一个macvlan虚拟网卡。macvlan 一种虚拟网卡解决方案。macvlan 一种虚拟网卡解决方案。]]></description><category></category></item><item><title><![CDATA[《rk3399：各显示接口的dts配置》]]></title><link>https://blog.youkuaiyun.com/qq_40709487/article/details/132702317</link><guid>https://blog.youkuaiyun.com/qq_40709487/article/details/132702317</guid><author>qq_40709487</author><pubDate>Wed, 06 Sep 2023 09:00:00 +0800</pubDate><description><![CDATA[rk3399有两个VOP，每个VOP均可接不同的显示接口，比如eDP、MIPI(DSI)、HDMI、DP。不过两个VOP支持的最大输出有所区别。针对不同的显示接口，需要在dts中配置不同的显示通路。本文详细列出屏显示接口的相关DTS的配置节点，同时讲解针对于不同的屏接口，需要配置的dts节点内容。firefly上edp接口和mipi接口在硬件上，背光脚、使能脚、复位脚是一样的。实际上复位脚一样基本上就决定了这两屏不能同时启用。会导致以下错误。一般需要使用两屏接口都用的情况下，硬件上都会使用不同的复位脚。]]></description><category></category></item><item><title><![CDATA[《Linux驱动：中断编程》]]></title><link>https://blog.youkuaiyun.com/qq_40709487/article/details/130048383</link><guid>https://blog.youkuaiyun.com/qq_40709487/article/details/130048383</guid><author>qq_40709487</author><pubDate>Sun, 09 Apr 2023 21:32:50 +0800</pubDate><description><![CDATA[今天简单整理了下中断的相关概念，以及Linux内核中断处理程序架构，并整理了下中断编程会使用到的相关API、顶半部和底半部机制（tasklet、工作队列、软中断、线程化irq）的使用。关于底半部机制的具体实现，后续有空的时候再去深入学习。]]></description><category></category></item><item><title><![CDATA[《音视频：给图片添加黑色边框》]]></title><link>https://blog.youkuaiyun.com/qq_40709487/article/details/129487735</link><guid>https://blog.youkuaiyun.com/qq_40709487/article/details/129487735</guid><author>qq_40709487</author><pubDate>Mon, 13 Mar 2023 10:50:29 +0800</pubDate><description><![CDATA[本文旨在给一个jpg图片添加一个黑色边框，比如原jpg图片的分辨率为128128，需要用它生成一张1280720分辨率的图片，该生成的图片样式为jpg图片放置在正中间、周围填充黑色背景。类似于给图片添加黑色边框的效果。涉及的知识有，yuv420p格式，YUV分量的对应关系，以及YUV在内存中的存储格式，libjpeg-turbo库的使用。]]></description><category></category></item><item><title><![CDATA[《音视频：从h264裸流数据中提取各NALU单元》]]></title><link>https://blog.youkuaiyun.com/qq_40709487/article/details/128166396</link><guid>https://blog.youkuaiyun.com/qq_40709487/article/details/128166396</guid><author>qq_40709487</author><pubDate>Sat, 03 Dec 2022 20:55:18 +0800</pubDate><description><![CDATA[本文旨在将h264裸流数据分解成一个个NALU单元，以便后续对每一个NALU单元进行RTP封包将其发送出去。h264裸流数据中一般以“00 00 00 01”或者“00 00 01”来分隔NALU单元，所有要做的就是识别到这两种头，将两个头之间的所需要的NALU数据提取出来。直接上代码。]]></description><category></category></item><item><title><![CDATA[《Linux驱动：设备节点文件的创建过程》]]></title><link>https://blog.youkuaiyun.com/qq_40709487/article/details/128069218</link><guid>https://blog.youkuaiyun.com/qq_40709487/article/details/128069218</guid><author>qq_40709487</author><pubDate>Sun, 27 Nov 2022 20:29:06 +0800</pubDate><description><![CDATA[之前学习字符设备驱动开发时，提到调用class_device_create函数会为设备创建一个设备节点文件（/dev/xxx）。那么这个创建的过程是怎样的呢？在这里便来简单分析一下。涉及的知识点主要有uevent机制、Sysfs文件系统、mdev程序的调用和实现（创建设备节点文件）。]]></description><category></category></item><item><title><![CDATA[《Linux驱动：DMA直接内存访问》]]></title><link>https://blog.youkuaiyun.com/qq_40709487/article/details/127838747</link><guid>https://blog.youkuaiyun.com/qq_40709487/article/details/127838747</guid><author>qq_40709487</author><pubDate>Sun, 13 Nov 2022 22:30:12 +0800</pubDate><description><![CDATA[DMA(Direct Memory Aaccess)直接内存访问，意思是不通过CPU的干涉直接将数据从一个地址空间复制到另一个地址空间，提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。它的作用就是解决大量数据传输过度消耗CPU资源的问题。DMA节省了大量的CPU资源，使CPU专注于更加实用的操作。]]></description><category></category></item><item><title><![CDATA[《Linux驱动：使用音频设备驱动框架-OSS构建音频设备驱动》]]></title><link>https://blog.youkuaiyun.com/qq_40709487/article/details/127594053</link><guid>https://blog.youkuaiyun.com/qq_40709487/article/details/127594053</guid><author>qq_40709487</author><pubDate>Sat, 29 Oct 2022 23:37:56 +0800</pubDate><description><![CDATA[OSS(Open Sound System（开放声音系统）)，是unix平台上一个统一的音频接口。ALSA （Advanced Linux Sound Architecture（高级Linux声音体系）） 是为声卡提供驱动的Linux内核组件，替代OSS。在这里先来分析简单的OSS，后面有时间再研究下ALSA。分析OSS的基本框架，最后通过一个例子总结下OSS框架下实现一个音频设备驱动的一般步骤。]]></description><category></category></item><item><title><![CDATA[《C语言笔记：数组和指针并不相同》]]></title><link>https://blog.youkuaiyun.com/qq_40709487/article/details/127505173</link><guid>https://blog.youkuaiyun.com/qq_40709487/article/details/127505173</guid><author>qq_40709487</author><pubDate>Tue, 25 Oct 2022 08:30:00 +0800</pubDate><description><![CDATA[在初学C编程的时，总是会听见说“数组和指针是相同的”，这是一种非常危险的说法。今天通过对《C专家编程》的学习，重新认识下指针和数组，分析下它们之间“并不相同”的原因。]]></description><category></category></item><item><title><![CDATA[《音视频：wireshark抓rtp包，提取出H264裸流数据》]]></title><link>https://blog.youkuaiyun.com/qq_40709487/article/details/127500448</link><guid>https://blog.youkuaiyun.com/qq_40709487/article/details/127500448</guid><author>qq_40709487</author><pubDate>Mon, 24 Oct 2022 21:22:11 +0800</pubDate><description><![CDATA[wireshark抓取网络RTP数据包，并从中提取出h264裸流数据生成裸流文件。]]></description><category></category></item><item><title><![CDATA[《Linux驱动：register_chrdev、alloc_chrdev_region、register_chrdev_region》]]></title><link>https://blog.youkuaiyun.com/qq_40709487/article/details/127463973</link><guid>https://blog.youkuaiyun.com/qq_40709487/article/details/127463973</guid><author>qq_40709487</author><pubDate>Sat, 22 Oct 2022 16:47:54 +0800</pubDate><description><![CDATA[Linux内核提供了多种注册字符设备驱动的接口，register_chrdev接口一般在Linux 2.6之后建议不再使用，推荐使用alloc_chrdev_region或者register_chrdev_region。这里分析下它们三者的实现，总结下三者的异同。使用register_chrdev注册字符设备，默认主设备下的0~255个次设备均对应于同一个设备驱动（使用同一个file_operations结构体的接口）。]]></description><category></category></item><item><title><![CDATA[《Linux驱动：I2C驱动看这一篇就够了》]]></title><link>https://blog.youkuaiyun.com/qq_40709487/article/details/127418232</link><guid>https://blog.youkuaiyun.com/qq_40709487/article/details/127418232</guid><author>qq_40709487</author><pubDate>Thu, 20 Oct 2022 08:30:00 +0800</pubDate><description><![CDATA[通常来说为某个特定的IIC设备去构建IIC设备驱动、针对平台硬件资源构建IIC适配器便是IIC驱动相关开发所需要做的工作，IIC核心相关、IIC总线驱动相关的部分，系统中一般已经存在。构建IIC设备驱动一般需要做的工作设置struct i2c_driver结构体，提供attach_adapter、detach_client接口。]]></description><category></category></item><item><title><![CDATA[《Linux驱动：I2C协议分析》]]></title><link>https://blog.youkuaiyun.com/qq_40709487/article/details/127348147</link><guid>https://blog.youkuaiyun.com/qq_40709487/article/details/127348147</guid><author>qq_40709487</author><pubDate>Sun, 16 Oct 2022 15:18:09 +0800</pubDate><description><![CDATA[I2C总线支持设备之间的短距离通信，用于处理器和一些外围设备之间数据传输，它只需要两根信号线来就能完成数据传输。在分析I2C总线驱动之前，需要先了解下i2c协议。]]></description><category></category></item><item><title><![CDATA[《音视频：将h264裸流转为YUV》]]></title><link>https://blog.youkuaiyun.com/qq_40709487/article/details/127151568</link><guid>https://blog.youkuaiyun.com/qq_40709487/article/details/127151568</guid><author>qq_40709487</author><pubDate>Mon, 03 Oct 2022 13:40:14 +0800</pubDate><description><![CDATA[本文旨在将h264裸流数据转为yuv数据，分为两种情况一种是读取h264文件，一次性将读取到的所有h264数据给到解码器转为yuv，一种是从网络中接收含h264数据的RTP，这种情况下需要先对RTP包进行解包提取出h264数据，然后判断接收到一个完整的帧数据后再交给解码器转为yuv。最后生成的yuv文件可以使用ffmpeg正常播放。对RTP包进行解包提取出h264数据的方法在前一篇文章中分析过，这里不在赘述。]]></description><category></category></item><item><title><![CDATA[《Linux驱动：DM9000网卡驱动分析》]]></title><link>https://blog.youkuaiyun.com/qq_40709487/article/details/127150185</link><guid>https://blog.youkuaiyun.com/qq_40709487/article/details/127150185</guid><author>qq_40709487</author><pubDate>Mon, 03 Oct 2022 11:00:07 +0800</pubDate><description><![CDATA[前面分析了网络设备驱动的框架以及构建设备驱动的一般流程，现在通过对DM9000C网卡驱动程序的分析进一步加强对网络设备驱动的理解。构建网络设备驱动程序的一般流程（设备驱动功能层）调用alloc_netdev接口申请分配一个net_device结构体。设置net_device结构体，至少提供一个发包函数。根据硬件电路申请一个网卡相关中断，在中断中接收网卡接收到的其他设备发送过来的数据，通过netif_rx函数发送给上层处理。调用register_netdev接口注册该驱动。]]></description><category></category></item><item><title><![CDATA[《Linux驱动：网络设备驱动》]]></title><link>https://blog.youkuaiyun.com/qq_40709487/article/details/127141333</link><guid>https://blog.youkuaiyun.com/qq_40709487/article/details/127141333</guid><author>qq_40709487</author><pubDate>Sun, 02 Oct 2022 11:32:03 +0800</pubDate><description><![CDATA[发包：网络协议层调用网络协议接口层dev_queue_xmit( )接口发包；设备驱动功能层给网络设备接口层的net_device结构体的hard_start_xmit成员赋值，即提供发包函数；dev_queue_xmit( )函数调用该发包函数将数据通过网卡传输给其他网络设备。收包：一般是在设备驱动功能层中，创建一个中断，在中断中接收网卡传输过来的数据，然后通过网络协议接口层接口netif_rx发送给网络协议层处理->传输层处理->应用层处理。]]></description><category></category></item><item><title><![CDATA[《音视频：从RTP数据包中解析H264裸流》]]></title><link>https://blog.youkuaiyun.com/qq_40709487/article/details/127132833</link><guid>https://blog.youkuaiyun.com/qq_40709487/article/details/127132833</guid><author>qq_40709487</author><pubDate>Sat, 01 Oct 2022 11:37:24 +0800</pubDate><description><![CDATA[本文旨在从传输h264编码的RTP数据包中，解析出h264裸流数据。对于传输h264数据的rtp数据包，一般有三种类型，单包、单一时间的组合包（STAP-A）、FU-A分片包。本文提取出这三种类型的数据，保存到文件中，得到的h264裸流文件可以通过ffmpeg播放。]]></description><category></category></item><item><title><![CDATA[《Linux驱动：Nor flash驱动看这一篇就够了》]]></title><link>https://blog.youkuaiyun.com/qq_40709487/article/details/127026680</link><guid>https://blog.youkuaiyun.com/qq_40709487/article/details/127026680</guid><author>qq_40709487</author><pubDate>Sat, 24 Sep 2022 16:09:46 +0800</pubDate><description><![CDATA[这一篇主要总结Nor Flash驱动的工作方式和逻辑，熟悉nor flash驱动的框架，并分析了不同规范的Nor Flash芯片的识别过程，比如CFI规范和JEDEC规范的nor flash。Nor flash驱动构建一般分为以下几个步骤根据硬件电路和芯片书册设置struct map_info结构体。调用do_map_probe接口识别对应规范的Nor Flash芯片，并获取到一个对应芯片的struct mtd_info结构体。]]></description><category></category></item><item><title><![CDATA[《Linux驱动：nand flash驱动看这一篇就够了》]]></title><link>https://blog.youkuaiyun.com/qq_40709487/article/details/126808923</link><guid>https://blog.youkuaiyun.com/qq_40709487/article/details/126808923</guid><author>qq_40709487</author><pubDate>Sun, 11 Sep 2022 20:24:58 +0800</pubDate><description><![CDATA[nand flash驱动开发总结，涉及到s3c2440芯片nand flash控制器的设置及操作、K9F2G08U0C nand flash的设置及操作、平台总线-驱动-设备模型等相关知识。系统启动，内核初始化时加载mtdchar模块，调用init_mtdchar，将 struct mtd_notifier 结构注册到mtd_notifiers链表中，供后续nand flash驱动程序使用。if(!]]></description><category></category></item><item><title><![CDATA[《Linux驱动：块设备的读写流程（ ll_rw_block 接口分析）》]]></title><link>https://blog.youkuaiyun.com/qq_40709487/article/details/126696460</link><guid>https://blog.youkuaiyun.com/qq_40709487/article/details/126696460</guid><author>qq_40709487</author><pubDate>Mon, 05 Sep 2022 09:00:00 +0800</pubDate><description><![CDATA[在内核空间构建了块设备驱动程序，创建了块设备的设备节点，那么用户空间的APP如果通过该设备节点去读写对应的块设备呢？接下来便逐步分析这个过程。分析用户程序是如何一步步读写到块设备的数据的。用户程序通过块设备驱动节点，读写块设备数据的流程块设备驱动程序初始化时调用blk_init_queue接口初始一个i/o请求队列，并为该队列提供一个队列"请求处理函数"；用户程序调用read()/write()，会转换成通用块层ll_rw_block接口的调用；]]></description><category></category></item></channel></rss>