第一篇:基于Android平台软件开发技术研究论文
在科技持续发展的浪潮下,移动式操作系统应运而生,移动终端传统定位发生了质的变化,移动终端已成为移动网络业务方面的核心平台以及应用载体,有利于移动互联网产业持续发展。就Android平台技术开发而言,建立在AndroidFramework基础上,开发相关程序的同时,采用Java编程语言,必须综合分析主客观影响因素,客观分析Android平台软件开发技术,将其灵活应用到实践中,更好地发挥自身多样化作用。
1Android系统架构与Android软件开发流程
1.1Android系统架构
站在客观的角度来说,Android是一种移动式操作系统,以Linux内核为基点的嵌入式开发平台。由于面向移动智能终端,Android系统也是一种作用于移动智能终端的软件栈,其架构可分为多个层次,比如,中间件层:多种库、运行环境;操作系统层:Linux内核,各结构层次处于隔离状态,有利于软件开发人员更加关注其具体的应用需求,更好地满足不同层次客户多样化客观需求,提高他们的满意度。
1.2Android软件开发流程
以Android平台为基点的应用程序开发建立在Java语言基础上,和Android系统和Linux内核开发紧密相连,建立在Linux内核开发基础上,其中的C/C++语言必须满足特定情况下的客观需求。Android平台具有多样化的优势,灵活性、开源性、可移植性等,应用到其开发环境中的开发工具、软件开发包特别多,必须根据具体情况,加以优化利用。在搭建Android平台环境中,软件开发人员必须综合考虑主客观因素,科学设置和PC操作系统相关的环境变量,将Path值、CLASSPATH值等巧妙添加到系统变量中,将PATH值等巧妙添加到用户变量中,搭建好Android平台开发环境之后,应用程序开发人员可以围绕其开发环境,开展一系列相关的软件开发工作。在此基础上,应用程序开发人员要以Android平台为基点,合理开发移动式应用系统,全面、深入研究对应的启动流程,确保软件开发各环节顺利进行,避免增加开发成本。
2基于Android平台的软件开发技术
2.1数据存储技术
在应用软件开发过程中,数据存储是必不可少的关键性环节,关乎相关软件的顺利实施。在Android平台中,数据存储并不单一,即内部存储、外部存储,文件存储、SQLite数据库存储、系统配置都属于前者,网络、内容提供器属于后者,内部存储技术在Android平台软件开发中的应用特别多。在开发过程中,开发人员要借助SharedPrefereneces类,一种并不复杂的数据存储方式,借助键值,有效存储基本数据信息,有利于合理保存应用软件的系统配置,确保应用软件处于高效运行中。就文件存储而言,开发人员要优化利用Linux文件系统,创建对应的私有文件,只有应用程序才能进行访问,存储一系列信息数据,而文件可以保存在存储器、外部存储设备上。在文件访问方面,就Android平台来说,TAVA多种输入与输出方法等都能顺利实现,甚至可以提供和文件读写相关的函数。同时,在该平台软件开发中,开发人员采用的用户ID并不相同,创建的各类文件具有鲜明的私有特点,只有用户自己才能访问。如果必须交换信息数据,相关人员必须优化利用外部存储技术,借助内容提供器,在两个或者以上程序中顺利进行。就SQLite数据库存储来说,相关人员要借助标准化的SQL语句进行一系列的操作,采用ASCII码形式存储各类信息数据,以Android平台为基点的数据存储提供的类可以简化SQLite数据库操作,创建数据特别方便,SQLiteDatabase类可以封装该数据库运行中的接口数据信息,使其相关操作更加简化,比如,查询、添加,而SQLiteOpenHelper类也可以进行多种操作,创建新的数据库、打开并关闭数据库。以创新新数据库为基点,相关人员要客观分析应用软件相关的数据表格,结合应用程序特征、性质,合理创建并打开数据库,再创建SQLiteDatabase类、数据库接口,以数据库接口为纽带,巧妙利用SQL语句,进行相关操作,并创建合理化的查询接口,便于查询创建的数据库及关闭数据库。在开发数据库中,想要控制与访问其他应用数据库,需要将SQLite数据库封装到ContentProvider中,以顺利实现信息数据处理的共享。
2.2二次开发技术
二次开发技术也是基于Android平台软件开发重要组成元素之一,体现在两个方面:以应用层为基点的开发技术和以底层组件为媒介的开发技术。应用开发技术的开发周期并不长,技术也比较成熟,在Android平台软件开发中的应用特别多,优化利用Framework开发框架,充分发挥JAVA通用类库及Android平台相关类库多样化的作用,以便顺利进行该应用程序的二次开发,借助JNI机制功能与NDK二次开发工具,二次开发底层组件。当下,由于科技迅猛发展,不同行业和领域的很多公司都建立了Android平台的二次开发平台,有利于Android平台一系列软件顺利进行二次开发,提高其利用效率,还在一定程度上简化了二次开发一系列操作,缩短了该平台软件开发周期,大幅度提高了开发效益。就应用层开发技术来说,谷歌公司还提供了相应的droidFramework开发框架,其中包含了无数的API二次开发接口,优化利用Java通用类库及Android特殊化类库,顺利对应用程序进行二次开发,使其具有多样化的功能需求。
3结语
总之,在社会市场经济背景下,移动智能终端的出现与发展为移动互联网产业迅猛发展注入了新鲜的血液,方便了人们的工作与生活,而科学开发移动智能终端软件已成为相关领域急需要解决的重大课题,这也是未来软件开发的一种必然趋势。在开发过程中,开发人员必须根据Android系统架构与开发流程,科学开发相关的软件技术,促使各类软件得到优化利用,具有较好的人机交互能力,更好地满足社会大众的客观需求,促进社会经济持续发展。
参考文献
[1]王柯,马宏斌,王一圣.基于Android平台的软件开发若干关键技术研究[J].测绘与空间地理信息,2014(9):14-16,24.[2]赵海涵.基于Android平台软件开发技术探析[J].电脑知识与技术,2014(36):8684-8685.[3]王萌.基于Android平台软件开发方法的研究与应用[J].中国新通信,2015(18):77.[4]乔婷.试论Android平台下软件开发的关键技术[J].电子技术与软件工程,2015(21):52.
第二篇:软件开发管理平台设计分析论文
摘要:就软件开发管理平台进行了多元化的分析和设计,并根据相关技术和基本框架分别进行了探讨,希望在软件开发建设方面可以提供一定的借鉴和指导作用。
关键词:软件开发管理平台;多元化;设计;基本框架
中图分类号:TP311 文献标识码:A 文章编号:2095-1302(2016)02-0073-0
20引言
近些年来,软件开发管理系统方面的技术有比较稳定的发展,在逐渐完善的同时功能需求也越来越大,因此为了满足功能需求软件开发管理平台必须进行进一步的发展和升级。在目前我们主要研究的软件开发管理平台还存在局限性,从整体出发进行多元设计是我们现阶段必须掌握的技术。
1软件开发管理的相关内容
在现阶段对软件开发管理可以通过多种途径进行优化,例如加强生产计划、改进软件开发过程等,可以使软件开发管理达到一体化的标准,促进企业的融合和发展,并且可以为企业的自动化和一站式服务提供技术支持。提升企业管理和项目管理两大基础功能。项目管理和企业管理分别从配置管理和设计管理等出发,完成测试自动化进程。质量一直是软件开发企业追求的目标,也是一个企业赖以生存和发展的根本。对于软件企业而言,鉴定软件的质量问题往往需要专门测试的软件,这是最为关键的部分。因此测试软件也是一项比较困难的问题,要采用先进的技术确保测试结果的准确性,合理的方法和工具是测试成功的重要保证。在我国现阶段市场中已经出现了关于测试过程管理的工具,这在很大程度上能够在大企业中发挥一定的作用并取得良好的效果,但是针对小公司来说还缺乏定制一个测试管理平台来提高工作效率和自动化水平。
2针对软件开发管理系统的多元化分析
多元化软件开发系统中最为关键的部分就是关于软件开发管理的自动化,要以此为设计目标和方向,不断的有机结合软件开发管理和企业资源规划两种资源,从整体上形成高效管理模式的软件开发管理平台。
2.1软件开发管理平台的初始化目标
在软件开发管理平台中要发挥多种管理的能力和潜能,充分调动各个部分的作用,例如系统需求管理、设计管理、项目管理和配置管理等多方面内容。在多元化方面主要体现在关键的位置上,一般存在于软件工程、项目管理和企业管理三个主要方面。充分促进企业管理和项目管理的相互协调,互相配合,可以使软件开发管理更为科学、提高效率。为了满足不同规模的软件企业需求必须对软件开发企业进行足够的技术支持和资金支持,才能为多元化的设计提供可行性条件。
2.2软件开发管理平台的概况和特征
网络技术在当今社会的普及程度越来越强,同时在软件开发管理平台的应用也越来越多。网络技术在软件开发中起到拓展功能的作用,在此基础上,软件开发企业的工作中心在于对开发软件的多元性方面,主要体现在基础功能和分析功能两个方面的拓展。在数学模型的基础上建立模拟基础工作流程,提高预测的准确性和开发更多的项目管理功能,以达到兼容能力更强、在线管理更健全的目的。在目前的研究水平下,我们更应该注意软件开发管理系统的多元化设计,应该投入更多的精力和资金,这样会有益于资源方面的控制力,还能实时监控进度和质量问题,全方位的对项目进程进行跟踪和指导。
3软件开发管理平台的多元化技术依托和基本结构
在实际操作中针对多元化设计一般最需要的就是先进的技术支撑。最为普遍的技术就是SOA技术,这项技术的最主要用途在于对系统的分解作用,不仅如此,还可以按照一定的序列对服务进行编排,在此基础之上能够扩大软件管理平台的功能和规模,并且大大增强了软件管理平台的可扩展性和灵活性两种性质。另一种比较常见的技术是基于WebServices技术,这种技术的主要作用是辅助SOA,对软件开发管理系统的兼容性有所扩展,并且同时构建SOA架构。第三种技术是XML技术,这种技术的主要作用在于能够规范Web服务,平台的建立需要此种技术作为标准,而平台中数据的相互转换则需要自描述功能。第四种技术是RUI技术,这种技术的界面采用富用户,但在外观上分辨不出和普通应用程序的差别,但是要想构建人机交互的功能则必须要有服务功能,平台系统更容易进行操作,并且界面更加简洁。第五种技术是J2EE标准,平台系统要保持在运行过程中不依靠其他运行程序则必须采用分布式结构,可以大大加强系统软件的灵活性,减少平时的维护费用和运行成本。在多元化方案的设计环节应该注意系统的生命周期,在软件开发管理平台多元化设计中最关键的部分就是通常要采取B/S网络结构模式,在我们现阶段的研究当中大多数都采取这种技术,这种技术最为简便的地方就是可以在不安装客户端的情况下进行运行,可以体现出更加模块化的技术特点。另外数据库的规模应该扩大,这样有利于逻辑关系的简洁化,操作系统也更加方便快捷,在数据的完整性方面有更多体现。系统的安全性和开放性也应该有所约束,让系统的安全性有一定的技术保证,针对不同用户采用分级管理模式,并以加密和访问权限两种手段来提高软件开发平台的安全性。另外平台在平时的运行过程中,要时刻注意到客户端和软硬性的先进性,并且要注意日常应用程序和数据库服务器的运行状况保持良好,保证在正常生命周期内保持良好的运行状态。软件开发管理平台在多元化设计的框架构建方面一般分为四个层次,分别是基础设施层、交互层、支撑层和应用层,在一般情况下交互层、基础设施层和应用层分别代表用户、信息和系统的核心部分。主要代表模块分别是企业管理功能、项目管理功能和软件功能自动化三大模块。除这些外还需要一些支撑层把组件进行合理构建,用于软件开发管理平台的多元化设计。三大主要功能模块涵盖了以上相关内容。项目功能主要体现在两个方面,一是项目计划模型,二是实际需求。在项目进行审核发布之前,需要根据管理和条目两种手段对项目进行预览,这样能形成最优化的配置管理模式。在对软件的功能管理方面要采取自动化手段,在原始模型和文档的基础上形成新的模型,并且要单独为其设计模式和范例,不断优化升级文档质量的管理,在设备的运作过程中要优化各技术路线相互配合作用。在目前的企业管理中,要深入考虑企业的需求内容,履行合同上的信息要求,针对子系统和标准模块进行自定义的程序设置,及时对客户信息进行回访和自动报警两种功能,这两种功能要根据客户信息才得以实现。
4软件开发管理平台的相关软件内容
开发的软件必须具有通用性强、适用范围广、提高工作效率等一系列优势,这样可以协助工作人员把项目中的软件开发管理平台做到更好。因此要求所开发的软件应具备以下功能:(1)能够在各种环境下运行,适应性要强。任何软件都需要一定的运行环境,而软件的适应性强弱将直接影响着软件的使用效果和稳定性。(2)能够积极协助指导项目开展相关工作,运用开发制约和方法学等手段构建软件架构,这样的好处是可以潜移默化的影响使用者的开发方式和风格,开发出来相似的项目间可以很通畅地进行协作和交流。(3)要做好项目的设计、开发和再测试的相关工作,能完成项目成果各方面数据的转换和协作,这就体现出最关键的衔接作用。其中最主要的部分就是关于程序设计和数据库设计向开发阶段的代码程序生成的过程。另外的作用就是在进行单元测试的过程中要把大多数相似的测试代码由辅助程序员把它们筛选出来。(4)在开发软件的相关工作中比较重要的就是常见功能组件,有很多数据需要进行操作和整理,例如字符串的操作、数字操作等,不仅如此,还会涉及到文档读写、上下载等一些相关问题。在一般情况下出于对灵活性的考虑,很少会设置这些功能组件,需要在实际工作中由程序员针对需要来分别写出代码。所以软件架构平台需要有这些协助程序员的相关功能组件才能大大提高工作效率。(5)分层结构和框架技术支持是我们软件开发管理平台需要的两种技术。根据项目需要,项目的开发人员要制定不同的框架来提供选择的余地。要改变框架去适应实际项目需要,这样更容易开展开发工作。(6)要考虑不同业务人员的需要,尽量提供一些底层业务组件。在普通的业务系统中,配置管理、用户管理、角色权限管理所涉及到的功能区别不明显,而底层平台可以在提供底层应用模块的同时起到减少项目重复开发量的效果,是一个非常科学合理的设计。(7)性能和安全是必须考虑的两大要素,因此在构建平台时要平衡性能和安全两者的关系,在确保安全的前提下尽可能的保证性能,这样也能给后续关于技术指引、工具和方法的建立提供良好的基础,例如权限控制组件和缓存组件等。(8)方便操作也是我们需要考虑的一个方向,平台应该能在业界的大多数人中使用,因此要方便理解和操作,简单的操作流程是能够提供便捷功能服务的前提。还可以节约使用平台的学习费用和节省学习精力。在进行编码实施的过程中,关于程序编码的设定要采取统一标准,并且符合相关的编写要求,能够保证可读性和运行的连贯性,方便日后的维护工作。在平台框架完成以后,还要不断的进行系统测试,保证使用效果和最初的设计效果相符合,测试出现问题后,要根据设计的框架找出问题原因,运用相关技术进行修改,并达到预期效果。
5结语
目前针对多元化软件的开发是一项比较艰巨的任务,其结构复杂、信息量较大。该软件分为很多不同的部分,故要把需求、分析、测试、设计、运行等诸多因素考虑进来。在目前比较常见的业务系统中,基础底层软件架构不但能够提高工作效率,还可以节约开发所需要的投入,提高利润。在提高质量方面则可以采取严格的规范约束和框架设计技术两种手段。在信息技术不断发展的前提下,软件开发管理平台取得飞快的进展,然而多元化软件的开发不仅在我国受到格外关注,国外也正积极针对这一方面展开研究工作,并且运用到实际运行当中,软件开发管理平台也显示着其强大的生命力,为我国的软件开发项目管理信息化做出了较大的贡献。
参考文献
[1]吴晓慧.软件开发管理系统的面向多元化的设计[J].计算机光盘软件与应用,2014,12(6):256-257.[2]王珊珊,赵青.浅谈软件项目在软件开发管理中的作用[J].有色金属设计,2003,30(1):55-59.[3]曹键.软件开发管理平台的构建[J].电信工程技术与标准化,2008(12):46-50.[4]黄若儒.基于软件架构技术的系统开发基础平台分析与设计[D].广州:华南理工大学,2014.[5]张清兰.面向目标识别应用的算法开发管理平台的设计与实现[D].西安:西安电子科技大学,2013.
第三篇:手机软件开发必学Android技术
手机软件开发必学Android技术
席卷IT培训市场,开发因其领域新,覆盖面广,而受到广大应届毕业生的关注。现在大学生空有一张文凭,就业形势却颇为紧张,相反,Android开发的职位空缺却相当大,所以很多大学生看准这块“肥肉”,纷纷投身Android培训,希望通过系统培训解决当前就业难,薪水低的问题。
学习Android开发,先要了解主要开发什么。其实主要是针对Android平台开发应用软件和游戏软件。应用软件涉及种类广泛,如办公工具、通信工具、视频播放工具、阅读器等,在智能手机普及的今天,手机用户对于各种应用软件的需求越来越高。这个时候不但需要大量的Android人才储备,还对其技术有了更高的要求。而手机游戏是目前最受年轻人喜爱的,趣味性更强,薪水也乐观。如此耀眼的舞台,自然给了年轻人更多发挥的空间,但这里要注意,学习Android开发,需要对软件开发感兴趣,具备一定的Java基础。
甲骨文盈佳科技通过一个多月的零基础阶段教学,让学员掌握扎实的编程功底,课程内容包含Java开发环境、编程语言基础、面向对象思想、设计模式、数据结构等。而在学员掌握基本的Android开发能力后,甲骨文盈佳科技第三阶段教学,会重点讲授Android游戏开发,利用四周的时间,使学员可以掌握基于Cocos2d框架进行游戏开发的能力。
其实大学生能有足够远见去学一门技术,说明能够认识自身问题。选择Android开发这个新领域,发挥自身学习能力强的优势,在培训中锻炼自己实际操作的能力,弥补动手能力弱,无项目经验的弱点,自然可以从根本上解决大学生就业问题。现在移动互联网属于朝阳产业,正敞开怀抱吸纳Android开发人才。今天选择学习Android开发,就是为今后的成功打下坚实的基石。
第四篇:android软件开发工程师转正个人总结
个人总结
我于2012年8月13日进入公司,根据公司的需要,目前担任Android软件工程师 一职,负责综合代维,考务通手机客户端的开发工作。将近3个月的时候在这个新的工作环境我收获颇深。开始让我独立完成整个项目,这还是我的第一次,之前在公司是多人完成,过程中也遇到了许多困难,但是都一一解决了,我想这是我最宝贵的经历,通过三个月的不断学习,在项目开发中的不断锻炼以及同事、领导的帮助,我已逐渐融入这个大家庭,个人的工作技能也有了明显的提高,虽然仍有一些不足,但三个月以来我付出了不少,也收获了不少,我感觉自己成长了,也逐渐成熟了。
初到公司,加入了咨询与信息化部,加入了综合代维项目组,我也曾担心自己不知道该怎么与项目组的同事沟通,担心不知道怎么做好工作,但是项目组的前辈们都很亲切,也很耐心的教导我,解答我的疑问,以及他们团结向上的精神,让我很快的熟悉了工作,融入了项目组。
在这三个月的学习和工作中,我一直严格要求自己,遵循公司的规章制度,认真完成领导布置的每一项任务,遇到的问题虚心的向项目组的前辈们学习、请教,不断的提高、充实自己。开发过程中出现的一些差错,也有前辈们耐心的指出和指导我修改,这些经历让我不断成熟,处理问题时考虑得更全面,杜绝类似情况的发生。在此我要特地感谢部门的领导和同事们对我的指引和帮助,感谢他们对我工作上失误的提醒和指正。
经过这三个月,我已经能独立进行开发任务,按时按质的完成分配的工作任务,当然还有许多不足,开发的经验仍有待提高,编写代码的简洁性和完整性也需要进一步增强,需要不断的继续学习以提高自己的工作能力。
总之,这三个月来我学到了很多,感悟了很多;看到公司的迅速发展,看到部门的同事越来越多,我深深地感到骄傲和自豪,也更加迫切的希望以一名正式员工的身份在这里工作,实现自己的奋斗目标,体现自己的人生价值,和公司一起成长。
我会用谦虚的态度和饱满的热情做好我的本职工作,为公司创造价值,同公司一起展望美好的未来!
XX
2012年11月13日
第五篇:Qualcomm平台android开发总结
1、高通平台android开发总结.7 1.1 搭建高通平台环境开发环境.7 1.2 搭建高通平台环境开发环境.7 1.2.1 高通android智能平台概述.7
1.2.1.1 什么是L4,REX,BREW,AMSS以及相互之间的关系.7 1.2.2 选择合适的源代码以及工具.8
1.2.2.1 获取经过高通打补丁的android 源代码.8 1.2.2.2 获取高通针对不同处理器的vendor源代码.9 1.2.2.3 获取 modem 源代码.9
1.2.2.3.1 高通 modem 源代码编译前的修正.13 1.2.3 建立 Android 开发环境.14 1.2.4 建立 modem 开发环境.15 1.2.4.1 补充.16
1.2.4.1.1 获取 licenses 16
1.2.4.1.2 Flex 简单使用指南.16 1.2.4.1.3 启动 license 服务器.18
1.2.4.1.4 license 没有办法从服务器获取的几种情况.18 1.2.4.1.5 破解 rvds 的license 19 1.2.5 在高通开发板上烧录文件系统.19
1.3 高通平台,android和 modem 编译流程分析.21 1.3.1 android代码编译流程分析.21 1.3.1.1 编译工具检测.22 1.3.1.1.1 22
1.3.1.2 appsboot.mbn 生成过程解析.22
1.3.1.3 boot.img 生成过程解析,怎样手动生成 boog.img 28 1.3.1.4 编译过程存在的问题.32
1.3.1.4.1 prelinkmap 的时候 base 0xaff00000 out of range 32 1.3.1.4.2 LOCAL_SDK_VERSION 使应用程序不能访问hide的api 32 1.3.1.4.3 armv5te-vfp 导致一些游戏运行不了.32 1.3.2 分布式编译 android 代码.33 1.3.3 modem 代码编译流程分析.33
1.3.3.1 单独编译某个模块(如:qcsbl oemsbl).34 1.3.3.2 $(TARGETDIR)/exist 规则解析.36 1.3.3.3 setup规则解析.36
1.3.3.3.1 corebsp_create_incpaths 36 1.3.3.3.2 create_incpaths 36 1.3.3.3.3 amsssetup 36
1.3.3.3.4 amsslinkaddress 36 1.3.3.3.5 firmware 38 1.3.3.4 deps规则解析.38
1.3.3.5 corebsp_build规则解析.38 1.3.3.5.1 corebsp_build_action 38 1.3.3.5.1.1 corebsp_scons 规则.39 1.3.3.5.1.1.1 corebsp_scons_start 39 2.3.3.5.1.1.1 corebsp_scons_action 39
1.3.3.5.1.1.2.1 命令 pboot_gen_elf image_header pboot_add_hash 解析.40
1.3.3.5.1.1.2.2 env.BinBuilder 过程解析.41 1.3.3.5.1.1.2.3 env.MbnBuilder 过程解析.41
1.3.3.5.1.1.2.4 env.MbnDummyBuilder 过程解析.42 1.3.3.5.1.1.2.5 fsbl.mbn 生成过程解析.43 1.3.3.5.1.1.2.6 dbl.mbn 生成过程解析.43
1.3.3.5.1.1.2.7 AMSS_AABBQOLYM.mbn 生成过程解析.43 1.3.3.5.1.1.2.8 adsp.mbn 生成过程解析.43 1.3.3.5.1.1.2.9 osbl.mbn 生成过程解析.44
1.3.3.5.1.1.2.10 enandprg_AABBQOLYM.mbn 生成过程解析.44 1.3.3.5.1.1.2.11 nandprg_AABBQOLYM.mbn 生成过程解析.45 1.3.3.5.1.1.2.12 emmcbld.mbn 生成过程解析.45 3.3.3.5.1.1.1 corebsp_scons_done 46 1.3.3.5.1.2 corebsp 46
1.3.3.5.2 corebsp_create_incpaths 46 1.3.3.5.3 corebsp_setup 46 1.3.3.6 libs 46
1.3.3.7 copybar规则解析.47 1.3.3.8 exe规则解析.47
1.3.3.8.1 CORELIBS_AABBQOLYM.mbn生成过程解析.47 1.3.3.8.2 amss.mbn 生成过程解析.47 1.3.3.9 bldprod规则解析.48
1.3.3.10 create_mem_feat_html规则解析.48 1.3.3.10.1 50
1.3.3.11 partition规则解析.50
1.3.3.11.1 eMCC 启动和 NAND 启动的分区格式是不一样的,如果是 eMCC 启动,多了编译选项:.50
1.4 高通平台 7630 启动流程分析.52 1.4.1 启动流程概述.52 1.4.2 pbl 流程.52 1.4.3 dbl 流程.52 1.4.4 osbl 流程.54
1.4.4.1 osbl 装载 appsbl 过程分析.56
1.4.5 appsbl 流程(源代码在 android中).56
1.4.5.1 aboot_init 过程分析(需要侧重关心的部分).58 1.4.5.1.1 fastboot 模式分析.61
1.4.5.1.1.1 什么是 fastboot 模式.61
1.4.5.1.1.2 fastboot 模式与 recovery 模式的区别.61 1.4.5.1.1.3 怎样进入 fastboot 模式.62
1.4.5.1.1.4 android 系统手机刷机过程分析(补充知识)62 1.4.5.1.2 appsbl 引导 android 系统.63
1.4.5.1.2.1 Android 系统启动过程中存在的问题.67 1.4.5.1.1.1.1 linker 问题导致系统无法启动.67 1.4.6 AMSS 流程.69
1.5 android 系统重启关机流程分析.82 1.5.1 c语言中调用 reboot 函数.82 1.5.2 通过 adb 让系统重启.82
1.5.3 fastboot 模式下系统重启.83 1.5.4 系统关机.84
1.5.5 内核中的系统调用 reboot 85 1.6 软件调用流程分析.89 1.6.1 设置sim卡状态.89 1.6.2 设置背光.90 1.6.3 获取电池信息.90
1.7 python scons 语法学习.94 1.8 python 语法学习.94 1.8.1 Python中文全攻略.94
1.8.2 推荐一款Python编辑器.94
1.8.3 使用 pyExcelerator 读 Execl 文件.94 1.8.4 xlrd 解析 xls 文件.95 1.8.5 xlrd 生成 xls 文件.95
1.9 Python 语言之 scons 工具流程分析.95 1.9.1 Program 方法.100 1.9.2 Library 方法.100
2、高通常用工具使用.101 2.1 QPST 101 2.2 QXDM 101 2.3 QCAT 101
3、工程模式.101
4、Android 系统更新升级总结.104 4.1 刷机基本知识.104
4.1.1 各品牌代表手机刷机模式进入方法.104 4.1.1.1 HTC G1 104
4.1.1.2 三星 Galaxy i7500 104 4.1.1.3 Google Nexus One 105 4.1.2 fastboot 模式.105
4.1.2.1 fastboot 模式概述.105
4.1.2.2 PC端fastboot 命令分析.106 4.1.2.2.1 命令选项 –w –s-p –c 106 4.1.2.3 手机端fastboot 命令分析.107 4.1.2.3.1 boot 107 4.1.2.3.2 erase 107 4.1.2.3.3 flash 107 4.1.2.3.4 continue 107 4.1.2.3.5 reboot 107
4.1.2.3.6 reboot-bootloader 107 4.1.2.3.7 getvar 107 4.1.2.3.8 download 108 4.1.2.3.9 update 108
4.1.2.3.9.1 system/core/fastboot/fastboot.c:294: 108 4.1.2.3.9.2 fprintf(stderr, “archive does not contain '%s'n”, name);108 4.1.2.4 fastboot 模式流程分析.108 4.1.3 recovery 模式.108
4.1.3.1 recovery 模式概述.108 4.1.3.2 软件升级包.109
4.1.3.3 recovery v1跟recovery v2的区别.109 4.1.3.4 软件升级脚本语法解析.109 4.1.3.4.1.1 mount 110 4.1.3.4.1.2 getprop 111
4.1.3.4.1.3 file_getprop 111 4.1.3.4.1.4 assert 111 4.1.3.4.1.5 format 111
4.1.3.4.1.6 apply_patch_check 111 4.1.3.4.1.7 apply_patch_space 111 4.1.3.4.1.8 apply_patch 111
4.1.3.4.1.9 package_extract_file 112 4.1.3.4.1.10 ui_print 112
4.1.3.4.1.11 META-INF/com/google/android/update-script 脚本分析.1124.1.3.4.2 Recovery 模式中 install_package 函数解析.117 4.1.3.5 Recovery 流程分析.118 4.1.3.5.1 恢复出厂设置.118 4.1.3.5.2 系统更新流程.119
4.1.3.5.3 通过sd卡实现刷机.121 4.1.3.6 系统升级包案例分析.122 4.1.4 工程模式(HBoot)模式.122 4.1.4.1 HBOOT降级方法.122
4.2 如何制作升级包 update.zip 123 4.2.1 手动制作升级包.123 4.2.2 自动制作升级包.123 4.3 Android 签名机制.125
4.4 android 文件系统权限概述.125 4.4.1 获取手机root权限.127 4.4.2 adb默认权限分析.128
4.4.3 adb root命令切换到 root 权限.129 4.4.4 挂载系统分区为读写(remount)130
4.4.5 通过修改 boot.img 获取 Nexus One 权限.132 4.5 系统应用移植.132
4.5.1 Android 2.2在线升级的移植.132
4.5.2 解决donut Gtalk、Market登录不了的问题.133 4.5.3 apk反编译问题总结.133
4.5.4 系统重启.133
5、高通linux内核驱动开发.133 5.1 添加串口调试.133 5.2 Sensor 传感器.133
5.3 USB 枚举 USB Composition 134 5.4 USB 枚举 USB Composition 136
6、从 android 源代码制作 sdk 136 6.1 linux sdk 137 6.2 windows sdk 137
7、程序安装与调试.138
8、android 框架流程分析.138 8.1 屏幕显示相关.138 8.1.1 屏幕分辨率.138 8.1.2 屏幕模式.139
8.2 Android 开机充电.141 8.3 Android 开机动画.141 8.3.1 内核开机画面.141 8.3.2 文件系统开机画面.141
8.3.2.1 开机显示的 ANDROID 文字.141 8.3.2.2 ANDROID 发光动画.142
8.3.2.3 initlogo.rle 文件分析.143
8.3.2.4 bootanimation.zip 文件分析.143 8.3.3 三星I9000 开机动画.144 8.4 JNI调用流程.145
8.5 Android 开机铃声.145 8.6 GPS 导航.145
8.6.1 GPS导航原理.145 8.6.2 GPS导航软件.145
9、高通modem框架流程分析.146 9.1.1 添加自定义rpc调用.146
9.1.1.1 从AP端获取modem的系统分区信息.146 9.1.2 添加自定义 AT命令.146
10、linux 应用.146
10.1 嵌入式Linux通过帧缓存截图包括Scheduling(调度), File system(文件系统), Networking(网络), Device driver(设备驱动程序), Memory management(存储管理), Paging(存储页面管理)-都在内核中完成.一直到现在广泛应用的操作系统,如UNIX,Linux,和Windows还大都是monolithic kernel操作系统.但随着操作系统变得越来越复杂(现代操作系统的内核有一两百万行C程序是很常见的事情),把所有这些功能都放在内核中使设计难度迅 速增加.微内核是一个与Monolithic Kernel相反的设计理念.它的目的是使内核缩到最小,把所有可能的功能模块移出内核.理想情况下,内核中仅留下Address Space Support(地址空间支持),IPC(Inter-Process Communication,进程间通讯),和Scheduling(调度),其他功能模块做为用户进程运行。
REX 是在 L4 之上封装的服务,是一个抢占式,多任务的RTOS,所有的任务都以task的形式存在,REX提供包括任务创建,同步,互斥,计时器,中断控制等功能的 API,这里的task实际上就是我们的线程,每个 task对应着一个线程。REX维护一个task list(双向链表),始终运行高优先级的task。products里面所有的服务包括3g协议栈等都是以task的形式跑在rex之上的。而Brew的话是运行的环境,跟Java 有点儿类似,相当于是一个虚拟机。AMSS――高级的移动用户软件(Advanced Mobile Subscriber Software)技术,是一种新的软件架构,是对原来软件架构 DMSS 的升级。AMSS源代码实际上是QC BREW(Binary Runtime Environment For Wireless)平台的的底层部分,去掉了为应用程序提供接口的AEE(application execution environment)部分,高通在Dual Proc芯片上的其他平台基本上都是采用的这样的架构。
参考文档:
微内核操作系统及L4概述
http://wenku.baidu.com/view/90929762caaedd3383c4d311.html MSM平台上的AMSS http://blog.csdn.net/yili_xie/archive/2010/01/04/5129469.aspx
1.2.2 选择合适的源代码以及工具 要编译出可供烧写使用的镜像文件需要三部分代码: 1)获取经过高通打补丁的 android 源代码 2)获取高通针对不同处理器的 vendor 源代码 3)获取 modem 源代码
1.2.2.1 获取经过高通打补丁的android 源代码 网址:
https://www.xiexiebang.com1312 Chipset(such as QSC6270):MSM7227-1 RF chipset(such as RGR6240):RTR6285 PMIC chipset(such as PM7540):PM7540 WCMDA Supported Bands(900,1900,2100„.if support WCDMA):2100 CMDA Supported Bands(450,850,1900,2100„ if support CDMA):not suport OS(Brew,BMP,Android,WM,ThinUI(no UI)„):android froyo OS version(Android Donuts„): android froyo
1.2.2.3.1 高通 modem 源代码编译前的修正
从高通获取的源代码直接编译会存在一些问题,以下为可能的问题以及解决方法:
1)为相应的脚本加上编译选项
vim./AMSS/products/7x30/build/ms/xxxxxx.cmd 加上: BUILD_UNIX=yes
2)如果编译过程出现.pl 文件没有执行权限而退出,那么为工程下面所有的 pl 文件加上可执行属性,命令:
find./-name “*.pl” |xargs chmod 755
3)无法找到需要的 pl 脚本解析器
vim./AMSS/products/7x30/tools/build/depgen.pl 修改
#!/pkg/perl/5.6.1/bin/perl-w 为
#!/usr/bin/perl-w
4)如果出现错误:
“AMSS/products/7x30/core/bsp/build/data/incpathsaaabqmlym.py”, line 14 IndentationError: expected an indented block 修改文件:./AMSS/products/7x30/core/bsp/build/scripts/genpaths.pl 内容:
#if($line =~ /^# makefile(from/)为:
if($line =~ /^# makefile /)原因分析:
genpaths.pl 会对编译过程的中间信息 :...line=# makefile(from'incpaths.min',line 363)line=QVPCODEC_AUDIOINC = $(QVPCODEC)/audio/inc...等信息进行解析,由于我们使用的是中文系统,所以以上内容变为: line=# makefile(从'incpaths.min',行 363)line=QVPCODEC_AUDIOINC = $(QVPCODEC)/audio/inc 所以导致:
#if($line =~ /^# makefile(from/)判断条件为为 false 无法正确生成 incpathsaaabqmlym.py,python 在解析该文件的时候认为存在语法错误。
在 modem 代码 M7630AABBQMAZM2020(HY11-N2280-2.zip)中开始使用 genincpaths.py 产生
./AMSS/products/7x30/core/bsp/build/data/incpathsaaabqoazm.py 文件,所以修改文件 amend-source-code-qualcomm-modem.sh 在脚本中需要加入以下内容: incpathsxxx_py=$PRODUCT_DIR/core/bsp/build/scripts/genincpaths.py if test-f $incpathsxxx_py;then PERL=`which /usr/bin/perl` sed-i “s/(from//g” $incpathsxxx_py fi./AMSS/products/7x30/multimedia/audio/drivers/Adie/AdieCodecDb/src/DALAdieCodecDb.c #DalAdieCodecDbInternal.h 改为: #include “DALAdieCodecDbInternal.h”
5)如果出现 make: execvp:../../../../platform/cs/bin/cifc: Permission denied 错误,执行以下命令:
chmod-R 755 AMSS/platform/cs/bin/*
1.2.3 建立 Android 开发环境(略)
curl http://android.git.kernel.org/repo >~/bin/repo chmod a+x ~/bin/repo export PATH=~/bin:$PATH 1)安装基本软件
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl sun-java5-jdk zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev
2)安装 sun-java5-jdk ubuntu 下通过命令: sudo apt-get install sun-java5-jdk 将会安装下面的包 sun-java5-bin sun-java5-demo sun-java5-jdk sun-java5-jre sun-java5-plugin 如果ubuntu 发布版本中没有 sun-java5-jdk 那么 sudo vim /etc/apt/source.list #for sun-java5-jdk deb http://us.archive.ubuntu.com/ubuntu/ jaunty multiverse deb http://us.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse sudo apt-get update sudo apt-get sun-java5-jdk 或者,如果 ubuntu 版中不支持 apt-get,那么用手动安装: sudo mount-t nfs 172.20.127.15:/home/shared /mnt sudo dpkg-i /mnt/tools/debs/java-1.5.0-sun/sun-java5-*
3)配置usb cd /etc/udev/rules.d/ sudo vi 50-android.rules # adb single interface device SUBSYSTEM==“usb_device”, SYSFS{idVendor}==“18d1”, SYSFS{idProduct}==“d00d”, MODE=“0664”, GROUP=“plugdev” # adb composite interface device SUBSYSTEM==“usb_device”, SYSFS{idVendor}==“18d1”, SYSFS{idProduct}==“deed”, MODE=“0664”, GROUP=“plugdev” # Sooner low-level bootloader BUS==“usb”, SYSFS{idVendor}==“0bb4”, SYSFS{idProduct}==“0a51”, MODE=“0664”,GROUP=“plugdev” sudo /etc/init.d/udev restart
1.2.4 建立 modem 开发环境
与android 源代码不同,modem 编译工具使用的是 RVDS ,实际上只用到其中的 RVCT 编译器,高通不提供该工具,我们必须从arm公司获取相应的授权,RVDS 是 ADS 的升级版本,从 ADS 1.2 开始到 RVDS 3.1 我们公司都有其授权,按照高通的要求我们目前必须使用 RVDS 2.2 并且使用他的 349 patch。RVDS 2.2 安装以及使用步骤如下:
1).RVDS 2.2 共享在 172.20.127.15:/home/shared/ 目录 sudo mount-t nfs 172.20.127.15:/home/shared/ /mnt cd /mnt/qualcommon/RVDS-2.2/ linux下rvds2.2的安装程序为:
./rvds2.2_linux-pentium/setuplinux.bin 执行以上命令,按照默认步骤安装,安装路径为:~/ARM 注意事项:
安装过程如果出现错误:
..................java.lang.UnsatisfiedLinkError: /tmp/ismp001/6073753.tmp: libstdc++-libc6.2-2.so.3: cannot open shared object file: No such file or directory 从网上下载 libstdc++-libc6.2-2.so.3 拷贝到 /usr/lib 目录 ,或者从下面地址获取:
http://172.20.127.15/repositories/DocsAndTools/Tools/Qualcomm/RVDS-2.2-patch/patch/libstdc++-libc6.2-2.so.3 工具的安装通过脚本进行了简化,具体过程请参考文档: 80-N0216-2_A_M7630AABBQMAZM1170.pdf 80-VR881-7_B_M7630AABBQMLZA1200.pdf 80-VR192-1_C_AMSS_Linux_Software_Users_Guide.pdf 80-VR192-1_D_AMSS_Linux_Software_Users_Guide.pdf
2)安装高通指定的 593 patch cd /mnt/qualcommon/RVDS2.2/下执行命令:./setup-patch-rvct2.2-bin593-lib349.sh
目前版本只支持 32 位的系统 1.2.4.1 补充
vim./AMSS/products/7x30/core/bsp/build/scripts/defaults.py 定义了工作线程
#num_jobs = num_cpu * 2 modified by mhf num_jobs = 2 if num_jobs < 4: num_jobs = 2 if num_jobs > 8: num_jobs = 8 env.SetOption('num_jobs', num_jobs)――――――― 获取 RVDS 官方网站下载评估版本
https://silver.arm.com/browse http://www.xiexiebang.com/wiki/QAEP#Branch_Releases https://www.xiexiebang.com/wiki/QLBEP 下载 M7630AABBQMLZA1150 分支:
February 1, 2010 M7630AABBQMLZA1150 msm7630 eclair M7630AABBQMLZA1150.xml 命令如下:
mkdir-pv ~/workspace/gphone/eclair-M7630AABBQMLZA1150-20100201 cd ~/workspace/gphone/eclair-M7630AABBQMLZA1150-20100201 repo init-u git://codeaurora.org/platform/manifest.git-b eclair-m M7630AABBQMLZA1150.xml nohup repo sync 代码下的 vendor/qcom-proprietary 来自包 HY11-VR881-5.zip 以上两部分代码已经下载并且合并,共享在:
http://172.20.127.15/repositories/TD1002/trunk/eclair-M7630AABBQMLZA1150---------------编译 eclair 代码
svn co http://172.20.127.15/repositories/TD1002/trunk/eclair-M7630AABBQMLZA1150 cd eclair-M7630AABBQMLZA1150 cd eclair-M7630AABBQMLZA1150$../setenv.sh../make-image.sh ======= modem代码从高通网站:https://support.cdmatech.com/login/ 上获取 我们目前使用的是: 共享在:
http://172.20.127.15/repositories/TD1002/trunk/modem-M7630AABBQMAZM1220-------编译 modem 代码
svn co http://172.20.127.15/repositories/TD1002/trunk/modem-M7630AABBQMAZM1220 cd modem-M7630AABBQMAZM1220../setenv-qualcomm.sh../make ======== 编译结果分别如下:------------其中 adsp.mbn,amss.mbn,dbl.mbn,osbl.mbn,partition.mbn 位于以下目录:./modem-M7630AABBQMAZM1220/AMSS/products/7x30/build/ms/bin/AAABQMAZ/adsp.mbn./modem-M7630AABBQMAZM1220/AMSS/products/7x30/build/ms/bin/AAABQMAZ/amss.mbn./modem-M7630AABBQMAZM1220/AMSS/products/7x30/build/ms/bin/AAABQMAZ/dbl.mbn./modem-M7630AABBQMAZM1220/AMSS/products/7x30/build/ms/bin/AAABQMAZ/osbl.mbn./modem-M7630AABBQMAZM1220/AMSS/products/7x30/build/ms/bin/AAABQMAZ/partition.mbn------------appsboot.mbn,boot.img,system.img,userdata.img 位于以下目录:./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/appsboot.mbn./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/boot.img./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/system.img./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/userdata.img./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/system.img.ext3./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/userdata.img.ext3------------eMMC 启动使用的是 ext3 文件系统,需要使用镜像 system.img.ext3 userdata.img.ext3 补充说明:
partition.mbn 文件的原始数据来自配置文件:
./AMSS/products/7x30/tools/jsdcc/partition_load_pt/partition.xml
1.3 高通平台,android和 modem 编译流程分析 android 代码编译流程分析 modem 代码编译流程分析 1.3.1 android代码编译流程分析
1.从服务器下载 android 源码到当前目录
http://smartphone/repositories/TD1014/branch/froyo_almond-M76XXTSNCJNLYA6050-drivers/ svn co http://172.20.127.15/repositories/TD1014/trunk/froyo_almond-M76XXTSNCJNLYA6050/ cd froyo_almond-M76XXTSNCJNLYA6050/../setenv.sh 设置环境变量 Setting Environment...通常情况下 generic 用于编译模拟器版本 Options are: 1.generic 2.msm7627_surf 3.msm7627_ffa 4.tiny-system ====从以上列表中选择==== Which would you like? [1]
烧录的镜像文件appsboothd.mbn appsboot.mbn boot.img system.img userdata.img persist.img 来自 android 源码 appsboot.mbn 的主要功能是装载 linux 内核,通过 linux 的引导来完成 android 系统的加载,appsboot.mbn 被烧写在相应的分区,它的加载由 osbl.mbn 来完成,osbl.mbn 程序来自 modem。
7x30 7x27 系列 appsboot 不一样,7x30 的 appsboot.mbn 是 7x27 appsboothd.mbn appsboot.mbn 两个文件的合并
1)appsboot.mbn 生成过程解析
2)boot.img 生成过程解析,怎样手动生成 boog.img
1.3.1.1 编译工具检测
make out/target/product/msm7630_surf/appsboot.mbn 1.3.1.1.1
1.3.1.2 appsboot.mbn 生成过程解析
make out/target/product/msm7630_surf/appsboot.mbn make out/target/product/msm7630_surf/nandwrite make out/target/product/msm7630_surf/emmc_appsboot.mbn 分别执行:
make-C bootable/bootloader/lk BOOTLOADER_OUT=../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ msm7630_surf make-C bootable/bootloader/lk BOOTLOADER_OUT=../../.././out/target/product/msm7630_surf/obj/nandwrite msm7630_surf_nandwrite BUILD_NANDWRITE=1 make-C bootable/bootloader/lk BOOTLOADER_OUT=../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_EMMC_OBJ msm7630_surf EMMC_BOOT=1 生成 nandwrite =============== #build nandwrite as a part of Android Build TARGET_NANDWRITE := $(PRODUCT_OUT)/obj/nandwrite/build-$(TARGET_PRODUCT)_nandwrite/lk NANDWRITE_OUT := $(TOP)/$(TARGET_OUT_INTERMEDIATES)/nandwrite
nandwrite_clean: $(hide)rm-f $(TARGET_NANDWRITE)$(hide)rm-rf $(NANDWRITE_OUT)
$(NANDWRITE_OUT): mkdir-p $(NANDWRITE_OUT)
$(TARGET_NANDWRITE): nandwrite_clean $(NANDWRITE_OUT)@echo $(TARGET_PRODUCT)_nandwrite $(MAKE)-C bootable/bootloader/lk BOOTLOADER_OUT=../../../$(NANDWRITE_OUT)$(TARGET_PRODUCT)_nandwrite BUILD_NANDWRITE=1 ================
vim./bootable/bootloader/lk/makefile:98: TARGET := msm7630_surf #./bootable/bootloader/lk/project/msm7630_surf.mk PLATFORM := msm7x30 #./bootable/bootloader/lk/target/msm7630_surf/rules.mk msm7x30 msm7630_surf.mk msm7630_surf_nandwrite ============================= include project/$(PROJECT).mk include target/$(TARGET)/rules.mk include target/$(TARGET)/tools/makefile include platform/$(PLATFORM)/rules.mk include arch/$(ARCH)/rules.mk include platform/rules.mk include target/rules.mk include kernel/rules.mk include dev/rules.mk include app/rules.mk...include make/module.mk...include make/build.mk ======================== vim bootable/bootloader/lk/make/module.mk INCMODULES := $(MODULES)$(info including $(INCMODULES))include $(addsuffix /rules.mk,$(INCMODULES))展开为:./bootable/bootloader/lk/app/nandwrite/rules.mk./bootable/bootloader/lk/dev/fbcon/rules.mk./bootable/bootloader/lk/dev/keys/rules.mk./bootable/bootloader/lk/lib/debug/rules.mk./bootable/bootloader/lk/lib/heap/rules.mk./bootable/bootloader/lk/lib/libc/rules.mk./bootable/bootloader/lk/lib/ptable/rules.mk ======================== bootable/bootloader/lk/make/build.mk:29: include arch/$(ARCH)/compile.mk
./bootable/bootloader/lk/project/msm7630_surf_nandwrite.mk 中有: MODULES += app/nandwrite./bootable/bootloader/lk/platform/msm7x30/rules.mk中有: MODULES += dev/fbcon./bootable/bootloader/lk/kernel/rules.mk 中有: MODULES += lib/libc lib/debug lib/heap./bootable/bootloader/lk/target/msm7630_surf/rules.mk 中有: MODULES += dev/keys lib/ptable 所以:
MODULES= app/nandwrite dev/fbcon dev/keys lib/debug lib/heap lib/libc lib/ptable 因为
ifeq($(BUILD_NANDWRITE), 1)APPSBOOTHDR_FILES := else out/host/linux-x86/bin/acp-fpt out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk out/target/product/msm7630_surf/nandwrite
25780 184 34000 59964 ea3c../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk arm-eabi-objcopy-O binary../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk.bin generating listing:../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk.lst generating listing:../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk.debug.lst generating symbols:../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk.sym generating size map:../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk.size make[2]:正在离开目录
/opt/workspace/gphone/qualcomm/eclair-M7630AABBQMLZA1150/bootable/bootloader/lk make[1]:正在离开目录
/opt/workspace/gphone/qualcomm/eclair-M7630AABBQMLZA1150/bootable/bootloader/lk target Prebuilt:(out/target/product/msm7630_surf/nandwrite)
make-C bootable/bootloader/lk BOOTLOADER_OUT=./out/target/product/msm7630_surf/obj/nandwrite msm7630_surf_nandwrite BUILD_NANDWRITE=1 make[2]: 正在进入目录
`/opt/workspace/gphone/qualcomm/eclair-M7630AABBQMLZA1150/bootable/bootloader/lk` msm7630_surf_nandwrite make-C bootable/bootloader/lk BOOTLOADER_OUT=../../.././out/target/product/msm7630_surf/obj/nandwrite msm7630_surf_nandwrite BUILD_NANDWRITE=1 ==》生成 mkheader 工具
gcc target/msm7630_surf/tools/mkheader.c-o target/msm7630_surf/tools/mkheader
$(BUILDDIR)/system-onesegment.ld: $(LOCAL_DIR)/system-onesegment.ld @echo generating $@ @$(MKDIR)$(NOECHO)sed “s/%MEMBASE%/$(MEMBASE)/;s/%MEMSIZE%/$(MEMSIZE)/” < $< > $@
generating../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/system-onesegment.ld compiling arch/arm/crt0.S compiling arch/arm/crt0.S。。compiling lib/ptable/ptable.c compiling lib/ptable/ptable.c
vim bootable/bootloader/lk/platform/msm7x30/rules.mk-----LINKER_SCRIPT += $(BUILDDIR)/system-onesegment.ld include platform/msm_shared/rules.mk-----
./build/core/product_config.mk:177:TARGET_DEVICE := $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_DEVICE)./build/core/envsetup.mk:152:OUT_DIR := $(TOPDIR)out./build/core/envsetup.mk:159:TARGET_OUT_ROOT_release := $(OUT_DIR)/target./build/core/envsetup.mk:161:TARGET_OUT_ROOT := $(TARGET_OUT_ROOT_$(TARGET_BUILD_TYPE))./build/core/envsetup.mk:178: TARGET_PRODUCT_OUT_ROOT := $(TARGET_OUT_ROOT)/product./build/core/envsetup.mk:184:PRODUCT_OUT := $(TARGET_PRODUCT_OUT_ROOT)/$(TARGET_DEVICE)build/core/envsetup.mk:200:TARGET_OUT_INTERMEDIATES := $(PRODUCT_OUT)/obj bootable/bootloader/lk/AndroidBoot.mk:4:BOOTLOADER_OUT := $(TOP)/$(TARGET_OUT_INTERMEDIATES)/BOOTLOADER_OBJ bootable/bootloader/lk/makefile:32:BUILDDIR := $(BOOTLOADER_OUT)/build-$(PROJECT)bootable/bootloader/lk/makefile:34:OUTELF := $(BUILDDIR)/lk 所以:
TARGET_PRODUCT_OUT_ROOT=out/target/product/ PRODUCT_OUT=out/target/product/msm7630_surf/ TARGET_OUT_INTERMEDIATES=out/target/product/msm7630_surf/obj/ BOOTLOADER_OUT=out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/ 所以:
BUILDDIR=out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf 所以:
OUTELF=out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk
make-C bootable/bootloader/lk BOOTLOADER_OUT=../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ msm7630_surf
bootable/bootloader/lk/makefile OUTELF := $(BUILDDIR)/lk./bootable/bootloader/lk/make/build.mk $(OUTELF): $(ALLOBJS)$(LINKER_SCRIPT)@echo linking $@ $(NOECHO)$(LD)$(LDFLAGS)-T $(LINKER_SCRIPT)$(ALLOBJS)$(LIBGCC)-o $@
vim./bootable/bootloader/lk/AndroidBoot.mk TARGET_NANDWRITE := $(PRODUCT_OUT)/obj/nandwrite/build-$(TARGET_PRODUCT)_nandwrite/lk $(TARGET_NANDWRITE): nandwrite_clean $(NANDWRITE_OUT)@echo $(TARGET_PRODUCT)_nandwrite $(MAKE)-C bootable/bootloader/lk BOOTLOADER_OUT=../../../$(NANDWRITE_OUT)$(TARGET_PRODUCT)_nandwrite BUILD_NANDWRITE=1
BOOTLOADER_EMMC_OUT := $(TOP)/$(TARGET_OUT_INTERMEDIATES)/BOOTLOADER_EMMC_OBJ
vim./bootable/bootloader/lk/make/build.mk $(OUTELF): $(ALLOBJS)$(LINKER_SCRIPT)@echo linking $@ $(NOECHO)$(LD)$(LDFLAGS)-T $(LINKER_SCRIPT)$(ALLOBJS)$(LIBGCC)-o $@
bootable/bootloader/lk/makefile:33:OUTBIN := $(BUILDDIR)/lk.bin bootable/bootloader/lk/makefile:34:OUTELF := $(BUILDDIR)/lk
./lk/platform/msm7x30/rules.mk:23:LINKER_SCRIPT += $(BUILDDIR)/system-onesegment.ld
==》链接 lk linking../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk linking../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk generating image:../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk.bin generating image:../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.bin text data bss dec hex filename 29592 7388 42720 79700 13754../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk text data bss dec hex filename 25780 184 34000 59964 ea3c../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk
==》以 binary 格式,把文件
out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk 输出到:
out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.bin arm-eabi-objcopy-O binary out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.bin ==》
生成...out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.lst 生成...out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.debug.lst 生成...out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.sym 生成...out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.size make[1]:正在离开目录 /opt/workspace/gphone/qualcomm/eclair-M7630AABBQMLZA1150/bootable/bootloader/lk ==》
make-C kernel O=../out/target/product/msm7630_surf/obj/KERNEL_OBJ ARCH=arm CROSS_COMPILE=arm-eabi-msm7630-perf_defconfig make[1]: 正在进入目录
/opt/workspace/gphone/qualcomm/eclair-M7630AABBQMLZA1150/kernel generating symbols:../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.sym generating size map:../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.size
mkheader 从 lk.bin 生成 appsboothd.mbn 语法: mkheader
out/target/product/msm7630_surf/appsboot.mbn cat out/target/product/msm7630_surf/appsboothd.mbn out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.bin > out/target/product/msm7630_surf/appsboot.mbn 删除:out/target/product/msm7630_surf/appsboothd.mbn ==== 1.3.1.3 boot.img 生成过程解析,怎样手动生成 boog.img boot.img 包括两个部分: kernel 和 ramdisk,通过命令: make out/target/product/msm7630_surf/boot.img showcommands 会自动生成 kernel 和 ramdisk,然后把两者合并制作成烧写的镜像文件:boot.img kernel 为
out/target/product/$TARGET_PRODUCT/obj/KERNEL_OBJ/arch/arm/boot/zImage 或者 out/target/product/$TARGET_PRODUCT/kernel , kernel 是 zImage 的拷贝
编译内核之前必须获取一个默认的配置文件.config ,此配置文件可以生成,或者来自默认配置,高通中 msm7630_surf 的
默认配置文件名为: msm7630-perf_defconfig 在文件: vendor/qcom/msm7630_surf/AndroidBoard.mk:45 中通过: KERNEL_DEFCONFIG := msm7630-perf_defconfig 进行了指定。我们可以通过命令:
make-j3 ARCH=arm CROSS_COMPILE=arm-eabi-kernel showcommands 或者通过如下命令一步步完成:
1.获取默认的内核配置并生成.config 的命令如下: make-C kernel O=../out/target/product/msm7630_surf/obj/KERNEL_OBJ ARCH=arm CROSS_COMPILE=arm-eabi-msm7630-perf_defconfig-C kernel 告诉 make 进入 kernel 工作目录,到其下面寻找 makefile 文件
O 内核编译的中间文件以及编译结果等都存储在该目录下,此做法的好处是不会在kernel源代码目录下生成垃圾文件
ARCH=arm 告诉系统到./kernel/arch/$ARCH/configs/ 目录下找文件 msm7630-perf_defconfig,生成的.config 保存在:
out/target/product/msm7630_surf/obj/KERNEL_OBJ/.config 2.手动编译内核
make-C kernel O=../out/target/product/msm7630_surf/obj/KERNEL_OBJ/ 3.如果需要配置内核,使用下面的命令 make kernelconfig 他首先会进入 menuconfig 界面,用户配置完成以后,会把修改后的配置文件$(KERNEL_OUT)/.config 更新为默认的配置文件
cp out/target/product/msm7627_ffa/obj/KERNEL_OBJ/.config kernel/arch/arm/configs/msm7627-perf_defconfig kernel/arch/arm/configs/$(KERNEL_DEFCONFIG)
4.手动生成 ramdisk 执行命令
make out/target/product/msm7630_surf/ramdisk.img showcommands 会用到命令:
out/host/linux-x86/bin/mkbootfs out/target/product/msm7630_surf/root | out/host/linux-x86/bin/minigzip > out/target/product/msm7630_surf/ramdisk.img 5.手动生成 boot.img 需要使用命令 mkbootimg ,语法如下: mkbootimg--kernel 内核--ramdisk ramdisk镜像--cmdline 命令行--base 基地址--pagesize 大小--output 输出的boot.img ========== KERNEL=out/target/product/$TARGET_PRODUCT/kernel KERNEL=out/target/product/$TARGET_PRODUCT/obj/KERNEL_OBJ/arch/arm/boot/zImage RAMDISK=out/target/product/$TARGET_PRODUCT/ramdisk.img CMDLINE=“console=ttyDCC0 androidboot.hardware=qcom” BASE=0x00200000 PAGESIZE=4096 OUTPUT=out/target/product/$TARGET_PRODUCT/boot.img out/host/linux-x86/bin/mkbootimg--kernel $KERNEL--ramdisk $RAMDISK--cmdline “$CMDLINE”--base $BASE--pagesize $PAGESIZE--output $OUTPUT =========================================
编译 bootloader(appsboot.mbn),nandwrite 生成过程解析./vendor/qcom/msm7630_surf/AndroidBoard.mk:25: include bootable/bootloader/lk/AndroidBoot.mk =================== 因为有:
bootable/bootloader/lk/AndroidBoot.mk:3: TARGET_BOOTLOADER := $(PRODUCT_OUT)/appsboot.mbn INSTALLED_BOOTLOADER_TARGET := $(PRODUCT_OUT)/bootloader file := $(INSTALLED_BOOTLOADER_TARGET)