`
shangjava
  • 浏览: 1190011 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论
文章列表
作者:gzshun. 原创作品,转载请标明出处! 来源:http://blog.csdn.net/gzshun 写了好几篇文章,花儿都快谢了,终于轮到Framework发挥领导的身份了,Framework作为界面与vold之间的桥梁,用户是Framework的大爷,那么Framework就是Vold的大哥大,Framework发出一个命令,Vold不敢不遵从,只能照着Framework的意思照办,千万不能出差错,不然Android就要丢大脸了,登不上三国争霸的舞台,iOS VS Android VS WP7? 在Framework里面,有一个目录是用来存放一些Java的系统服务,这些都在后 ...
作者:gzshun. 原创作品,转载请标明出处! 来源:http://blog.csdn.net/gzshun OTG是on-the-go的简称,是2001年由USB Implementers Forum公布,主要应用于各种不同的设备或移动设备间的联接,进行数据交换。特别是PDA、移动电话、消费类设备。改变如数码照相机、摄像机、打印机等设备间多种不同制式连接器,多达7种制式的存储卡间数据交换的不便。 对OTG介绍比较详细的在USB的官网,详细请见英文文档:http://www.usb.org/developers/onthego/。以下是官网的一个简要的介绍,贴出来看看: USB On- ...
刚刚看了CSDN官方网站的头条新闻,虽然我不是Java程序员,但我也因为这个新闻而感到惋惜,天妒英才,张老师培养了这么多的学子,为多少人打了就业的基础,解决了多少程序员的就业烦恼,竟然在2011年的最后一天意外辞世,遗憾在2011。不敢想象,张老师在博客圈里一直都非常得活跃,经常发表博客。刚才我看到新闻,我以为是谣言,但发现发表博客的是CSDN创始人蒋涛先生。真是感到惋惜,现在听到这方面的新闻,真是有点麻木,前几天还好端端的,一下子就。。生命真的太脆弱了,也提醒大家,各位软件行业的同行们,大家千万保重身体,身体是革命的本钱。 在这里,我为传智播客创始人张孝祥老师默哀! 您一路走好 ...
作者:gzshun. 原创作品,转载请标明出处! 来源:http://blog.csdn.net/gzshun1.北漂程序员在2011年如何应聘工作? 今天是2012年的第一天,是一个值得深思的时刻,留一点时间让自己好好反省程序员的职业生涯,也许对自己有更加深入的了解与思考。作为一名工作将近一年的程序员,必须对自己的收获与领悟彻底地整理一遍,工作上的技术经验必须经过有规划地积累下来,只有这样才能把自己涉及到的技术变成属于自己的一份财富。 我是一位某大学的一名普通的北漂程序员,跟很多大学生一样,我是2011年才踏出校门,走向一线城市(北京),寻找更多的机会来充实自己,锻炼自己,开始闯荡自己的 ...
作者:gzshun. 原创作品,转载请标明出处! 来源:http://blog.csdn.net/gzshun 本文开始讨论sd卡的格式化功能,平时使用windows操作系统,也经常格式化磁盘。涉及到的 操作有这几步: 1.将分区信息写到硬盘的第一个设备节点的MBR结构中的分区表; 2.格式化分区到指定的文件系统类型。 MBR中存放分区表的位置在446-509,占用了64字节,MBR结构只支持4个主分区,所以有4个16字节的区域,先简要说明一下MBR的分区表的结构: 从这个表格可以看出,相对于446-509的分区表区域,每个主分区的第5个字节存放的是文件 系统标志位,用来识别 ...
作者:gzshun. 原创作品,转载请标明出处! 来源:http://blog.csdn.net/gzshun 本文分析卸载sd卡的源码,这些涉及的内容比较少,走过就行。在Android系统,系统设置里面, 提供了挂载,卸载与格式化的功能。在这里,我们可以回忆一下,Android在挂载sd卡有几个途径, 卸载又是有几种方法? 一、挂载sd卡,有2种方式: 1.用户自己挂载sd卡; 2.自动挂载sd卡,这时候是在Android系统启动完成后挂载的,所以可以看成是自动挂载; 二、卸载sd卡,有2种方式: 1.用户自己卸载sd卡; 2.用户移除sd卡; 卸载sd卡,1和2看起来有 ...
这里续上一篇文章,讲解挂载磁盘的操作: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匹配的对 ...
作者:gzshun. 原创作品,转载请标明出处! 说了这么多,该到执行命令的函数了,要不黄花菜都凉了。上一篇文章讲了vold如何开启接收framework下发命令的线程,最终到了runCommand函数的实现,总共有6个版本,由于重复性大,只讲VolumeCmd类的runCommand函数的实现。 VolumeCmd可以说是最重要的,该类的实现处理了list,debug,mount,unmount,format,unshare,shared等等操作,详细说明: list: 在启动vold之后,接收的第一条命令就是list,这里是获取系统的所有磁盘对象,一般只有sd卡。 debug: 设置 ...
作者:gzshun. 原创作品,转载请标明出处! vold处理完磁盘事件,就要开始接受framework的操作命令,在main函数里面,开启了一个线程来监听framework的信息,当收到操作命令,vold进行解析,分析出命令,然后调用相应的磁盘操作函数,待操作完成后,再将操作结果的状态值反馈给framework,中间均使用了广播机制,使用了UDP协议。在main函数中,有以下函数的调用: if (cl->startListener()) { SLOGE("Unable to start CommandListener (%s)", strerror(errn ...
作者:gzshun. 原创作品,转载请标明出处! 在嵌入式Linux中,经常涉及到格式化硬盘,常用的工具就是fdisk,这工具功能强大,busybox里面也实现了fdisk。当busybox实现的fdisk是简化版,与原版的GNU的fdisk相差挺大的,主要是缺少一些细节性的功能。 本文主要是说明fdisk写入MBR的一个磁盘可选id,这个区域可以用来唯一的标记一块硬盘,总共有4个字节,2的32次方中情况。 以后将会详细的介绍MBR结构。。 以下是摘自维基百科的一个表格,介绍MBR的结构: Structure of a master boot record Address Descr ...
作者:gzshun. 原创作品,转载请标明出处! 上篇文章分析到了handleBlockEvent函数,该函数包含了以下6个处理函数: void handleDiskAdded(const char *devpath, NetlinkEvent *evt); void handleDiskRemoved(const char *devpath, NetlinkEvent *evt); void handleDiskChange ...
作者:gzshun. 原创作品,转载请标明出处! 上篇文章分析到了NetlinkHandler类中的onEvent函数,该函数由NetlinkListener::onDataAvailable函数调用,当SocketListener类监听到内核的uevent事件,调用该函数,之后的事情交给onEvent来负责。 file:system/vold/NetlinkHandler.cpp 现在来说onEvent函数,在vold中,磁盘的热插拔事件都是通过上述那些间接的过程来调用到 该函数,该函数再调用vold中的处理事件的函数,这样vold就能得到最新的磁盘热插拔事件; void Net ...
作者:gzshun. 原创作品,转载请标明出处! NetlinkManager类负责管理捕获内核的uevent事件,这里使用了Netlink套接字。 Netlink的概念: Netlink套接字是用以实现用户进程与内核进程通信的一种特殊的进程间通信(IPC) ,也是网络应用程序与内核通信的最常用的接口。Netlink套接字可以使用标准的套接字APIs来创建。socket(), bind(), sendmsg(), recvmsg() 和 close()很容易地应用到 netlink socket。netlink包含于头文件linux/netlink.h中。 平时的应用层一般都不会用到 ...
作者:gzshun. 原创作品,转载请标明出处! Vold是Android系统处理磁盘的核心部分,取代了原来Linux系统中的udev,主要用来处理Android系统的热插拔存储设备。在Android2.2以后的系统中,vold源码已经移到了system目录下,vold目录包含以下源码: ├── Android.mk ├── Asec.h ├── CleanSpec.mk ├── CommandListener.cpp ├── CommandListener.h ├── Devmapper.cpp ├── Devmapper.h ├── DirectVolume.cpp ...
作者:gzshun. 原创作品,转载请标明出处! 本系列文章,将会详细讲解Android系统的磁盘管理部分,可以通过这个突破口,熟悉整个Android的系统架构与实现原理。 Android磁盘管理总共涉及到四大部分源码: 1.Linux kernel: Android建立在Linux内核的基础上,最底层的部分是由Linux kernel来负责的,用于检测热插拔事件; 2.Vold:Android没有使用Linux平台下的udev来处理,于是Google写了一个类似udev功能的vold,充当了kernel与framework之间的桥梁; 3.Framework:Android的 ...
Global site tag (gtag.js) - Google Analytics