自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(69)
  • 资源 (7)
  • 收藏
  • 关注

转载 linux内核数据结构之等待队列

Linux内核的等待队列是以双循环链表为基础数据结构,与进程调度机制紧密结合,能够用于实现核心的异步事件通知机制。在这个链表中,有两种数据结构:等待队列头(wait_queue_head_t)和等待队列项(wait_queue_t)。等待队列头和等待队列项中都包含一个list_head类型的域作为"连接件"。它通过一个双链表和把等待task的头,和等待的进程列表链接起来。从上图

2017-08-11 16:12:13 597

原创 基于单幅图像的快速去雾算法实现

基于图像复原的去雾方法中,最有代表性的是暗通道去雾算法,但是暗通道去雾算法的处理时间比较长,不能达到实时处理。在阅读了大量文献及其参考文献,找到能够实时处理的去雾算法,是清华大学写的文章:基于单幅图像的快速去雾算法,作者:刘倩,陈茂华,周东华。

2017-08-10 14:58:41 6634 6

原创 ffplay源码剖析(3.2.4 + sdl2)(3):解码

上一篇讲到ffplay的初始化和解复用,在解复用过程中创建了三个解码线程:音频、视频和字幕解码线程。同时将解复用的数据包分别添加到了音频包队列audioq、视频包队列videoq和字幕包队列subtitleq中。今天要讲的是从这三个包队列中分别进行解码,然后将解码出来的数据帧添加到对应的帧队列。显示线程就是从帧队列中取出数据帧然后进行显示。read_thead函数中用于解码的函数是stream

2017-08-05 20:09:51 1051

原创 图像去雾技术综述

研究图像去雾技术有一段时间,阅读很多文献以及实现了很多算法。因此将个人对图像去雾技术的理解写成这篇文章,避免自己忘记,以及跟广大网友交流学习。1、概述图像去雾的研究算法有很多,但是主要分为两类:基于图像增强的去雾算法和基于图像复原的去雾算法。基于图像增强的去雾算法去除图像的噪声,提高图像的对比度,从而恢复出无雾清晰视频。具有代表性的图像增强去雾算法有: 1. 直方图均衡

2017-08-04 16:55:40 19214 1

原创 ffplay源码剖析(3.2.4 + sdl2)(2):初始化与解复用

接上一篇继续阅读ffplay源码,前一篇从总体上了解了ffplay的整个框架:解复用,解码,显示播放。这一篇就讲第一个解复用。int main(int argc, char **argv){ int flags; VideoState *is; /* register all codecs, demux and protocols */#if CONFIG_AVD

2017-07-19 17:26:20 1249 1

原创 FFmpeg中AVPacket和AVFrame关系

最近在研究ffplay的源码,ffplay中有两个队列一个PacketQueue, 一个FrameQueue,对这两个队列之间的关系不是很清楚。于是对这两个结构进行了深入的研究。AVPacket结构用于存储压缩的数据,分别包括有音频压缩数据,视频压缩数据和字幕压缩数据。它通常在解复用操作后存储压缩数据,然后作为输入传给解码器。或者由编码器输出然后传递给复用器。对于视频压缩数据,一个AVPa

2017-07-10 09:23:07 10631

原创 ffplay源码剖析(3.2.4 + sdl2)(1):函数调用流程图

最近在学习ffplay的源码知识,网上关于ffplay的都是老版本的基于sdl1.x版本的,于是自己结合自己的理解分析了一下ffpaly3.2.4(基于sdl2)的源码,并记录下来供自己以后查阅。如果有理解错误,还请指正。一、总体框架:ffmpeg3.2.4版本中的ffplay的函数调用图如下所示:avdevice_register_all()这ffmpeg设备进行初始化与注册

2017-07-05 11:54:28 1073 1

原创 第六章:高级字符驱动程序操作

1、ioctl​除了读取和写入设备之外,大部分驱动程序还需要另外一种能力,即通过设备驱动程序执行各种类型的硬件控制。在用户空间,ioctl系统调用有如下原型:int ioctl(int fd, unsigned long cmd, .../*char *argp*/);驱动程序的ioctl方法原型与用户空间的版本不一样int (*ioctl)

2017-07-05 09:43:29 247

原创 第五章:并发与竞态

两个或多个进程读写某些共享数据,而最后的结果取决于进程运行的精确时序,就成为竞争条件(race condition)。竟态通常作为对资源的共享访问结果而产生的。当两个或多个进程需要访问相同的数据结构(或硬件资源)时,混合的可能性就永远存在。 因此在自己设计驱动程序的时候,第一个要记住的规则是,只要可能,就应该避免资源共享。如果没有并发的访问,也就不会有竟态的产生。 因此,仔细编写的内核代码

2017-07-05 09:43:16 310

转载 第三章:字符设备驱动

编写驱动程序的第一步就是:定义驱动程序为用户程序提供的功能(机制)1、主设备号和次设备号      对字符设备的访问是通过文件系统内的设备名称进行的。那些名称被称为特殊文件、设备文件、或者简单称之为文件系统树的节点,他们通常位于/dev目录下。    一个字符设备或者块设备都有一个主设备号和次设备号。主设备号和次设备号统称为设备号。主设备号用来区分不同种类的设备

2017-07-05 09:42:10 345

原创 第二章:构造和运行模块

1、一个简单的hello,world的模块:#include /* 用于指定初始化和清楚函数 */#include /* 包含有可装载模块所需的大量符号和函数定义 */#include static int hello_init(void){ printk(KERN_ALERT "Hello, World\n"); return 0;}

2017-07-05 09:41:42 447

原创 第一章:设备驱动程序

设备驱动程序是进入linux内核的大门。设备驱动程序的作用在于提供机制,而不是提供策略.需要提供什么功能(机制)和如何使用这些功能(策略)。内核功能的划分:进程管理:复制创建和销毁进程,并处理它们和外部世界之间的连接。内存管理文件系统:linux中每个对象几乎都可以当作文件来看待。设备控制网络功能linux有一个很

2017-07-05 09:40:41 421

原创 dm-crypt加密

安装 dmsetup和cryptsetup。(apt-get install dmsetup cryptsetup)检查是否已经建立设备映像程式 。(ls -l  /dev/mapper/control)cat /proc/crypto 查看aes模块是否加载,如果没有 modprobe aes。(可以是aes的任意一种)加载dm-crypt模块 modprobe dm-c

2017-07-03 14:24:44 1537

原创 ecryptfs加密

首先安装 ecryptfs-utils。(sudo apt-get install ecryptfs-utils)载入ecryptfs模块。(sudo modprobe ecryptfs)挂载ecryptfs文件系统sudo mount -t ecryptfs real-path ecryptfs-mount-path建议real-path和ecryptfs

2017-07-03 14:24:31 744

原创 多线程编程

#include int pthread_create(pthread_t *tid, const pthread_attr_t *attr, void *(*fun)(void *), void *arg);/* * 创建线程 * @tid —— 线程id的类型为pthread_t,成功创建后的线程由tid返回。 * @attr —— 指定创建线程的属性,如线程优先级、初试栈大小、是否

2017-07-03 14:23:39 210

转载 struct inode 和 struct file

1、struct inode──字符设备驱动相关的重要结构介绍内核中用inode结构表示具体的文件,而用file结构表示打开的文件描述符。Linux2.6.27内核中,inode结构体具体定义如下:struct inode {struct hlist_node    i_hash;struct list_head    i_list;struct list_head

2017-06-26 10:45:20 375

转载 linux内核链表实现

linux内核链表实现  内核实现的是双向循环链表,提供了链表操作的基本功能。(1)初始化链表头结点#define LIST_HEAD_INIT(name) { &(name), &(name) }#define LIST_HEAD(name) \ struct list_head name = LIST_HEAD_INIT(name)static inli

2017-06-20 11:28:24 317

原创 dlopen 介绍

dlopen 介绍#include void *dlopen(const char *filename, int flag);char *dlerror(void);void *dlsym(void *handle, const char *symbol);int dlclose(void *handle);打开一个动态链接库,并返回动态链接库的句柄。flag:

2017-06-19 11:25:54 1540

原创 glob和snprintf

glob函数        用于linux文件系统中路径名称的模式匹配。#includeint glob(const char *pattern, int flages, int (*errfunc)(const char* epath, int errno), glob_t *pglob);void globfree(glob_t *pgl

2017-06-16 11:24:31 560

原创 linux复用技术:poll

12#include int poll(struct  pollfd  *fds,  nfds_t   nfds,   int   timeout);总的来说,Poll机制会判断fds中的文件是否可读,如果可读则会立即返回,返回的值就是可读fd的数量,如果不可读,那么就进程就会休眠timeout这么长的时间,然后再

2017-06-16 11:24:00 310

原创 Udp 并发问题分析与总结

一、tcp并发与udp并发的区别       无论是epoll还是select,在观察有无数据就绪时,都是针对多个文件描述符。如果只有一个文件描述符,那么进程只要观察那一个文件描述符即可。在网络编程中,一个Socket对应一个文件描述符。Tcp协议的server在监听端口前初始化一个socket,每有一个新的连接,就新建一个socket。因此当tcp服务器面对高并发请求时,实际上有多个so

2017-06-14 09:44:07 6854

原创 守护进程和inetd超级服务器

13.1 概述守护进程(daemon)是在后台运行且不与任何控制终端关联的进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程常常在系统引导装入时启动,在系统关闭时终止。守护进程有多种启动的方法:1、在系统启动阶段,许多守护进程由系统初始化脚本启动。2、许多网络服务器将由inetd超级服务器启动。ine

2017-06-14 09:43:08 428

转载 Offsetof与container_of宏总结

1、前言  今天在看代码时,遇到offsetof和container_of两个宏,觉得很有意思,功能很强大。offsetof是用来判断结构体中成员的偏移位置,container_of宏用来根据成员的地址来获取结构体的地址。两个宏设计的很巧妙,值得学习。linux内核中有着两个宏的定义,并在链表结构中得到应用。不得不提一下linux内核中的链表,设计的如此之妙,只需要两个指针就搞定了。后续认

2017-06-13 20:03:01 287

原创 current宏

current         是指当前进程每个进程在内核态下都会开辟一个内核栈(8K或4K),一般大小为8KB,一般每个任务的thread_info结构在它的内核栈的尾端分配。这个thread_info结构是指向task_struct的。thread_info的代码在struct thread_info { struct

2017-06-13 08:58:38 569

转载 僵尸进程与孤儿进程

在探讨这个问题之前,我们先来弄清什么是进程。 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。 进程是一个具有独立功能的程序关于某个数据集

2017-06-12 15:10:23 282

原创 ubuntu卸载多余的内核

​dpkg --get-selections | grep linux-imagesudo apt-get remove linux-image-3.0.0-12-generic然后修改 /boot/grub/grub.cfg文件

2017-06-12 11:23:26 1302

原创 ubuntu中CUDA 5.5安装

​安装CUDA需要在非图形界面下进行,首先切换到虚拟控制台(ctrl + alt + F1)停止图形界面服务的运行sudo stop lightdm切换到cuda安装包所在的目录下面(cuda-~.run)sudo sh cuda-~.run 就会弹出安装界面依次输入accept --> y --> y --> 回车键 --> y --> 回车键修改环境

2017-06-12 11:23:02 460

原创 linux内核的编译(2.6.39.4)

下载源码 linux-2.6.39.4.tar.bz2把源码包复制到/usr/src下,然后解压(tar -xvf linux-2.6.39.4.tar.bz2)进入解压后的的目录, make mrproper然后开始编译内核, make menuconfig 可能会出现缺少ncurses包apt-get install libncurses5-dev进入编

2017-06-12 11:22:09 873

原创 Ubuntu中安装Nvidia闭源驱动

安装图形驱动前,要安装好下面的这些依赖包和开发工具apt-get install build-essential pkg-configapt-get install freeglut3-dev libx11-dev libxmu-dev libxi-dev libgl1-mesa libgl1-mesa-dri (编译Sample时所需的依赖包)libglu1-mesa libglu1

2017-06-12 11:20:55 3208 2

原创 apt和dpkg简要使用参考表

apt-get install 下载以及所有依赖的包,同时进行包的安装或升级。如果某个包被设置了hold(停止标志)就会被搁在一边(即不会被升级),更多hold细节请看下面。apt-get remove [--purge] 移除以及任何依赖这个包的其它包。--purge指明这个包应该被完全清除(purged),更多信息请看dpkg -P。apt-get update升级

2017-06-12 11:20:02 967

原创 linux中的重定向

当我们在shell中执行命令的时候,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件。由于文件描述符不容易记忆,shell同时也给出了相应的文件名。下面就是这些文件描述符及它们通常所对应的文件名:文件描述符输入文件—标准输入0:它是命令的输入,缺省是键盘,也可以是文件或其他命令的输出。输出文件—标准输出1:它是命令的输出,缺省是屏幕,也可以是文件。错

2017-06-12 11:19:35 511

原创 Ubuntu修改提示符

修改提示符的颜色和内容:1、打开.bashrc文件        vi    ~/.bashrc2、找到    if [ "$color_prompt" = yes ];then        在这之前加上color_prompt = yes        然后修改下面相应的PS1的内容和颜色3、第二个 PS1 为 PS1=’${debi

2017-06-12 11:18:32 953

原创 apt-get update 出现错误

1.将 /var/lib/apt/lists/partial/下的所有文件删除,一般就可以解决了2.如果还是不能解决 那么在/etc/apt/apt.conf.d/00aptitude 文件中加上一行Acquire::CompressionTypes::Order "gz";3.如果是因为版本太老而出错的话,把/etc/apt/sources.list 中 所有的arc

2017-06-12 11:17:50 909 1

原创 OpenCL读取内核cl文件

普遍上的OpenCL编程都分为两个部分,一个为主机端代码,一个为设备端代码。主机端代码的作用是:主要是负责设置设备执行代码的环境,以及与设备端的通信。设备端代码的作用是:设备上所要执行的功能函数。在主机端和设备端通信的过程中,会有一个读取设备端代码的过程。通常就是读取cl文件。因为在创建程序对象program时,需要用到这个cl文件。创建程序对象就会把这

2017-06-11 13:17:19 4919

原创 OpenCL编程之同步问题:事件

事件(event)是OpenCL中传递命令状态的对象。命令队列中的命令会生成事件,其他命令在执行之前可能要等待这些事件。用户可以创建定制事件,在宿主机和计算设备之间提供额外的一层控制。在内核中,程序员利用时间可以允许数据的移动与这些数据的相关操作重叠进行。OpenCL事件是OpenCL中传递命令有关信息的对象。事件的状态描述了相关命令的状态。可以取一下状态值。CL_

2017-06-11 13:16:28 3391

原创 gcc g++版本降级

先安装低版本的gcc和g++然后    cd    /usr/bin            sudo    mv    gcc    gcc.bak            sudo    ln    -s    gcc-低版本    gcc            sudo    mv    g++    g++.bak

2017-06-11 13:15:34 1231

转载 与内存管理相关的几个宏

这几个宏把无符号整数转换成对应的类型#define __pte(x) ((pte_t) { (x) } )#define __pmd(x) ((pmd_t) { (x) } )#define __pgd(x) ((pgd_t) { (x) } )#define __pgprot(x) ((pgprot_t) { (x) } )根据x把它转换成对应的无符号整数#defin

2017-06-11 13:14:21 333

原创 逻辑地址、线性地址、物理地址

逻辑地址            包含在机器语言指令中用来指定一个操作数或一条指令的地址。每一个逻辑地址都由一个段和偏移地址组成。线性地址           线性地址也称虚拟地址。是一个32位无符号整数,可以用来表示高达4GB的地址。物理地址            用于内存芯片级内存单元寻址。他们与从微处理器的地址引脚发送到内存总线上的电信号相对应。物理地址有3

2017-06-11 13:13:17 648

翻译 Getting Started: Building and Running Clang

Getting Started: Building and Running Clang本页面为您提供最短路径检查Clang和演示几个例子。这应该能让最小的遇到麻烦和混乱来运行它。如何你得到了你想要的结果,请考虑参与Clang社团Building Clang and Working with the Code如果你要检查和编译Clang,具体步骤如下:获得所需

2017-06-11 13:10:52 297

翻译 Getting Started with the LLVM System

Overview欢迎到LLVM!为了开始,你首先需要知道一些基本的信息。首先,LLVM有三部分。第一部分是LLVM套件。这部分包含了使用LLVM所包含的所有工具,库和头文件。它包含汇编,反汇编,位码分析器和位码优化器。他也包含了基本的回归测试,可以用来测试LLVM工具和Clang前端。第二部分是Clang前端。此组件是把C,C++,C.obj,C++.obj编译成LLVM位

2017-06-11 13:10:12 504

UEFI下图形驱动开发手册

This document lists required, recommended, and optional UEFI protocols and elements for graphics controller classes of device drivers. It also provides brief notes on design strategies and implementation for each protocol.

2023-11-27

FSL91030M datasheet

FSL91030M是一款32G带宽的二层以太网交换芯片,采用WireBond BGA676封装。 FSL91030M集成了8路千兆电口PHY,支持10/100/1000BASE-T及100BASE-FX功能;集成2路10G Serdes,可支持1000BASE-X、SGMII、QSGMII、O-USGMII和10G BASE-R功能;集成4路1G Serdes,可支持1000BASE-X和SGMII功能;4路1G Serdes及4路千兆电口PHY组合可配置成为4路Combo口。FSL91030M还支持2路RGMII/GMII/MII接口,作为可扩展管理接口。 FSL91030M集成了RISC_CPU,主频400MHz,支持8/16bits DDR3接口,最大支持2Gb DDR,速率1600MHz(时钟频率800MHz)内存;支持2路UART接口、1路JTAG接口、2路QSPI、1路I2C/MDIO接口和24路GPIO接口。

2023-11-27

Hi3531DV200 DDR3参数配置方法

Hi3531DV200 DDR3参数配置方法

2023-11-27

长工微is6608调试软件

IS6608A 是一款低压大电流且可以多相并联的DC-DC 电源芯片,该芯 片支持PMBUS 协议(IIC 协议的一种),因此需要一个上位软件与之通讯并加以 控制,IS6608A GUI 集成PMBUS 协议,用户可使用软件更为简易地更改内部配置, 并且可以对其就行烧录MTP,以到达调试芯片的目的,该软件至多可同时控制8 个不同的地址

2023-11-27

清华老师教你写文献综述.pdf

清华大学老师ppt课件。讲述如何一步一步好文献综述,详细具体的方法,整理了一套框架,帮助更好的理解文献综述的写法。

2020-03-08

基于单幅图像的快速去雾源码实现

基于单幅图像的快速去雾算法的源代码,可以直接运行的vs2010工程。去雾算法研究的同学可以看看。一种比较快速的图片去雾算法的工程实现。此算法耗时较小,去雾效果也不错。可以用于实时处理应用之中。

2017-08-09

单幅图像快速去雾算法

一种实时的图像去雾算法,速度快,效果好

2017-08-09

基于单幅图像的快速去雾

一种能够实时去雾技术的文章。去雾速度快,去雾效果好。

2017-08-09

OpenCL in action.pdf 英文,带书签

这是入门OpenCL最好的一本书。比OpenCL编程指南讲的好多了,而且每个程序都可以下载完整的代码。

2015-01-03

CUDA编程指南5.0

CUDA编程指南5.0水印版.pdf 最权威的CUDA编程指南。 希望对想学CUDA编程的人有用。

2014-08-04

CUDA(深入浅出谈CUDA)

中文版本的CUDA介绍的电子书,是pdf格式的,希望对CUDA有兴趣的人有所帮助。

2014-08-04

空空如也

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

TA关注的人

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