- 博客(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
转载 设备节点、设备驱动及设备的关联
这章将介绍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
转载 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关注的人