展讯开发环境配置.docx
- 文档编号:26240142
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:38
- 大小:194.50KB
展讯开发环境配置.docx
《展讯开发环境配置.docx》由会员分享,可在线阅读,更多相关《展讯开发环境配置.docx(38页珍藏版)》请在冰豆网上搜索。
展讯开发环境配置
Make/Build环境使用手册
Version:
0.1.5
2009-10-21
.spreadtrum.
修订历史
版本
日期
作者
审核
说明
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
增加多线程编译,Windowsmand编译
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
增加通过复制方式创建新工程说明;增加sourceInsight与CC集成说明;增加全局变量和转义宏的实现区分;增加第三方编译选项说明;更新多套资源编译说明
0.12
2009-08-19
Mingjianliu
1.第三方逻辑部分独立成一个文件Makefile.third-partyMakefile.third-party2编译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-21
Mingjianliu
In分布式编译,路径不能有括号,担搁括号也不可以.
重要声明
声明
本文档中的任何内容受《中华人民XX国著作权法》的保护,所有©2006,展讯通信XX,保留所有权利,但注明引用其他方的内容除外。
商标声明
本文档中展讯通信XX的产品的所有商标是展讯通信XX专有,但注明属于其他公司拥有的商标除外。
在提及其他公司及其产品时将使用各自公司所拥有的商标,这种使用的目的仅限于引用。
不作保证声明
展讯通信XX不对此文档中的任何内容作任何明示或暗示的陈述或保证,而且不对特定目的的适销性及适用性或者任何间接、特殊或连带的损失承担任何责任。
XX声明
本文档(包括任何附件)包含的信息是XX信息。
接收人了解其获得的本文档是XX的,除用于规定的目的外不得用于任何目的,也不得将本文档泄露给任何第三方。
1说明
Make/Build环境中实现了项目开发和维护使用的GNU标准应用脚本,基于这些应用脚本和相关make工具,Make/Build环境可以完成项目全部代码的编译和二进制文件的生成,对其他一些需要的文件也可以在Make/Build环境中通过编译的方式产生,如fdl,bootloader,nv_parameter,resource等。
Make/Build的相关操作命令需要在Windowsmand环境下进行,因为每个大工程编译出来的临时文件都独立存放,所以可以通过开启多个mand窗口对多个不同的项目进行同时build。
2运行环境
2.1编译环境及安装相关软件
操作系统:
建议Windows2000或windowsXP
ADS(ARMDeveloperSuitV1.2)
注意需要安装848的patch,查看方法见下图:
MicrosoftExcel2000或者MicrosoftExcel2003或者WPS2005及以上版本(用于编译资源):
MicrosoftVisualC++6.0需要安装sp6补丁(用于编译模拟器)
保证源代码文件中的make配置文件Makefile.rules中各项配置均正确
3编译架构
对一个项目的所有模块和要使用的一些工具,目前是采用两种方式编译。
1.独立的makefile编译
目前采用独立的makefile编译的模块有:
●fdl1
●fdl2
●bootloader
●nv_parameter
●resource
●logel
●winsimulator
●pclint
这些模块或功能,对应的make/module_name/module_name.mk本身已经是一个完整的makefile文件,直接调用就可以了。
目前实现方式是在大的工程文件中,将这些模块的列表对INDEPENDENT赋值,指示这些模块需要单独编译。
采用独立编译的的另外一个特点是他们一般不参与大工程的link,往往只是一些辅助工具。
#independentpile
INDEPENDENT=nor_fdllogelwinsimulator_libwinsimulator_r_norresource
如果项目有新的模块或工具需要独立编译,可以实现makefile并将他们的名字添加到INDEPENDENT的列表总即可。
编译方式为:
makePROJECT=projectnameMODULES=bootloader
注意:
独立编译的模块,通过这种方式调用只能执行默认的最终目标。
2.统一方式编译
绝大部分的模块都是通过这种编译方式来完成编译的。
这种编译方式使用一致的依赖关系生成方法,统一控制编译的行为。
对应的make/module_name/module_name.mk文件并不是一个完整的makefile文件,一般其中只包含编译需要的宏列表,文件列表,搜索文件路径即可。
其他都由框架自动完成。
在您的项目需要添加模块时,推荐您使用这种方式。
每个大工程在编译的时候,会自动将FeatureOptions部分转义成真正的代码中使用的宏传给相应的子模块,在对子模块代码编译的时候,自动附加上这些宏。
转义的规则如下:
1.对开关型的FeatureOptions,当FeatureOptions为TRUE时转义,为FALSE时不转义
exportNANDBOOT_SUPPORT=TRUE###BootFromNandflashSupport:
#Option1:
TRUE
#Option2:
FALSE
对上面的定义也就是转义一个宏-DNANDBOOT_SUPPORT.
2.对列表型的FeatureOptions,将FeatureOptions的名字和值拼接起来转义成一个宏,同时对非NONE的值,同时转义一个FeatureOptions名字的宏。
exportSUBLCD_SIZE=96X64###ResolutionOfMainLCD
#Option1:
NONE#defineSUBLCD_SIZE_NONE
#Option2:
96X64#defineSUBLCD_SIZE_96X64
对上面的定义也就是转义一个宏-DSUBLCD_SIZE_96X64-DSUBLCD_SIZE
转义的宏临时文件存放在如下位置,每次编译的时候该文件会自动更新.
MS_Code\build\projectname_builddir\tmp\projectname_public_macro.txt
MS_Code\build\projectnam_builddir\tmp\projectname_public_macro_s.txt
特别注意:
1.FeatureOptions的书写请严格按照上述的示例书写,当对工程中FeatureOptions转义的时候,对符合下面模板的行都会转义。
exportNANDBOOT_SUPPORT=TRUE###
示例如下:
大工程project_rocky_3201.mk中有如下片段
代码中可以这样使用:
2.FeatureOptions只能出现在大工程中,在子make中定义和赋值都是无效的,并且会导致编译结果不正确;
3.FeatureOptions只接受直接赋值,不能包含在条件语句中;
4.FeatureOptions只能赋值一次。
3.编译的依赖关系
在统一方式编译下,系统会自动生成依赖关系文件,这些依赖关系文件存放在MS_Code\build\projectname_builddir\dep下。
注意:
1.makefile中的配置文件Makefile.rules没有作为依赖,所以其内容改变时,用update参数编译时将不自动编译相应文件.
2.对编译后生成的.a文件及其相应的依赖文件,这些文件默认都有固定的存放位置,没有特别需求,请不要改变,否则有可能造成编译依赖错误,导致出现一些问题.
4.Debug版本和Release版本
SPRDMOCOR平台Debug版本和Release版本的控制是通过在大makefile工程中对宏RELEASE_INFO赋不同值来实现的。
默认情况下这个RELEASE_INFO的值为FALSE,即Debug版本。
Debug版本:
RELEASE_INFO=FALSE
用这个配置编译出来的所有文件都是Debug版本的,包括bin文件,NV,等
Release版本:
◎RELEASE_INFO=TRUE
用这个配置编译出来的所有文件都是Release版本的,包括bin文件,NV,等.
5.编译命令最大长度8K限制
注意:
Windows环境最大只支持8K长度的命令,所以请控制宏的数量,搜索目录的数量,防止命令行超长而无法编译.
4目录结构及关键脚本
4.1make/build环境的关键目录结构
└─MS_Code
├─build编译结果的输出总目录
│├─rocky_3201_builddir和具体项目名称对应,自动生成的输出目录
││├─dep编译依赖文件存放目录
││├─img编译最终结果存放目录,包括armbin,fdl,bootloader,
│││resource,nv等
││├─lib客户编译模块.a存放目录
││├─log编译log文件目录,包括编译出错信息、告警信息等
││├─nv编译生成的nv_parameter文件目录
││├─fdl_bootloader编译生成的fdlbootloader文件目录
││├─res编译生成的resource文件目录
││├─pclint编译生成的pclint文件目录
││├─tmp编译生成的临时文件目录
││└─obj模块目标文件存放目录
││└─win自动生成模拟器工程存放目录
│└─rocky_6901_builddir
├─chip_drv
├─MS_Ref
├─PS
├─atc
├─mon
│├─nv_parameters统一NVproject存放目录
│└─source目标统一main.c存放目录
├─make依据编译选项文件,makefile将自动搜寻该目录并循环|对模块进行编译
│└─aac
│└─aac.mk对应模块的编译脚本
|…
|
├─MS_Customize
│├─config
│├─custom
│└─product区分不同产品驱动配置文件
├─version目标统一版本version.c
├─MS_MMI
├─Third-party从MS_APP下link过来保持目录结构
│└─bt_csr
│├─include
│└─lib
├─lib展讯开放库文件目录存放地和build目录分开
├─fdl_bootloaderfdlbootloader存放目录
make/build环境的关键目录如上图所示,所有相关代码和脚本都统一集中在MS_Code目录下,下面将对特殊的目录做些详细的说明:
1)build目录
✧bulild目录及其下的相关内容在程序编译过程中自动生成,对于特定的项目,build目录会生成projectname_builddir目录,并在该目录下自动生成dep、img、lib、log、nv、tmp及obj等目录。
2)make目录
make目录存放和模块对应的编译脚本,子目录和模块呈一一对应关系,各个子目录中存放着和目录名称对应的脚本文件。
一旦有了新添的模块源文件或删减,相关脚本需要进行修改。
同样,如果有了新增的模块,则需要在make目录下建立新的模块子目录。
相关过程在后面会有更详尽的描述。
3)MS_Customize目录
和项目相关的scatterfile文件存放在MS_Customize目录中,需要注意该文件名称需要和项目名称保持一致。
4)version目录
version目录中存放项目相关的version.c文件,目前需要注意该文件名称需要和项目名称保持一致。
4.2关键脚本
在MS_Code目录下存放有Makefile.rules、Makefile.modules、Makefile以及项目的相关make脚本,即项目编译脚本,比如project_rocky_3201.mk等等,同时在make目录的各个子目录下存放有各个模块的make脚本,即模块编译脚本,比如aac.mk、app.mk等等。
一般情况下开发人员仅维护项目编译脚本即可,Makefile.rules、Makefile.modules和Makefile不需要修改。
针对模块和项目的变化,开发人员需要修改模块编译脚本和增加新的项目编译脚本。
下面将针对Makefile.rules、Makefile.modules和Makefile进行简单的说明,关于模块编译脚本和项目编译脚本将在后面的章节中详细描述。
4.2.1Makefile.rules
Makefile.rules中定义了绝大部分平台无关、模块无关以及项目无关的公共变量,其中包括编译器的指定、公共编译参数的定义、文件复制、删除、目录创建等系统命令、公共头文件路径、SPRD库路径以及第三方库文件路径等变量的定义。
这些需要指出的是语句:
ARM_HOME=C:
/ProgramFiles/ARM/ADSv1_2
ARMCC="$(ARM_HOME)/Bin/armcc"
CC="$(ARM_HOME)/Bin/tcc"
CPP="$(ARM_HOME)/Bin/tcpp"
ASM="$(ARM_HOME)/Bin/armasm"
LINK="$(ARM_HOME)/Bin/armlink"
AR="$(ARM_HOME)/Bin/armar"
FROMELF="$(ARM_HOME)/Bin/fromelf"
ARMINC="$(ARM_HOME)/Include"
请根据您的机器上的软件安装情况修改这些设置。
另外,在Makefile.rules中定义了编译器公共编译选项CFLAGS,CFLAGS的定义如下:
CFLAGS=$(DEFINES)$(OPTFLAGS)$(WARNFLAGS)$(DEBUGFLAGS)
即CFLAGS是由:
DEFINES、OPTFLAGS、WARNFLAGS及DEBUGFLAG这四个变量组合而成,其定义分别如下:
DEFINES=
OPTFLAGS=-O1-bi-g+-apcs/interwork/swst-fy-D_RTOS-D_DEBUG-Ec
WARNFLAGS=-Wall
DEBUGFLAGS=
组合后的编译选项构成了各个模块编译器选项的公共部分,如果有特殊需要(比如过滤特定的告警信息),则可以修改相关选项。
如果有模块需要扩充编译选项,则可以在模块自己的模块编译选择项中进行添加,这样也不会影响到其它模块。
除此之外,该文件一般不需要维护。
4.2.2Makefile.modules
Makefile.modules定义了make/bulid系统中的目标依赖关系,一般开发中不需要维护该文件,这里需要指出的是:
目前有部分模块采用了armcc编译器(比如:
mpeg4_codec),对于这部分模块需要在Makefile.modules中申明,具体操作可以参考该文件中已经被申明的相关模块部分。
4.2.3Makefile.third-party
Makefile.third-party将第三方逻辑独立成一个文件,便于维护,这个文件会被include到各工程.mk中.
4.2.4Makefile.verify
Makefile.verify对makefile中的宏的父子关系进行校验,防止出错.
4.2.5Makefile
Makefile是最上层的总控脚本,该脚本直接处理用户的命令,并执行相关的处理,在没有特殊需要的情况下用户不需要维护该文件。
4.2.6make.bat
makefile的外壳文件,请不要直接运行,主要用来对make附加一些额外的参数.
5基本命令
make/build的所有操作命令都要在Windowsmand下执行,并且需要在关键脚本的当前路径,即MS_Code目录下完成输入。
示例如下:
→
5.1帮助
在MS_Code目录下输入makehelp可以获得相关的帮助信息,这些相关信息内容可以从下面对于小节中获取更详细的内容,这里不再重复。
5.2编译参数中projectname与项目编译脚本对应关系
在编译项目时,会使用类似makePROJECT=projectname命令,这里projectname必须和项目编译脚本的名称保持一定的对应关系,否则系统会报:
ProjectdefinedMakefileproject_projectname.mkisnotexist!
这样的错误。
如项目编译脚本文件名为project_rocky_3201.mk,则projectname的内容为rocky_3201,因此我们可以执行如下的命令来实现编译
makePROJECT=rocky_3201
5.3编译整个项目[update]
在MS_Code目录下输入makePROJECT=projectname或makePROJECT=projectnameupdate命令,makefile根据已有的依赖关系编译因修改涉及到的相关的模块并在没有错误出现的情况下完成最终的,若不存在依赖关系,makefile会在编译文件时自动生成依赖关系。
因为只编译较少的模块文件,可以节省编译时间。
这个命令也会将fdl,bootloader,NV同时编译出来。
5.4重新编译整个项目[new]
在MS_Code目录下输入makePROJECT=projectnamenew,该命令将清除编译过程中生成的全部目标码和库文件,然后对projectname所指定的项目进行整体编译并在没有错误出现的情况下完成最终的,编译过程中会自动生成依赖关系。
会这一命令适合在项目进行了较大修改:
比如公共头文件数据结构发生变化、公共接口参数发生变化、文件更新中时间戳混乱或makefile相关脚本被修改等等情况下建议使用这一命令,确保重新对项目进行完全编译得到正确的输出结果。
这个命令也会将fdl,bootloader,NV,Resource同时编译出来。
该命令相当于运行如下3个命令
makePROJECT=projectnamecleanall
makePROJECT=projectnameMODULES=resource
makePROJECT=projectnameupdate
5.5清除所有编译结果[cleanall]
在MS_Code目录下输入makePROJECT=projectnamecleanall,该命令将清除编译过程中生成的全部目标码和库文件。
5.6清除模块编译结果
在MS_Code目录下输入makePROJECT=projectnameMODULES=”module1module2…”clean,该命令将清除指定模块的编译输出结果,其中包含指定模块的目标文件和库文件。
该命令适合在指定模块内部出现重大修改或者模块本身makefile脚本被修改,在进行模块编译前使用。
5.7编译模块
在MS_Code目录下输入makePROJECT=projectnameMODULES=”module1module2…”update,该命令将对指定模块进行编译,但不会编译完成后进行自动。
该命令属于模块开发人员最常用的命令,在具体模块开发中需要经常使用该命令来验证模块的编译完整性。
5.8生成可执行文件
在MS_Code目录下输入makePROJECT=projectnameimage可以进行生成相关的可执行文件,该命令可以在模块修改并编译完成后进行,也适合第三方库文件更新后进行。
5.9编译FDL/bootloader
在MS_Code目录下输入makePROJECT=projectnameMODULES=bootloader对bootloader编译
在MS_Code目录下输入makePROJECT=projectnameMODULES=fdl1对fdl1进行编译。
在MS_Code目录下输入makePROJECT=projectnameMODULES=fdl2对fdl2进行编译。
在MS_Code目录下输入makePROJECT=projectnameMODULES=nor_fdl对nor_fdl进行编译。
输出结果位置:
build/projectname_builddir/fdl_bootloader.同时会自动将最终的bin文件copy到build/projectname_builddir/img下,方便下载到手机中。
当然,您也可以根据工程具体情况用一条命令编译出所有目标,示例如下:
makePROJECT="rocky_6901"MODULES="fdl1fdl2bootloader"
makePROJECT="rocky_3201"MODULES="nor_fdl"
5.10编译NV
在MS_Code目录下输入makePROJECT=projectnameMODU
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 开发 环境 配置