- 博客(133)
- 资源 (3)
- 收藏
- 关注
原创 Android安全支付(7)-软件架构-JavaCardKeymaster
HAL的实现比较简单,主要是基于标准的IKeymasterDevice4.0和4.1的接口实现了一个JavacardKeymaster4Device。在分析Android上基于Trusty的实现机制之前,我们来看下一个JavaCard的一个keymaster的实现(及其上层的Applet)。1.hal层,基于标准的IKeymasterDevice4.0和4.1的接口实现了一个JavacardKeymaster4Device类。HAL层实现以后,就可以通过IKeymasterDevice接口调用到HAL层。
2025-04-22 11:23:46
536
原创 小型初创企业自建免费的研发云桌面
一般初创的小企业,如果想要搭建一个自己的研发云桌面系统,来方便和三方合作开发,早期对于性能和安全性没有特别高的要求。一种可行的自建云桌面的方案是:3322.org动态域名解析+MobaXterm+RDP+SSH+跳板机+Ubuntu跳板机+Ubuntu编译服务器。最后,就可以在跳板机和编译服务器创建不同的账号,给不同的开发人员使用了。4.然后通过MobaXterm可以以RDP或者ssh的方式连接到跳板机,再进一步通过Ubuntu跳板机连接内网的编译服务器。1.确保自己的办公室有公网IP,可以找电信。
2025-03-28 12:05:16
97
原创 Android安全支付(6)-软件架构-trusty core及驱动层IPC机制
前面我们已经整体从APP一直到TA分析了各个模块的调用过程和各个模块的架构设计。这里,我们详细深入trusty内核,先看下驱动部分。
2025-03-18 14:38:56
704
原创 Android支付安全(4)-软件架构-system/keymaster
前面我们看了App到keyStore部分的调用。这里,我们看下keymaster这部分的框架设计。
2025-03-17 16:26:57
360
原创 Android安全支付(2)-软件架构-KeyStore2-APP到Framework层的调用
验证签名的真实性,确保交易合法。服务器端预存了APP的公钥,收到请求后,使用该公钥对签名进行验证,确保数据未被篡改。2.在交易请求时,APP使用KeyStore中的私钥对交易数据进行数字签名。这个签名可以保证数据的完整性和真实性。2.将公钥Base64编码后传到服务器端。并且将公钥和用户ID绑定。这里要指定KeyGenParameterSpec的初始化对象。1.首先在应用(钱包)首次安装或首次使用时,在。生成的密钥只能在当前设备上使用,且无法导出。签名交易数据并发送给服务器。,因为私钥永远不会离开设备!
2025-03-12 19:38:08
811
原创 Android安全支付(3)-安全架构-KeyStore2-Key类簇和Spi类簇
这个Context派生类对这些接口的实现通常都是通过device_类簇去实现的。这里cpp文件中的实现。getAttestation Key主要是根据传入的不同算法参数返回不同的密钥,默认提供了两种算法密钥获取的实现。这个类簇主要实现的是各个keymaster版本的IKeymasterDevice.hal中定义的接口。1.因为底层的TA都是基于keymaster的框架去做派生实现的,所以,这里我们看下头文件部分的类接口设计。2.attestaion_context.h中定义的生成证书链所需信息的抽象接口。
2025-03-12 19:09:10
773
原创 Android安全支付(1)-整体架构-keymint
(1)接口定义hardware/interfaces/security/keymint/aidl/android/hardware/security/keymint/IKeyMintDevice.aidl。keymint是keymaster v4之后的替代设计。所以android 15上最好采用keymint的接口进行硬件功能的对接。同时,我们会集成一款紫光的芯片。3.可以用keyStore.getKey()来获取存储在keyStore中的数据进行加密和解密。四、关于keymint的接口定义和具体实现。
2025-03-06 18:27:12
913
原创 Android安全支付(5)-软件架构-trusty-keymaster TA
TrustyKeymaster类(trusty_keymaster.cpp)会通过SecureStorageManager类进行底层能力的封装和调用。在keymaster启动的时候会建立secure和nonsecure空间的ipc管道,并开启事件监听循环,如果接收到相应的事件,就进行处理。接收到对应消息(比如KM_GENERATE_KEY)的时候,就会调用TrustyKeymaster类进行处理。源码路径:trusty/app/keymaster部分是对system/keymaster框架的一个实现。
2025-01-08 18:54:40
201
原创 Android TV 视图体系分析-笔记SurfaceFlinger
首先可以梳理出SurfaceFlinger的类图然后可以看下这些类大致是干嘛的,梳理出主要的类===========先看主文件夹下的类================1.Barrier用于控制互斥访问的2.Colorizer用户颜色转换3.DisplayDevice(重要类)显示设备类4.DispSync(重要类)DispSync维护了显示设备基于硬件的...
2019-03-03 20:36:49
1453
原创 Google VR开发-Cardboard VR SDK头部追踪实现(罗德里格旋转公式)
一、罗德里格旋转矩阵的作用可以参考百度百科和维基百科进行了解。个人概括来说就是罗德里格旋转公式是用来求旋转后新向量的公式:而这个公式可以转换成矩阵形式:也就是说罗德里格旋转矩阵是用来和某个向量V相乘得到这个向量旋转后新向量Vrot的
2017-08-02 14:07:22
2956
原创 Google VR开发-Cardboard VR SDK头部追踪实现(隐马尔可夫模型)
隐马尔可夫模型是理解卡尔曼滤波的基础。这里只单纯记录一下对这个模型的理解,实际这部分只需要看维基百科就可以了。维基百科:https://zh.wikipedia.org/wiki/%E9%9A%90%E9%A9%AC%E5%B0%94%E5%8F%AF%E5%A4%AB%E6%A8%A1%E5%9E%8B1. 其中{\displaystyle x(t)}我们称为隐藏变数(h
2017-08-02 14:01:11
1332
原创 Google VR开发-Cardboard VR SDK反畸变实现
上一篇文章分析了Cardboard SDK的生命周期设计。这里我们看下畸变部分的实现。Cardboard中将畸变这部分封装成了一个Distortion类和DistortionRenderer类。我们看下Distortion这个类: private static final float[] DEFAULT_COEFFICIENTS = { 250.0F, 50000.0
2017-08-02 13:53:29
3145
1
原创 Google VR开发-Cardboard VR SDK生命周期设计
本篇从两个角度分析Cardboard VR SDK生命周期的设计目录:一、应用端生命周期调用二、SDK端生命周期功能实现一、应用端生命周期调用(1)主MainActivity中有一个CardboardOverlayView类型的成员mOverlayView,这是遮盖层的视图(2)CardboardOverlayView中有CardboardOverlayEyeV
2017-08-02 11:57:51
1109
原创 Oculus VR SDK实现-Oculus针对大量显示数据的buffer设计
参考文章:Vertex Array的性能表现:http://www.openglsuperbible.com/2013/12/09/vertex-array-performance/关于Vertex Array的官方解释:https://www.khronos.org/opengl/wiki/Vertex_Specification#Vertex_Array_Object这里说明v
2017-08-02 10:57:35
822
原创 Oculus VR SDK实现-Oculus针对双眼显示的交换链设计
首先我们关注一下ovrFramebuffer这个结构体:typedef struct { int Width; int Height; int Multisamples; int TextureSwapChainLength; int TextureSwapChainIndex; ovrTextureSwapChain *
2017-08-02 10:40:06
1632
原创 Oculus VR SDK实现-Oculus左右眼视角的偏移实现
首先人的头部在场景中是对应有一个姿态的,我们称这个为头部姿态(HeadPose)。而因为头部和双眼之间还有一个差异,因此我们将双眼中心的姿态称为双眼中心姿态(centerEyePose)。我们分两步来计算:一、首先计算出双眼中心视角矩阵centerEyeViewMatrix二、然后根据双眼中心视角矩阵计算出左右眼视角矩阵。一、计算出双眼中心视角矩阵centerEyeVi
2017-08-02 10:27:51
2440
1
原创 Google VR Android开发(二)-Simplevideowidget分析
Simplevideowidget这个Demo运行起来的效果如下:单击视频显示区域可以暂停/继续播放。点击眼镜按钮可以进入到双眼VR模式:现在分析下代码实现:只有一个Activity文件:主要是显示了一个SDK中的VrVideoView控件进入VR双眼模式和全屏显示的切换按钮都在这个控件里面。所以要分析下这个控件的实现。模式切换的实现是在VrVi
2017-07-18 17:10:48
2515
翻译 zephyr-浮点运算服务
注意:当前浮点运算服务只在基于ARM Cortex-M4或者inter X86架构的开发板上可用,此服务与体系架构相关概念内核允许应用的tasks和fibers使用开发板配置中支持的浮点寄存器(内核不支持通过ISRs方式使用浮点寄存器)内核可以配置成仅为应用提供需要的浮点运算服务。支持下面三种操作模式。此外,内核对SSE寄存器的支持也可以被包含,舍弃或者关闭No FP
2016-10-19 21:10:03
681
翻译 zephyr-原子服务
概念内核支持名为atomic_t的32位的原子数据类型。一个这种类型的变量可以被task,fiber或者ISR以中断的方式进行读操作。这保证了目标操作不受高优先级上下文的调度的干扰,甚至当高优先级上下文操作同一个变量。目的使用仅需要操作一个32位的数据的原子服务来实现对临界资源的处理Use the atomic services to implement critica
2016-10-19 20:43:04
1386
原创 USB Host and Accessory
Android 以两种模式支持一系列的USB外围设备和USB附件(实现了Android附件协议的硬件):USB accessory 和USB host。1.在USB accessory 模式下,外部USB硬件作为USB主设备,这可以让不具备主设备特性的硬件有能力和USB硬件进行交互。Android USB acdessories 必须设计为可以与Android设备配合工作,并且遵循
2016-09-29 17:16:43
1032
翻译 zephyr-内核时钟
概念内核支持两种不同的时钟机制。64位系统时钟--64位系统时钟是内核基于时间的服务的基础。这个时钟又ticks计数,并以一个由应用程序指定的频率递增。内核允许这个时钟通过读取timer的方式被直接访问,也可以通过使用kernel timer或者超时机制来直接访问。32位硬件时钟--32位硬件时钟被用作系统时钟步长的来源。这个时钟用来测量未指定单元(cycles),并以一个
2016-08-18 19:19:17
1502
翻译 zephyr-可执行上下文服务-定制数据值机制
每一个内核可执行上下文都会和一个表征这个上下文是一个task、fiber还是内核中断处理上下文的type相关联。所有task、fiber上下文都有一个特殊的线程特征值,以使它们被识别。每个task和fiber可以支持一个私有的32位的线程定制的数据值,这个值只能被它们自己访问,并可能被应用用于任何目的,默认为0.注意:这个定制数据值不能用于ISRs,因为这些操作只能在共享的内核中断处理上下
2016-08-18 16:16:06
724
原创 cardboard SDK analysis
1.了解Cardboard SDK:https://developers.google.com/cardboard/android/Cardboard和Gear VR的SDK都一样,都是基于OpenGL 来创建VR 应用,而主要的图像工作就放在Unity端。Cardboard的开发工具包简化了许多通用的VR开发工作:Lens distortion correction.(变
2016-02-29 15:30:01
2742
翻译 zephyr-内核初级手册
这部分包括zephyr内核生态系统的以下四个方面:System FundamentalsKernel FundamentalsApplication FundamentalsSource Tree StructureSystem FundamentalsAn application image is a binary that controls th
2016-02-25 19:57:02
3272
翻译 zephyr-编译和运行应用
编译一个示例应用$ cd $ZEPHYR_BASE/samples/hello_world/microkernel$ make上面的编译时采用的是定义在Makefile文件中的默认配置,如果你是为其他平台编译程序,那么请修改配置项BOARD$ make BOARD=minnowboard microkernel 和 nanokernel 的示例程序分别可以在 $ZE
2016-02-25 18:54:06
2413
翻译 zephyr-开发应用
开发 Zephyr 应用在安装完开发环境后现在你可以准备开发你自己的zephyr应用了。为了帮助你完成这个任务,以下资源可供参考: Application Development Primer 板块包含你开发,运行和构建你的zephyr应用所需要的所有信息。 Contributing Code 板块包含所有代码协同,代码风格和Gerrit使用的项目指导信息。确保你提交代码到
2016-02-25 17:08:33
1238
翻译 Zephyr-开发向导
1.设置开发环境1.1下载代码$ git clone https://gerrit.zephyrproject.org/r/zephyr zephyr-project执行上述命令可以下载源码到本地注意:当你已经开始开发,按以下步骤注册一个Linux基金会的账户:Requesting a Linux Foundation Account.要点:Linux用户即使已
2016-02-22 14:56:36
2151
翻译 Zephyr-项目介绍
Zephyr kernel是一个为资源有限系统设计的一个为内核:从简单的嵌入式环境检测传感器、LED穿戴设备到复杂的智能手表和物联网无限网关。Zephyr被设计支持多体系架构,包含ARM Cortex-M,intel X86和ARC等等:Supported BoardsThe following boards are currently supported:NoteDe
2016-02-22 11:58:27
1814
翻译 Zephyr-Llinux基金会发布Zephyr项目
原文地址:https://www.zephyrproject.org/news/linux-foundation-announces-project-build-real-time-operating-system-internet-things-devices开源项目Zephyr旨在形成一个实时操作系统(RTOS),为了帮助推进这个针对最小内存的物联网设备的项目,其对所有开发者开
2016-02-22 11:11:19
1081
原创 重构-tips
一、重构第一步:为即将修改的代码建立一组可靠的测试环境(靠人工测试不如靠测试用例靠谱)。二、函数应该放在它所使用的数据的所属对象内。三、函数中部分变量(比如比较重要的计算结果),可以使用get,set将其设为成员变量来促成较简洁的设计四、如果一个对象的值可能随时随其对象类型发生变化,对象类型应可以动态改变,那么可以将此对象类型设为B。类A中包含一个基类B的成员对象b,基类B中包含一
2016-01-27 20:59:27
755
原创 Native层-OpenGL ES-双缓冲离屏渲染
OpenGL ES相关的数据结构:typedef struct { EGLint MajorVersion; EGLint MinorVersion; EGLDisplay Display; EGLConfig Config; EGLSurface TinySurface; EGLSurface MainSurface; EGLContext Context;} ovrEgl;
2016-01-14 17:11:14
5333
1
原创 Android-四元数-控制VR设备的旋转
首先参考维基百科了解四元数的基本概念:https://zh.wikipedia.org/wiki/%E5%9B%9B%E5%85%83%E6%95%B0%E4%B8%8E%E7%A9%BA%E9%97%B4%E6%97%8B%E8%BD%AC参考http://www.2cto.com/kf/201210/162858.htmlhttp://blog.csdn.net
2016-01-12 11:46:28
4625
翻译 Android图形系统-架构
图形架构这部分阐述了一些开发者需要知道的和Surface,SurfaceHolder,EGLSurface,SurfaceView,GLSurfaceView,SurfaceTexture,TextureView和SurfaceFlinger相关的知识。本文档描述了Android系统级别图形框架的基本元素,以及如何在应用和多媒体系统中使用这些元素。焦点在于图像数据的buff
2015-12-29 11:59:27
951
原创 Android 图形系统框架
Android框架为2D和3D提供了一系列的图像渲染API,以与不同品牌制造商的图像驱动进行交互。所以从整体上了解这些API是如何工作的非常重要。这里介绍了建立在图像驱动之上的硬件抽象层(HAL)Android应用开发者可以通过两种方式将图像描画到屏幕上:Canvas和OpenGL,关于Android图像组件的详细描述参见官网的System-level graphics archite
2015-12-28 16:10:30
3315
1
转载 OpenGL - FBO
原文链接http://www.songho.ca/opengl/gl_fbo.html示意图如下:要点:1.FBO有多个颜色缓冲区绑定点,一个深度缓冲区绑定点和一个模板缓冲区绑定点,用于将三者绑定到FBO2.FBO提供了一种高效的切换机制,可以绑定和解绑上述三种缓冲区,其中提供多个颜色缓冲区绑定点是为了支持同时渲染多个目标
2015-12-10 09:21:55
1283
原创 opengl
openGL ES 3.0 图像管道示意图:Vertex shader的输入可以是:Shader program、Vertex shader 、Uniforms、Vertex shader inputs(or attributes)、Uniforms、SamplesVertex Shader计算出的结果交给Fragment Shader(片段着色器)处理Vertex shade
2015-11-20 20:13:48
629
翻译 pthread_cond_wait
官方说明参见:http://pubs.opengroup.org/onlinepubs/007908775/xsh/pthread_cond_wait.htmlNAMEpthread_cond_wait, pthread_cond_timedwait - wait on a condition SYNOPSIS#include pthread.h>int pth
2015-11-17 18:30:35
973
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人