自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

放狼的爷们

阳光 儒雅 博学 勤思 死宅

  • 博客(86)
  • 资源 (3)
  • 收藏
  • 关注

转载 多媒体封装格式介绍

AVI封装格式:https://www.cnblogs.com/GoodGoodWorkDayDayUp/archive/2011/03/31/2000700.html MPEG封装格式:http://www.xuebuyuan.com/1695651.htmlASF/WMV封装格式:http://blog.csdn.net/lxmnet123/article/details/10744623MP...

2018-03-04 15:58:29 383

原创 解码器的bug笔记2

1. 解决了大量codedex静态工具,和内核攻击测试攻击,导致出来的挂死、内存泄漏的问题。2.H265码流proc异常的问题.导致阻塞卡住.通过释放掉,非参考帧,如果是参考帧要是超过协议规定的最大参考帧数目也丢掉3.一个多通道创建销毁的问题, 踩别人内存的问题,一个全局变量,地址赋给函数里面的局部变量,然后要释放内存,就解锁然后再加锁,这个时候外部调用了通道创建销毁的一次流程,导致全局变量的地址...

2018-03-04 11:58:52 443

原创 总结一下几个月驱动开发的需求

1. 产品要求裁剪KO,干掉了无用函数和变量,占内存大的数组变量改成了动态申请。感受:其实KO大了也有好处,静态申请效率高啊,KO的大小,大一点嘛,但是产品的需求。。2.产品要求出1G版本,裁剪内次哦,根据场景、业务,不需要用到的内存裁剪掉。对解码器来说,就是各种通路下面偶尔的内存,安全通路,私有通路,原生通路,还有解码帧存。以前解过很多BUG是性能不足然后通过增加帧存来解决,VP9,H265,H...

2018-03-04 11:26:55 870

原创 Linux驱动开发需要注意的点/KO大小/内存管理

因为做了大量调试的工作,呵呵,所以对代码质量要求比较高。1.不要想不通就写代码,不要为了存粹的解决问题而加代码,不要忽视任何一种场景可能,因为躲得了一时,躲不了一波,BUG迟早会被挖出来的,到时候更加苦逼。2.内存是个很严肃的问题,不要直接调用系统函数,最好把malloc、kmalloc、kzalloc、vmalloc封装一层,入参module ID,size,name,统计好申请的内存,可以用p...

2018-03-01 23:44:36 1728

转载 使用hungtask 检测异常进程/内核死锁/超时阻塞问题

1、内核hung task检测机制由来我们知道进程等待IO时,经常处于D状态,即TASK_UNINTERRUPTIBLE状态,处于这种状态的进程不处理信号,所以kill不掉,如果进程长期处于D状态,那么肯定不正常,原因可能有二:1)IO路径上的硬件出问题了,比如硬盘坏了(只有少数情况会导致长期D,通常会返回错误);2)内核自己出问题了。这种问题不好定位,而且一旦出现就通常不可恢复,kill不掉,通...

2018-03-01 23:02:25 3294 1

原创 用mprotect来定位Linux踩内存的问题

    最恶心的Bug莫过于踩内存,定位了内核问题的朋友都知道。这类问题一直没有很套路的方法解决,都需要走读大量的代码,做大量调试来解决。解这类问题最关键的两点就是,1,找到被踩的内存地址,2,抓住被踩的时序。    想要找到被踩的内存地址,这里很多时候可以通过堆栈反汇编,和调试,查找出来,虽然很多时候被踩的地方不固定,这就糟糕了。就要想方法发现共同规律,比如是否在同一个全局变量里面,或者都是同一...

2018-03-01 22:48:03 6126

原创 调试Linux驱动Bug的思路总结

    2017年一年的工作,大部分做的解码器驱动相关的工作,由于硬件也不会有太大的变化,主要是优化和增加新规格,毕竟很成熟的东西你去改它何必呢?所以驱动也不会太大改变,最近一年的代码量输出的比较小,主要是调试驱动,解Bug。一年下来解了小说100来个Bug吧~~,当然还有很多问题单是非问题,也花了不少精力澄清。    调试驱动,解Bug,任务主要来源是自己测试发现的Bug,测试部测出来的Bug,...

2018-03-01 22:17:01 484 1

转载 Linux IO模式及 select、poll、epoll详解

注:本文是对众多博客的学习和总结,可能存在理解错误。请带着怀疑的眼光,同时如果有错误希望能指出。同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的。所以先限定一下本文的上下文。本文讨论的背景是Linux环境下的network IO。一 概念说明在进行解释之前,首先要说明几个概念:- 用户空间和内核空间- 进程

2018-01-29 23:47:27 166

转载 Linux用户态用信号定位异常退出访问非法内存问题

repost from:http://www.cjjjs.com/paper/xmkf/2017817141130842.html 很多用户认为进程异常终止情况无从分析,但实际上进程异常终止情况都是有迹可寻的. 所有的进程异常终止行为,都是通过内核发信号给特定进程或进程组实现的. 可分成几个类型进行描述:    - SIGKILL. SIGKILL最特殊,因为该信号不可被捕获,同时SI

2018-01-28 23:13:37 1967

转载 LINUX进程间通信六种方法

消息队列:消息队列介绍:https://www.cnblogs.com/liunianshiwei/p/6112024.html自定义消息队列:https://www.cnblogs.com/skyfsm/p/6266404.html信号机制:signal信号处理机制:(五星)http://blog.csdn.net/tiany524/article/det

2018-01-28 23:07:02 292

转载 linux mmap内存映射文件的理解

利用ioremap访问硬件,需要经过两次拷贝1.明确:不管是在用户空间还是在内核空间,软件一律不能去直接访问设备的物理地址;2.在内核驱动中如果要访问设备的物理地址,需要利用ioremap将设备的物理地址映射到内核虚拟地址上(动态内存映射区),以后驱动程序访问这个内核虚拟地址就是在间接得访问设备的物理地址(MMU,TLB,TTW)3.如果用户要访问硬件设备,不能直接

2018-01-04 00:51:12 1803

转载 kmap映射高端内存

作者:唐浩然链接:https://www.zhihu.com/question/30338816/answer/49056599来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。Kmalloc 分配的内存在上图的Direct Memory region区域,这区域的个大小为896M,且与物理内存的关系是直接的线性映射, 即0xC0000000

2018-01-04 00:42:37 670

转载 linux中高端内存和低端内存的理解

高端内存是Linux中一个重要的概念,初涉Linux时曾经对这个概念非常迷惑。实际上这个概念比较简单,理解这个概念,需要追溯一下Linux的内存管理。    从前,CPU的地址总线只有32位。32的地址总线无论是从逻辑上还是从物理上都只能描述4G的地址空间,在物理上理论上最多拥有 4G内存(除了IO地址空间,实际内存容量小于4G),逻辑空间也只能描述4G的线性地址空间。为了合理的利用4G空间,

2018-01-04 00:13:28 3693

转载 VIM快捷操作

1. 关于Vimvim是我最喜欢的编辑器,也是linux下第二强大的编辑器。 虽然emacs是公认的世界第一,我认为使用emacs并没有使用vi进行编辑来得高效。 如果是初学vi,运行一下vimtutor是个聪明的决定。 (如果你的系统环境不是中文,而你想使用中文的vimtutor,就运行vimtutor zh)1.1 Vim的几种模式正常模式:可以使用快捷键命令,或按:输入命

2017-12-28 00:52:02 174

原创 Makefile笔记三【命令的变量和自动变量说明】

命令的变量:AR函数库打包程序。默认命令是“ar”。AS汇编语言编译程序。默认命令是“as”CCC 语言编译程序。默认命令是“cc”。CXXC++语言编译程序。默认命令是“g++”。CO从 RCS 文件中扩展文件程序。默认命令是“co”。CPPC 程序的预处理器(输出是标准输出设备)。默认命令是“$(CC) –E”。FCFortran 和

2017-12-28 00:47:08 801

原创 Makefile笔记二【函数和make的规则参数】

条件表达式的语法:elseendif例如:$(CC) 可能是gcc 也可能是cc,可以用if判断一下ifeq ($(CC),gcc)$(CC) -o foo $(objects) $(libs_for_gcc)else$(CC) -o foo $(objects) $(normal_libs)endififeq ($(strip $(

2017-12-28 00:27:21 536

原创 Makefile笔记一【基础篇】

可以用autoconf和automake自动生成工程所需要的makefile。makefile的工作方式:Makefile 中只应该有一个最终目标,其它的目标都是被这个目标所连带出来的1、读入所有的 Makefile。2、读入被 include 的其它 Makefile。3、初始化文件中的变量。4、推导隐晦规则,并分析所有规则。5、为所有的目标文件创建依赖关

2017-12-27 22:54:23 229

原创 保证自己写的代码没有问题之自测

1.单元测试UT,主要是对接口进行调用来测试,模拟一个小的场景,用大量的UT测试用例来测试返回值是否正确,和有没有被修改。平台就是linux的用户态程序,调用UNF、IOCTL接口。因为给客户用的接口,入参,返回值,理论上是不能轻易改变的。只能增加,向下兼容。2.代码review,代码走读,请专家帮忙,这也算是一种保证自己的代码没问题的方法吧。3.MST测试,根据业务准备的各种场景,比如视

2017-12-24 23:23:41 1892

转载 C++中map用法详解

From:http://blog.csdn.net/yas12345678/article/details/52601624Map是c++的一个标准容器,她提供了很好一对一的关系,在一些程序中建立一个map可以起到事半功倍的效果,总结了一些map基本简单实用的操作!1. map最基本的构造函数;mapmapstring; mapmapint;mapmapstring; mapm

2017-12-07 23:33:50 629

转载 oprofile性能分析优化程序

转载:http://www.cnblogs.com/bangerlee/archive/2012/08/30/2659435.htmloprofile利用cpu硬件层面提供的性能计数器(performance counter),通过计数采样,帮助我们从进程、函数、代码层面找出占用cpu的"罪魁祸首"。下面我们通过实例,了解oprofile的具体使用方法。 常用命令使用oprof

2017-11-06 00:14:45 328

转载 gprof使用介绍-优化程序性能

gprof1.1      简介gprof实际上只是一个用于读取profile结果文件的工具。gprof采用混合方法来收集程序的统计信息,他使用检测方法,在编译过程中在函数入口处插入计数器用于收集每个函数的被调用情况和被调用次数;也使用采样方法,在运行时按一定间隔去检查程序计数器并在分析时找出程序计数器对应的函数来统计函数占用的时间。 Gprof具有以下优缺点: 1)  优

2017-11-06 00:10:26 672 1

原创 解码器的bug笔记

1.播放码流卡顿,部分码流只有3个字节的nal,切割03后插入seg队列不太兼容,之前的容错导致插不进去seg队列,导致卡顿,这种没有意义的nal直接释放掉2.增加起播的速度,按解码序快速输出第一帧,不经过DPB管理输出后再插入DPB重新按照显示序输出,但码流错误,第二帧和第一帧一样,但是硬件error rate到98%,代码没处理这种特殊情况,卡顿。3.I帧播放,单独的接口,(屏保切换功能),I...

2017-11-05 23:13:13 565

原创 linux驱动优化重构提高效率的心得

1.定义的结构体,元素的size比较小的放前面,size比价大的放后面,编译器会优化整个结构体占用的内存2.数组的大小最好按照4/8的倍速来定义3.程序中用移位代替除法,提高程序运行的小笼包4.需要循环,或者多次调度的函数,一定要注意,不要留下冗余,记住2/8法则,20%的代码决定了整个程序的效率5.优化程序运行效率可以从设计框架层面,算法方面,code方面来提高。6.最近内存

2017-11-05 22:54:18 747

转载 C++ 智能指针

最近在补看《C++ Primer Plus》第六版,这的确是本好书,其中关于智能指针的章节解析的非常清晰,一解我以前的多处困惑。C++面试过程中,很多面试官都喜欢问智能指针相关的问题,比如你知道哪些智能指针?shared_ptr的设计原理是什么?如果让你自己设计一个智能指针,你如何完成?等等……。而且在看开源的C++项目时,也能随处看到智能指针的影子。这说明智能指针不仅是面试官爱问的题材,更是非常

2017-11-02 00:42:14 153

转载 C++ 引用

引用:就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。引用的声明方法:类型标识符 &引用名=目标变量名;  如下:定义引用ra,它是变量a的引用,即别名。    int a;    int &ra=a;  (1)&在此不是求地址运算符,而是起标识作用。  (2)类型标识符是指目标变量的类型。  (3)声明引用时,必须同时对其进行初始化。  (4

2017-11-02 00:00:10 155

转载 C++ 11新特性tuple多元数组

Tuple简介tuple是C++ 11新的标准库之一,其表示N元数组,它相当于有N个成员的结构体,只不过这个结构体的成员都是匿名的。tuple是类似于pair的模板,tuple像是pair的泛化版本,pair只能存放两个成员,而tuple则可以多个成员,相同的是,pair和tuple都允许其成员的类型不一样。tuple的用途tuple的最常见的用途就是作为函数的返回值,利用它,可以实现

2017-10-31 01:24:36 1325

转载 C++ 11新特性tuple多元数组

Tuple简介tuple是C++ 11新的标准库之一,其表示N元数组,它相当于有N个成员的结构体,只不过这个结构体的成员都是匿名的。tuple是类似于pair的模板,tuple像是pair的泛化版本,pair只能存放两个成员,而tuple则可以多个成员,相同的是,pair和tuple都允许其成员的类型不一样。tuple的用途tuple的最常见的用途就是作为函数的返回值,利用它,可以实现

2017-10-31 01:23:52 1496

转载 C++11新特性之std::function

转载:http://blog.csdn.net/wangshubo1989/article/details/49134235博客《吐血整理C++11新特性》描述了一些C++11带来的新的特性,但是不够全面。在实际工作中,用到了std::function来实现回调函数。所以写该博客做一个简要补充。类模版std::function是一种通用、多态的函数封装。std::function的实例

2017-10-31 01:21:47 327

转载 setlocale函数和wchar_t笔记

针对无法读取中文路径下的文件的问题,只要在解析模型配置文件时,加入一句: setlocale(LC_ALL,"chs");即可。setlocale函数原形为:    char *setlocale( int category, const char *locale );头文件:所支持的操作系统为:ANSI, Win 95, Win NT对于简体中文可以使用如下设置:setl

2017-10-31 00:03:43 697

转载 va_list/va_start/va_arg/va_end深入分析

转载:http://www.cnblogs.com/justinzhang/archive/2011/09/29/2195969.htmlva_list/va_start/va_arg/va_end这几个宏,都是用于函数的可变参数的。我们来看看在vs2008中,它们是怎么定义的: 1: ///stdarg.h 2: #define va_start _c

2017-10-30 23:21:32 304

原创 心得,在工作中学会”忽悠”别人

注意,这里的忽悠带一点欺骗的性质,但并不是为了自己的偷懒,掩盖自己的能力不足或者懒惰的忽悠。而是为了提高工作效率。在工作中,经常要开展多线程状态进行工作,因为事情太多,测试部报问题,研发找你问问题,FAE找你丢问题,等等。。。但是人也没有三头六臂,虽然说是多线程,但是我们是单核操作系统啊。经常切换任务是会降低系统效率的。举个列子,完成A任务需要3小时,完成B任务需要2小时,完成C任务需要3

2017-10-21 15:23:02 1883

原创 踩内存问题定位总结

现象:挂死,程序跑的异常,数据被串改大致原因:数组越界,字符串操作越界,栈指针操作越界,操作了释放掉了的指针,多线程时序对资源保护控制不当,内存管理异常,使用了其他地方的内存定位方法:1. 类似内存泄漏的问题,先定界,后定位,通过内存proc信息(meminfo/media-mem)判断是具体的模块,内存段2. 减法缩小范围,裁剪模块,修改应用程序,找到最小场景

2017-09-20 00:10:09 12493

原创 内存泄漏问题总结

长时间跑机,一般会引起:程序运行卡顿(性能本是足够满足业务的),卡死,莫名重启,挂死,堆栈是挂死在malloc里面,MMZ/SMMU分配失败,或者kernel panic,这些时候就开始怀疑是不是内存泄漏了。内存泄漏可能的原因:内存分配释放泄漏,资源泄漏,文件资源泄漏,线程泄漏,内存碎片过多。定位的方法:1. 分析问题出现的想象,看看是内核态还是用户态导致的内存泄漏,可

2017-09-19 23:58:36 743

原创 段错误问题定位总结

最近定位了几个段错误的bug,总结一番,对这类问题,需要一定的汇编基础。段错误产生的原因:访问了不应该访问的内存,主要原因是数组溢出、栈溢出,修改到代码段,或者修改了只读数据段,访问空指针,也就是不存在的地址等。定位方法:1.dmesg,挂死的时候,可以查看发生段错误的程序名称、引起段错误发生的内存地址、指令指针地址、堆栈指针地址、错误代码、错误原因等。有了段错误的地址和指令指针地址,

2017-09-19 23:56:07 1266

转载 oprofile定位CPU占用率过高的异常问题

大部分问题同top命令就可以看的出,是哪个线程出了问题,但是在涉及开源库,或者源码巨大的情况下,可以使用linux下的利器,oprofile工具来定位。转载:http://www.cnblogs.com/bangerlee/archive/2012/08/30/2659435.html引言cpu无端占用高?应用程序响应慢?苦于没有分析的工具?oprofile利用cpu硬

2017-09-19 21:05:53 453

转载 ffmpeg.exe的常用命令

转载:http://www.cnblogs.com/wainiwann/p/4128154.html1.分离视频音频流ffmpeg -i input_file -vcodec copy -an output_file_video  //分离视频流ffmpeg -i input_file -acodec copy -vn output_file_audio  //分离音频流

2017-09-14 00:01:09 1690

转载 ffmpeg.exe工具的基本命令

转载雷神:http://blog.csdn.net/leixiaohua1020/article/details/12751349a) 通用选项-L license-h 帮助-fromats 显示可用的格式,编解码的,协议的...-f fmt 强迫采用格式fmt-I filename 输入文件-y 覆盖输出文件-t duration 设置纪录时间 hh:mm

2017-09-13 23:46:47 2823

转载 ffmpeg的工具ffplay.exe使用

ffmpeg.html 利用好文档。解封装ffmpeg.exe -i hello.mp4  -c:v h265 shit.avi转成用h265编码器的码流ffmpeg.exe -i hello.mp4  -c:v copy -an shit.avicopy参数是视频的编码格式不变,-an是剔除音频信息,只保留视频信息ffmpeg.exe -i hel

2017-09-05 23:34:34 6359

转载 码流分析工具ffprobe.exe介绍

http://blog.csdn.net/stone_wzf/article/details/45378759‘-L’    显示 license‘-h, -?, -help, --help [arg]’ 打印帮助信息;可以指定一个参数 arg ,如果不指定,只打印基本选项   可选的 arg 选项:   ‘long’    除基本选项外,还将打印高级选项

2017-09-05 23:15:03 4723

原创 FFmpeg工具介绍

ffmpeg,就是音视频处理的开源工程,不会说不过去吧。ffmpeg的工具,

2017-09-05 22:47:26 989

ffmpeg3.3.3(share+dev+static)

包含ffmpeg 3.3.3版本的share+dev+static,static包:静态版本的ffmpeg工具 share:包括可执行文件的dll dev:提供了库的头文件和dll的引用

2017-09-06

PLC多路口交通灯课程设计

PLC多路口交通灯课程设计

2016-09-03

清洁机器人solidworks三维建模课程设计图纸全套

很详细的三维建模,软件用的是solidworks2013,内含模型渲染,动画仿真.

2016-03-04

空空如也

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

TA关注的人

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