GaHingZ 发布的文章

硬件设备组网与配置实验


交换机、路由器入门

Tips:

  • ? 帮助
    • ? //显示当前模式下可用的命令
    • sh? //显示当前模式下sh打头的命令
    • show ? //显示show命令后面可跟的参数
  • 命令缩写
    • conf t //等价于configure terminal
  • 命令补齐
    • conf //按TAB键自动补齐configure
  • R:路由器 S:交换机


Android Binder学习笔记_


Ref:http://blog.csdn.net/universus/article/details/6211589

出现Binder的原因:

Android平台开发主要基于Client-Server

  • 系统复杂性:
    • Linux实践中学到,IPC 中的管道/信号量/共享内存 只有通过一定的封装才能支持Client-Server通信,增加系统复杂性
  • 传输效率:
    • 支持Client-Server的socket通信主要用于跨网络的进程间通信or本机上进程间的低速通信,传输效率低,开销大
    • 消息队列管道采用存储-转发方式,即数据先从发送方缓存区拷贝到内核开辟的缓存区中,然后再从内核缓存区拷贝到接收方缓存区,至少有两次拷贝过程(数据拷贝2次)共享内存虽然无需拷贝,但控制复杂,难以使用(数据拷贝0次)
    • Binder(数据拷贝1次)
  • 安全性:
    • 传统IPC接收方(比如系统服务)无法确保进程的UID/PID正确性,完全依赖上层协议来确保安全性
    • 使用传统IPC只能由用户在数据包里填入UID/PID,但这样不可靠,容易被恶意程序利用。可靠的身份标记只有由IPC机制本身在内核中添加。
    • 传统IPC访问接入点是开放的,无法建立私有通道。无法阻止恶意程序通过猜测接收方地址获得连接。
    • Binder基于Client-Server通信模式,传输过程只需一次拷贝,为发送方添加UID/PID身份,既支持实名Binder也支持匿名Binder,安全性高。

Binder介绍

  • Binder提供server的访问接口,client想要访问该接口需要通过Binder建立的管道接口
  • 面向对象:server中的对象,提供访问server请求的函数。Client通过Binder指针(Binder存在于远端Server,但在内存中被引用)调用方法访问server.
  • 通过上述方法,将进程间通信转为对某个Binder的引用,Binder跨进程,实体位于一个进程,引用却遍布系统各个进程。

Binder通信模型


未完待续



OpenGL ES 开发笔记



2016/04/14


HelloOpenGlES

  • 先建项目,MainActivity

    public class MainActivity extends AppCompatActivity { private GLSurfaceView glSurfaceView; private boolean rendererSet = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //用GLSurfaceView 初始化OpenGL 为显示GL surface glSurfaceView=new GLSurfaceView(this); /*

    • 检查OpenGl ES版本
    • */ final ActivityManager activityManager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); final ConfigurationInfo configurationInfo = activityManager.getDeviceConfigurationInfo(); final boolean supportEs2 =configurationInfo.reqGlEsVersion >=0x20000; Log.i("zjx",configurationInfo.reqGlEsVersion+";;;");//输出196608 16进制=0x30000 3.0版本 if(supportEs2){ //为了兼容2.0版本的 这边不设置Version为3 glSurfaceView.setEGLContextClientVersion(2); //传入一个自定义Renderer渲染器 glSurfaceView.setRenderer(new FirstRenderer()); rendererSet = true ; //显示在屏幕上 setContentView(glSurfaceView); } } @Override protected void onPause() { super.onPause(); //暂停surfaceView,释放OpenGl上下文 if(rendererSet){ glSurfaceView.onPause(); } }

      @Override protected void onResume() { super.onResume(); //继续后台渲染线程,续用OpenGL上下文 if(rendererSet){ glSurfaceView.onResume(); } } }


NDK-JNI开发笔记


2016/04/13

hello-jni项目(基于android studio 2.0)

(as2.2+ 可以用cmake 其实现,非常简单 不用.h文件 一开始的配置见 http://tools.android.com/tech-docs/external-c-builds 后面只要写个native方法 c文件中写对应的函数即可 )

  • 配置NDK 如果没下载NDK的话

    File->Settings Appearance & Behavior->System Settings ->Android SDK 右侧选择SDK Tools 勾选NDK更新 勾上更新重启项目。

local.properties里面如果没自动配置的话就这样配置(按上述步骤安装ndk 其目录就在sdk下)

## This file is automatically generated by Android Studio.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.
#
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
#Wed Apr 13 00:40:11 CST 2016
ndk.dir=E\:\\BaiduYunDownload\\adt-bundle-windows-x86_64-20140702\\sdk\\ndk-bundle
sdk.dir=E\:\\BaiduYunDownload\\adt-bundle-windows-x86_64-20140702\\sdk
  • 新建Project,一个Activity(xml中带一个TextView)
  • 新建一个NdkJniUtils类 声明原生方法getCString();

    public class NdkJniUtil { public native String getCString(); }

  • 生成C/C++ 头文件

法1: IDE:Build->MakeProject 得到class 编译之后的class在目录下