自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(94)
  • 收藏
  • 关注

转载 深入理解l内核v4l2框架之video for linux 2(二)

续。。。3、video_devicestruct video_device{#if defined(CONFIG_MEDIA_CONTROLLER)struct media_entity entity;#endifconst struct v4l2_file_operations*fops;struct device dev; /*

2013-08-25 22:31:53 608

转载 深入理解l内核v4l2框架之video for linux 2(一)

在看了很多关于v4l2驱动的例程之后,想深入研究下linux内核的v4l2框架,顺便把这些记录下来,以备查用。Video for Linux 2     随着一些视频或者图像硬件的复杂化,V4L2驱动也越来越趋于复杂。许多硬件有多个IC,在/dev下生成多个video设备或者其他的诸如,DVB,ALSA,FB,I2C ,IR等等非V4L2的设备。所以,V4L2驱

2013-08-25 22:31:09 719

转载 V4L2 驱动框架概览

http://blog.chinaunix.net/uid-24613341-id-3458703.html

2013-08-25 22:29:23 633

转载 设备节点、设备驱动及设备的关联

这章将介绍Linux系统的设 备,这样我们才能清楚的知道应用程序和设备驱动程序是如何的工作的,或者说应用程序是如何控制驱动程序的,进而知道应用程序是如何通过驱动程序操作设备 的,另外会详细的介绍设备号及设备文件。 Linux设备分类Linux下的设备通常分为三类,字符设备,块设备和网络设 备。字符设备一个字符设 备是一种字节流设备,对设备的存取只能按顺序按字节的

2013-08-18 15:49:42 847

转载 select(poll)系统调用实现解析(三)

三、讨论几个细节      3.1、fop->poll()       fop->poll()函数就是file_operations结构体中的poll函数指针项,该函数相信很多人都知道怎么写,网上大把的文章介绍其模板,但是为什么要那么写,而且它做了什么具体的事情?本小节来揭开其神秘面纱,先贴一个模板上来。 static unsigned int XXX_poll(str

2013-08-11 16:38:18 527

转载 linux内核wait_queue深入分析

前几天在看驱动的时候碰到了等待队列,上网去搜了一下,再结合代码看了一下,深有体会.在 kernel 里,wait_queue 的应用很广,举凡 device driver,semaphore 等方面都会使用到 wait_queue 来 implement。所以,它算是 kernel 里蛮 基本的一个数据结构。首先,我们得明白,linux中的所有的进程都由task_struct这个结构管理。

2013-08-11 15:43:29 539

转载 select(poll)系统调用实现解析(二)

二、重要结构体之间关系       比较重要的结构体由四个:struct poll_wqueues、struct poll_table_page、struct poll_table_entry、struct poll_table_struct,这小节重点讨论前三个,后面一个留到后面小节。      2.1、结构体关系每一个调用select()系统调用的应用进程都会存在一个struc

2013-08-11 15:41:48 651

转载 select(poll)系统调用实现解析(一)

上层要能使用select()和poll()系统调用来监测某个设备文件描述符,那么就必须实现这个设备驱动程序中struct file_operation结构体的poll函数,为什么?因为这两个系统调用最终都会调用驱动程序中的poll函数来初始化一个等待队列项, 然后将其加入到驱动程序中的等待队列头,这样就可以在硬件可读写的时候wake up这个等待队列头,然后等待(可以是多个)同一个硬件设备可读

2013-08-04 16:16:34 548

转载 字符设备驱动代码

cdev.cµ÷¶ÈºÍÄÚ´æ¹ÜÀíËù±ØÐëµÄ

2013-02-17 14:51:35 111

转载 Andriod编译内核模块*.ko

在单独编译Android的内核模块之前,必须要成功配置编译过整个Android系统(至少要编译成功boot.img),生成正确的out目录。1.编写Makefile。按照以下格式编写Makefile。    1 obj-m += aaa.o  2 #obj-m += abc.o  3 #abc-objs := aaa.o bbb.o ccc.o  4   5 K

2012-10-17 22:36:46 529

转载 ubuntu 下 驱动开发环境

本文是参考了网上多篇帖子而写的算不上什么原创。唯一值得欣慰的只不过在本机上实现罢了。因为毕竟失败了几次。也因为本人是初学驱动编程 很多简单的问题在我来说是相当的困难的。望有识之士不要笑话。最后,希望本文能给刚学驱动而还没开头的人提供一些帮助。刚看 O'REILLY 写的《LINUX 设备驱动程序》时。作者一再强调在编写驱动程序时必须 建立内核树。所谓内核树,我的理解和网上资料说的一致就是内核源

2012-10-17 22:36:08 520

转载 Android Camera HAL浅析

http://blog.youkuaiyun.com/crycheng/article/details/7780471

2012-08-21 16:47:52 462

转载 讲讲volatile的作用

一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:     1). 并行设备的硬件寄存器(如:状态寄存器)     2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic

2012-08-09 11:17:48 503

转载 SCULL简单字符设备驱动

SCULL简单字符设备驱动试验环境: Fedora8+ 2.6.23 内核+vim7.1+lxr Server联系方式:4bsfreedom$gmail.com(替换 $ 为 @ )(不知如何上传附件,相关资料包括源码可发邮件向我索取)2008年01月28日  序言    我的《Linux Device Driver》(简称LDD)读书笔记,这篇文章因为我贪玩,明显

2012-07-30 00:17:17 1200

转载 Linux 多线程应用中如何编写安全的信号处理函数

Linux 多线程应用中编写安全的信号处理函数在开发多线程应用时,开发人员一般都会考虑线程安全,会使用 pthread_mutex 去保护全局变量。如果应用中使用了信号,而且信号的产生不是因为程序运行出错,而是程序逻辑需要,譬如 SIGUSR1、SIGRTMIN 等,信号在被处理后应用程序还将正常运行。在编写这类信号处理函数时,应用层面的开发人员却往往忽略了信号处理函数执行的上下文背景,没

2012-07-03 15:27:53 556

转载 线程同步之利器(2)——区域锁(Scoped locking)

什么是区域锁确切的说,区域锁(Scoped locking)不是一种锁的类型,而是一种锁的使用模式(pattern)。这个名词是Douglas C. Schmidt于1998年在其论文Scoped Locking提出,并在ACE框架里面使用。但作为一种设计思想,这种锁模式应该在更早之前就被业界广泛使用了。区域锁实际上是RAII模式在锁上面的具体应用。RAII(Resource Acquis

2012-07-02 15:51:02 456

转载 线程同步之利器(1)——可递归锁与非递归锁

概述最常见的进程/线程的同步方法有互斥锁(或称互斥量Mutex),读写锁(rdlock),条件变量(cond),信号量(Semophore)等。在Windows系统中,临界区(Critical Section)和事件对象(Event)也是常用的同步方法。 简单的说,互斥锁保护了一个临界区,在这个临界区中,一次最多只能进入一个线程。如果有多个进程在同一个临界区内活动,就有可能产生竞态条件

2012-07-02 15:21:13 556

转载 Linux线程池

Linux下通用线程池的创建与使用本文给出了一个通用的线程池框架,该框架将与线程执行相关的任务进行了高层次的抽象,使之与具体的执行任务无关。另外该线程池具有动态伸缩性,它能根据执行任务的轻重自动调整线程池中线程的数量。文章的最后,我们给出一个简单示例程序,通过该示例程序,我们会发现,通过该线程池框架执行多线程任务是多么的简单。 为什么需要线程池目前的大多数网络服务器,包括Web服务

2012-06-29 16:48:58 498

原创 通过文件名获取uri

private Uri parsePath(String path) { String fullPath = "silent"; if (!"".equals(path) && !"silent".equalsIgnoreCase(path)) { fullPath = Environment.getCustpackDirectory()

2012-06-29 16:37:50 842

转载 Android中内容观察者的使用---- ContentObserver类详解

前言: 工作中,需要开启一个线程大量的查询某个数据库值发送了变化,导致的开销很大,后来在老大的指点下,利用了ContentObserver完美的解决了该问题,感到很兴奋,做完之后自己也对ContentObserver做下总结。ContentObserver——内容观察者,目的是观察(捕捉)特定Uri引起的数据库的变化,继而做一些相应的处理,它类似于 数据库技术中的触发器(Trigger

2012-03-06 15:00:00 632

原创 判断当前进程是否是Gallery3D

static bool isGalleryProcess(){ char cmdline[128]; sprintf(cmdline, "/proc/%d/cmdline", getpid()); char processName[1000]; memset(processName, 0, sizeof(processName)); int fd = op

2012-02-29 10:04:31 491

原创 获取fd指向的文件

使用函数:readlink相关函数: stat, lstat, symlink  表头文件: #include   定义函数:int readlink(const char *path, char *buf, size_t bufsiz);  函数说明:readlink()会将参数path的符号连接内容存储到参数buf所指的内存空间,返回的内容不是以\000作字符串结尾,但会将字符

2012-02-28 10:23:44 582

原创 为 Android 添加 Java 层服务(三)

每一个应用程序都有自己的进程,进程之间不能互相访问,这叫做应用程序沙漏(application sandboxing)为了能用使应用程序能互相访问,Android提供IPC(interprocess communication protocol)IPC protocol因为需要整理封装(marshaling/un marshaling数据)而变得复杂。因此.Android提供 AIDL

2012-02-17 09:53:08 523

转载 [Binder.5] Android系统进程间通信Binder机制在应用程序框架层的Java接口源代码分析

在前面几篇文章中,我们详细介绍了Android系统进程间通信机制Binder的原理,并且深入分析了系统提供的Binder运行库和驱动程序的源代码。细心的读者会发现,这几篇文章分析的Binder接口都是基于C/C++语言来实现的,但是我们在编写应用程序都是基于Java语言的,那么,我们如何使用Java语言来使用系统的Binder机制来进行进程间通信呢?这就是本文要介绍的Android系统应用程序框架

2012-01-31 15:26:39 696

转载 [Binder.4] Android系统进程间通信(IPC)机制Binder中的Client获得Server远程接口过程源代码分析

在上一篇文章中,我们分析了Android系统进程间通信机制Binder中的Server在启动过程使用Service Manager的addService接口把自己添加到Service Manager守护过程中接受管理。在这一篇文章中,我们将深入到Binder驱动程序源代码去分析Client是如何通过Service Manager的getService接口中来获得Server远程接口的。Client

2012-01-31 15:26:04 640

转载 [Binder.3] Android系统进程间通信(IPC)机制Binder中的Server启动过程源代码分析

在前面一篇文章浅谈Android系统进程间通信(IPC)机制Binder中的Server和Client获得Service Manager接口之路中,介绍了在Android系统中Binder进程间通信机制中的Server角色是如何获得Service Manager远程接口的,即defaultServiceManager函数的实现。Server获得了Service Manager远程接口之后,就要

2012-01-31 15:25:11 554

转载 [Binder.2] 浅谈Android系统进程间通信(IPC)机制Binder中的Server和Client获得Service Manager接口之路

在前面一篇文章浅谈Service Manager成为Android进程间通信(IPC)机制Binder守护进程之路中,介绍了Service Manager是如何成为Binder机制的守护进程的。既然作为守护进程,Service Manager的职责当然就是为Server和Client服务了。那么,Server和Client如何获得Service Manager接口,进而享受它提供的服务呢?本文

2012-01-31 15:24:10 528

转载 [Binder.1] 浅谈Service Manager成为Android进程间通信(IPC)机制Binder守护进程之路

上一篇文章Android进程间通信(IPC)机制Binder简要介绍和学习计划简要介绍了Android系统进程间通信机制Binder的总体架构,它由Client、Server、Service Manager和驱动程序Binder四个组件构成。本文着重介绍组件Service Manager,它是整个Binder机制的守护进程,用来管理开发者创建的各种Server,并且向Client提供查询Ser

2012-01-31 15:23:28 603

转载 [Binder.0] Android进程间通信(IPC)机制Binder简要介绍和学习计划

在Android系统中,每一个应用程序都是由一些Activity和Service组成的,一般Service运行在独立的进程中,而Activity有可能运行在同一个进程中,也有可能运行在不同的进程中。那么,不在同一个进程的Activity或者Service是如何通信的呢?这就是本文中要介绍的Binder进程间通信机制了。        我们知道,Android系统是基于Linux内核的,而Lin

2012-01-31 15:20:01 489

转载 mmap详解

mmap功能描述: mmap将一个文件或者其它对象映射进内存。文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。munmap执行相反的操作,删除特定地址区域的对象映射。基于文件的映射,在mmap和munmap执行过程的任何时刻,被映射文件的st_atime可能被更新。如果st_atime字段在前述的情况下没有得到更新,首次对映射区的第一个页索引

2012-01-17 14:34:44 419

转载 Android xml资源文件中@、@android:type、@*、?、@+含义和区别

一.@代表引用资源1.引用自定义资源。格式:@[package:]type/nameandroid:text="@string/hello" 2.引用系统资源。格式:@android:type/name    android:textColor="@android:color/opaque_red"  注意:其实@android:type/name是

2012-01-16 13:36:40 447

转载 为 Android 添加 Java 层服务(二)

同前一篇文章类似,此文旨在简单介绍一下如何在 java层添加自己的服务,相关的理论网上已经有很多文章,在此不在详述。Java层服务顾名思义即为从 Java层提供的服务,它与 C++层的服务不同之处在于其服务进程的运行由系统( ServiceManager)统一维护。在文件 frameworks /base /services /java /com /android /server /Sys

2012-01-11 14:51:37 500

转载 为 Android添加底层核心服务(一)

1.     为什么要写底层核心服务呢?          因为底层核心服务是 Android框架里最接近 Linux/Driver的部分。为了充分发挥硬件设备的差异化特性,核心服务是让上层 Java应用程序来使用 Driver/HW Device 特色的重要管道。例如 Media、 Telephone等底层硬件。       在开机过程中,就可以启动核心服务(汉字输入法服务等),让众多应

2012-01-11 14:51:04 750 1

转载 什么是文件描述符

文件描述符标志?         文件描述符是   Unix   系统内核中用于表示特定进程打开的特定文件的方式,通常是一个   int   类型的变量。当进程打开一个文件的时候,内核生成一个文件描述符,传递给调用进程;当进程需要操作这个文件的时候只要向内核传递这个描述符,内核就可以找到对应的文件执行响应操作 1. 文件描述符对于内核而言,所有打开的文件都通过文件描述符引用。文

2012-01-07 13:54:48 860

转载 Linux IPC 之:UNIX Domain Socket

ocket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket。虽然网络socket也可用于同一台主机的进程间通讯(通过loopback地址127.0.0.1),但是UNIX Domain Socket用于IPC更有效率:不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等,只是将应用层数据从一个进程拷贝到另一个进

2012-01-06 12:40:08 780

转载 linux中fork()函数详解

一、fork入门知识     一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。    一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进

2012-01-05 23:59:10 629

转载 android源码分析流程-init.c

工具:Source Insight      最好也打开源码,一步一步的跟,并仔细看后面的注释。一、linux内核起来后,android的第一个用户进程:init   1.那么来看看init.c中的main函数,它做了什么?   Init.c system\core\Init打开source Insigt   可以看到:    ...    open_devnull

2012-01-04 19:27:02 1398

原创 学习init所用到的C语言知识

C语言库函数名: atoi  功 能: 把字符串转换成整型数.  名字来源:array to integer 的缩写.  原型: int atoi(const char *nptr);  函数说明: 参数nptr字符串,如果第一个非空格字符不存在或者不是数字也不是正负号则返回零,否则开始做类型转换,之后检测到非数字(包括结束符 \0) 字符时停止转换,返回整型数。  头文件:

2012-01-04 17:17:02 1337

转载 Ubuntu Android 2.3的编译环境 Ubuntu 11.04 x64的版本

Ubuntu 10.10 x64的版本第一步:安装Java SDK 1.6 后续的版本估计都是要用JDK 1.6了吧这里给个地址,大家自助下载:http://www.oracle.com/technetwork/java/javase/downloads/index.html然后修改~/.profile 添加下边这两行:export PATH=$PATH:/opt/jdk

2011-12-29 23:02:47 1376

转载 JNI Examples for Android

原文地址:http://android.wooyd.org/JNIExample/#NWD1sCYeT-CImportant noticeThe instructions in these document are applicable to older Androidfirmwares. Starting with firmware version 1.5 the Android

2011-12-21 18:33:42 923

空空如也

空空如也

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

TA关注的人

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