JansonZhe

行者无疆,爱无涯

Linux字符设备驱动和杂项设备驱动对比

初学Linux驱动程序的时候,可能对什么是字符设备驱动(char device)和杂项设备驱动(misc device)并不是很了解,更谈不上如何区分了。我自己当初在学习Linux字符设备驱动的时候,也并没有特地去了解其两者之间的区别,尤其是在两种驱动设备注册的时候,没有意识到其不同之处,导致后来...

2016-01-22 16:43:25

阅读数 3534

评论数 0

Linux内核:工作队列

在我的上一篇文章Linux内核:中断、软中断、tasklet中,我们已经了解了中断底半部的两种实现方式,即软中断和tasklet微线程。但是这两种方式归根结底都是采用软中断机制的,其根本上还是在中断的上下文中执行,所以这也就要求了采用这两种方式编写中断底半部,不能出现一些可能导致程序休眠或者是延迟...

2015-10-02 10:26:21

阅读数 3757

评论数 0

Linux内核:中断、软中断、tasklet

在之前我所写的Linux驱动程序中,会经常使用到中断机制,像CC1100高频驱动、倒车雷达驱动等等。但所用到的中断机制都基本上是用到中断的顶半部,即:编写中断处理函数,通过request_irq函数申请中断,这样当中断来临的时候,就会自动执行中断处理程序里面的内容。之所以没有使用到中断的底半部,是...

2015-09-28 16:21:24

阅读数 1655

评论数 0

编写JNI的两种应用层与JNI层方法映射方式

通常我们在编写的JNI 时,在定义上层应用层需要调用的函数中,我们需要对该函数进行应用层与JNI层方法之间的映射。这样上层的Android应用程序才能正确的调用我们的JNI函数,这种映射的方式一共有两种。在函数名中进行映射 在函数名中进行映射是最为简单的一种方法,因为只要我们知道调用我们JNI函...

2015-09-22 11:11:04

阅读数 1792

评论数 0

Linux内核:seek机制

在我们编写CC1100驱动程序和倒车雷达驱动程序的时候,我们都用到了当前读取数据标志位,即我们在驱动程序中会定义一个容器用来存放数据,每一次我们读完一个数据时,我们都会将我们的读数据变量加1,这样下一次再来读取数据的时候就不会读到以前的数据了,都会是全新的数据。当然这个方法是我们自己在编写驱动程序...

2015-09-19 16:53:26

阅读数 2396

评论数 0

Linux内核:poll机制

在编写驱动程序的过程当中我们可以使用poll机制来非阻塞的打开我们的设备文件,我们知道,在之前我们编写CC1100的驱动程序以及倒车雷达的驱动程序的时候,在read函数中都有用到过wait_event_interruptible_timeout这个函数,这个函数的主要作用就是采用非阻塞的read,...

2015-09-19 16:20:20

阅读数 5027

评论数 0

Linux内核:进程基础之进程ID与管理

Linux系统中的每一个进程都有一个唯一的标示——PID(Process ID),也叫进程ID。给每一进程设置一个标示的主要作用便是方便Linux系统管理数量庞大的进程,例如进程间的通信、判断子父进程、通过进程ID找到进程的task_struct等等,都需要使用到我们的进程ID。我们已经知道每一个...

2015-08-20 16:10:27

阅读数 2332

评论数 2

基于V4L2驱动程序的USB摄像头Android(JNI)的编写(三)

在上两篇文章基于V4L2驱动程序的USB摄像头Android(JNI)的编写(一)和基于V4L2驱动程序的USB摄像头Android(JNI)的编写(二)中,我详细介绍了如何配置V4L2的环境、设置捕获视频数据的格式,以及视频流数据捕获的过程。但是由于我们捕获到的视频数据是YUYV422格式的,那...

2015-08-11 10:27:44

阅读数 2725

评论数 1

C语言:数组指针、指针数组、指针的指针、函数指针

说到C语言的指针,可能大家都比较熟悉,基本上的都知道,指针就是存放地址的,无论是普通变量的地址,还是函数的地址都可以用指针表示。如果该指针用一个变量表示,那么这就是一个指针变量。所为指针变量就是这个指针所存放的地址是可以发生变化的,例如 int i = 6; int j = 7; int *p; ...

2015-08-09 09:41:14

阅读数 676

评论数 0

如何使自己编译的驱动程序具有读写权限

在Android系统中,我们通常在编写好驱动设备文件之后,如果直接编写JNI程序,通过上层Android应用程序调用驱动的设备文件的话,会显示无法打开设备错误,出现这样一个错误的主要原因是因为应用程序没有权限打开驱动设备。我们可以通过adb工具进入/dev目录输入:ls –al命令,可以显示当前设...

2015-08-07 19:55:52

阅读数 2905

评论数 0

Linux内核:container_of宏分析

我们在编写驱动程序的时候,会经常在open函数中用到container_of宏,那么这个在linux内核中这个宏的主要作用是什么呢?

2015-08-07 18:57:26

阅读数 547

评论数 0

Linux内核:通过wait_event和wake_up内在机制分析等待队列

等待队列在linux内核中,等待队列是一个非常重要的概念,也是一个非常重要的机制。我们会在很多函数当中用到等待队列的知识,例如completion机制、wait_event机制等等。在解释这些机制之前,我们首先要弄清楚什么是等待队列。

2015-08-07 16:27:22

阅读数 4870

评论数 1

基于V4L2驱动程序的USB摄像头Android(JNI)的编写(二)

在我的上一篇文章基于V4L2驱动程序的USB摄像头Android(JNI)的编写(一)中,我详细介绍了如何配置V4L2驱动程序的采集环境,那么在这篇文章中,我将详细分析V4L2采集视频的过程。一、向驱动程序申请缓冲帧 缓冲帧,顾名思义就是在Linux驱动程序中用于临时存放数据的“容器”,在V4L...

2015-08-07 09:52:26

阅读数 4664

评论数 2

基于V4L2驱动程序的USB摄像头Android(JNI)的编写(一)

video4 linux2(V4L2)是Linux内核中关于视频设备的内核驱动,它为Linux中视频设备访问提供了通用接口,在Linux系统中,本文主要介绍如何使用V4L2驱动程序打开我们的USB摄像头。同时着重介绍如何编写相应JNI(NDK)使Android应用程序能够打开我们外接的USB摄像头...

2015-08-06 17:00:42

阅读数 6043

评论数 11

关于Android.mk和build/envsetup.sh的一些小小理解

我们知道在Android的源代码中,我们会经常看到Android.mk的身影,那么它在我们编译源码的过程当中到底起到了什么作用呢?它和一般的Makefile又有什么联系?同时Android.mk和build目录下的envsetup.sh文件又有什么关联呢? 首先我们来阐述第一个问题,Androi...

2015-08-06 10:53:01

阅读数 1673

评论数 0

关于Android的HAL的一些理解

之前一直在学习基于Linux内核的一些字符型驱动的编程,对Linux内核驱动也算有了一些基本的了解吧,后来也做过一些基于Linux内核的驱动开发,像基于Android的CC1101高频模块的驱动开发,以及基于V4L2的USB摄像头开发。但是还是一直都没有用到过Android的HAL模块,这一次刚好...

2015-08-04 09:56:56

阅读数 4061

评论数 0

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