自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

山庄来客的专栏

Android, Linux Kernel Research Notes

  • 博客(224)
  • 资源 (1)
  • 收藏
  • 关注

原创 ldd3随书源码移植

最近,因工作需要,重新温习了一遍LDD3这本经典的内核编程方面的指南,当然不免玩了一下随书的源码。在GitHub找了一份已经移植到2.6.37的版本上,不过,由于现在内核使用的版本已经进入了3.x时代,放到内核3.13的版本上编译一下,发现接口还是改变了不少,于是,在学习期间,顺便对例子的代码进行了修改,使其能够在3.13内核版本上进行编译, 目前修改工作已经完成,欢迎有同样需求的同学稳步如下地址下

2016-01-24 16:23:27 1031

原创 WiFi学习Notes

WiFi学习NotesWiFi学习记录的一些资料,欢迎讨论:Wi-Fi载波侦听Protocol Stack in Wifi Chips11n Block Acknowledgement4步握手过程CWNA学习笔记

2015-12-19 17:31:09 1059

原创 无线权威指南

无线权威指南Table of Contents1. 无线权威指南读书笔记1.1. 第 一章 无线网络导论1.1.1. 无线网络的优势在哪里?1.1.2. 无线频谱1.1.3. 无线网络的限制在哪里?1.2. 第二章 802.11 网络概论1.2.1. 802.11主要关注OSI最底层:Phy层和Mac层。1.2.2. 网络类型1.2.3. 网络服务1

2015-11-21 12:02:41 1599

原创 蓝牙代码基本结构分析

蓝牙代码总体结构分析在Android框架代码中,有两个重要接口IBluetooth和IBluetoothManager。 这两个接口之间的类图关系如下: 总体来讲,对于应用程序通过BluetoothManager和BluetoothAdapter来操作蓝牙相关接口。 其中IBluetoothManager定义了如下一些接口:interface IBluetoothManager{

2015-05-30 11:48:01 4016

原创 Java虚拟机原理基本知识点简记

虚拟机的结构概述  Java虚拟机的基本功能要求就是能读取.class格式的文件,将执行里面定义的操作即可。其他的一些实现细节,如运行时数据区域的内存布局,使用的垃圾回收算法以及任何Java虚拟机指令的内部优化等,都与具体实现有关。   Java虚拟机也是操作两种类型的数据:原始数据类型和引用数据类型。所有的类型检测都在运行前由编译器完成,虚拟机不做数据类型检查。针对不同的数据类型,虚拟机都有对应

2015-05-09 15:59:23 1142

原创 WiFi-Display协议学习

Miracast依赖的WiFi技术有: WiFi-Direct,即WiFi P2P Wi-Fi Protected Setup:帮助用户自动配置WiFi网络,添加WiFi网络设备。 11n/WMM/WPA2:其中,11n就是802.11n协议,它将11a和11g提供的Wi-Fi传输速率从56Mbps提升到300甚至600Mbps。WMM是Wi-Fi Multimedia的缩写,是一

2015-04-25 11:00:09 4996

原创 WiFi P2P协议学习

基本功能与服务P2P设备不能使用11b的速率传输数据和管理帧,除非 Probe Request帧要同时发送给P2P设备和非P2P设备P2P设备不能响应显示只支持11b速率的Probe Request帧P2P设备应该支持如下一些操作:P2P Discovery P2P Group Operation P2P Power Management 省电相关Managed P2P Device

2015-04-25 10:43:08 14314 7

原创 ASyncChannel类分析

AsyncChannel类源码简要分析概述 这个类提供了两个Handler之间进行异常通常的机制。这两个Handler可能位于同一进程中,也可能位于不同的进程中。目前,ASyncChannel可以使用两种协议方式:一对多的通信方式(简单的请求与应答方式) 在此种交互方式下,服务器端并不知道请求来自哪个客户端。客户端(发送方)将请求发送给服务器(接收方),服务器则通过replayToMessage方

2015-04-12 18:03:28 1893

原创 Git常用命令速查

创建新的仓库创建一个名为hello的目录,作为仓库目录 cd hello git initgit设置user.name 用户名 git config –global user.name “John Doe”user.email电子邮件 git config –global user.email [email protected]将文件添加到仓库中新建一个hello.c文件

2015-04-03 23:54:45 911

原创 Ubuntu常见命令记录

Ubuntu常见命令记录设置默认窗口管理器 sudo dpkg-reconfigure kdm添加软件源 sudo add-apt-repository ppa:kubuntu-ppa/backports自动下载依赖项 apt-get build-dep unity在grub recovery模式下进入root用户操作,默认文件系统是只读的,修改为可读写的命令为 mount -

2015-04-03 23:36:09 876

原创 Android Sync Framework

Fence提出的原因如下:在复杂的DMA管线如图形管线(多媒体,摄像头,GPU以及显示设备),一个buffer的消费者需要知道生产者什么时候完成生产(即创建一个Buffer,并像里面放置消费者所需要的数据)。同样地,生产者也需要知道消费者什么时候使完它创建的Buffer,以便它可以重新使用这个Buffer。一个Buffer可能被多个不同的消费者使用不同的时间。另外,一个消费者可能需要互

2015-03-22 21:51:50 7002 1

原创 Problem 69 孤儿进程组?

Problem 69 孤儿进程组?Ans:    一个进程组被认为是一个孤儿进程组时,则说明它的任何一个成员进程都没有一个处于相同会话中但在不同进程组的父进程(按句话说:该组中每个成员的父进程要么是该组的一个成员,要么不是该组所属会话的成员。)。位于孤儿进程组之外的进程不能监控該孤儿进程组中的任何已经处于停止状态的进程,同时也不能向这些处于停止状态的进程发送SIGCONT信号,使得这些处于

2015-03-16 23:00:09 989

原创 Android 4.4对VSync机制的一个改进

在Android4.4中,VSync机制的实现进行了一些修改,但是总体过程还是一样:1. HWComposer将底层硬件产生的VSync报告给SurfaceFlinger2. SurfaceFlinger将VSync又通知给EventThread线程。3. EventThread收到VSync事件后,调用相应的回调函数。 主要的修改有如下几点:1. 引入了VSync Eve

2015-03-11 21:48:43 4173

原创 Problem 68. Android Low memory killer?

Problem68. Android Low memory killer?Ans: #defineOOM_SCORE_ADJ_MIN   (-1000)#defineOOM_SCORE_ADJ_MAX   1000当/proc//oom_score_adj的值设为OOM_SCORE_ADJ_MIN时,将关闭对该进程的oom killing机制。 #defineOOM_D

2015-02-15 12:18:25 695

原创 Problem 67 调试本地内存泄漏?

Ans:通过在bionic/libc/upstream-dlmalloc/malloc.c文件的dlmalloc()函数中添加如下5836和5837这两行code编译,监测内存超过128M时,会触发一个Crash发生,打印出此时的Call Stack。

2015-02-08 22:26:08 507

原创 Android非APK程序开发流程

本文所说的非APK程序,是区别于一般的Android应用程序。这里说的非APK程序是指一个Android库项目,生成的Jar包包含一个有main入口的Java类,能够独立运行。许多Android平台上用Java语言实现的命令即是属于此种类型。    1. 创建一个Android库项目         执行如下命令,创建一个工程:         create lib-project -

2015-01-16 15:45:32 849

原创 VSync事件处理流程分析(Android4.3)

我们先看收到VSync事件是如何处理的,再看底层是怎样向上层通知VSync事件。

2014-11-23 16:16:44 6935 3

原创 Problem 67 Java容器简要说明

Java容器分为两大类:1. Collection   List: ArrayList, LinkedList(Stack,Queue),PriorityQueue   Set:HashSet(以复杂的算法排序,能快速获取元素), TreeSet(将插入的元素按递增顺序排序), LinkedHashSet(按元素插入的先后顺序排序)2. Map   HashMap(最快

2014-11-20 21:30:43 686

原创 JNI编程参考备忘----成员变量和方法

1. 对象成员变量的访问  函数原型:  jfieldID GetFieldID(JNIEnv *env, jclass clazz, const char *name, const char *sig); 代码实例:

2014-11-16 15:52:09 1484

原创 JNI编程参考备忘----基本类型

在Java编程中,本地方法的声明一般如下:private native String getLine(String prompt);跟其他普通的Java类的方法相比,只有声明,没有方法体,且必须带一个native修饰符。另外,在类中,通过静态代码初始化的方法,调用System.loadLibrary(...)方法,加载本地方法的实现——JNI库,如下为Java本地方法使用的一个范例:

2014-11-16 15:41:52 633

原创 Problem 66 Java异常基类Throwable?

Problem 66 Java异常基类Throwable?Ans:Throwable类是Java语言中所有错误和异常的基类。只有此类及其子类的实例才能被JVM或Java代码中作为异常抛出,同时catch语句也只接受Throwable类及其子类作为其参数类型。Exception,RuntimeException以及Error均是Throwable类,其中Java代码中,只需要捕获Exce

2014-11-16 15:35:28 2314

原创 Binder结点管理

在Binder驱动中,Binder结点随着进程IPC通信开始而生,随着进程IPC通信结束而亡,换句话说,Binder结点是维系IPC通信的基础,而且一个Binder结点也只能在完全无IPC通信的情况下被删除。本文将重点研究Binder结点从生到死的过程。Binder结点作为IPC通信过程中的实体,是IPC通信的媒介。在描述一个进程中Binder信息的数据结构中,与结点相关的成员变量有:

2014-10-26 17:01:49 1458

原创 Binder通信相关的类简要分析

一、BpBinder这个类通常作为IPC通信的Client端,或者说Remote端,提供实际的IPC基础通信服务。在代码中通常不直接使用到该类,一般以成员变量的形式,包含于BpRefBase类中,通过remote()方法引用该成员变量。继承关系如下: BpXXX --> BpInterface --> BpRefBase 在BpXXX方法中,就可以直接通过remote()方法引

2014-10-26 14:20:55 914

原创 基于Message的进程间通信实例

1. 前言   前面已经讨论过

2014-10-11 22:06:47 1744

原创 Problem 65 怎樣表示指向結構體或類的成員函數的指針?

Problem 65 怎樣表示指向結構體或類的成員函數的指針?Ans:

2014-10-07 21:41:45 595

原创 基于Message的线程间通信实例

在Android应用程序中,经常使用Handler进行消息

2014-09-28 22:57:11 1174

原创 Binder结点死亡通知过程

BpBinder类代表一个远程Binder对象(继承自BpRefBase)的通信功能部分。它提供了linkToDeath方法,供其他对象监听自己所关联的本地结点的死亡通知,本质上是通过调用IPCThreadState类的requestDeathNotification接口。unlinkToDeath方法则是取消接收Binder结点的死亡通知。而sendObituary则是向监听者发送结点的死亡通知

2014-09-28 22:24:56 6109 1

原创 Android Looper类代码分析

本文将分析一下Looper类的实现及其应用,代码位于frameworks/native/lib/utils/Looper.cpp。主要分为如下几个部分:1. epoll系统调用接口简介2. Looper类代码分析3. Looper类应用实例分析

2014-07-22 23:12:22 5741 1

原创 Binder通信过程中的用户空间线程池的管理

在Binder通信机制里,客户端与服务端之间的通信是在专门的IPC通信线程中进行的。这些线程构成一个线程池。线程的创建和销毁是在用户空间进行的,而对线程的控制是在驱动层进行的,即驱动控制线程池中线程的生命,而线程本身则是运行在用户空间的。驱动层是通过BR_SPAWN_LOOPER向用户空间发送创建新线程的命令。线程池的大小可以设置。默认情况下,线程池只有一个主线程,它在进程生命周期期间是不会退

2014-05-30 21:12:29 9339 10

原创 Android Region代码分析

一、Region的定义和合法性检查在Android系统中,定义了Region的概念,它代表屏幕上的一个区域,它是由一个或多个Rect组成的,代码位于frameworks/native/libs/ui/Region.cpp。而Rect则代表屏幕上的一个方形区域,这个区域可能是不可见的,部分可见或者完全不可见的。从代码实现的角度来看Region的实现,它拥有一个私有的数据成员变量:mStorage

2014-05-11 16:57:46 11252 3

原创 Problem 64 如何设置Linux系统内存回收的阀值?

Problem 64 如何设置Linux系统内存回收的阀值?Ans:

2014-04-10 11:38:16 2556

原创 binder IPC TRANSACTION过程分析(BC_TRANSACTION->Binder Driver)

在Binder IPC通信过程中,进程间通过

2014-04-06 15:50:55 4942 1

原创 Android系统初始化过程分析(Android 4.3)

在内核初始化完成后,最后会启动第一个用户空间进程,路径名为/init,它对应的代码是在/system/core/init/init.c。下面将从main函数开始一步步分析其中的执行过程。     if (!strcmp(basename(argv[0]), "ueventd"))        return ueventd_main(argc, argv);

2014-03-30 10:44:55 2980

原创 Zygote启动分析

基于性能的考虑,Dalvik虚拟机只启动一次,新的实例将从第一次启动的Dalvik中拷贝。这个功能是通过系统服务Zygote来实现的。   Zygote的启动过程简述如下:首先,它预初始化和预加载通用的Android类到它的堆中。然后,它监听在Socket端口上,等待启动一个新的Android应用程序的命令。当接收到一个启动应用程序命令,它将利用已经加载的应用程序fork出一个新的进程。该进程

2014-03-30 10:41:12 837

原创 Problem 63 何时该用glDrawTexiOES?

Problem 63 何时该用glDrawTexiOES?Ans:         首先,这个函数的作用是将指定的纹理贴到视图中的一个矩形区域,无须坐标变换,渲染速度加快。使用的步骤大概如下:       glGenTextures(...)       glBindTexture(...)       ...       glTexImage2D(...)   

2014-03-26 12:54:54 3312

原创 Problem 62 Java中的final关键字?

Problem 62 Java中的final关键字?Ans:   在Java中,通常将作为常量的变量声明为final,表示其值不可更改,如果该变量属于对象引用类型(非基本数据类型),则表示其引用是不可更改的,但是引用的对象本身是可以被修改的。不过,final关键字也可以应用于局部变量,实例变量和静态变量。在所有这些情况下,它们的含义都是:在创建这个变量之后,只能够为之赋值一次,此后不能修改

2014-03-24 13:39:18 687

原创 Problem 61 修改进程的显示名称

Problem 61 修改进程的显示名称?Ans: 要更改一个进程的显示名称,需要使用系统调用 prctl(), 其中PR_SET_NAME可用于修改进程显示名字。测试程序:# include # include int main( void ) { char name[ 32] ; prctl( PR_SET_NAME, ( unsi

2014-03-07 14:22:37 822

原创 Service Manger的初始化分析

在init.rc文件中,有定义serviceservicemanager /system/bin/servicemanager,在系统初始化会解析init.rc文件时,遇到这句话,将会把servicemanager加载到服务启动列表中,同时它也是第一个启动的服务。         ServiceManager的相关代码位于frameworks/native/cmds/servicemanage

2014-02-27 17:29:43 1403

原创 编写android服务

服务(Service)是Android的四大组件之一,它利用底层Binder机制,实现了RPC机制。 一个服务即可以存在于一个独立的进程,也可以依附于已存在的某个进程中。服务可被同一进程中的Activity调用,也可以被位于不同进程中的某个Activity调用。 本文主要探讨怎样编写一个远程服务接口的过程。为演示作用,本文不介绍通过AIDL语言自动生成服务接口代码的过程。首先,我们定义接口:

2014-02-23 16:46:19 939

原创 I/O端口和I/O内存

I/O端口和I/O内存每个外设都是通过读写它的寄存器来控制的。通常,通过内存地址空间或I/O地址空间进行访问。在硬件层面上,I/O区域与内存区域(DRAM)在概念上没有区别,它们都是通过在地址总线和控制总线上触发电信号来进行读写操作。根据处理器的不同,有些处理如X86拥有独立的外设地址空间,以区别普通的内存地址空间。针对I/O端口,会提供特殊的CPU访问指令。而有些处理器则使用统一的地址空间。

2014-02-21 18:35:56 987

Beginning Visual C++ 2008(含源码)

Iror Horton的作品,涵盖了VC2008的常见知识。包含标准C++和托管的C++, MFC以及WFP,总页数1394, 英文版。

2010-01-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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