高通平台编译方法.doc
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Qualcomm平台编译之我见
jinjing.zhao@ 一、平台简介
高通平台的应用层的开发是在brew上进行的,brew提供了很多接口供应用层调用相关的api。高通平台的思想是用c语言实现面向对象的功能,具体通过结构体以及虚表来实现。在oem层中实现具体的api函数,用来填虚表。通过oem层以及service代码的修改,来实现上层应用具体需要的功能。
为了开发界面的方便,高通又在brew的基础上推出了buit,包括widget(控件),form (窗体),decorator(修饰),container(容器)以及model(模型)。
bar文件:资源文件,用高通自带的工具生成,程序运行的时候从此文件中读取字符串以及图片。可以将此文件放到文件系统中,也可以将此文件编译成.c文件,然后再编译成.o 文件,放到代码段里面去。
Mif文件:module imformation file,存放模块的相关信息。可以将此文件放到文件系统中,也可以将此文件编译成.c文件,然后再编译成.o文件,放到代码段里面去。
二、编译解析
平台的编译命令放在了\build\ms目录下。
可以有两种编译方法:一种是使用cmd命令,还有是在cygwin下使用bash脚本。但道理都是一样的,就是执行一个makefile文件dmss6250.mak。
顺序如下:
1)运行cmd,cd到\build\ms目录下,键入ads12;
ads12是个批处理命令,功能是为ads1.2,perl,以及gnu设置编译环境变量。
2)执行****.cmd命令。
1、dmss6250.mak
整个编译过程就是在执行这个makefile。
在这个makefile的开头处,我们可以看到
include dmss_flags.min
include dmss_$(ASIC)_flags.min
include incpaths.min
include armtools.min
include dmss_objects.min
包含的这些文件初始化了一些编译选项,编译路径,编译工具,以及包含要编译模块的min文件。
在添加模块的时候需要修改:
incpaths.min:
添加<模块的路径变量>= $(SRCROOT)/apps/
在ALL_PATHS中添加<模块的路径变量>。
ALL_PATHS是编译时的查找路径,这是高通的默认做法,在编译的时候,每编译一个文件都会到ALL_PATHS的所有目录下去寻找,因此严重降低了编译的速度。为了提高编译速度,可以考虑书写一个脚本,在编译的时候将所有的头文件考到一个文件夹下面,指定arm编译的时候到这个文件夹下面搜寻头文件。
dmss_objects.min:
添加include <模块的路径变量>/<模块的min文件>
每个模块都至少有一个min文件,如alarm:
#-------------------------------------------------------------------------------
# Alarm
#-------------------------------------------------------------------------------
ALARM_SOURCES=alarm.c \
Alarm_EditForm.c \
Alarm_EditPeriodForm.c \
Alarm_EditWeeklyForm.c \
Alarm_ListForm.c \
Alarm_ViewForm.c \
Alarm_SetTimeForm.c\
Alarm_StatusForm.c
ALARM_OBJS := $(addprefix $(TARGETDIR)/, $(ALARM_SOURCES:%.c=%.o))
$(ALARM_OBJS): APPFLAGS = -DBREW_STA TIC_APP -DAEE_STATIC
ALARM_DEPS := $(addprefix $(TARGETDIR)/, $(ALARM_SOURCES:%.c=%.dep)) $(ALARM_OBJS): APPFLAGS = -DBREW_STA TIC_APP -DAEE_STATIC
vpath %.c $(ALARM)
dmss6250.mak:
如Alarm在OBJECTS2中添加ALARM_OBJS。
在dmss6250.mak 文件的最后一行我们可以看到include dmss_rules.min,在这个文件中出现了makefile的目标,依赖和命令。
2、dmss_rules.min
目标:
all : dmss(在dmss6250.mak中)
dmss : setup prereqs firmware vrfiles deps libs copybar exe hex
由此可知,此makefile依次执行setup prereqs firmware vrfiles deps libs copybar exe hex,这些东西在编译过程中都可以看到。
主要说明以下几点:
deps:
此目标用于生成所有的依赖规则,最终都放在****.dep中,然后通过-include $(TARGETDIR)/$(TARGETDIR).dep使用依赖规则。
exe : $(TARGET).$(EXETYPE) $(LINK_TYPE)
此目标实现了编译和连接,直到生成elf文件。
Hex:
此目标将elf转化成可供QPST(高通提供的下载工具)下载的hex文件。
3、image文件的生成