当前位置:文档之家› Android版掌上机填图过程详解

Android版掌上机填图过程详解

Android版掌上机填图过程详解
Android版掌上机填图过程详解

1:2.5万数字化地质填图方法

数字地质填图系统(AoRGMap)Android版一、数字填图路线基本过程

将MAPGIS67软件狗打开,安装填图系统;将项目的DGSData文件夹拷到盘的根目录下(如E盘),拷完后直接利用,以后不用再拷;

正式填图前,各组长将整幅图路线在纸介质上布设完毕,以便统筹规划。(一)室内准备过程

1、设计路线,其过程如下:

(1)双击填图系统图标,启动填图程序;

(2)在左侧找到工作图幅(如:L52E019011)双击打开,自动在“野外总图库”

中;

(3)地质填图数据操作室内数据录入设计路线,按纸介质设计好的路线画出路线,右击显示出对话框;

填写示例:路线号:L1001,日期:20160420,图幅号:L52E019011,天气:睛,路线:亚布力(大致地理位置),任务:1/2.5万路线地质调查,手

图编号:1(组号)。填写完后单击OK,对话框消失;

(4)文件

在新建路线名称里,填入L1001,单击新建,打开,

单击是

在左侧右击插入项目,选择背景图层,插入背景文件,通过是全部背景文件,注意将区文件放在最上面;

注意:系统默认路线线型颜色较浅,线型较细,可改为较为醒目的颜色及线型。

(5)文件野外手图数据交换桌面到掌上机,选择CF文件夹,单击确定。

2.打开CF文件夹,将L1001文件夹拷到掌上机中。

(二)野外路线地质调查过程

1、打开掌上机,点击”数字填图”系统图标,进入系统起始界面。初始情况下本次路线号为空,起始地质点号为“D0001”,再次进入系统本次路线号为上次关闭系统时的路线号,地质点号为添加的最后一个地质点号下一个顺序号。(在对话框中一定要输入路线号及地

质点号,如L1001,D1001);

2、点击【确定】按钮,进入数字填图系统数据采集主界面。

3、点击系统底部菜单栏中的“手图”菜单项,弹出手图菜单,点击“打开”

菜单,弹出工程文件选择界面

4、选择野外手图工程GPJ文件,返回系统数据采集主界面,点击“复位地图”菜单,野外手图全图显示。

5、点击系统底部菜单栏中的“手图”菜单项,弹出手图菜单,点击“系统设置”菜单,弹出系统设置界面。

(默认情况下,缺省子图大小为2,R起始编号为0,B起始编号为1,自动采点方式为按时间间隔进行采点,采集间隔为0,显示语言为中文。)

6、点击系统底部菜单栏中的“手图”菜单项,弹出手图菜单,点击“地图参”菜单,弹出地图参数界面,包括野外手图采用的坐标系类型,比例尺,投影类型等。

(以当前工作区为例,坐标系类型为投影平面直角坐标系,比例尺分母为25000,投影类型为高斯—克吕格投影,坐标单位为毫米,中央经线为1290000.0,参数比例为1.0。)

7、点击系统底部菜单栏中的“手图”菜单项,弹出手图菜单,点击“保存”菜单保存野外手图。

8、点击数字填图系统的上的【GPS】按钮,弹出GPS信息界面。点击【开关】按钮,弹出手机内置GPS设置界面。勾选使用GPS复选框,启用GPS,在设备标题栏显示GPS开启标示。

注:“GPS”红色标示野外数据采集终端设备的GPS模块关闭,

“GPS”黄色标示野外数据采集终端设备的GPS模块打开,但尚未获取GPS 位置信息

“GPS”绿色标示野外数据采集终端设备的GPS模块打开,且已经接收到GPS 位置信息

9、点击手机返回键,返回野外数据采集系统主界面,【GPS】字样显示为黄色,如果接收到GPS位置信息,则【GPS】字样显示为绿色。

10、当获取GPS位置信息时,【GPS】字样显示为蓝色,并将位置信息显示在GPS 信息框中时,点击【采点】按钮,在野外手图的GPS 图层添加十字标识。

11、点击系统数据采集主界面上的快捷键或者选择“路线数据”菜单下的“地质点”菜单,进入地质点采集界面。依据GPS坐标点位置和野外手图的背景图层信息,在野外手图上点击添加地质点。

(一般情况下,第一个点[D1001]为基岩与第四系界线点,但当沟谷宽度小于25米时,可直接定岩性控制点。)

12、点击【确定】按钮,弹出地质点属性编辑界面。在属性信息录入过程中,点击字段项后图标,弹出对应属性字段值的数据字典。

13、地质点属性录入完成,点击【确定】完成地质点数据采集,返回地质点采集主界面。

14、新增一个地质观察点[D1001]后,打开导航控制开关之后,用户通过“长按”在地图上设置目标点,并自动开启GPS定位功能,系统自动利用地图参数换算GPS当前定位和目标点之间空间距离和目标点所处的空间方位,并以图形化的方式显示在地图上,为野外工作人员的提供导航,以便控制点间距离。

15、定[D1001]点后,用掌上机导航指引,沿设计路线前进,在500m之内发现岩

石类型变化时,在岩石类型变化处手工采取一个GPS控制点,继续前进,当新岩石类型宽度大于25米时,需在地质点至GPS点之间新增路线数据分段路线R1,并将这段路线所见到的地质现象进行描述,然后在GPS点处新增路线数据点和点间界线B1,将线两侧岩石类型进行记录,并尽可能描述两者之间的接触关系,依此类推增加R2,B2;若新岩石类型宽度小于25米,则仅进行记录即可,不必划出界线。

16、两点距离一般介于500m-800m之间,尽可能定露头观察点(天然或人工),或残积点;尽可能定岩性分界点,若定岩性控制点后前进不到100m发现岩石类型变化且宽度大于25m,需将该点移到界线处并变为岩性分界点重新描述。

17、新增地质观察点、地质界线、产状、样品、照片时,首先手工采取GPS点,然后新增,必须现场操作;

18、路线地质调查宗旨:连续观察,连续记录,不允许出现岩性变化而无界线描述的现象,多观察记录界线信息,尽可能采集界线标本。

19、野外地质调查时,尽可能搜集各种矿化蚀变信息,多采化学样品。

20、选择 “路线数据”菜单下的 “路线小结”菜单,弹出剖面小结界面。 点击设备菜单键,弹出 “工作量统计”菜单,点击菜单进行路线工作量统计并添加到小结编辑框中。

21、点击系统数据采集主界面上的 信手剖面绘制快捷键,弹出等高线图层选择对话框,选择等高线图层点击【确定】,弹出等高线高程值属性字段名选择对话框,选择等高线高程值属性字段,点击【确定】绘制信手剖面。

21、全部信息录入后,保存数据,退出系统;

(三)地质路线室内整理过程

1、将设计路线工程文件夹(如L1001)复制到你的电脑。具体操作如下:

找到布设路线电脑的DGSData文件夹工作图幅(如:L52E019011)数字填图野外手图找到L1001文件夹,复制到你工作的电脑DGSData目录下的野外手图中(对应目录)。

如果是自己设计的路线,则此步骤省略。

2、把掌上机的路线文件夹考入工作电脑中,具体操作如下:

掌上机与电脑连接,打开“我的电脑”,双击移动设备,复制工作路线文件夹粘贴到收CF卡文件夹。

3、把野外手图调入数字填图主程序中。具体操作如下:

打开数字填图主程序图幅选择项双击数字填图点击“文件”按纽野外手图数据交换掌上机到野外手图,找到收CF卡文件夹并打开选中路线工程文件,出现CF卡转入成功等三项提示,均确定。

再点击“文件”按纽打开(新建)野外手图库选择路线名称选中工作路线并打开工程文件)按“1:1”放大窗口找到工作路线即可进行编辑。

4、整理编辑。操作如下:

(1)将地质点子图大小修改为高度、宽度均为2mm;

(2)地质填图数据操作,图式图例整理,地质点图层标注(静态),将点号显示出来;

(3)点击右侧下方P,编辑补充地质点内容;

(4)点击右侧下方R,以地质点或分界处的GPS点为圆心,将路线R线头结点平差;

(5)线编辑,光滑线,二次,点击路线R,多光滑几次,光滑后若发现R 线偏离实际路线,需通过线上移点调整到实际位置;

(6)地质填图数据操作,点间路线计算与点坐标重写,点间路线计算;

(7)点击右侧下方R,首先更新段首,补充整理地质路线内容;

(8)点击右侧下方B,线编辑,光滑线,二次,点击路线B,多光滑几次;

(9)移动线,将B移动到GPS点上;

(10)点击右侧下方B,编辑补充地质内容;

(11)产状、样品等编辑依此类推;

(12)照片需利用导入功能。

(13)工具,距离角度量算,点击P,将地质点的位置一档补充完成;

(14)数据质量程序检查,查错;

(15)地质填图数据操作,野外路线小结和自检,补充路线小结;

(16)地质填图数据操作,野外数据编辑与浏览,补充路线数据内容。二、数字填图路线室内整理内容及规定

对路线的所有内容进行整理,包括:圆滑R、B线,R过程重新计算,重换R段首、对P、R、B过程及产状、照片、采样等过程进行完善及检查编号是否正确、量取地质点位置、根据露头性质修改地质点子图参数、填写路线基本信息、路线程序检查、自检、写路线小结等。

1、图面修饰:

①地质点:露头性质:修改点参数点击修改点改变子图

号。子图号依如下数值修改:转石点:子图号子1149;天然点:1147;

残积点:1148并旋转角度180;人工点1148。

②删除多余的GPS点,保留地质点、样品、产状、界线等地质体上的

GPS点。

③对于“R”和“B”的修改,可点击“设置”按钮中的“参数设置”,

选中坐标点可见并确定、更新。打开Boundary.wl文件或Routing.wl

文件图层点击需要编辑的线。可用“线上移点”或“线上删点”进行

编辑修饰。

④各类样品亦应有不同的符号与之对应,规定如下:

标本:子图号1154

薄片:子图号1155

光片:子图号1163

化学样:子图号1162

人工重砂:子图号1153

化石:子图号1076

2、文字:

地质点描述规定:各地质点须详细描述地质点岩性、构造、矿化蚀变等特征。岩性分界点接触关系的描述放在描述之后,在该点采取的样品、产状、照片等需要说明。

地质点描述格式规定:

岩性控制点:(顶格)岩石名称:(岩性描述)

产状、样品等说明。

岩性分界点:(顶格)点南东:岩石名称:(岩性描述)

(顶格)点北西:岩石名称:(岩性描述)

接触关系的描述,产状、样品等说明。

R过程描述;描述本段路线见到的各种地质现象,包括采集的样品、产状、照片等都要做出说明。

B过程描述;描述过程中,必须写明两侧岩性(顶格分别写明)。在接触关系一栏中亦应填写接触关系。

左侧(北东侧):岩石名称

右侧(南西侧):岩石名称

二者接触关系的描述。

路线小结编写格式规定:

首先点击“该路线工作量统计”,其次统计露头情况,如:(顶格)该路线定天然点3个,转石点1个,人工点1个。然后再统计点性情况,如:岩性控制点3个,岩性界线点1个,构造点1个,矿化点1个。完成以上操作后,按回车键。另起一行(顶格),进行路线总结。总结顺序按地层、构造、岩浆岩、矿化蚀变逐条进行总结。

样品:路线当中所采集的样品,应分类输入,即:不同类别的样品,分别添加输入,并写明样品编号。地质点上的样品编号与该点号一致,如:

7H2001;地质路线当中的样品编号依地质点号依次顺延,如:

7H2001-1。

三、室内整理记录格式

1.岩性控制点[PRB-P(GEOPOINT)]记录格式

2.岩性分界点[PRB-P(GEOPOINT)]记录格式

3.分段路线[PRB-R(Routing)]记录内容及格式

4.地质界线[PRB-B(Bourardaryl)]记录格式路线间界线:

地质点上的界线:

android系统开机启动流程分析

一,系统引导bootloader 加电,cpu执行bootloader程序,正常启动系统,加载boot.img【其中包含内核。还有ramdisk】 二,内核kernel bootloader加载kernel,kernel自解压,初始化,载入built-in驱动程序,完成启动。 内核启动后会创建若干内核线程,在后装入并执行程序/sbin/init/,载入init process,切换至用户空间(user-space) 内核zImage解压缩 head.S【这是ARM-Linux运行的第一个文件,这些代码是一个比较独立的代码包裹器。其作用就是解压Linux内核,并将PC指针跳到内核(vmlinux)的第一条指令】首先初始化自解压相关环境(内存等),调用decompress_kernel进行解压,解压后调用start_kernel启动内核【start_kernel是任何版本linux内核的通用初始化函数,它会初始化很多东西,输出linux版本信息,设置体系结构相关的环境,页表结构初始化,设置系 统自陷入口,初始化系统IRQ,初始化核心调度器等等】,最后调用rest_init【rest_init 会调用kernel_init启动init进程(缺省是/init)。然后执行schedule开始任务调度。这个init是由android的./system/core/init下的代码编译出来的,由此进入了android的代码】。 三,Init进程启动 【init是kernel启动的第一个进程,init启动以后,整个android系统就起来了】 init进程启动后,根据init.rc 和init. .rc脚本文件建立几个基本 服务(servicemanager zygote),然后担当property service 的功能 打开.rc文件,解析文件内容。【system/core/init/init.c】将service信息放置到service.list中【system/core/init/init_parser.c】。 建立service进程。【service_start(…) execve(…)】 在init.c中,完成以下工作 1、初始化log系统【解析/init.rc和init.%hardware%.rc文件,在两个 文件解析步骤2时执行“early-init”行动】 2、初始化设备【在/dev下创建所有设备节点,下载firmwares】 3、初始化属性服务器【在两个文件解析步骤2时执行“init”行动】

Android系统架构详解

Android系统架构详解 Android系统架构由5部分组成, 分别是:Linux Kernel、Android Runtime、Libraries、Application Framework、Applications。 1、Linux Kernel Android relies on Linux version 2.6 for core system services such as security, memory management, process management, network stack, and driver model. The kernel also acts as an abstraction layer between the hardware and the rest of the software stack. Android基于Linux 2.6提供核心系统服务,例如:安全、内存管理、进程管理、网络堆栈、驱动模型。Linux Kernel也作为硬件和软件之间的抽象层,它隐藏具体硬件细节而为上层提供统一的服务。如果你学过计算机网络知道OSI/RM,就会知道分层的好处就是使用下层提供的服务而为上层提供统一的服务,屏蔽本层及以下层的差异,当本层及以下层发生了变化不会影响到上层。也就是说各层各尽其职,各层提供固定的SAP(Service Access Point),专业点可以说是高内聚、低耦合。如果你只是做应用开发,就不需要深入了解Linux Kernel层。 2、Android Runtime Android includes a set of core libraries that provides most of the functionality available in the core libraries of the Java programming language. Android包括一个核心库的集合,她们提供了Java编程语言的核心库中的绝大多数功能。 Every Android application runs in its own process, with its own instance of the Dalvik virtual

Android adb(调试桥)的应用及操作命令 有米分享

Android adb(调试桥)的应用及操作命令 试阅: ……Android日志系统有循环缓冲区,并不是所有的日志系统都有默认循环缓冲区。为了得到日志信息,你需要通过-b 选项来启动logcat 。如果要使用循环缓冲区,你需要查看剩余的循环缓冲期: ?radio —查看缓冲区的相关的信息. ?events —查看和事件相关的的缓冲区. ?main —查看主要的日志缓冲区 -b 选项使用方法: [adb] logcat [-b ] 下面的例子表示怎么查看日志缓冲区包含radio 和 telephony信息: adb logcat -b radio 查看stdout 和stderr 在默认状态下,Android系统有stdout 和 stderr (System.out 和System.err )输出到/dev/null ,在运行Dalvik VM的进程中,有一个系统可以备份日志文件。在这种情况下,系统会用stdout 和stderr 和优先级 I.来记录日志信息 通过这种方法指定输出的路径,停止运行的模拟器/设备,然后通过用 setprop 命令远程输入日志 $ adb shell stop $ adb shell setprop log.redirect-stdio true $ adb shell start 系统直到你关闭模拟器/设备前设置会一直保留,可以通过添加 /data/local.prop 可以使用模拟器/设备上的默认设置 Logcat命令列表 Option Description -b 加载一个可使用的日志缓冲区供查看,比如event 和radio . 默认值是main 。具体查看Viewing Alternative Log Buffers. -c 清楚屏幕上的日志.

Android 开机启动流程

Android的开机流程 1. 系统引导bootloader 1) 源码:bootable/bootloader/* 2) 说明:加电后,CPU将先执行bootloader程序,此处有三种选择 a) 开机按Camera+Power启动到fastboot,即命令或SD卡烧写模式,不加载内核及文件系统,此处可以进行工厂模式的烧写 b) 开机按Home+Power启动到recovery模式,加载recovery.img,recovery.i mg包含内核,基本的文件系统,用于工程模式的烧写 c) 开机按Power,正常启动系统,加载boot.img,boot.img包含内核,基本文件系统,用于正常启动手机(以下只分析正常启动的情况) 2. 内核kernel 1) 源码:kernel/* 2) 说明:kernel由bootloader加载 3. 文件系统及应用init 1) 源码:system/core/init/* 2) 配置文件:system/rootdir/init.rc, 3) 说明:init是一个由内核启动的用户级进程,它按照init.rc中的设置执行:启动服务(这里的服务指linux底层服务,如adbd提供adb支持,vold提供SD卡挂载等),执行命令和按其中的配置语句执行相应功能 4. 重要的后台程序zygote 1)源码:frameworks/base/cmds/app_main.cpp等 2) 说明:zygote是一个在init.rc中被指定启动的服务,该服务对应的命令是/system/bin/app_process a)建立Java Runtime,建立虚拟机 b) 建立Socket接收ActivityManangerService的请求,用于Fork应用程序 c) 启动System Server 5. 系统服务system server 1)源码:frameworks/base/services/java/com/android/server/SystemServer.jav a 2) 说明:被zygote启动,通过SystemManager管理android的服务(这里的服务指frameworks/base/services下的服务,如卫星定位服务,剪切板服务等) 6. 桌面launcher 1)源码:ActivityManagerService.java为入口,packages/apps/launcher*实现 2) 说明:系统启动成功后SystemServer使用xxx.systemReady()通知各个服务,系统已经就绪,桌面程序Home就是在ActivityManagerService.systemReady()通知的过程中建立的,最终调用()启launcher 7. 解锁 1) 源码: frameworks/policies/base/phone/com/android/internal/policy/impl/*lock* 2) 说明:系统启动成功后SystemServer调用wm.systemReady()通知WindowManagerService,进而调用PhoneWindowManager,最终通过LockPatternKeyguardView显示解锁界面,跟踪代码可以看到解锁界面并不是一个Activity,这是只是向特定层上绘图,其代码了存放在特殊的位置

Android系统架构简介

Android系统架构简介 Android系统架构简介 目前Android的Linuxkernel控制包括安全、存储器管理、进程管理、网络堆叠、驱动程序模型等。下载Android源码之前,先要 安装其构建工具Repo来初始化源码。Repo是Android用来辅助Git 工作的一个工具。 应用程序 Android系统是基于Linux内核开发,使用Java作编程语言, 使界面到功能,都有层出不穷的变化,其中Activity等同于J2ME 的MIDlet,一个Activity类别负责创建视窗,一个活动中的 Activity就是在foreground(前景)模式,背景执行的程序叫做Service。两者之间透过由ServiceConnection和AIDL连结,达到 复数程序同时执行的效果。如果执行中的Activity全部画面被其他Activity取代时,该Activity便被停止,甚至被系统清除。 View等同于J2ME的Displayable,程序人员可以透过View类别与“XMLlayout”档将UI放置在视窗上,并可以利用View打造出所 谓的Widgets,其实Widget只是View的一种,所以可以使用xml 来设计layout。至于ViewGroup是各种layout的基础抽象类别,ViewGroup之内还可以有ViewGroup。View的构造函数不需要在Activity中调用,但是Displayable的是必须的,在Activity中,要通过findViewById()来从XML中获取View,Android的View类 的显示很大程度上是从XML中读取的。View与事件息息相关,两者 之间透过Listener结合在一起,每一个View都可以注册eventlistener,例如:当View要处理用户触碰的事件时,就要向Android框架注册View.OnClickListener。另外还有Image等同于 J2ME的BitMap。 中介软件

分析Android 开机启动慢的原因

开机启动花了40多秒,正常开机只需要28秒就能开机起来。 内核的启动我没有去分析,另一个同事分析的。我主要是分析从SystemServer启来到开机动画结束显示解锁界面的这段时间,也就是开机动画的第三个动画开始到结束这段时间,这是个比较耗时阶段,一般都在17秒左右(见过牛B的手机,只需5秒)。 SystemServer分两步执行:init1和init2。init1主要是初始化native的服务,代码在sy stem_init.cpp的system_init,初始化了SurfaceFlinger和SensorService这两个native的服务。init2启动的是java的服务,比如ActivityManagerService、WindowManagerService、PackageManagerService等,在这个过程中PackageManagerService用的时间最长,因为PackageManagerService会去扫描特定目录下的jar包和apk文件。 在开机时间需要40多秒的时,从Log上可以看到,从SurfaceFlinger初始化到动画结束,要27秒左右的时间,即从SurfaceFlinger::init的LOGI("SurfaceFlinger is starting")这句Log到void SurfaceFlinger::bootFinished()的LOGI("Boot is finished (%ld ms)", long(ns 2ms(duration)) ),需要27秒左右的时间,这显然是太长了,但到底是慢在哪了呢?应该在个中间的点,二分一下,于是想到了以启动服务前后作为分隔:是服务启动慢了,还是在服务启动后的这段时间慢?以ActivityManagerService的Slog.i(TAG, "System now ready")的这句Log为分割点,对比了一下,在从SurfaceFlinger is starting到System now read y多了7秒左右的时间,这说明SystemServer在init1和init2过程中启动慢了,通过排查,发现在init1启动的时候,花了7秒多的时间,也就是system_init的LOGI("Entered system _init()")到LOGI("System server: starting Android runtime.\n")这段时间用了7秒多,而正常情况是400毫秒便可以初始化完,通过添加Log看到,在SensorService启动时,用了比较长的时间。 不断的添加Log发现,在启动SensorService时候,关闭设备文件变慢了,每次关闭一个/dev/input/下的设备文件需要100ms左右,而SensorService有60~70次的关闭文件,大概有7s左右的时间。 调用流程是: frameworks/base/cmds/system_server/library/system_init.cpp: system_init->SensorServi ce::instantiate frameworks/native/services/sensorservice/SensorService.cpp: void SensorService::onFi rstRef()->SensorDevice& dev(SensorDevice::getInstance()) hardware/libsensors/SensorDevice.cpp: SensorDevice::SensorDevice()->sensors_open hardware/libsensors/sensors.cpp: open_sensors->sensors_poll_context_t sensors_poll_context_t执行打开每个传感器设备时,遍历/dev/input/目录下的设备文件,以匹配当前需要打开的设备,遍历文件是在 hardware/libsensors/SensorBase.cpp的openInput下实现,如果打开的设备文件不是正在打开的设备文件,会执行下面语句的else部分: if (!strcmp(name, inputName)) { strcpy(input_name, filename); break;

基于MT6752的 android 系统启动流程分析报告

基于MT6752的Android系统启动流程分析报告 1、Bootloader引导 (2) 2、Linux内核启动 (23) 3、Android系统启动 (23) 报告人: 日期:2016.09.03

对于Android整个启动过程来说,基本可以划分成三个阶段:Bootloader引导、Linux kernel启动、Android启动。但根据芯片架构和平台的不同,在启动的Bootloader阶段会有所差异。 本文以MTK的MT6752平台为例,分析一下基于该平台的Android系统启动流程。 1、Bootloader引导 1.1、Bootloader基本介绍 BootLoader是在操作系统运行之前运行的一段程序,它可以将系统的软硬件环境带到一个合适状态,为运行操作系统做好准备,目的就是引导linux操作系统及Android框架(framework)。 它的主要功能包括设置处理器和内存的频率、调试信息端口、可引导的存储设备等等。在可执行环境创建好之后,接下来把software装载到内存并执行。除了装载software,一个外部工具也能和bootloader握手(handshake),可指示设备进入不同的操作模式,比如USB下载模式和META模式。就算没有外部工具的握手,通过外部任何组合或是客户自定义按键,bootloader也能够进入这些模式。 由于不同处理器芯片厂商对arm core的封装差异比较大,所以不同的arm处理器,对于上电引导都是由特定处理器芯片厂商自己开发的程序,这个上电引导程序通常比较简单,会初始化硬件,提供下载模式等,然后才会加载通常的bootloader。 下面是几个arm平台的bootloader方案: marvell(pxa935) : bootROM + OBM + BLOB informax(im9815) : bootROM + barbox + U-boot mediatek(mt6517) : bootROM + pre-loader + U-boot broadcom(bcm2157) : bootROM + boot1/boot2 + U-boot 而对MT6752平台,MTK对bootloader引导方案又进行了调整,它将bootloader分为以下两个部分: (1) 第1部分bootloader,是MTK内部(in-house)的pre-loader,这部分依赖平台。 (2) 第2部分bootloader,是LK(little kernel的缩写,作用同常见的u-boot差不多),这部分依赖操作系统,负责引导linux操作系统和Android框架。 1.2、bootloader的工作流程 1.2.1 bootloader正常的启动流程 先来看启动流程图:

Android体系结构

Android体系结构 android 平台大的方面的层次可以划分成三个层次,包括一个操作系统,中间件与应用程序,android 的系统框架图如下: 图中的软件层次自上而下分成4个层次 1. 应用程序(Application) 2. 用用程序框架(Application Framework) 3. 各种类库(Libraries)与android运行时(Adnorid Runtime) 4. 操作系统(OS) 一、应用程序(Application) 应用层就是与用户交互的一个层次,用户可以瞧得见的一些应用,用户可以操作。这类应用基本都就是通过Java语言编写的独立的能够完成某些功能的应用程序。Android本身提供了桌面(Home),联系人(Contacts),拨打电话(Phone),浏览器(Browers)等很多基本的应用程序。开发人员可以使用应用框架提供的API编写自己的应用程序,普通开发人员要做的事情就就是开应用层的程序提供该广大消费者使用。 二、应用程序框架(Application Framework) 普通开发者可以使用Android基本应用程序使用的系统API,android 应用框架中的各个模块都可以被复用,各种服务也可以被复用,理解了这个机制,开发人员可以更好的更轻松的开发出优秀的android应用。 开发过程中常用到的基本框架组件如下:

1. 一组View(UI 组件),这些UI组件包括Button(按钮),EidtView(文本框),TextView(标签),List(列表) 等等,灵活运用这些组件可以快速方便的创建良好的用户交互界面。 2. Content Providers(内容提供者),听起来有点抽象,通俗的理解Content Provider 就就是提供一种 服务,通过这种服务应用程序之间可以实现数据的互相访问与共享,比如通讯录的存储就使用了这种服务,其它应用也可以访问通讯录中存储的联系人信息。 3. Resource Manager 顾名思义就就是资源管理,android中的资源很多包括图片,用户界面(Layout xml),字体,颜色,UI组件的Id等等都可以称之为资源,这些丰富的资源,都就是通过Resource Manager来统一进行管理。 4. Notification Manager(消息通知管理),它在不影响用户正常操作与使用设备的时候在状态栏上提供 消息的提示。比如有短信来的时候,android自动会将这个消息提示在状态栏上,用户可以及时的瞧到。 5. Activity Manager(活动管理),Activity管理着应用程序的生命周期,并且控制着应用的导航,扮演控 制器的角色。每个Activity类似于Windows应用中的一个wendow。一般的应用都就是通过一个个Activity 交互构成的。 6. Window Manager(窗口管理),管理所有启动的窗口。 7. Location Manager(位置管理),用来管理地图服务的相关功能。 8. Telephoney Manager(电话管理),用来管理有关的电话的相关功能。 9. Package Manager(包管理),管理所有的安装在android系统内的应用程序。 三、库(Libraries)与运行环境(RunTime) 这部分内容开始涉及底层,开发普通的应用不会直接对这个层进行操作。这层中包含了一组类库(Libraries)与运行时(RunTime), 1. 系统C库(libc),一个从BSD集成来的标准C系统函数库(libc)它就是专门为基于嵌入式Linux的设 备定制的。 2. 媒体库(Media Framework),基于PackeVideo OpenCore,该库支持多种常用的音频,视频格式以及 回放与录制,同时支持静态图像文件。编码格式包括:MPEG4、H、264,MP3、AAC、AMR、JPG、PNG。 3. Surface Manager 对显示子系统的管理,并且为多个应用提供2D,3D图层的无缝融合。 4. WebKit,一个最新的web浏览器引擎,用来支持Andiroid浏览器或者嵌入的web视图。 5. SGL 底层的2D图形引擎。 6. OPENGL|ES,基于OpenGL ES 1、0 APIs实现,该库可以使用硬件3D加速或者使用高度优化的 3D软加速。 7. FreeType,位图(bitmap)与适量(vector)字图显示支持。 8. SQLite,一个对所有应用程序可用,功能强大的轻量级关系型数据库引擎。 9. Core Libraries 该核心库提供了Java编程语言核心库的大多数功能。 10. Dalvik VM, android平台的一个虚拟机,它相当于PC中Java的虚拟机JVM。 四、操作系统(OS) Android 的核心系统服务依赖于Linux 2、6 内核,操作系统为Android提供的服务包括: 1. 安全性(Security)。 2. 内存管理(Memory Management) 3. 进程管理(Process Management) 4. 网络堆栈(Network Stack) 5. 驱动程序模型(Driver Model)包含以下这些常规的驱动程序: (1)Display Driver (2)Keypad Driver

在Eclipse上调试Android应用程序

在Eclipse上调试Android应用程序 以前一直用VC开发,VC开发工具调试程序非常简单,按F7源码编译通过后,按F5就开始调试了。为了开发Android程序,使用Eclipse开发环境,刚接触Eclipse不久,对Eclipse 环境不够熟悉,在这之前开发Android程序都是通过Trace定位问题的,后来得知Eclipse也可以进行单步调试,经过动手试验,发现调试过程类似VC开发环境,下面是调试步骤: 1. 首先启动Eclipse,启动Android模拟器 2. 打开DDMS界面,选择要调试的设备,并指定要调试的进程,例如: 3.设置好断点,打开调试界面,按F11开始调试,可以F6进行单步调试。 ******************************** DDMS 的全称是Dalvik Debug Monitor Service,是Android 开发环境中的Dalvik虚拟机调试监控服务。它为我们提供例如:为测试设备截屏,针对特定的进程查看正在运行的线程以及堆信息、Logcat、广播状态信息、模拟电话呼叫、接收SMS、虚拟地理坐标等等。 在集成开发环境中,有DDMS控制台窗口。如,MyEclipse中,有个叫DDMS的Console。 1.如何启动DDMS 这个工具存放在SDK-tools路径下,启动方法: 1) 直接双击ddms.bat运行; 2) 在Eclipse调试程序的过程中启动DDMS,在Eclipse如下: Window-Open Perspective-DDMS,点击启动就可以了 DDMS对Emulator和外接测试机同等效用,如果系统检测到它们(VM)同时运行,那么DDMS 将会默认指向Emulator,以上两种启动后的操作有些不一样,建议分别尝试下; (WGY-Dalvik:虚拟机;Monitor:监听器)

linux内核启动 Android系统启动过程详解

linux内核启动+Android系统启动过程详解 第一部分:汇编部分 Linux启动之 linux-rk3288-tchip/kernel/arch/arm/boot/compressed/ head.S分析这段代码是linux boot后执行的第一个程序,完成的主要工作是解压内核,然后跳转到相关执行地址。这部分代码在做驱动开发时不需要改动,但分析其执行流程对是理解android的第一步 开头有一段宏定义这是gnu arm汇编的宏定义。关于GUN 的汇编和其他编译器,在指令语法上有很大差别,具体可查询相关GUN汇编语法了解 另外此段代码必须不能包括重定位部分。因为这时一开始必须要立即运行的。所谓重定位,比如当编译时某个文件用到外部符号是用动态链接库的方式,那么该文件生成的目标文件将包含重定位信息,在加载时需要重定位该符号,否则执行时将因找不到地址而出错 #ifdef DEBUG//开始是调试用,主要是一些打印输出函数,不用关心 #if defined(CONFIG_DEBUG_ICEDCC)

……具体代码略 #endif 宏定义结束之后定义了一个段, .section ".start", #alloc, #execinstr 这个段的段名是 .start,#alloc表示Section contains allocated data, #execinstr表示Section contains executable instructions. 生成最终映像时,这段代码会放在最开头 .align start: .type start,#function /*.type指定start这个符号是函数类型*/ .rept 8 mov r0, r0 //将此命令重复8次,相当于nop,这里是为中断向量保存空间 .endr b 1f .word 0x016f2818 @ Magic numbers to help the loader

Android的调试打印接口分析

Android的调试打印接口分析 Android输出Log可以通过使用Android.util中的Log类来实现。android.util.Log常用的方法有以下5个:Log.v() Log.d() Log.i() Log.w() 以及Log.e() 。根据首字母对应VERBOSE、DEBUG、INFO、WARN、ERROR。例如,在执行下面的代码后,会输出Log到LogCat View 里: Log.v("tag", "message"); Java中原有的打印语句System.out.println()的打印也会被输出到LogCat,它的Tag标签是” System.out” 在Eclipse下会通过如下的窗口显示: 在机顶盒命令模式下,则需要执行logcat命令在串口输出打印(或者将打印输出到指定文件)。 1、使用android.util.log的优点 1)功能强大,使用方便 Logcat可以根据调试级别输出不同等级的信息(VERBOSE,DEBUG,INFO, WARN,ERROR),而且可以过滤输出指定tag的调试信息; 2)系统自动添加调试信息,定位问题快捷 程序异常退出、强制关闭、长时间无响应时,系统会自动生成log打印。包括系统基本信息(内存,CPU ,进程队列,虚拟内存,垃圾回收等)、时间信息和虚拟机信息(包括进程的,线程的跟踪信息)。 2、使用android.util.log的缺点 中间件其它模块的打印最后统一由rocme_porting_dprintf()实现,独独android的java输出使用了自己的底层实现(调用Linux的write( int fildes, const void* buf,size_t nbyte )),不够统一。 3、Android中Java打印在底层改由rocme_porting_dprintf()实现的优点 中间件打印最后统一由rocme_porting_dprintf()实现,这样只需修改porting就可以实现打印的开关、打印终端的控制(串口、控制台……)。 4、Android中Java打印改由rocme_porting_dprintf()实现的缺点 1)Android log原有的输出等级控制和输出过滤的功能将丧失,Android内部C和C++实现中用LOGV、LOGD、LOGI等分等级输出的打印将全部会输出,除非rocme_porting_dprintf()也实现分等级输出的功能; 2)Android在运行Java应用的时候,会将每个进程的标准输出sdtout等重定向到/dev/log/下的三个文件(main、radio、events)中进行缓存,执行logcat命令后再重定向到串口进行输出。若改用rocme_porting_dprintf(),则需要其实现将每个进程的标准输出sdtout重定向,

Android开机启动流程样本

Android的开机流程 1. 系统引导bootloader 1) 源码: bootable/bootloader/* 2) 说明: 加电后, CPU将先执行bootloader程序, 此处有三种选择 a) 开机按Camera+Power启动到fastboot, 即命令或SD卡烧写模式, 不加载内核及文件系统, 此处能够进行工厂模式的烧写 b) 开机按Home+Power启动到recovery模式, 加载recovery.img, recovery.img包含内核, 基本的文件系统, 用于工程模式的烧写 c) 开机按Power, 正常启动系统, 加载boot.img, boot.img包含内核, 基本文件系统, 用于正常启动手机( 以下只分析正常启动的情况) 2. 内核kernel 1) 源码: kernel/* 2) 说明: kernel由bootloader加载 3. 文件系统及应用init 1) 源码: system/core/init/* 2) 配置文件: system/rootdir/init.rc, 3) 说明: init是一个由内核启动的用户级进程, 它按照init.rc中的设置执行: 启动服务( 这里的服务指linux底层服务, 如adbd提供adb支持, vold提供SD卡挂载等) , 执行命令和按其中的配置语句执行相应功能 4. 重要的后台程序zygote 1) 源码: frameworks/base/cmds/app_main.cpp等 2) 说明: zygote是一个在init.rc中被指定启动的服务, 该服务对应的命令是/system/bin/app_process

(完整word版)ios与android系统架构

系统包(运行架构) Android Ios Android系统的优先级响应层级是Application(应用层)--Framework(框架层)--Library (运行库及显示)--Kernal(内核层)架构,和显示相关的图形图像处理这一部分属于Library,可以看到到第三位才是它,当触摸屏幕之后Android系统首先会激活应用,框架然后才是屏幕最后是核心架构。 iOS对屏幕反应的优先级是最高的,它的响应顺序依次为Touch(触摸显示)--Media(媒体)--Service(服务)--Core(内核)架构,换句话说当用户只要触摸接触了屏幕之后,系统就会最优先去处理屏幕显示也就是Touch这个层级,然后才是媒体(Media),服务(Service)以及Core架构。 应用程序框架层

Linux内核层 Android是基于Linux2.6内核,其核心系统服务如安全性、内存管理、进程Android 内核分析 一、内核在操作系统中的地位 Android基于Linux操作系统由硬件、系统内核、系统服务和应用程序等四大部分组成。其中内核是核心的部分,其主要作用在于与计算机硬件进行交互实现对硬件的编程控制和接口操作调度访问硬件资源同时向应用程序提供一个高级的执行环境和对硬件的虚拟接口。主要功能包括中断服务程序、进程调度程序、进程地址空间的内存管理、进程间通信。内核与普通应用程序不同,其拥有所有硬件设备的访问权限以及启动时即划分的受保护的内存空间。 二、Android内核和标准的Linux内核一样,Android内核主要实现内存管理、进程调度、进程间通信等功能。 Android内核是在标准Linux内核的基础上修改而成。为了适应嵌入式硬件环境和移动应用程序的开发Android对标准Linux内核进行了一定的修改。经过与标准Linux内核源代码进行详细对比可以发现Android内核与标准Linux内核在文件系统、进程间通信机制、内存管理等方面存在不同。 文件系统不同于桌面系统与服务器,移动设备大多采用的不是硬盘而是采用Flash作为存储介质,因此Android内核中增加了标准Linux内核中没有采纳的YAFFS2文件系统。 YAFFS2按层次结构设计分为文件管理接口、内部实现层和NAND简化了其本身与系统的接口设计能更方便地集成到系统当中。 进程间通信机制Android增加了一种进程间的通信机制IPCBinder,Binder通过守护进程ServiceManager管理系统中的服务,负责进程间的数据交换。各进程通过Binder访问同一块共享内存以达到数据通信的机制。从应用层的角度看进程通过访问数据守护进程获取用于数据交换的程序框架接口,调用并通过接口共享数据,而其他进程要访问数据也只需与程序框架接口进行交互方便了程序员开发需要交互数据的应用程序。 内存管理在内存管理模块Android内核采用了一种不用于标准Linux内核的低内存管理策略。在标准Linux内核当中使用一种叫做OOM(OutofMemory)的低内存管理策略,当内存不足时系统检查所有的进程并对进程进行限制评分获得最高分的进程将被关闭。Android新增加了一种内存共享的处理方式Ashmem。通过Ashmem进程间可以匿名自由共享具名的内存块这种共享方式在标准Linux当中不被支持。经过分析Android内核由标准Linux内核修改而来,因此继承了Linux内核的各种优点保留了标准Linux内核的主体架构。 同时Android按照移动设备的需求在文件系统、内存管理、进程间通信机制、电源管理等方面进行了修改添加相关的驱动程序和一些必要的新功能,但是与大多数精简的嵌入式Linux操作系统相比Android很大程度上保留了标准Linux的基本架构,因此Android系统应用范围更加广泛拓展性更强。

Android SystemBar启动流程分析

Android SystemBar启动流程分析 SystemBars的服务被start时,最终会调用该类的onNoService()方法。 @Override public void start() { if (DEBUG) Log.d(TAG, "start"); ServiceMonitor mServiceMonitor = new ServiceMonitor(TAG, DEBUG, mContext, Settings.Secure.BAR_SERVICE_COMPONENT, this); mServiceMonitor.start(); // will call onNoService if no remote service is found } @Override public void onNoService() { if (DEBUG) Log.d(TAG, "onNoService"); createStatusBarFromConfig(); // fallback to using an in-process implementation } private void createStatusBarFromConfig() { … mStatusBar = (BaseStatusBar) cls.newInstance(); … mStatusBar.start(); } BaseStatusBar是一个抽象类,故调用其子类的PhoneStatusBar的start 函数。 @Override public void start() { … super.start(); … } 子类的start又调用了父类的start public void start() { … createAndAddWindows(); … }

安卓系统文件夹结构及其文件解析(详细)

安卓系统文件夹及其文件解析 打开Android文件管理器,会发现里面数十个英文名称命名的文件夹罗列其中,很多功能我们可以从其名字上略有所知,内部大批量的文件却让我们有些一头雾水。这些文件是什么?有什么用?我们能不能删?这些都是我们脑中充满疑问的。现在将将Android手机内部文件夹的架构和各文件的功能描述介绍给大家,让大家自己手机的内部资源有个比较透彻的理解,同时也避免了用户误删造成的数据丢失和系统崩溃。 【文件夹功能简介】 \system\app 这个里面主要存放的是常规下载的应用程序,可以看到都是以APK格式结尾的文件。在这个文件夹下的程序为系统默认的组件,自己安装的软件将不会出现在这里,而是\data\文件夹中。 \system\bin 这个目录下的文件都是系统的本地程序,从bin文件夹名称可以看出是binary二进制的程序,里面主要是Linux 系统自带的组件(命令) \system\etc 从文件夹名称来看保存的都是系统的配置文件,比如APN接入点设置等核心配置。 \system\fonts 字体文件夹,除了标准字体和粗体、斜体外可以看到文件体积最大的可能是中文字库,或一些unicode字库,从T-Mobile G1上可以清楚的看到显示简体中文正常,其中DroidSansFallback.ttf文件大小。 \system\framework framework主要是一些核心的文件,从后缀名为jar可以看出是是系统平台框架。 \system\lib lib目录中存放的主要是系统底层库,一些so文件,如平台运行时库。 \system\media \system\media\audio 铃声音乐文件夹,除了常规的铃声外还有一些系统提示事件音。 \system\sounds 默认的音乐测试文件,仅有一个test.mid文件,用于播放测试的文件。 \system\usr 用户文件夹,包含共享、键盘布局、时间区域文件等。 \system\app 这个里面主要存放的是常规下载的应用程序,可以看到都是以APK格式结尾的文件。在这个文件夹下的程序为系统默认的组件,自己安装的软件将不会出现在这里,而是\data\文件夹中。 \system\app\AlarmClock.apk 闹钟

Android常用调试工具

Android问题分析工具 Android应用开发过程中,会遇到各种各样的问题。好的分析方法和分析工具,能起到事半功倍的效果。下面是几个常用的小工具,希望能对大家有所帮助。 1. 查看当前堆栈 1) 功能:在程序中加入代码,使可以在logcat中看到打印出的当前函数调用关系 2) 方法: new Exception(“print trace”).printStackTrace(); 2. MethodTracing 1) 功能:用于热点分析和性能优化,分析每个函数占用的CPU时间,调用次数,函 数调用关系等 2) 方法: a) 在程序代码中加入追踪开关 1. import Android.os.Debug; 2. …… 3. Android.os.Debug.startMethodTracing(“/data/tmp/test”); // 先 建/data/tmp目录 4. …… // 被追踪的程序段 5. Android.os.Debug.stopMethodTracing(); b) 编译,运行后,设备端生成/data/tmp/test.trace文件 c) 把trace文件复制到PC端 1. $ adb pull /data/tmp/test.trace ./

d) 使用Android自带工具分析trace文件 1. $ $Android_SRC/out/host/linux-x86/bin/traceview test.trace 此时可看到各个函数被调用的次数CPU占用率等信息 e) 使用Android自带工具分析生成调用关系类图 1. $ apt-get install graphviz # 安装图片相关软件 2. $Android_SRC/out/host/linux-x86/bin/dmtracedump -g test.png test.trace 此时目录下生成类图test.png 3) 注意 trace文件生成与libdvm模块DEBUG版本相冲突,所以此方法只适用于对非DEBUG 版 本模拟器的调试,否则在分析trace文件时会报错 3. HProf (Heap Profile) 1) 功能: 用于java层面的内存分析,显示详细的内存占用信息,指出可疑的内存泄漏对象 2) 方法: a) 在代码中加入dump动作 1. import Android.os.Debug; 2. import java.io.IOException; 3. …… 4. try { 5. Android.os.Debug.dumpHprofData(“/data/tmp/input.hprof”); // 先 建/data/tmp目录 6. } catch (IOException ioe) { 7. } b) 把hprof文件复制到PC端 1. $ adb pull /data/tmp/input.hprof ./

相关主题
文本预览
相关文档 最新文档