首页 展讯平台详解

展讯平台详解

举报
开通vip

展讯平台详解项目文档模板 Build环境使用手册 Version: 0.2.6 2010-11-29 www.spreadtrum.com 修订历史 版本 日期 作 者 审 核 说 明 0.0.1 2007-12-11 Daniel.Luo Create 0.02 2008-1-31 Daniel.Luo 增加客户发布及使用内容 0.03 2009-03-10 Mingjianliu 基于MOCOR_W09.11修改 0.04 2009-03-31 Mingjianliu 增加多线程编译,Windows command 编译 ...

展讯平台详解
项目文档模板 Build环境使用 手册 华为质量管理手册 下载焊接手册下载团建手册下载团建手册下载ld手册下载 Version: 0.2.6 2010-11-29 www.spreadtrum.com 修订历史 版本 日期 作 者 审 核 说 明 0.0.1 2007-12-11 Daniel.Luo Create 0.02 2008-1-31 Daniel.Luo 增加客户发布及使用内容 0.03 2009-03-10 Mingjianliu 基于MOCOR_W09.11修改 0.04 2009-03-31 Mingjianliu 增加多线程编译,Windows command 编译 0.05 2009-04-09 Mingjianliu 删除Cygwin 相关所有信息 0.06 2009-04-15 Mingjianliu 编译命令增加5.18 特别提醒,新建工程部分增加NV,Resource 部分的说明 0.07 2009-04-20 Mingjianliu 根据评审结果修改 0.08 2009-04-28 Mingjianliu 增加编译暂停说明;资源编译说明更新,增加编译出错的一个说明 0.09 2009-05-06 Mingjianliu 增加对VC模拟器编译说明,提醒修改工程 0.10 2009-05-30 Mingjianliu Resource,NV 说明更新 0.11 2009-07-08 Mingjianliu 0.12 2009-08-19 Mingjianliu 1.第三方逻辑部分独立成一个文件Makefile.third-partyMakefile.third-party 2 编译APP 需要调用tools\DEBUG_TOOL\BMP2Array 工具3. 增加分布式编译说明.4.鼠标右键增加命令行快捷方式说明5. DOS下输入命令时用Tab键进行命令自动填充 6.增加动态生成模拟器部分说明 0.13 2009-08-31 Mingjianliu 更新 3.2 统一编译部分关于:makefile宏赋制值的特别说明 0.14 2009-09-24 Mingjianliu 更新复制方式创建项目编译脚本 部分:大工程中增加 PRODUCT_BASELIB_DIR变量 及使用说明; MS_Customize/source/product/config 驱动部分根据工程名字自适应 ;7.2.4 项目修改编译选项注意事项更新;更新NV编译选项说明;3.5编译命令最大长度 8K限制 0.15 2009-10-10 Mingjianliu Windows 模拟器 调整 0.16 2009-10-21 Mingjianliu 提醒:Xoreax IncrediBuild 有Bug,代码路径中不要有括号,即使是单个括号也不可以,否则无法编译. 0.17 2009-12-30 Mingjianliu 多个资源.xls 合并使用问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 0.18 2010-02-02 Mingjianliu 1. 7.2.2 复制方式创建项目编译脚本中对非开放的.a ,对应目录只取 PRODUCT_BASELIB_DIR 的值; 2. 6.6 分布式编译增加依赖关系,并增加编译细节说明; 3. 6.8对 Feature Options 的使用增加了一个错误用法说明 0.19 2010-02-12 Mingjianliu 根据2月11日评审修改 0.20 2010-02-25 Mingjianliu 公共转义宏使用标准make语法生成,不再通过读源文件方式生成;删除6.8 0.21 2010-03-04 Mingjianliu 增加5.13 生成编译选项 0.22 2010-04-22 Mingjianliu Makefile 文件中 变量 filter-out_macro 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 了不需要转义成编译宏的一些makefile变量,其中一些是编译时的命令行参数。如果项目增加了额外的命令行参数,请考虑是否在转义宏时将其过滤掉 (如果是客户版本,检测SPRD宏时有可能不通过).。删除 全局变量和转义宏区别部分,此内容已在第三章中说明。 0.23 2010-07-05 Mingjianliu 删除 全局变量和转义宏区别部分,此内容已在第三章中说明。 0.24 2010-09-26 Mingjianliu 章节调整;增加新的多线程编译方式;增加宏校验出错信息 0.25 2010-10-14 Mingjianliu 根据CRMS00202859 修改,涉及: 宏定义中去掉export ,增加 .modules 文件 0.26 2010-11-29 Mingjianliu Source Insight 中对pclint 扫描结果的快速定位 9.5 重要声明 版权声明   本文档中的任何内容受《中华人民共和国著作权法》的保护,版权所有 © 2006, 展讯通信有限公司,保留所有权利,但注明引用其他方的内容除外。   商标声明 本文档中展讯通信有限公司的产品的所有商标是展讯通信有限公司专有,但注明属于其他公司拥有的商标除外。在提及其他公司及其产品时将使用各自公司所拥有的商标,这种使用的目的仅限于引用。  不作保证声明 展讯通信有限公司不对此文档中的任何内容作任何明示或暗示的陈述或保证,而且不对特定目的的适销性及适用性或者任何间接、特殊或连带的损失承担任何责任。  保密声明 本文档(包括任何附件)包含的信息是保密信息。接收人了解其获得的本文档是保密的,除用于规定的目的外不得用于任何目的,也不得将本文档泄露给任何第三方。 目 录 TOC \o "1-3" \h \z 1 说明 6 2 编译环境及相关软件 7 3 Source Code目录结构 8 4 基本编译命令 10 4.1 全新编译整个项目[new] 10 4.2 更新项目[update] 11 4.3 单独编译模块 11 4.4 清除模块编译结果 11 4.5 清除所有编译结果[cleanall] 11 4.6 生成可执行文件 11 4.7 编译FDL/bootloader 11 4.8 编译NV 11 4.9 编译MMI Resource 文件 12 4.10 编译PC模拟器工程 12 5 其它编译命令 15 5.1 编译Logel工具 15 5.2 pclint 扫描 15 5.3 编译完成net send提醒功能 15 5.4 编译命令的简写 15 5.5 多线程编译 15 5.6 分布式编译 16 5.7 编译出错暂停 16 5.8 生成编译选项 16 6 Makefile 工作流程 财务工作流程表财务工作流程怎么写财务工作流程图财务工作流程及制度公司财务工作流程 17 6.1 重要脚本 17 6.2 Makefile 执行流程 18 6.3 两种编译方式 19 7 模块修改及项目定制 21 7.1 添加或删除模块 21 7.2 修改模块 21 7.3 创建新项目 22 7.4 修改项目Feature Options 23 8 第三方编译选项说明 24 9 相关使用技巧 25 9.1 查看log文件 25 9.2 makefile 报错: No rule to make target ` XXX ', needed by `yyy'. 25 9.3 makefile 报错:Can't return outside a subroutine at ./make/perl_script/sprd_macro_check.pl line XXX 25 9.4 Source Insight集成ClearCase的配置 25 9.5 Source Insight 中 Pclint 扫描结果相关文件的快速定位 28 9.6 鼠标右键命令行快捷方式设置 29 9.7 DOS下输入命令时用Tab键进行命令自动填充 29 1​ 说明 Build环境中实现了项目开发和维护使用的GNU标准应用脚本,基于这些应用脚本和相关make工具, Build环境可以完成项目全部代码的编译和二进制文件的生成,同时在此环境中可以通过脚本执行的方式产生其他软件以及开发工具,如 fdl, bootloader, nv_parameter,resource等。 Build环境的相关命令脚本需要在Windows Command环境下进行,因为每个项目工程编译出来的中间依赖文件都独立存放,所以可以通过开启多个Windows Command窗口对多个不同的项目进行同时编译。 2​ 编译环境及相关软件 操作系统:建议 Windows 2000 professional 或 windows XP SP3 版本 编译工具:ADS V1.2 (ARM Developer Suite) patch848 is fully ready RVDS V3.1(Realview Devloper Suite) is under evaluation Microsoft Visual C++ 6.0 SP6 ADS patch版本的查看 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 见下图: 其他工具:Microsoft Excel 2000 或者 Microsoft Excel 2003 或者 WPS 2005及以上版本 3​ Source Code目录结构 Build环境目录结构 └─MS_Code ├─build 编译结果的输出总目录,此目录下内容在编译过程中生成 │ ├─8801h_s3b_builddir 与具体项目名称对应,自动生成的输出目录 │ │ ├─dep 编译依赖文件存放目录 │ │ ├─img 编译最终结果存放目录,包括arm bin,fdl,bootloader, │ │ │ resource,nv等 │ │ ├─lib 客户编译模块.a存放目录 │ │ ├─log 编译log文件目录,包括编译出错信息、告警信息等 │ │ ├─fdl_bootloader 编译生成的fdl bootloader文件目录 │ │ ├─res 编译生成的resource文件目录 │ │ ├─pclint 编译生成的pclint文件目录 │ │ ├─tmp 编译生成的临时文件目录 │ │ └─obj 模块目标文件存放目录 │ │ └─win 自动生成模拟器工程存放目录 │ └─sc6600l_sp6601l_builddir ├─chip_drv Source Code ├─MS_Ref Source Code ├─PS ├─atc ├─common │ ├─nv_parameters 统一NV project存放目录 │ └─source 目标统一main.c存放目录 ├─make 依据编译选项文件,makefile将自动搜寻该目录并循环| 对模块进行编译 │ └─aac │ └─aac.mk 对应模块的编译脚本 | … | ├─MS_Customize │ ├─config │ ├─custom │ └─product 区分不同产品驱动配置文件 ├─version 目标统一版本version.c ├─MS_MMI ├─Third-party 第三方软件库文件和头文件存放位置 │ └─bt_csr │ ├─include │ └─lib ├─lib 展讯开放库文件目录存放地和build目录分开 ├─fdl_bootloader fdl bootloader 存放目录 Build环境的关键目录如上图所示,所有相关代码和脚本都统一集中在MS_Code目录下,下面将对特殊的目录做些详细的说明: 1)​ build目录 ​ bulild目录及其下的相关内容在程序编译过程中自动生成,对于特定的项目,build目录会生成projectname_builddir目录,并在该目录下自动生成dep、img、lib、log、nv、tmp及obj等目录。 2)​ make目录 make目录存放和模块对应的编译脚本,子目录和模块呈一一对应关系,各个子目录中存放着和目录名称对应的脚本文件。一旦有了新添的模块源文件或删减,相关脚本需要进行修改。同样,如果有了新增的模块,则需要在make目录下建立新的模块子目录。相关过程在后面会有更详尽的描述。 3)​ MS_Customize目录 和项目相关的scatter file文件存放在MS_Customize目录中,需要注意该文件名称需要和项目名称保持一致。 4)​ version目录 version目录中存放项目相关的version.c文件,目前需要注意该文件名称需要和项目名称保持一致。 . 4​ 基本编译命令 Build的所有操作命令都要在Windows Command 下执行,并且需要在关键脚本的当前路径,即MS_Code目录下完成输入。示例如下: 在编译项目时,会使用类似make PROJECT=projectname 命令,这里projectname必须和项目编译脚本的名称保持一定的对应关系,否则系统会报: Project defined Makefile project_projectname.mk is not exist! 这样的错误。如项目编译脚本文件名为 project_8801h_s3b.mk,则projectname的内容为8801h_s3b,因此我们可以执行如下的命令来实现编译 : make PROJECT= 8801h_s3b 4.1​ 全新编译整个项目[new] 通过命令行工具在项目目录MS_Code下输入命令make PROJECT=projectname new,该命令将清除编译过程中生成的全部目标码和库文件,然后对projectname所指定的项目进行整体编译并在没有错误出现的情况下完成最终的链接,编译过程中会自动生成依赖关系。会这一命令适合在项目进行了较大修改:比如公共头文件数据结构发生变化、公共接口参数发生变化、文件更新中时间戳混乱或makefile相关脚本被修改等等情况下建议使用这一命令,确保重新对项目进行完全编译得到正确的输出结果。这个命令也会将 fdl,bootloader,NV ,Resource同时编译出来。 该命令相当于运行如下3个命令 make PROJECT=projectname cleanall make PROJECT=projectname MODULES=resource make PROJECT=projectname update 4.2​ 更新项目[update] 通过命令行工具在项目目录MS_Code下输入命令make PROJECT=projectname 或 make PROJECT=projectname update 命令,makefile根据已有的依赖关系编译因修改涉及到的相关的模块并在没有错误出现的情况下完成最终的链接,若不存在依赖关系,makefile 会在编译文件时自动生成依赖关系。因为只编译较少的模块文件,可以节省编译时间。这个命令也会将 fdl,bootloader,NV 同时编译出来。 4.3​ 单独编译模块 通过命令行工具在项目目录MS_Code下输入命令make PROJECT=projectname MODULES=”module1 module2 …” update,该命令将对指定模块进行编译,但不会编译完成后进行自动链接。该命令属于模块开发人员最常用的命令,在具体模块开发中需要经常使用该命令来验证模块的编译完整性。 4.4​ 清除模块编译结果 通过命令行工具在项目目录MS_Code下输入命令make PROJECT=projectname MODULES=”module1 module2 …” clean,该命令将清除指定模块的编译输出结果,其中包含指定模块的目标文件和库文件。该命令适合在指定模块内部出现重大修改或者模块本身makefile脚本被修改,在进行模块编译前使用。 4.5​ 清除所有编译结果[cleanall] 通过命令行工具在项目目录MS_Code下输入命令make PROJECT=projectname cleanall,该命令将清除编译过程中生成的全部目标码和库文件。 4.6​ 生成可执行文件 通过命令行工具在项目目录MS_Code下输入命令make PROJECT=projectname image可以进行链接生成相关的可执行文件,该命令可以在模块修改并编译完成后进行,也适合第三方库文件更新后进行。 4.7​ 编译FDL/bootloader 通过命令行工具在项目目录MS_Code下输入命令make PROJECT=projectname MODULES=bootloader 对bootloader编译 通过命令行工具在项目目录MS_Code下输入命令make PROJECT=projectname MODULES=fdl1 对fdl1进行编译。 通过命令行工具在项目目录MS_Code下输入命令make PROJECT=projectname MODULES=fdl2 对fdl2进行编译。 通过命令行工具在项目目录MS_Code下输入命令make PROJECT=projectname MODULES=nor_fdl 对nor_fdl 进行编译。 输出结果位置: build/projectname_builddir/fdl_bootloader.同时会自动将最终的bin文件copy 到build/projectname_builddir/img 下,方便下载到手机中。 您也可以根据工程具体情况用一条命令编译出所有目标,示例如下: make PROJECT="rocky_6901" MODULES="fdl1 fdl2 bootloader" make PROJECT="8801h_s3b" MODULES="nor_fdl" 4.8​ 编译NV 通过命令行工具在项目目录MS_Code下输入命令make PROJECT=projectname MODULES= nv_parameter 对nv_parameter编译 输出结果位置: build/projectname_builddir/nvm。同时会自动将最终的bin文件复制 到build/projectname_builddir/img。 注意: 1. make/nv_parameter/nv_parameter.mk 是NV的makefile文件 make/nv_parameter/config_info.nv 为NV 的配置文件 2.如果希望单独修改项目某项NV参数,例如希望修改nv_type.nvm某项,应该在使用make指令编译出NV项目文件之后使用NVEDITOR工具编译保存。 4.9​ 编译MMI Resource 文件 通过命令行工具在项目目录MS_Code下输入命令make PROJECT=projectname MODULES= resource 对Resource编译。 输出结果位置: build/projectname_builddir/res。同时会自动将最终的映像文件复制到build/projectname_builddir/img目录。 默认情况下编译Resource 使用了 主工程中的Feature Options 转义宏和 app.mk 模块中的宏,如果您的项目资源编译需要使用其他的模块的宏,请修改resource.mk文件。 注意: 1)​ 当前不能正确支持多个项目工程的资源并行编译 2)​ 编译资源文件需要工具脚本支持,如果环境不完整会导致编译过程停止 3)​ 修改 make\perl_script\ResGen\ResView.ini 中配置项[CustStrTable] ,可支持多个字符资源文件: 如: [CustStrTable] 1=cust_str_table_01.xls 4.10​ 编译PC模拟器工程 ​ 编译Win32模拟器工程的步骤 1)​ 通过makefile 自动生成模拟器工程dsw文件; 生成模拟器工程时一些配置信息(skin,resource,sim)文件 MSSimCfg.ini, SIMTest.ini会自动生成 并存放到win\bin文件夹下;模拟器 msdev工具 也会从MS_MMI 里 Copy 一份到这个文件夹中。 使用类似如下的命令可在该工程的build 临时文件夹 的win 下生成对应的所有.dsp ,dsw 文件 make PROJECT=sc6600l_sp6601l MODULES=simulator 2)​ 编译模拟器; 用VC6 打开 win/simulator.dsw 文件,设置 msdevkernel 为 Active Project, 编译完成后 msdevkernel.dll 会生成到win/bin 目录下 3)​ 运行模拟器; 双击win/bin 目录下 的 msdev.exe即可。 ​ 功能说明: 通过对 MOCOR 平台 makefile 工程文件分析,取得要编译的文件列表,宏,搜索路径等信息后自动生成对应的 VC dsp 工程文件和一个 simulator.dsw 的工作空间文件,执行simulator.dsw 就可以编译出模拟器使用的.dll文件. ​ 文件说明: simulator.mk (make/simulator/simulator.mk) 指示模拟器需要使用的模块列表,特别指定的编译宏列表,及完成生成模拟器的所有工作 simulator.ini (make/simulator/simulator.ini) 配置文件,用来指示 模拟器工程与make工程在 文件,宏,搜索路径的差异。其中msdevkernel 为总dsp文件,模拟器工程需要的所有lib文件如第三方.lib文件等都要加到这个工程中。 该文件支持代码宏,示例如下: #ifdef PLATFORM_SC6600L chip_drv += chip_drv/source/c/ivsp_drv_6600l.c #endif simulator.ini 说明: [ADD_INC_PATH] 用来指示除makefile对应工程的搜索路径外,dsp工程中还需要增加的搜索路径 [DEL_INC_PATH] 用来指示在makefile对应工程的搜索路径中需要删除的搜索路径 [ADD_OPTION] 用来指示除makefile对应工程的搜索路径外,dsp工程中还需要增加的编译宏 注意:宏列表需要用""来引起来,如 app = "USB_WEBCAMERA_SUPPORT USB_LOG" [DEL_OPTION] 用来指示在makefile对应工程的编译宏中需要删除的宏 注意:宏列表需要用""来引起来,如 rtos="_RTOS WIN32 _DEBUG _MBCS _LIB _RTOS _ENABLE_LOG_TOOL" [ADD_FILE] 用来指示除makefile对应工程的文件外,dsp工程中还需要增加的文件 [DEL_FILE] 用来指示在makefile对应工程的文件中需要删除的文件,如果具体某个模块的值为 * 则表示这个模块的所有文件都删除 [REPLACE_FILE] 用来指示在makefile对应工程的文件中路径的替换 ​ 使用技巧: 部分软件模块实现方式在模拟器和目标硬件环境不一致,可以参考如下样例修改兼容两种平台的编译: 1.平台目标硬件端JPG为硬解码,模拟器上怎么办?: simulator.mk 中 对 macro_set 赋值 ifeq ($(strip $(JPG_DEC_SUPPORT)), JPG_HW) macro_set += JPG_DEC_SUPPORT=JPG_SW endif ifeq ($(strip $(JPG_ENC_SUPPORT)), JPG_HW) macro_set += JPG_ENC_SUPPORT=JPG_SW endif simulator.ini 修改如下: [DEL_OPTION] global = "" #if defined(JPG_DEC_SUPPORT_JPG_HW) global += "JPG_DEC_SUPPORT_JPG_HW" #endif #if defined(JPG_ENC_SUPPORT_JPG_HW) global += "JPG_ENC_SUPPORT_JPG_HW" #endif [ADD_OPTION] global = "WIN32 _DEBUG _MBCS _LIB THREADX_OS _RTOS" #if defined(JPG_DEC_SUPPORT_JPG_HW) global += "JPG_DEC_SUPPORT_JPG_SW" #endif #if defined(JPG_ENC_SUPPORT_JPG_HW) global += "JPG_ENC_SUPPORT_JPG_SW" #endif 2.目标硬件板上已完成的功能但模拟器上还没有调好,怎么先禁掉该功能? simulator.mk 中 对 macro_set 赋值 ifeq ($(strip $(CMMB_SUPPORT)), TRUE) macro_set += CMMB_SUPPORT=FALSE endif simulator.ini 修改如下 [DEL_OPTION] global = "" #if defined(CMMB_SUPPORT) global += "CMMB_SUPPORT" #endif 5​ 其它编译命令 5.1​ 编译Logel工具 通过命令行工具在项目目录MS_Code下输入命令make PROJECT="8801h_s3b" MODULES="logel" clean update 对logel工具进行编译。注意,编译这个工具需要 perl 5.8 。 注意:SPRD 客户无法使用该命令 5.2​ pclint 扫描 通过命令行工具在项目目录MS_Code下输入命令make PROJECT="8801h_s3b" pclint 对全部模块代码进行pclint 扫描。输入make PROJECT="8801h_s3b" MODULES=”app gui ps” pclint 对指定的模块代码进行pclint扫描。 5.3​ 编译完成net send提醒功能 通过命令行工具在项目目录MS_Code下输入命令 make PROJECT="8801h_s3b" ip=192.168.0.1 make PROJECT="8801h_s3b" ip=pcname 当代码编译完成时,会自动向指定的IP地址或机器名 发一个 net send 消息,说明该工程编译是否成功。 注意,这个命令只在生成 image 后才调用,单独编译某个模块并不 生成 image 时并不会调用。 5.4​ 编译命令的简写 make PROJECT=8801h_s3b MODULES=”app gui ps” 可以简写为 make p=8801h_s3b m=”app gui ps” make PROJECT=8801h_s3b new 可以简写为 make p=8801h_s3b new 5.5​ 多线程编译 Build环境支持多线程编译,可以充分利用多核CPU 的优势,加快编译速度,必须通过显式的方式指定开启线程数: make p=8801h_s3b new job=<模块内开启线程数> make p=8801h_s3b new job=<模块内开启线程数> -j<同时并发编译的模块数> <模块内开启线程数> 表示编译时同时启动线程个数,建议不要超过CPU 核心数。 <同时并发编译的模块数> 建议不要超过4.示例如下: make p=8801h_s3b new job=8 make p=8801h_s3b new job=8 –j4 5.6​ 分布式编译 Build环境支持 Xoreax IncrediBuild 分布式编译,可以充分利用网络优势,加快编译速度.只需要在正常的编译指令后增加ib=1 即可: make p=8801_s3b new ib=1 分布式编译支持依赖关系,所以当您执行make p=8801h_s3b m=app update ib=1 时,会重新编译所有app模块文件.另外如果您的代码中的文件位置有变动时,编译时请将涉及的模块先使用clean命令清理中间依赖文件,然后再编译,否则有可能出现找不到相关文件而无法编译的问题。 跟Xoreax IncrediBuild工具有关,此命令可能工作不正常。 5.7​ 编译出错暂停 默认情况下,编译出错后将继续编译,并不听停下来。如果您需要makefile 支持编译出错暂停功能,请使用stop参数编译,并赋值为1。命令示例如下: make p=8801h_s3b stop=1 new 遇到异常时脚本会调用DOS下的Pause命令,用户敲任意键会继续编译,如果需要强行推出需要敲Control+C. 目前停止的方式是调用DOS的 Pause,按任意键会继续编译,如果需要强行推出,需要按 Control+C. 5.8​ 生成编译选项 MOCOR平台可以通过命令行方式获得宏/搜索路径/文件清单的定义,方便与其他工具集成或调试用. 1.获得整个工程的宏 make p=8801h_s3b options 2.获得某模块的宏 make p=8801h_s3b m=app options make p=8801h_s3b m="app mmk" options 3.生成的宏定义文件可在如下地址获得: MS_Code\build\_builddir\options 6​ Makefile 工作流程 6.1​ 重要脚本 在MS_Code目录下存放有Makefile.rules、Makefile.modules、.modules 、Makefile以及项目编译脚本,比如project_8801h_s3b.mk等等,同时在make目录的各个子目录下存放有各个模块的make脚本,即模块编译脚本,比如aac.mk、app.mk等等。一般情况下开发人员仅维护项目编译脚本即可, Makefile.rules、Makefile.modules和Makefile不需要修改。 针对模块和项目的变化,开发人员需要修改模块编译脚本和增加新的项目编译脚本。下面将针对Makefile.rules、Makefile.modules和Makefile进行简单的说明,关于模块编译脚本和项目编译脚本将在后面的章节中详细描述。 注: .modules 文件仅在 maintrunk 版本中存在,在mocor_09a 中,该文件内容包含在 Makefile 文件中。 Makefile.rules Makefile.rules中定义了绝大部分平台无关、模块无关以及项目无关的公共变量及公共函数,其中包括编译器的指定、公共编译参数CFLAGS、AFLAGS的定义、文件复制、删除、目录创建等系统命令、公共头文件路径、SPRD库路径以及第三方库文件路径等变量的定义。 请根据您的机器上的软件情况进行相应修改。 Makefile.modules Makefile.modules定义了真正的编译指令及依赖关系,一般开发中不需要维护该文件,这里需要指出的是:目前有部分模块采用了armcc编译器(比如:mpeg4_codec),对于这部分模块需要在Makefile.modules中申明,具体操作可以参考该文件中已经被申明的相关模块部分。 对分布式编译(Xoreax IncrediBuild),将 include make/perl_script/modules.pl。 .modules .modules定义了项目需要编译的开放模块列表,非开放模块列表,参与连接.a 文件列表等信息。 Makefile.third-party Makefile.third-party 将第三方逻辑独立成一个文件,便于维护,这个文件会 被 include 到各工程.mk 中. Makefile.verify Makefile.verify 对makefile中的宏的父子关系进行校验,防止出错.另外转义的编译宏也在这个文件中生成。 Makefile Makefile是最上层的总控脚本,该脚本直接处理用户的命令,并执行相关的处理,在没有特殊需要的情况下用户不需要维护该文件。 6.2​ Makefile 执行流程 You need to type “make PROJECT=XXX new” in windows command to tell make which project to make.We will show a simple pseudo-code that describes makefile work flow . Makefile include Makefile.rules ARM compiler setting Common compiler options setting Bash commands setting public function setting makefile location setting include project_$(PROJECT).mk Feature options setting include Makefile.verify Parent-child relationships of feature options Get public MACRO include Makefile.third-party Setting third-party modules to variable 3RD_LIBS include Set variable: INDEPENDENT: value specified for external makefile EXPORTLIBS: value specified for sprd modules list COMPLIBS_DBG: value specified for modules list of open source LINKLIBLIST: value specified for all .a list using for armlinking MKLIBLIST = $(foreach comp,$(EXPORTLIBS) $(COMPLIBS_DBG), \ $(if $(findstring $(comp),$(INDEPENDENT)),$(comp).indep, $(comp).a)) image: $(MKLIBLIST) $( 3RD_LIBS) -$(LINK) $(LINKLIBLIST) -o $(BUILD_DIR)/img/$(AXFFILENAME) %.indep: @$(MAKE) -f make/$*/$*.mk -I ./$(BUILD_DIR)/dep/$* %.a: @$(MAKE) -f Makefile.modules -I ./$(BUILD_DIR)/dep/$* \ -k -r -R COMPONENT=$* 6.3​ 两种编译方式 从以上的简单流程中可以看出,MOCOR 平台项目的所有模块和工具目前采用两种方式编译。 1.独立的软件和工具编译方式 目前采用独立的makefile编译的软件或者工具模块有: fdl1, fdl2, bootloader, nv_parameter, resource, simulator 等。 这些模块或功能对应的 make/module_name/module_name.mk 本身已经是一个完整的makefile文件,make直接调用执行。方法是将模块名添加到 INDEPENDENT 列表中。采用独立编译的软件模块一般是实现一定的功能,并不一定有.a 文件生成,此方法对应6.2 中的 %.indep 目标。 # independent compile INDEPENDENT= fdl1 fdl2 bootloader nor_fdl logel simulator resource nv_parameter pclint 编译方式为 :make PROJECT=projectname MODULES=bootloader 注意: 如果该 makefile 中需要使用总工程中宏信息和公共变量定义,请按如下方式包含文件。以下四行是必须的,并且要保持如下顺序。 include Makefile.rules include ./project_$(PROJECT).mk include Makefile.verify include Makefile.rules 2.主编译方式 绝大部分的模块都是通过这种编译方式来完成编译的。这种编译方式使用一致的依赖关系生成方法,统一控制编译的行为。对应的 make/module_name/module_name.mk 文件并不是一个完整的makefile 文件,一般其中只包含编译需要的宏列表,文件列表,搜索文件路径 ,其他都由框架自动完成。依赖关系文件存放于MS_Code\build\projectname_builddir\dep 下。此方法对应6.2 中的 %.a 目标。 每个项目工程在编译的时候,脚本会自动将Feature Options 部分转义成真正的代码中使用的宏传给相应的子模块,在对子模块代码编译的时候,自动附加上这些宏。转义的规则如下: ​ 对功能开关型的 Feature Options ,当Feature Options 为TRUE 时转义,为FALSE时不转义 NANDBOOT_SUPPORT = TRUE ### Boot From Nandflash Support: # Option1:TRUE # Option2:FALSE 上面的定义会产生转义宏 -DNANDBOOT_SUPPORT传递给各个子模块 ​ 对功能枚举型的 Feature Options ,将 Feature Options 的名字和值拼接起来转义成一个宏,同时对非空的值,同时转义一个Feature Options 名字的宏。 SUBLCD_SIZE = 96X64 ### Resolution Of Main LCD # Option1:NONE #define SUBLCD_SIZE_NONE # Option2:96X64 #define SUBLCD_SIZE_96X64 上面的定义会产生转义宏-DSUBLCD_SIZE_96X64和-DSUBLCD_SIZE传递给各个子模块 转义函数在 Makefile.rules 中定义,在 Makefile.verify 中调用,转义结果存放在全局变量中 C_MACRO ( for C language) A_MACRO (for Assebly language) 注意: Makefile.rules 文件中 变量 filter-out_macro 记录了不需要转义成编译宏的一些makefile变量,其中一些是编译时的命令行参数。如果项目增加了额外的命令行参数,请考虑是否在转义宏时将其过滤掉 (如果是客户版本,检测SPRD宏时有可能不通过).。 7​ 模块修改及项目定制 这里涉及到前面谈到的关键脚本的修改,在大多数情况下开发人员针对模块或者项目的需要只需修改和补充两类的关键脚本:模块编译脚本和项目编译脚本。在此,我们把出现在Build环境中的最小编译单位称为模块,Build系统中将以MS_Code/make目录下的各个子目录名称作为约定的模块名称,这些子目录和各自的功能模块之间呈一一对应的关系。 7.1​ 添加或删除模块 ​ 修改 相应.modules文件中变量EXPORTLIBS或者COMPLIBS_DBG,添加或删除指定的模块 EXPORTLIBS = audioservice agc_exp aud_algorithm bsd custom_tone char_lib \ digitalgain dsp_codec dtmf_tone dv eq_exp generic_tone \ layer1 layer1_dsp img_proc display l4 \ mpeg4_codec main ps record rtos \ sfs scaling transsamplerate daps parser \ voice vsp spml COMPLIBS_DBG = app custom_drv chip_drv gui mmk Ucom ubot upcc version aud_dev \ aud_config scp scm atc refbase dc \ sim mmk_sys caf_templete caf_interface utility isp_service \ !nor_fdl !nv_parameter 某个模块应该放在EXPORTLIBS中进行声明或放在COMPLIBS_DBG声明,取决于该模块对客户的提供方式。其中在EXPORTLIBS中申明的模块表明这些模块将采用库文件的方式提供给客户,而COMPLIBS_DBG的模块则表明会提供全部的源代码供客户进行开发。对于客户自己新增加的模块,则只能在COMPLIBS_DBG变量中申明。 对于nvparameter、fdl1、fdl2、bootloader等是一些辅助的文件,只编译出来即可,不需要参与连接,则只需要在对应模块前紧加上“!”符号即变成 !nvparameter !fdl1 !fdl2 !bootloader 就可以将这些模块排除在项目的连接之外。如果需要在项目中增加新的模块,则只需要在将该模块名称列举到这个序列中,用空格和其他模块分隔开即可。 注意:“\”符号后面应该紧接换行符而不能跟有空格,这个序列中的最后一个模块不能再带有“\”符号。 ​ 添加或删除模块对应的 .mk 脚本 若有新模块需要添加到Build系统中,需要在MS_Code/make目录下同时建立对应该模块的子目录,同时在该目录下完成和目录名称一致并以“.mk”为后缀结尾的模块编译脚本,该脚本的主要任务是完成:MCFLAG_OPT、MINCPATH、MSRCPATH以及SOURCES(模块中有需要编译汇编文件的情况下还有MASMFLAG_OPT)的定义,编写方法同前面的7.2.1—7.2.3小节。 若有模块需要删除,删除 MS_Code/make目录下对应该模块的子目录即可。 7.2​ 修改模块 ​ 模块目录结构调整 如果模块内部存储目录结构或者模块整体相对目录发生改变,则需要修改模块相应的模块编译脚本并修改变量MSRCPATH,这里以模块aac为例: 在make/aac.mk中定义了: MSRCPATH = MS_Ref/codec/aac/src MS_Ref/codec/aac/src/decoder 这里MSRCPATH用来定义该模块源文件的搜索路径,如果该模块中源文件的路径发生了变化,就需要重新定义MSRCPATH,确保模块编译需要的文件都包含在了搜索路径中。 如果涉及到头文件路径出现变化则需要重新定义变量MINCPATH,以确保模块使用到的头文件完全被包含在了头文件定义路径之中。以aac.mk为例,其MINCPATH变量定义如下: MINCPATH = MS_Include/chip_drv MS_Ref/codec/aac/inc MS_Ref/codec/aac/src/decoder \ MS_Ref/codec/aac/src/aac_plus_inc 注:这里MSRCPATH和MINCPATH的相对路径都是以MS_Code作为上级目录而言的,所以需要按照这一约定给出源文件或头文件完整的相对路径。 ​ 添加或删除文件 如果模块编译文件有添加或删除的需要,则需要修改变量SOURCES,可以将增加的文件直接添加在原有的定义之后,如果是需要删除,则可以直接从定义中拿掉。以aac.mk为例,其SOURCES定义如下: SOURCES = aac_adp.c aac_lc_decoder.c bits.c cfft_tab.c common.c \ decoder.c filtbank.c huffman.c id3_parse.c \ is.c mp4.c mp4atom.c mp4ff.c mp4sample.c mp4util.c ms.c pns.c pulse.c \ specrec.c syntax.c tns.c internal_var.c 这里需要强调转意符\的用法,\在这里表示续行,在\后不能有空格出现,在最后一个文件后(这里为internal_var.c)不应该再出现该符号。 ​ 修改编译选项 有时为了适应不同平台或者产品的需求,模块编译选项会发生变化,这时需要修改变量MCFLAG_OPT,通过不同的编译选择来满足需要,以aac.mk为例,其MCFLAG_OPT定义如下: MCFLAG_OPT = -Otime -zc -D_AACARM_ 这里的-Otime –zc属于该模块需要的编译器特殊选项,关于编译其他选项在前面的Makefile.rule中有描述,请参考Makefile.rule中CFLAGS的定义。这里宏“_AACARM_”则属于模块自身的特殊选项。针对不同项目的需要MCFLAG_OPT可以在这里进行相应的修改。 注意:对于“_AACARM_”这类模块内部定义的编译选项,需要在前面加上“-D”以示为编译选项。 7.3​ 创建新项目 ​ 创建全新的项目 1.在MS_Code目录下创建一个新的项目编译脚本,该脚本的命名规则必须是前缀“project_”+“项目名称”+文件后缀“.mk”的形式,比如项目名称为abcd,则相应的项目编译脚本名称必须是project_abcd.mk。 2.在\MS_Code\MS_Customize\source\product\config目录下创建以 projectname 为名的文件夹,并初始化好所有的项目定制文件并注意修改 make\custom_drv\custom_drv.mk 3.修改project_ projectname.mk 中的 PRODUCT_CONFIG 变量值 指定为 “projectname”,如 abcd 4.在\MS_Code\MS_Customize下创建编译其需要的scatter file文件 5.在\MS_Code\Version目录 下创建相应的项目版本文件(version.c) 6. 修改 \MS_Code\make\resource\resource.mk指定资源路径 7.修改 \MS_Code\make\nv_parameter\nv_parameter.mk 指定NV配置文件 ​ 复制方式创建项目 为了加快创建工程文件的过程,您可以基于一个已有的一个工程文件,复制后改一个名字基本就可以编译通过了,在这个基础上配置您想要的工程配置。 当您通过复制方式创建一个新工程时,请考虑以下几项信息: 1.​ 请确认新工程中 PRODUCT_CONFIG 指定的目录是否需要修改,是否需要创建一个新的驱动文件集; 2.​ 请确认新工程中 PRODUCT_BASELIB_DIR 指定的非开放模块.a目录名是否需要修改; 3.​ 请确认新工程的nv是否需要修改,检查nv_parameter.mk 文件是否满足您的需要; 4.​ 请确认新工程的Resource是否需要修改,检查resource.mk 文件是否满足您的需要; 5.​ 请确认是否为新工程创建一个新的scatter file文件 7.4​ 修改项目Feature Options 修改项目功能开关相关的编译选项时请注意: 1. 只有主Makefile中的 “Feature Option(User Customized)”区域的宏开关,可以自行开关 2. 任何非原则1中的宏开关(包括子makefile
本文档为【展讯平台详解】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_469205
暂无简介~
格式:doc
大小:849KB
软件:Word
页数:29
分类:互联网
上传时间:2011-08-03
浏览量:92