
RK3399移植
文章平均质量分 84
江南才尽,年少无知!
志在九天不为乡愁换白发,偏偏年少白衣博天涯!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
第一章:JNI的简单使用(4)-访问c程序
上一小节,介绍了界面设计怎么和具体功能函数联系在一起。下面将介绍在andriod系统中怎么访问C程序在java中是无法调用C函数的,但是我们要操作硬件又不得不去调用C函数,看起来这是个十分矛盾的问题。其实不然,例如:在winds操作系统中,我们没有办法执行linux程序,但是通过虚拟机可以运行ubuntu执行linux系统程序。同理,在andriod系统中,我们也可以创建一个虚拟机,去调用C......原创 2019-01-31 18:00:19 · 1035 阅读 · 1 评论 -
第一章:JNI的简单使用(5)-加载内核驱动
上一节我们介绍 了andriod软件层怎么调用C程序,以及C库的编译与加载,实现了应用层和底层连系的关键部分,接下来,把内核驱动部分编写完成,该章节就结束了,假定你已经看过之前的博文。LED驱动加载相信大家看已经有了一定linux驱动的基础,简单驱动不做介绍,可另行查阅其他资料,创建C文件leds_drv.c,代码如下:#include <linux/module.h>#inc...原创 2019-02-01 13:11:42 · 621 阅读 · 1 评论 -
第二章:硬件访问服务(1)-框架介绍
通过上一章节,知道怎么通过JNI注册本地函数,注册之后,APP软件可以间接调用C函数,进而访问硬件。但是(之前也有提及过),我们直接编写APP程序,然后访问硬件是不安全的,比如:手机是有很多APP的,如果每个APP需要播放声音,那么如果同一时刻到底播放谁的呢?针对类似问题,adriod系统中,有一套较好的解决方法-硬件访问服务\color{red}{硬件访问服务}硬件访问服务。顾名思义,这个框架是......原创 2019-02-01 19:38:45 · 800 阅读 · 0 评论 -
第二章:硬件访问服务(2)-系统编写
通过上一节的介绍,对于android硬件访问服务器有了大致的了解,根据上一节的框图,我们在来梳理一下要点。一个饭店要正常的营业,顾客,菜单菜式,厨师缺一不可。我们的要点亮LED也是同样,APP(应用层),硬件访问服务器,LED服务,本地函数注册都不能缺少。总的来说,我们需要实现以下几点1.JNI(用于注册本地C函数,转化为java方法)和LED_HAL(本地C函数,对硬件的操作-注意:不是内核驱......原创 2019-02-03 01:13:07 · 698 阅读 · 0 评论 -
第四章:Android灯光系统(5)-通知灯
上小节我们分析了电池灯的源码,这小节我们将编写通知灯的使用过程。我们知道,当手机接收到短信的时候,他会发出声音,并且这个通知灯会亮起,那么我们怎么实现呢?一般步骤如下:1. getSystemService("NOTIFICATION_SERVICE")2. 构造notfification (1)类别:该次实现类别为通知等 (2)其他:颜色,OnMS,OffMS。3. 发出通知......原创 2019-02-14 18:03:43 · 1470 阅读 · 1 评论 -
第二章:硬件访问服务(3)-APP修改编译
通过上一小节,我们硬件访问服务已经基本完成(还有少些部分需要修改,下小节为大家讲解),该小节我们实现APP部分。APP修改在第一章节中,我们在工程app/src/main/java/com/example/administrator/下创建了hardlibrary目录编写呢HardControl.java文件,把对led的操作封装成了一个类,需要对led操作时,我们导入该类就可以了。现在我们......原创 2019-02-04 18:06:43 · 765 阅读 · 1 评论 -
第二章:硬件访问服务(4)-HAL编写
通过前面的学习,我们知道怎么通过andriod硬件访问服务控制硬件,再次贴出框图如下其中红色圈出部分我们已经完成,我们知道在andriod系统中,java程序是无法直接访问硬件的,他访问硬件需要service_manager.c发出请求,才能操控硬件,之前我们通过com_android_server_LedService.cpp直接访问硬件,这种方法一般不被推荐,主要有以下几点1.单我们需要......原创 2019-02-05 02:30:14 · 998 阅读 · 1 评论 -
第二章:硬件访问服务(5)-反射使用
这一节,我们将修改APP,使用反射的方法去操控硬件。打开AS工程app-> java-> com.example.administrator中的MainActivity.java文件。注释文件中的以下代码//import android.os.ServiceManager;//import android.os.ILedService;//iLedService = ILedS......原创 2019-02-05 23:00:32 · 956 阅读 · 0 评论 -
第三章:android基础(1)-消息处理机制
在进入实战之前,先讲解一些android相关的基础知识,因为这些知识会在后续阶段频繁使用,这小节主要讲解的是android消息处理机制。基础APP在讲解之前,我们需要一个最基础的APP,我们使用Android Studio创建一个最简的工程,然后添加一个button,AS工程中app-> res-> layout-> activity_main.xml(text)的内容如下......原创 2019-02-07 15:33:12 · 506 阅读 · 1 评论 -
第四章:Android灯光系统(1)-总体框架
通过前面的学习,我们知道 Android系统框架大致如下图所示总的来说可以分为四个层次系统框架1. app应用层:(主要由java语言编写)2. Framework层:该层主要是实现的是JNI,让APP具有调用C语言的能力(涉及java,c++,c语言)3. 硬件操控层:一般都是操作硬件的封装库,其实就是相当于llinux系统中的应用层(一般由C语言编写,少数也可以使用C++)4. ......原创 2019-02-08 18:35:58 · 1135 阅读 · 0 评论 -
第四章:Android灯光系统(2)-led_class驱动
在我们的安卓手机中,有多种灯光,在SDK/hardware/libhardware/include/hardware文件中,可以看到如下定义#define LIGHT_ID_BACKLIGHT "backlight"#define LIGHT_ID_KEYBOARD "keyboard"#define LIGHT_ID_BUTTONS ......原创 2019-02-09 01:43:19 · 2140 阅读 · 0 评论 -
第四章:Android灯光系统(3)-编写HAL
该小节首先简单分析了一下java应用层,然后参考hardware/rockchip/liblights/lights.cpp编写了HAL文件lights.c,并且分析其原理。下小节将为大家分析安卓源码中的电池灯部分,敬请期待。https。原创 2019-02-09 02:45:13 · 1246 阅读 · 1 评论 -
第一章:JNI的简单使用(1)-开发环境
硬件环境开发板:GEC-3399开发板(主板芯片为RK3399),不打广告,需要了解请百度。软件环境虚拟机:ubuntu18.04交叉工具链:gcc-aarch64-linux-gnu源码包SDK:android7.1...原创 2019-01-30 19:48:18 · 645 阅读 · 1 评论 -
第四章:Android灯光系统(6)-背光灯
上小节我们实现了对通知灯控制,该小节我们讲解怎么实现对背光灯的控制,一般来说,操作是比较简单的,我们只需要往数据库中写入亮度就可以了,那么为什么会这么简单,当然是有其他的程序(ContentObserber)在监视数据库,当数据改变的时候,检测的程序,就会相应的去改变backlight的亮度。那么我们先来分析一下源码是怎么实现的源码分析源码追踪还是根据lights.h文件中的 #defin......原创 2019-02-16 16:39:07 · 1648 阅读 · 0 评论 -
第一章:JNI的简单使用(3)-APP软件实现
根据上一节的设计,我们的APP界面已经完成,但是botton和checkbox没有然后的功能,只是一个简单的装饰部件,接下来我们实现APP的软件操作,为部件关联具体的功能。button在AndrodStudio(下面简称AS)软件界面,使用Android\color{red}{Android}Android模式查看工程,可以看到app 与 Gradle Scripts。展开如下在ap......原创 2019-01-30 22:40:37 · 716 阅读 · 0 评论 -
第一章:JNI的简单使用(2)-APP界面设计
在我们的GEC-3399开发板上,存在两个可控的LED,该章节,APP的需要实现的功能: 1个button(总开关):控制两个LED灯的OFF/on 2个CheckBox:控制单个LEDOFF/on AndroidSudio新建工程...原创 2019-01-31 00:51:13 · 578 阅读 · 0 评论 -
05.Binder系统:第6课第1节_Binder系统_驱动情景分析_数据结构
该小节为额外了解小节,Binder驱动是amdroid底层支持之一,如果深入了解Binder当然能更好的理解使用Binder驱动的程序和库,但是不想了解也没有关系,就好像一个厨师会炒蛋就行了,并不需要他了解蛋的成分。所谓的情景分析,就是沿着驱动程序对源码进行分析,......原创 2019-03-04 15:11:02 · 704 阅读 · 0 评论 -
第六章:输入系统(5)-Reader_Dispatcher线程启动分析
在前面的的小节提到过,输入子系统框架中,在应用层会创建Reader与Dispatcher两个线程,这两个线程都是while循环,该小节我们就查看源码他们是如何创建如何工作的。基于面向对象思想,源码中定义了两个类,InputRread(实例化为mRead)与InputDispatcher(mDispatcher),两个类类中实现了一些方法并且在这两个类中分别包含了类成员InputRreadTHr......原创 2019-02-22 16:31:24 · 443 阅读 · 0 评论 -
第四章:Android灯光系统(4)-电池灯
通过前面几个小节,我们编写了灯光系统的驱动程序以及Hal文件,并且实现了我们想要的功能,下面我们将对源码中的电池灯进行分析,然后编写我们的APP程序。我们知道驱动程序是不会主动做任何事情的,......原创 2019-02-14 11:40:51 · 1097 阅读 · 0 评论 -
第五章:Binder系统(1)-C程序示例_框架分析
这一章节我们讲解android中的Binder系统,该章节是一个比较难理解的章节,不过没关系,我们可以慢慢的学习。在Binder系统中,有两大核心,分别为IPC(Information Processing Center:信息处理中心,进程间的通信)与RPC(远程过程控制调用)。IPC:进程间的通信,远程调用,比如我们的A进程需要打开LED灯,调用led_open/led_ctl方法,但是他是......原创 2019-02-18 17:57:44 · 1108 阅读 · 0 评论 -
第六章:输入系统(1)-必备Linux编程知识_inotify和epoll_P
在讲解安卓输入系统之前,我们先了解一下Linux编程基础的inotify与epoll_P,在我们使用笔记本电脑的时候,感觉自带的键盘并不太好用,一般我们都会外接一个键盘,并且当我们按键按下的时候,笔记本能分辨是哪个键盘按下,都会有一下功能:1.键盘即插即用。2.可以使用任意一个键盘那么出现了两个问题:1.如何检测键盘的接入和拔出2.怎么知道是哪个键盘按下按键对于第一个问题有多个:1.......原创 2019-02-19 19:30:13 · 688 阅读 · 0 评论 -
第五章:Binder系统(2)-C程序示例_编写程序
上一小节介绍了Binder系统的框架,为了加深理解,这小节别写一个示例程序,最要有以下程序c文件1.test_server.c:提供“hello”服务,提供函数:void sayhello(void),int sayhello_to(char *name)。下面我们开始编写test_server.c。test_server.c首先我们复制文件SDK/frameworks\native\......原创 2019-02-20 10:49:58 · 741 阅读 · 1 评论 -
第六章:输入系统(3)-框架
接下来的几个小节我们会深入分析输入子系统,首先先来了解一下输入子系统的框架。假设有一款andriod平板,上面安装了很多应用程序,以及系统功能(关机,开机,增加减少音量),同时存在很多输入设备如按键,触摸屏,外接usb键盘鼠标等。那么出现了一个问题,我们的输入事件应该对那个应用程序,或者我们的输入事件应该是和那个应用程序进行通信,如:我们按下按键之后是启动输入法呢?还是减少音量呢?如下图:当......原创 2019-02-20 17:18:05 · 1405 阅读 · 0 评论 -
第六章:输入系统(4)-模拟输入系统驱动
上小节讲解了输入子系统的基本框架,该小节我们编写一个万能模拟输入驱动程序。linux 的输入子系统不进行讲解了,欢迎大家观看我的文章,在这里就当做大家对linux内核驱动已经比较了解了。最简单字符驱动的框架如下:APP: open read write ioctl启动: drv_open dr...原创 2019-02-20 18:05:25 · 421 阅读 · 0 评论 -
05.Binder系统:第6课第4节_Binder系统_驱动情景分析_服务注册过程分析
我们打开SDK/kernel/drivers/android/binder.c文件,这是binder驱动程序,所有我们从最末尾开始看起。static const struct file_operations binder_fops = { .owner = THIS_MODULE, .poll = binder_poll, .unlocked_ioctl = binder_ioctl, ......原创 2019-03-05 16:45:31 · 719 阅读 · 0 评论 -
06.输入系统:第10课第4节_输入系统_Reader线程_使用EventHub读取事件
在前面的学习中,我们分析了android输入子系统的框架,知道他会存在Reader与Dispatcher两个线程,Reader是循环读取驱动事件,并且监测是否有输入设备拔插,我们可以想象一下Reader线程会做哪些事情,我们可以简单的认为他是获取事件,然后把这个事件发送给Dispatcher,其中还包括了一些简单的处理。简单的框图如下:......原创 2019-03-05 23:42:33 · 545 阅读 · 0 评论 -
06.输入系统:第10课第7节_输入系统_Reader线程_简单处理
在前面的小节中,我们对Reader线程做了总结,任务他会做三件事件。1.获取事件2.简单处理3.传送给Dispather线程。我们已经分析1.Reader线程怎么获取事件,这小节我们来讲解他是如何处理这些事件的,在Reader线程中,他只是做了简单的处理,复杂的处理是在Dispather线程中完成的。我们先来猜测一下Reader线程会做哪些事情,会获取哪些输入事件。通过前面小节的讲解,......原创 2019-03-08 17:28:57 · 413 阅读 · 0 评论 -
06.输入系统:第10课第8节_输入系统_Dispatcher线程_总体框架
在前一个课时中,主要讲解了Reader线程线程从驱动读取输入事件,仅做简单的转换,然后转发给Dispatcher线程,该课时主要讲解Dispatcher线程相关内容,该小节我们先讲解ispatcher线程的总体框架,然后在讲解Reader线程给Dispatcher线程发送事件的具体过程,总的框图如下:Dispatcher英文是分发的意思,那么有两个问题我们需要解决:1.发什么2.发给谁对......原创 2019-03-08 19:10:33 · 355 阅读 · 0 评论 -
06.输入系统:第10课第15节_输入系统_补充知识_activity_window_decor_view关系_理论
他有四个功能拨号,通话记录,联系人,我的最爱这四个功能,每个功能就对应一个activity(一组相对独立的功能),每个activity都有一个独立界面显示在窗口上,及每个activity都有一个对应的window,我们可以通过这个window观察或者使用activity。在继续讲解输入系统之前,我们先补充一个知识点,即activity,window,decor,view。一个教室有多个活动房,每个活动房有一个窗口,在装修窗口时,先选样式,然后在指定区域贴窗花。对于树状结构下面举一个例子。...原创 2019-03-14 09:47:46 · 355 阅读 · 0 评论 -
06.输入系统:第10课第9节_输入系统_Dispatcher线程情景分析_Reader线程传递事件
上小节知道了关于Dispatcher线程的基本框架,该小节讲解Dispatcher线程情景分析。一般来说按键分为3类:1.global key:当按下某个按键会启动特定的APP,我们称为global key,通过修改frameworks/base/core/res/res/xml/Global_keys.xml,假设他是AKEYCODE_TV2.system key:比如音量(AKEYCO......原创 2019-03-09 12:03:42 · 532 阅读 · 0 评论 -
06.输入系统:第10课第10节_输入系统_Dispatcher线程情景分析_dispatch前处理
通过前面几个小节,知道Reader线程从驱动读取到事件之后,还要经过很多的处理才能发送给应用程序,我们来回顾一下,再次粘贴框图如下:Reader线程读取事件之后,会把事件稍作处理,然后放入mInboundQueue队列中,然后Dispatcher线程会从这个队列中读取事件,稍作处理之后把这些事件放入到APP应用程序mOutBoundQueue队列之中。然后取出事件发送给对应的APP。从前面的......原创 2019-03-09 17:16:04 · 748 阅读 · 0 评论 -
06.输入系统:第10课第16节_输入系统_补充知识_activity_window_decor_view关系_实验
在上一节从理论上讲解了activity,window,decor,view之间的关系,该小节我们编写源代码,去验证这些知识点。在原来的AS工程APP_0001_LEDDemp-V3上进行修改,先把APP_0001_LEDDemp-V3改成APP_0008_ViewHierarcky,然后打开该工程。在原来的基础上修改layout下的content_main.xml文件,先修改一下button按钮......原创 2019-03-14 14:17:19 · 296 阅读 · 0 评论 -
06.输入系统:第10课第17节_输入系统_InputStage_理论
通过前面的学习,我们知道andriod对输入事件的处理分为好几个阶段,再次粘贴一下之前的框图:根据之前的中,可以分为输入法之前的处理,输入法处理,输入法之后的处理,以及最后的综合处理。对于java编写的程序,我们只关注View-onKeyDown()的处理。在上小节讲解了activity,window,decor,view之间的关系。我们知道一个appliction有多个activity,每......原创 2019-03-14 15:04:21 · 568 阅读 · 0 评论 -
06.输入系统:第10课第5节_输入系统_Reader线程_核心类及配置文件_实验
在上一节中,我们知道Reader线程主要是通过EventHub读取事件,他的核心类就是EventHub这个类,我们在来回顾一下EventHub有哪些内容。Read线程核心类EventHub创建一个mEventHub,他负责的是多个设备,其中存在成员KeyedVector<int32_t, Device*> mDevices,存放的都是输入设备的相关信息,int32_t为设备的编号,......原创 2019-03-07 11:42:30 · 367 阅读 · 0 评论 -
06.输入系统:第10课第6节_输入系统_Reader线程_核心类及配置文件_分析
如果大家只想使用输入子系统,而不是深入了解,那么这个小节是可以跳过的,这节主要是对输入子系统,解析配置文件的源码进行追踪和讲解。下面我们开始阅读android源代码,看看在输入子系统里面是使用那些类或者结构体来表示这些文件的。打开源码文件EventHub.cpp,搜索open,找到EventHub::openDeviceLocked()函数:EventHub::openDeviceLocked......原创 2019-03-07 17:35:11 · 347 阅读 · 0 评论 -
06.输入系统:第10课第18节_输入系统_InputStage_实验_截取输入事件
前面的小节,我们讲解了InputStage的理论知识,该小节我们编写源代码,对理论知识进行验证。之前的APP_0008_ViewHierarcky上进行修改,更改文件名为APP_0009_Inputstage。使用AS打开该工程,首先给应用程序添加一个文本对话框,然后修改这个对话框的文本处理函数。进入工程的layout下的activity_main.xml文件,可以通过手动添加(plan tex......原创 2019-03-15 16:27:58 · 353 阅读 · 0 评论 -
06.输入系统:第10课第11节_输入系统_实战_使用GlobalKey一键启动程序_P
该课时开始讲解GlobalKey一键启动程序,一键启动的过程如下:a.对于GlobalKey,系统会根据global_key.xml文件决定发送消息给那个组件b.APP应该注册广播消息的接收者1.编写一个BroadCastReceiver派生类,实现消息的处理函数2.注册派生类c.在该组件中启动APP首先我们实现a,b两点,先写出一个能接收广播消息的应用程序,我们在之前的APP_00......原创 2019-03-11 17:01:23 · 602 阅读 · 0 评论 -
06.输入系统第:10课第19节_输入系统_多点触摸驱动程
该小节我们开始讲解多点触摸屏的驱动层。我们的驱动只需要上报多个触点的位置就可以了。应用程序一般会使用open,read,write,ioctl等访问驱动程序,最简单的方法就是我们在驱动程序中也实现对应的函数,在linux中存在一个输入子系统,以上的函数,在驱动层,其已经帮我们实现了,我们只需要实现硬件相关的那比部分即可。比如有数据时,上报数据(上报给输入子系统)。前面提到驱动程序需要提供ope......原创 2019-03-16 10:18:26 · 392 阅读 · 0 评论 -
06.输入系统:第10课第20节_输入系统_多点触摸_电容屏驱动程序
上小节我们讲解了android多点触摸屏驱动程序的理论框架,该小节我们开始编写代码,把多点触摸屏驱动的框架编写完成。下面是单点触摸屏(电阻屏),与多点触摸屏(电容屏的一个对比):......原创 2019-03-16 11:16:09 · 533 阅读 · 0 评论 -
06.输入系统:第10课第22节_输入系统_多点触摸驱动程序_idc配置文件
通过前面的章节,我们已经已经知道怎么编写触摸屏的驱动程序,但是编写之后我们并不能直接使用,在最初移植的时候,编写完程序之后,在安卓的应用层,把上报的数据当做鼠标来处理了,特别的不方便。所以我们需要为我们的触摸屏驱动增加配置文件。通过前面的小节我们可以知道,android中的输入系统会监测/dev/input目录,当有输入设备接入时,该目录下会生成设备节点,然后输入系统_Reader线程会根据设备......原创 2019-03-20 18:21:02 · 773 阅读 · 0 评论