ioctl函数

Android Framework:Binder(5)-Native Service的跨进程调用

丶灬走出姿态 提交于 2020-03-11 00:19:00
Android Framework:Binder(5)-Native Service的跨进程调用 一、Native Service调用概述   在上一篇Native service的注册就已经可以看到Client端请求Server端的过程,Native Service是Client端,ServiceManager是Server端。   本篇从Native Service调用的角度来学习Client端是如何通过Binder驱动跨进程调用Server端的方法的。还是以Camera Service作为案例分析。   废话不说先上图:    上图主要有以下几个重点:   1. Client端跨进程调用Service端需要先跨进程向ServiceManager进程查询该Service,并获取到该包含该Service的handle值的扁平的binder对象,进而在Client端构造出Service的代理对象,通过该Service代理对象调用Service的方法。   2. Service在初始化时需要跨进程向ServiceManager注册自己,之后搭建了自己的线程池机制不断访问binder驱动查看是否有发向自己的Client端请求。   3. Client,Service,ServiceManager是运行在用户空间的独立进程,binder驱动运行在内核空间

wpa_supplicant与kernel的接口

我怕爱的太早我们不能终老 提交于 2020-03-01 10:22:08
1. 接口定义实现wpa_drivers wpa_drivers的定义如下: [cpp] view plain copy struct wpa_driver_ops *wpa_drivers[] = { #ifdef CONFIG_DRIVER_WEXT &wpa_driver_wext_ops, // 我的系统使用的这个老的接口 #endif #ifdef CONFIG_DRIVER_NL80211 // 现在流行的NL80211接口 &wpa_driver_nl80211_ops, #endif #ifdef CONFIG_DRIVER_HOSTAP &wpa_driver_hostap_ops, #endif #ifdef CONFIG_DRIVER_MADWIFI &wpa_driver_madwifi_ops, #endif #ifdef CONFIG_DRIVER_BROADCOM &wpa_driver_broadcom_ops, #endif #ifdef CONFIG_DRIVER_BSD &wpa_driver_bsd_ops, #endif #ifdef CONFIG_DRIVER_NDIS &wpa_driver_ndis_ops, #endif #ifdef CONFIG_DRIVER_WIRED &wpa_driver_wired_ops, #endif

wpa_supplicant与kernel交互

﹥>﹥吖頭↗ 提交于 2020-03-01 09:50:06
wpa_supplicant与kernel交互的操作,一般需要先明确驱动接口,以及用户态和kernel态的接口函数,以此来进行调用操作。这里分为4个步骤讨论。 1. 首先需要明确指定的驱动接口。 因为有较多的驱动接口可以使用,如 wext 、 nl80211 等。指定了之后,才能调用相应接口的方法。 2. 保存驱动接口 3. 接口函数的实现 ( 分为用户态和 kernel 态 ) 。系统已经定义了,我们只需找到定义的地方,了解有哪些函数。 4. 交互 (a) 用户态向 kernel 态发送请求 ( 通过 ioctl) (b)kernel 态向用户态发送事件通知 ( 通过 netlink) 1. 首先需要明确指定的驱动接口 (1) 查看 init.XX.rc 中指定的 driver 的命令参数; (2) 根据命令参数,在 wpa_driver_ops *wpa_drivers[] 中查找对应接口。 wpa_drivers[] 的定义是在 [-->external/wpa_supplicant_8/src/drivers/drivers.c] 2. 保存驱动接口 在 wpa_supplicant 初始化过程中,在 wpa_supplicant_init_iface 方法中会调用 wpa_supplicant_set_driver 方法。该方法中又会调用 select_driver 方法

V4L2视频应用程序编程架构

人盡茶涼 提交于 2020-02-25 02:02:02
V4L2视频应用程序编程架构 V4L(video4linux是一些视频系统,视频软件、音频软件的基础,经常时候在需要采集图像的场合,如视频监控,webcam,可视电话,经常使用在embedded linux中是linux嵌入式开发中经常使用的系统接口。它是linux内核提供给用户空间的编程接口,各种的视频和音频设备开发相应的驱动程序后,就可以通过v4l提供的系统API来控制视频和音频设备,也就是说v4l分为两层,底层为音视频设备在内核中的驱动,上层为系统提供的API,而对于我们来说需要的就是使用这些系统API。 V4L2较V4L1有较大的改动,并已成为2.6的标准接口。下边先就V4L2在视频捕捉或camera方面的应用框架。 V4L2采用流水线的方式,操作更简单直观,基本遵循打开视频设备、设置格式、处理数据、关闭设备,更多的具体操作通过ioctl函数来实现。 1、打开视频设备 在V4L2中,视频设备被看做一个文件。使用open函数打开这个设备: int cameraFd; cameraFd = open("/dev/video0", O_RDWR, 0); //用阻塞模式打开摄像头设备 2、设定属性及采集方式 打开视频设备后,可以设置该视频设备的属性,例如裁剪、缩放等。这一步是可选的。在Linux编程中,一般使用ioctl函数来对设备的I/O通道进行管理: int ioctl

rk3288 7.1 mlx90640调试

一笑奈何 提交于 2020-02-22 20:04:31
由于疫情的影响,最近在调试测温模块mlx90640 mlx90614,下面简单描述下mlx90640的驱动开发. 站在巨人( https://blog.csdn.net/qq_33487044/article/details/86565536 )的肩膀上做一些更为详细的说明. 我们看技术手册上可以了解到 mlx90640是一款红外热像仪模块, 32×24 像素, I2C 接口通信,兼容 3.3V/5V 电平。采用 MLX90640 远红外热传感器阵列,可精确检测特定区域和温度范围内的目标物体,尺寸小巧,可方便集成到各种工业或智能控制应用中。 ⚫ 采用 MLX90640 远红外热传感器阵列, 32×24 像素 ⚫ 支持 I2C 接口通信,可设置为快速模式(速率可达 1MHz) ⚫ 噪声等效温差(NETD)仅为 0.1K RMS@1Hz 刷新率,噪声性能好 ⚫ 板载电平转换电路,可兼容 3.3V/5V 的工作电平 通讯方式为 I2C,支持 I2C 高速模式(最高可达 1MHz),只能作为 I2C 总线上的从设备, SDA 和SCL 端口可以承受 5V 电压,可直接接入到 5V I2C 总线中,模块的设备地址是可以编程的,最多可以有127 个地址,出场默认值为 0x33,具体的i2c协议这边就不介绍了,根据上述我们可以得知通讯的i2c设备地址为0x33。 因此有dts的配置: &i2c4

Linux中IIC总线驱动分析

断了今生、忘了曾经 提交于 2020-01-21 07:26:01
虽然I2C硬件体系结构比较简单,但是I2C体系结构在Linux中的实现却相当复杂.通过阐述Linux系统中I2C总线体系结构,在此基础上完成嵌入式Linux系统中I2C总线驱动的开发. 1. 嵌入式Linux中I2C驱动程序分析 I2C(Inter2IntegratedCircuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备.嵌入式系统中,微控制器通过I2C总线可随时可对各个系统中的组件进行设置和查询,以管理系统的配置或掌握组件的功能状态来控制外围设备.I2C总线因为协议成熟,引脚简单,传输速率高,支持的芯片多,并且有利于实现电路的标准化和模块化,得到了包括Linux在内的很多操作系统的支持,受到开发者的青睐.在Linux环境下使用I2C总线协议,需要理解Linux的I2C总线驱动的体系结构,在此基础上来进行嵌入式驱动程序和应用程序的开发. 1.1 Linux的I2C驱动框架 Linux内核的I2C总线驱动程序框架如图1所示: Linux的I2C体系结构分为3个组成部分: I2C核心:I2C核心提供了I2C总线驱动和设备驱动的注册,注销方法,I2C通信方法(即"al2gorithm")上层的,与具体适配器无关的代码以及探测设备,检测设备地址的上层代码等.这部分是与平台无关的

2019年12月2日Linux开发手记

試著忘記壹切 提交于 2019-12-06 08:51:00
开始学习在Linux下视频源捕获驱动框架,也就是V4L2(video4linux),本次关于v4l2的知识准备主要在于其的官方例程,理解官方例程也就差不多掌握了v4l2的基本内容。例程在: http://blog.chinaunix.net/uid-23983143-id-3351976.html 知识准备: v42视频编程的流程和对文件操作并没有什么本质的不同,大概的流程如下 1.打开视频设备(通常是/dev/video0) 2.获得设备信息。 3.根据需要更改设备的相关设置。 4.获得采集到的图像数据(在这里v4l提供了两种方式,直接通过打开的设备读取数据,使用mmap内存映射的方式获取数据)。 5.对采集到的数据进行操作(如显示到屏幕,图像处理,存储成图片文件)。 6.关闭视频设备。 知道了流程之后,我们就需要根据流程完成相应的函数。 第一步: 那么我们首先完成第1步打开视频设备,需要完成int v4l_open(char *, v4l_device *); 具体的函数如下 #define DEFAULT_DEVICE “/dev/video0” int v4l_open(char *dev , v4l_device *vd) { if(!dev)dev= DEFAULT_DEVICE; if((vd-fd=open(dev,O_RDWR))<0){perror(“v4l

流媒体:V4L2视频获取

匿名 (未验证) 提交于 2019-12-03 00:30:01
从深圳回来已经20多天了,除了完善毕业设计程序和论文,其他时间都去玩游戏了。真的是最后的一段时间能够无忧无虑在校园里挥霍自己的青春了。今天完成的答辩,比想象的要简单,一直以来想把我现在的这个流媒体的东西用文字记录下来,但是都去玩了。但是今天开始还是把这些东西都记录下来。其实整个项目最开始接触的是socket编程,用socket写一个很简单的机遇POP3协议的邮件发送程序都觉得沾沾自喜。现在看来但是确实还是很幼稚的。。。   其实V4L2就是LINUX下的一套API,我刚刚开始接触的时候觉得好难,完全就TMD看不懂啊。。。反正就是各种不靠谱,其实现在看来这些东西不难,其实很简单。只是当时没有决心去做而已。其实大多数的初学者都有我这样的想法,看着这些不熟悉的东西都会很烦躁,沉不住气不想去看。但是事实是多看看多GOOGLE查查基本就能理解了。下面是API的代码解析: 1)打开一个视频设备: fd = open( " /dev/video0 " , O_RDWR /* |O_NONBLOCK */ , 0 );   要从摄像头中回去到图像首先当然要打开一个摄像头,在LINUX中对摄像头的操作是对相应的设备文件进行操作实现的。在LINUX的根文件系统中/dev目录有很多设备文件,其中摄像头对应的是viode0,使用open函数打开,O_RDWR表示读写,O_NONBLOCK表示非阻塞

xen块设备体系结构(5)

不想你离开。 提交于 2019-12-01 12:09:54
blktap 又回到那个问题,I/O请求从前端到后端blkback之后,如何从blkback到大tapdisk2进程? pvops/Drivers/Xen/Blktap/ 下面是blktap的驱动代码,其中blktap的设备结构如下: struct blktap { int minor; unsigned long dev_inuse; struct blktap_ring ring; struct blktap_device device; struct blktap_page_pool *pool; wait_queue_head_t remove_wait; struct work_struct remove_work; char name[BLKTAP2_MAX_MESSAGE_LEN]; struct blktap_statistics stats; }; 根据目前的理解,blktap包含了四个模块:blktap_device, blktap_ring, blktap_sysfs, blktap_control static struct blktap_page_pool *default_pool 定义了blktap驱动和tapdisk2(??)进程的消息交换的内存页空间?? (个人推测,待求证) blktap_page_pool_init 为slab

项目一. 移动物体监控系统

馋奶兔 提交于 2019-11-27 13:36:31
项目一. 移动物体监控系统 Sprint0-产品设计与规划 第1课-产品功能展示 我们在学校的时候,做项目开发,可能就是想到了哪里就做哪里。但是在实际公司的开发过程中,我们是要严格的按照公司的流程来进行的。 项目开发分成了准备阶段和开发阶段: 我们的最后效果就是,利用摄像头和音响完成连接,如图: 当有移动物体在摄像头面前移动时,摄像头能采集图像和视频,并且发出报警的声音。通过访问对应的局域网,我们可以通过网页访问,如下: 第2课-产品功能模型设计 第3课-Product Backlog规划 我们登录网址https://www.leangoo.com/kanban/board_list,进行相应的注册。 创建新的product-backlog,添加我们需要的功能,完成后如下: Sprint1-声音报警子系统开发 第1节- Sprint Backlog规划 product-backlog是关于我们产品的一个功能的需求列表,这是一个大的需求,并不够细化,于是我们还要进行sprint-backlog的规划。 我们在网站https://www.leangoo.com/中,创建新的sprint-backlog。接下来我们分析我们应该做的事情,首先我们需要声卡的使能,接下来是播放器的移植。 我们创建如下所示的sprint-backlog,对项目进行相应的时间规划,工作量规划。随着我们工作量的完成