1 / 17

Makefile Introduction

Makefile Introduction. Cuke.wang SWI HQ 01/10/07. 第一部分:总的介绍 第二部分:详细的过程分析. 过程. MTK 平台具体的代码表示. 1) Make 命令 Make *** gprs(gsm) new

komala
Download Presentation

Makefile Introduction

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Makefile Introduction Cuke.wang SWI HQ 01/10/07

  2. 第一部分:总的介绍 第二部分:详细的过程分析

  3. 过程

  4. MTK平台具体的代码表示 • 1) Make 命令 Make *** gprs(gsm) new • 2) 编译 Comp.mak armcc -apcs /interwork -c -cpu ARM7EJ-S -littleend -O2 -zo -fa -DMAX_PHB_PHONE_ENTRY=300-Ij2me/jal/include -o ./build/D169E/gsm/MT6217o/custom/custom_emi.obj custom/system/D168_BB/custom_emi.c • 3) 链接 Gsm2.mak armlink -map -info sizes,totals -symbols -xref -remove -scatter custom\system\D168_BB\scatD169E.txt -output .\build\D169E\D169E_PCB01_gsm_MT6217_BN.elf -symdefs .\build\D169E\D169E_PCB01_gsm_MT6217_BN.sym -list .\build\D169E\D169E_PCB01_gsm_MT6217_BN.lis -libpath c:\progra~1\arm\adsv1_2\lib .\build\D169E\gsm\MT6217o\lib\init.lib(bootarm.obj) …

  5. Makefile文件 • make命令执行时,需要一个 Makefile 文件,以告诉make命令需要怎么样的去编译和链接程序 • 一、Makefile的规则 target ... : prerequisites ... command

  6. make是如何工作的 • 在默认的方式下,也就是我们只输入make命令。那么, • 1、make会在当前目录下找名字叫“Makefile”或“makefile”的文件。 • 2、如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“edit”这个文件,并把这个文件作为最终的目标文件。 • 3、如果edit文件不存在,或是edit所依赖的后面的 .o 文件的文件修改时间要比edit这个文件新,那么,他就会执行后面所定义的命令来生成edit这个文件。 • 4、如果edit所依赖的.o文件也存在,那么make会在当前文件中找目标为.o文件的依赖性,如果找到则再根据那一个规则生成.o文件。(这有点像一个堆栈的过程) • 5、当然,你的C文件和H文件是存在的啦,于是make会生成 .o 文件,然后再用 .o 文件生命make的终极任务,也就是执行文件edit了。

  7. 第二部分:1、命令的解释 • 使用Perl语言 • if (($action eq "remake") || ($action eq "update") || ($action eq "new")|| ($action eq "bm_new")) { if ($action eq "bm_new") { system("echo BM_NEW=TRUE >> ${makeFolder}~buildinfo.tmp"); $result = system("${makeCmd} -f${makeFolder}${myMF} -k -r -R CUSTOMER=$custom PROJECT=$project new"); } tools\make.exe -fmake\gsm2.mak -r -R CUSTOMER=mtk PROJECT=gprs new

  8. MTK Platform

  9. 2、编 译 • 1) 格式:Compiler [ search paths] [output-format] [target-option] [source] 在MTK:$(CMPLR) $(VIA) tmp0.txt tmp0.txt 的生成: remake n tmp0.txt $(CINTWORK) $(CFLAGS) $(CDEFS) $(CINCDIRS) $(MD) -o $(COMPOBJS_DIR)/$@ $<自动生成 • 2

  10. 3、链接 1)格式:armlink [-output] [-elf] MTK: $(BIN_FILE): ($(LINK) $(VIA) make\~libs.tmp > $(LOG) ) 2)重要的选项: Scatter: 定义映像文件的地址映射 目前在项目中常使用NOR FLASH 128Mb+pSRAM 32Mb 定义了加载时域和运行时域 在H330:四个加载时域,所以烧写代码分为四个 在D169E:一个加载时域。

  11. Scatter文件分析 • ROM 0x08000000 { } 在程序中,Flash的片选脚是ECS0,而SRAM的片选脚是ECS1 • LANG_PACK_ROM 0x8AF0000 { } (+RW) ?? • CUSTPACK_ROM 0x8B90000 { } • JUMP_TABLE 0x08DFFE00 0x200 { } 对应于四个加载时域的文件

  12. ROM • ROM2 +0x0 0x400000 { .ANY (+RO-CODE) } //C语言的lib memcopy • ROM3 +0x0 • { .ANY (+RO-DATA) } • EXTSRAM_LARGEPOOL_NORMAL 0x00000140 { j2me_custom_resource.obj (JAVA_ALIGN_ZI, LARGEPOOL_ZI) • med_main.obj (LARGEPOOL_ZI) • ScrMemMgr.obj (LARGEPOOL_ZI) } • EXTSRAM +0x00 • { • * (+RW, +ZI) }

  13. .lis分析 • 对应于Scatter文件的运行时域的文件 • 存贮位置:外部ROM 1) Const system_jump_table 0x08dffe00 Data 416 custom_jump_tbl.obj(.constdata) 2) Arm Thum 指令 • 外部RAM 1)全局变量 (+RW) flash_id 0x000d04fc Data 2 custom_emi.obj(.bss) 2)静态变量 (+ZI) System_Mem_Pool 0x00129404 Data 286720 custom_config.obj(.bss) • 内部RAM • 内部ROM

  14. vpath • vpath %.s $(subst \,/,$(SRCPATH)) • vpath %.c $(subst \,/,$(SRCPATH)) • vpath %.cpp $(subst \,/,$(SRCPATH)) • vpath %.h $(subst \,/,$(INCDIRS)) • vpath %.dat $(subst \,/,$(INCDIRS)) • vpath %.obj $(COMPOBJS_DIR)

  15. Make2.pl • if (($action eq "remake") || ($action eq "update") || • ($action eq "new")|| ($action eq "bm_new")) { • if ($action eq "bm_new") { • system("echo BM_NEW=TRUE >> ${makeFolder}~buildinfo.tmp"); • $result = system("${makeCmd} -f${makeFolder}${myMF} -k -r -R CUSTOMER=$custom PROJECT=$project new"); • } • tools\make.exe -fmake\gsm2.mak -r -R CUSTOMER=mtk PROJECT=gprs new

  16. { • if ($#arguments != -1) { • system("echo DO_CLEAN_MODULE=TRUE > ${makeFolder}~cleanmod.tmp"); • system("echo CLEAN_MODS=@arguments >> ${makeFolder}~cleanmod.tmp"); • system("${makeCmd} -f${makeFolder}${myMF} -r -R CUSTOMER=$custom PROJECT=$project cleanmod"); • } else { • system("echo DO_CLEAN_MODULE=FALSE > ${makeFolder}~cleanmod.tmp"); • system("${makeCmd} -f${makeFolder}${myMF} -r -R CUSTOMER=$custom PROJECT=$project cleanall"); • } • }

  17. XXX_PCBXX_gprs_MT62XXX_S01.lis • 该文件由ARMlink根据Scatter文件生成 构成: Global Symbols NeedExitFunc 0x000ce1b0 Data 1 FactoryModeSrc.obj(.data)

More Related