http://blog.csdn.net/xichangbao/article/details/53176106 一 System Server      上篇分析了Zygote创建SystemServer的流程,本篇则分析SystemServer的实际工作内容。 1.0 main public static void main(String[] args) {     new SystemServer().run(); // 先new一个SystemSe…

2017年4月24日 0条评论 2点热度 阅读全文

http://blog.csdn.net/xichangbao/article/details/53131428 一 System Server System Server是Zygote启动的第一个进程,它的核心功能是启动和管理Android系统的各类服务。 1.0 startSystemServer private static boolean startSystemServer(String abiList, String socketName) // abiList为arm64-v8a,s…

2017年4月24日 0条评论 1点热度 阅读全文

转载需说明出处:http://blog.csdn.net/andywuchuanlong/article/details/51509229 最近公司需要用到专门的蓝牙设备去连接机器人,由于之前也没有接触过蓝牙,所以就在网上搜寻大把的资料,到最后还是没有什么所获,基本上所有的代码都是用不了的,蓝牙始终是连接不成功。但幸好的是android系统中的setting就附带了蓝牙连接的功能,所以研究下setting还是阔以的。 从android3.0开始,蓝牙的api就提供了对蓝牙profile的支持,比如a2dp prof…

2016年9月25日 0条评论 1点热度 阅读全文

作者:gzshun. 原创作品,转载请标明出处! 来源:http://blog.csdn.net/gzshun 本系列主要走了一下Android挂载SD卡的流程,从Vold到Framework,再从Framework到UI。也熟悉了谷歌写的C/C++源代码,提高一下自己的类的设计与代码的技巧,很感谢谷歌提供这么一个手机的开源操作系统Android,让鄙人也有机会来了解一下智能终端系统的实现原理。 只要有C/C++的基础,就能够很流畅地分析完这一块代码,比较重要的还是Android的实现架构,代码倒没什么难题。 An…

2012年1月3日 0条评论 2点热度 阅读全文

作者:gzshun. 原创作品,转载请标明出处! 来源:http://blog.csdn.net/gzshun OTG是on-the-go的简称,是2001年由USB Implementers Forum公布,主要应用于各种不同的设备或移动设备间的联接,进行数据交换。特别是PDA、移动电话、消费类设备。改变如数码照相机、摄像机、打印机等设备间多种不同制式连接器,多达7种制式的存储卡间数据交换的不便。 对OTG介绍比较详细的在USB的官网,详细请见英文文档: http://www.usb.org/developers…

2012年1月2日 0条评论 2点热度 阅读全文

作者:gzshun. 原创作品,转载请标明出处! 来源:http://blog.csdn.net/gzshun 本文开始讨论sd卡的格式化功能,平时使用windows操作系统,也经常格式化磁盘。涉及到的 操作有这几步: 1.将分区信息写到硬盘的第一个设备节点的MBR结构中的分区表; 2.格式化分区到指定的文件系统类型。 MBR中存放分区表的位置在446-509,占用了64字节,MBR结构只支持4个主分区,所以 有4个16字节的区域,先简要说明一下MBR的分区表的结构: 从这个表格可以看出,相对于446-509的分区…

2012年1月1日 0条评论 2点热度 阅读全文

作者:gzshun. 原创作品,转载请标明出处! 来源:http://blog.csdn.net/gzshun 本文分析卸载sd卡的源码,这些涉及的内容比较少,走过就行。在Android系统,系统设置里面, 提供了挂载,卸载与格式化的功能。在这里,我们可以回忆一下,Android在挂载sd卡有几个途径, 卸载又是有几种方法? 一、挂载sd卡,有2种方式: 1.用户自己挂载sd卡; 2.自动挂载sd卡,这时候是在Android系统启动完成后挂载的,所以可以看成是自动挂载; 二、卸载sd卡,有2种方式: 1.用户自己卸…

2011年12月31日 0条评论 7点热度 阅读全文

这里续上一篇文章,讲解挂载磁盘的操作: 3.挂载磁盘。这里都有一个const char *类型的参数,这参数保存着每个磁盘的标签信息,比如sd卡的label是sdcard。 int VolumeManager::mountVolume(const char *label) { Volume *v = lookupVolume(label); if (!v) { errno = ENOENT; return -1; } return v->mountVol(); } lookupVolume函数寻找与label…

2011年12月30日 0条评论 6点热度 阅读全文

作者:gzshun. 原创作品,转载请标明出处! 说了这么多,该到执行命令的函数了,要不黄花菜都凉了。上一篇文章讲了vold如何开启接收framework下发命令的线程,最终到了runCommand函数的实现,总共有6个版本,由于重复性大,只讲VolumeCmd类的runCommand函数的实现。 VolumeCmd可以说是最重要的,该类的实现处理了list,debug,mount,unmount,format,unshare,shared等等操作,详细说明: list: 在启动vold之后,接收的第一条命令就是l…

2011年12月29日 0条评论 4点热度 阅读全文

作者:gzshun. 原创作品,转载请标明出处! vold处理完磁盘事件,就要开始接受framework的操作命令,在main函数里面,开启了一个线程来监听framework的信息,当收到操作命令,vold进行解析,分析出命令,然后调用相应的磁盘操作函数,待操作完成后,再将操作结果的状态值反馈给framework,中间均使用了广播机制,使用了UDP协议。 在main函数中,有以下函数的调用: if (cl->startListener()) { SLOGE("Unable to start CommandLi…

2011年12月28日 0条评论 7点热度 阅读全文