智能终端定制开发 ad
MTK/瑞芯微/高通-Android,智能模块/智能终端方案商

深度定制各类智能终端和智能硬件产品,提供硬件选型咨询、参考设计、元器件推荐、驱动开发、行业模块集成、操作系统定制与算法集成等软硬件定制服务。
contact.aspx

Android核心板产品覆盖2G、3G、4G通讯,双核、四核、八核CPU,可选的平台有MTK6580、MTK6737、MTK6750等,Android版本有5.1 6.0 7.0等。
contact.aspx

可广泛应用于低端智能POS、安防监控、车载设备、低端智能机器人、智能家居、智能硬件、工业智能手持设备、低端智能对讲设备、低端警务或执法设备、智能穿戴、贩卖机、物流柜、智能门禁系统等行业和设备。
contact.aspx

可提供以太网转串口透传,WIFI转串口透传,蓝牙转串口透传,CAN总线模拟量控制输出模块等。
contact.aspx

带3G或4G通讯功能,运行android系统,有多个串口,可以外挂各种模块:条码扫描、RFID、指纹识别、身份证识别、磁条卡、ID卡、GPS/北斗模块等。
contact.aspx

具有4G通讯功能,多个RS232或RS485接口,以太网接口,USB接口,CAN接口,多个AD输入。基于Android系统智能平台,方便APP应用开发。器件严格选型,运行稳定,质量可靠。
contact.aspx

MTK手机软件系统工程和配置简介 (二)
[MTK开发] 2008-04-09

. MTK手机软件系统的构建过程

    如前面一节所述,MTK手机软件系统的构建使用了GNUmake,使得整个工程的构建可以自动进行,且可以灵活控制。整个构建过程由Make.batmake2.plMoDIS.dswGsm2.makOption.mak<customer>_<project>.mak等文件控制。构建PC模拟版是通过msdevVC的工程文件MoDIS.dsw来完成的。Gsm2.mak是构建ARM版的核心Makefile文件,整个构建过程由其控制,其他是一些启动、选项配置、子过程的文件。其关系图如下所示。


    在MTK手机软件系统的根目录下有一个批处理文件Make.bat,这个批处理文件启动了整个工程的构建过程。在windows的命令行下,在该系统的根目录下输入命令make和相应的参数即可开始工程的构建,该批处理文件的使用方法如下所示。

Usage:
  make [
"customer"|"mt62xx""project" "action" ["modules"
]

Description:
  customer   
=
 mtk             (Default customer)
             
=
 firefly17_demo  (FIREFLY17_DEMO project)
             
= [mt6217|mt6219|mt6226|mt6227|mt6228|
mt6229] (EVB only)
             
=
 ...

  project    
= l1s             (Layer 1 stand-
alone)
             
=
 gsm             (GSM only)
             
=
 gprs            (GPRS only)
             
=
 basic           (Basic Framework)

  action     
= new             (codegen, resgen, clean, update) (default
)
             
=
 update or u     (scan, compile, link)
             
=
 remake or r     (compile, link)
             
=
 clean or c      (clean)
             
=
 resgen          (resgen)
             
=
 c,u             (clean then update)
             
=
 c,r             (clean then remake)
             
=
 codegen         (codegen)
             
=
 viewlog         (open edit to view build log)
             
=
 emigen          (emigen)
             
=
 emiclean        (emiclean)

  module(s)  
= modules name   (kal, l1, ...)

   => OPTIONAL when action is one of (clean c remake r update u c,r c,u)

Example:
  make gsm 
new                         (MT6205B EVB new
)
  make gprs codegen                    (MT6218B EVB codegen)
  make mt6219 gprs update              (MT6219 EVB update)
  make firefly17_demo gprs 
new

  make milan_demo gprs c,u init custom
  make mt6219 gprs r init custom drv

    其中较常用的actionnewupdateremakenew_modis这几个。

    new是全新开始构建整个工程的ARM版,包括图片、声音、字符串等资源都要重做,依赖的其他动作最多,是最彻底也是耗时最长的一个动作,一般得到一个新的MTK发布版本后要做一次。

    update是重新更新整个工程的ARM版,该动作会扫描工程中文件和库的依赖关系,若依赖关系有变化会建立新的依赖关系,随后根据新的依赖关系重新编译链接有改动的部分,一般在增加或删除一些驱动或应用的情况下需要用update

    remake是重新编译整个工程的ARM版,该动作只是简单的重新编译链接有改动的部分,不检查依赖关系,是耗时最短的一个动作,也是最常用的动作。

    new_modis是全新构建整个工程的PC模拟版,其调用VC的编译器和链接器得到一个可以在windows上运行的PC模拟版。MMI应用软件工程师可以在没有硬件板的情况下在PC上检查和调试自己写好的应用。

    Make.bat实际上只起引导作用,其只有一行批处理语句perl make2.pl %*,于是运行该批处理文件后控制权转给了perl脚本make2.pl。在这个perl脚本中解析了用户输入的命令行参数,设置变量,准备make时需要的临时配置文件,随后根据生成的可运行映像是PC模拟版还是ARM版而分别调用不同的构建过程。

    Pc模拟版的构建通过调用如下命令实现。

        system("$msdev MoDIS.dsw /MAKE \"$argu - Win32 $modisDir\"

                    /OUT ${MoDISLogDir}\\${argu}.log")

    在这里$msdev就是VCmsdev,通过VC的工程文件MoDIS.dsw和后面的参数进行具体的构建过程。熟悉VC工程的朋友应该比较清楚,因此就不再具体解释了。之后将只以ARM版为主来讲解整个工程的构建过程。

     ARM版的构建通过调用如下命令实现。

        system("${makeCmd} -f${makeFolder}${myMF} -r -R

                    CUSTOMER=$custom PROJECT=$project $action")

    在这里${makeCmd}tools\make.exe,即GNUmake${makeFolder}${myMF}make\Gsm2.mak$actionnewupdateremake等。变量CUSTOMERPROJECT分别是客户名和项目名,在构建过程中将根据此两个变量的值选定项目相关的配置文件,从而实现客户化的定制。通过给make指定ARM版的核心Makefile文件Gsm2.mak,开始了ARM版的构建过程。

    Gsm2.mak文件中包含了Option.mak这个配置用的Makefile文件,另外还包含了一些以.tmp和.bld为后缀的由perl脚本make2.pl生成的临时配置文件。这些临时配置文件主要是一些action如clean、remake等所需的变量设置,及客户化和版本号等的一些信息。Gsm2.mak控制了new、update、remake等动作的过程。具体分别如下所示。

new : cleanall cmmgen mmi_feature_check asngen codegen asnregen \
           operator_check_lite update

update 
: cleanlog cleanbin mcddll_update codegen resgen cksysdrv remake

remake 
:
 cleanlog cleanbin genverno libs $(BIN_FILE) done

    上面的构建过程的几个步骤中,最重要的两个步骤是libs、$(BIN_FILE) 。libs调用ARM版的编译器和连接器将各个模块目录下的C文件编译链接为独立的库。$(BIN_FILE)这个步骤将各个模块编译链接得到的库和mtk_lib目录下的库一起链接起来得到一个映像文件,然后使用ADS的工具fromelf将映像文件生成以变量BIN_FILE命名的二进制文件,该文件可以下载到硬件板上运行。
    libs这个步骤如下所示。
libs: cleanlib startbuildlibs $(COMPLIBLIST)

    libs中真正进行编译链接的步骤是$(COMPLIBLIST),要生成的库由变量COMPLIBLIST列出,在ARM版中,变量COMPLIBLIST从变量COMPLIST得到。变量COMPLIST是在Option.mak及其包含的Makefile文件中赋值的。因有很多库需要编译链接,变量COMPLIBLIST展开后包含多个步骤,而这些步骤都是重复不变的,因此在定义步骤$(COMPLIBLIST)的构建过程时使用%.lib代替。%.lib这个步骤先清除了之前的一些依赖关系文件,将一些变量的设置写入~compbld.tmp这个临时文件中,然后给make指定Makefile文件comp.mak,完成库的编译和链接,如下所示。

%.lib:
    …
    @if /I %OS% EQU WINDOWS_NT \
        (if /I $(BM_NEW) EQU TRUE \
            (tools\make.exe -fmake\comp.mak -k -r -R $(strip $(CMD_ARGU)) COMPONENT=$* > $(strip $(COMPLOGDIR))\$*.log 2>&1)
\
        else \
            (tools\make.exe -fmake\comp.mak -r -R $(strip $(CMD_ARGU)) COMPONENT=$* > $(strip $(COMPLOGDIR))\$*.log 2>&1) \
        ) \
    else \
        (if /I $(BM_NEW) EQU TRUE \
            (tools\make.exe -fmake\comp.mak -k -r -R $(strip $(CMD_ARGU)) COMPONENT=$* > $(strip $(COMPLOGDIR))\$*.log) \
        else \
            (tools\make.exe -fmake\comp.mak -r -R $(strip $(CMD_ARGU)) COMPONENT=$* > $(strip $(COMPLOGDIR))\$*.log) \
        )


     上面的命令语句中,参数-k是指有错误也要继续编译,-r和-R是指没有GNU make的默认规则和变量。COMPONENT=$*把当前要生成的库赋给变量COMPONENT。要注意%.lib匹配了所有要生成的库,但这个步骤一次只生成一个模块的库,这个步骤对所有匹配到的库都会执行一次。
    comp.mak这个Makefile文件控制了模块的编译链接过程。在这个文件中,首先将当前模块要生成的库(由变量COMPONENT传入)设置给了变量TARGLIB。之后从<module_name>.lis文件中得到SRC_LIST和CPPSRC_LIST两个源文件列表,设定要编译的C文件、C++文件、汇编文件等的列表,和要链接的中间目标文件的列表。将<module_name>.inc、<module_name>.def、<module_name>.pth文件中的头文件路径、C文件路径、编译链接参数等赋值给相应的变量。将平台相关(如6223、6225)的编译参数加上,确定使用ARM编译器还是thumb编译器,是否支持ARM指令和thumb指令的interwork模式。最后进入库的编译链接过程。
    库的编译链接由update_lib步骤完成,这个步骤直接依赖了$(TARGLIB)。目标$(TARGLIB)是由所有按照.c.obj、.s.obj、%.obj: %.cpp等规则编译得到的中间目标文件链接得到的。其主要过程如下所示。
$(TARGLIB):
    ...
    @if exist $(FIXPATH)\$(CUS_MTK_LIB)\$(COMPONENT).lib                                         \
        (copy /z $(FIXPATH)\$(CUS_MTK_LIB)\$(COMPONENT).lib $(subst /,\,$(TARGLIB))) & \
        ($(LIB) -r $(TARGLIB) $(COMPOBJS_DIR)/*.obj)                                     \
    else                                                                                                 \
        ($(LIB) -create $(TARGLIB) $(COMPOBJS_DIR)/*.obj)
...

    Option.mak是整个工程构建过程中的总控配置文件,在这个文件中还包含了<customer>_<project>.mak和REL_CR_MMI_<project>.mak这两个项目相关的配置文件,用户自定义的配置文件USER_SPECIFIC.mak,另外还包含了一些临时生成的配置文件。这些配置文件在一起设置了工程构建过程中用到的编译器、链接器,库和二进制的工具,设置了编译链接时的参数,公共的头文件路径,设置了需要包含mtk_lib目录中的哪些既有的库,设置了需要生成的库等一系列相关的设置。这些设置都由一些重要的变量保存,具体在下一节中讲解。
[MTK开发添加评论 | 评论/阅读(0/474)
评论
昵称
主页
内容
递交


Copyright @ 我的开发笔记     2008 - 2017         粤ICP备19155526号-1