




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、直觀易讀,目標(biāo)依賴關(guān)系很直觀,深度最多兩級(jí),沒有多重依賴轉(zhuǎn)來(lái)轉(zhuǎn)去讓人摸不著頭腦2、自動(dòng)化程度高,任何下增加刪除改名文件或子,只需修改該下的makefile文件即可,不但總控makefile在內(nèi)的所有其他makefile都不用修改,就連連接.ld文件也自3、應(yīng)用程序增減源程序文件和時(shí),當(dāng)前下的makefile需修改的部分也很少??赡芤牡闹挥?行,實(shí)際上可能只有1行需要改。makemakefile文件就是定義了一系列制作目標(biāo)的規(guī)則。make的目的,就makefile中描寫的規(guī)則的指引下,生成最終所需要的目標(biāo),什么是最終目標(biāo)呢?最終目標(biāo)是執(zhí)行make命令時(shí)從命令行輸入的:makerm- *.ldrm命令成功執(zhí)行,clean目標(biāo)就算完成了。make$(sub_make)-fmake_ld$(sub_make)-fmake_ld 1makeboot_romboot_rom.bin文件,這個(gè)文件只包含啟動(dòng)代碼,然后就進(jìn)入死循環(huán)。當(dāng)需要用硬件仿真器調(diào)試操作系統(tǒng)時(shí),就應(yīng)該先編譯boot_rom.bin并燒錄到0地址的norflash中。2makedebug息,由調(diào)試軟件比如realview2.2或gdb直接加載到內(nèi)存中調(diào)試。3makerun_inram0norflashrun_inram.bin,由于經(jīng)過有獨(dú)立的bootloader,可近似理解為si版本內(nèi)含bootloader的部分功能。4makerun_inflashrun_inflash.binrun_inram命令相似,唯一不同的是,本生成的可執(zhí)行文件不把代碼copyram中,而是直接在flash中運(yùn)行,適合于在ram很少的單片機(jī)中使用。5makeclean不會(huì)重編譯。比如兩次編譯間,a.ca.ca.oa.o就不會(huì)被重新編譯,但有時(shí)候,我們不希望這種“查新”機(jī)制起作用,就要用makeclean命令把目標(biāo)文件刪掉,強(qiáng)制重新編譯。原理上講,如果依賴關(guān)系做得好,頭文件也成為.o文件的依賴文件的話,頭文件修改后,編譯c源文件的依賴關(guān)系很復(fù)雜,并且在編程過程中會(huì)有調(diào)整,要完全描述這種依賴關(guān)系變得很,且makefile會(huì)很行makeclean命令刪掉所有.o文件,強(qiáng)迫重新生成所有.o文件。makedebug編譯調(diào)試版本makerun_inramdebug時(shí),已經(jīng)產(chǎn)生了.o文件,而.c文件又發(fā)布源代碼時(shí),實(shí)際上只希望發(fā)布源代碼文件和.binmakeclean刪掉其他編譯產(chǎn)修改總控makefile在工程下,比如工程是myprjmyprjmakefile文件就是總控makefile文件了。thumbmakefilemakefile中這些內(nèi)容都用變量表示,makefile總共只有幾十行,絕大部分在移植時(shí)是無(wú)需修改的,即使上述幾個(gè)方面同時(shí)需要調(diào)整,需要修改的也不超過10行。一般情況下只需要修改:CPUarm7tdmi需修改*.mld文件中器描述的這幾行 \trom :org= len=\tram :org= len= 工程中添加子或者源程序文件時(shí),就需要添加子makefile,當(dāng)改名、刪除子或者源程subdir=rom_init=preload=sysload=critical=雙引號(hào),行末也沒有分號(hào)或其他符號(hào),比如在driver下有兩個(gè)包含源程序文件的子:uart、和flash_chip,則driver下的makefile中subdir的值就這樣描述:subdir=uart subdir=uartflash_chipttymakefile,只要從其他copy一個(gè)過來(lái),再修改前述幾個(gè)變量的值makefileboot_rom、rom_init、preload、sysload、critical中的一個(gè)或幾個(gè)變量。makefile在工程下,比如工程是myprjmyprjmakefile文件就makefilemakefilemakefilemake_ld文件,為什么要分成兩個(gè)呢?是為了實(shí)現(xiàn)自動(dòng)化生成連接文件,待介紹make_ld文件的時(shí)候再仔細(xì)說(shuō)明。下面開始介紹makefile的各部分代碼,斜體部分是從makefile文件中copy的代碼。Cmakefile的變量。其實(shí)這兩者的差別非常之大,C語(yǔ)言的變量是一個(gè)地址makefile的變量就是字由空格分開的連續(xù)的字符構(gòu)成一個(gè)單詞。makefile有許多方法處理變量,實(shí)際上處理的是字符串。makefile中,這些字符串不需要引號(hào)。exporttopdir=$(s 路徑名字符串。exporttopdir=$(spwd)的含義是,利用操作系統(tǒng)的s命令取當(dāng) ,由于總控makefile在工程根 的路徑名,賦值給topdir。export的含義是使topdir在子makefile中可見,注意,在子makefile中,topdir的值仍然是工程根目3sub_makeexportsub_make=@make--no-print-@的含義是不在屏幕上輸出本行命令,--no-print-directory是不輸出進(jìn)入和離開某子 這兩者的使用使得屏幕輸出比較簡(jiǎn)潔,當(dāng)調(diào)試makefile時(shí),可打開這兩類輸出,幫助定位錯(cuò)誤。5、其他變量 AS:匯編器名,gcc中匯編器和c編譯器都使用arm-elf-gcc。 CFLAGS,ASFLAGS,LDFLAGS:編譯和連接時(shí)令行選項(xiàng)。1rm_obj_list刪除編譯子中產(chǎn)生的ld_obj_list文件,這是一個(gè)臨時(shí)文件,如果上一次的編譯過程成功完 中間目顧名思義,這個(gè)目標(biāo)是進(jìn)入子,執(zhí)行子下的編譯任務(wù),在子的makefile中,又以同樣令執(zhí)行子子的編譯任務(wù),就這樣一級(jí)級(jí)嵌套,直到所有子下的變異任務(wù)全部完成。$(sub_make)-C$@命令中-C表示進(jìn)入$@代表的 $(sub_make)-C$@3、最終目標(biāo)debug\run_inram\run_inflashboot_rom:rm_obj_list$(sub_make)-fmake_ld可以看到,最終目標(biāo)依賴rm_obj_list目標(biāo)和#(subdir)目標(biāo),這會(huì)生成這兩個(gè)目標(biāo)。最后一句自動(dòng)生成連接ld文編譯產(chǎn)生的是可重定位的目標(biāo)文件,目標(biāo)文件中不包含地址信息,需要經(jīng)過連接后才能生成真正可執(zhí)行的文件。連接文件就是告訴器如何連接目標(biāo)文件的文件,不同的編譯系統(tǒng)對(duì)1、器描述,描寫系統(tǒng)中的器配置,比如44b0版本的ld文件的器描述如下:{rom(rx) :org=0, len=2Mram :org= len=}norflash;第二塊是可讀寫和執(zhí)行的,起始地址為0xc000000,長(zhǎng)度8M,對(duì)應(yīng)sdram。3、輸出可供連接器識(shí)別的符號(hào),比如djyos的器管理模塊就需要cfg_heap_top既然ld文件要指揮器把代碼和數(shù)據(jù)放到器中合適的位置,而ld文件又是自動(dòng)生成的,makefile中,用這幾個(gè)變量:boot_rom、rom_init、preload、sysload、critical表示具體文件成方法和變量含義參見子makefile的說(shuō)明。rom_init_obj+=preload_obj+=際上是makefile文件的一部分,由make_ld文件用:ifneq($(target),)包含進(jìn)來(lái)的,5debug、run_inram、run_inflash、boot_rom5個(gè)*.mld文件,該文件對(duì)應(yīng)5個(gè)用于描述5個(gè)最終目標(biāo)的連接文件。*.mld文件非常簡(jiǎn)單,就是用1條s內(nèi)置函數(shù)printf生成*.ld文件,并把輸出轉(zhuǎn)向保存到*.ld文件中。$(sub_make)-fmake_ld$(sub_make)-fmake_ldincludeld_obj_listifneq($(target),)includeld_obj_listifneq($(target),)debugrm-fld_obj_listrm-fld_obj_list$(CC)$(LDFLAGS)$(rom_init_obj)$(preload_obj)$(critical_obj)$(sysload_obj)-orm-fld_obj_list$(CC)$(LDFLAGS)$(rom_init_obj)$(preload_obj)$(critical_obj)$(sysload_obj)-orm-fld_obj_listmakefilemake_ld120make_ld$(sub_make)-fmake_ld$(CC)本文件,除了一個(gè)目標(biāo)后連續(xù)出現(xiàn)令是按順序執(zhí)行的外,其他的一切,比如變量,include等,a= c=c= a=$(sub_make)-C$@$(sub_make)-fmake_ld makefile10行開始是雷同的,本想在工程根下用mksubinc文件描述雷同部分,然后在子makefile中用:includemakefile:11:/cygdrive/g/siyf/mksubinc:Nosuchfileor currentdir=$(spwd)subdir=appdjyosrom_init=preload=sysload=critical=本變量包含 下所有包含或可能包含源文件 串,在工程 下,有app和 ,而 下的initcpu.s和int.s有boot_rom屬性些代碼由rom_init中的預(yù)加載器copyram中,然后把控制權(quán)交給預(yù)加載器。操作系統(tǒng)內(nèi)核代碼和應(yīng)用程序代碼(除安全鉤子部分ifneqboot_rom_asm=$(filter%.s,$(boot_rom))boot_rom_asmobj=$(patsubst boot_rom_c=$(filter%.c,$(boot_rom))boot_rom_cobj boot_rom_obj=$(patsubst 推導(dǎo)出boot_rom_asmobj、boot_rom_cobj、boot_rom_obj三個(gè)中間目標(biāo)變量,boot_rom_asmobjrom_init、preload、sysload、critical這5個(gè)變量。boot_rom_obj+=$(boot_rom_obj)\n\critical_obj+=
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 項(xiàng)目部駐地裝修工程合同范本
- 卡車承運(yùn)合同范本
- 農(nóng)業(yè)路燈采購(gòu)合同范本
- 分包土方合同范本
- 化工車間采購(gòu)合同范本
- 動(dòng)漫聯(lián)名服務(wù)合同范本
- 公對(duì)公借貸合同范本
- 冰棍合同范本
- 賣酒銷售合同范例
- 分期付款購(gòu)車合同范本
- 中藥貼敷療法
- 2024年江蘇農(nóng)牧科技職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)各版本
- DZ∕T 0054-2014 定向鉆探技術(shù)規(guī)程(正式版)
- 頭療加盟方案
- 間質(zhì)性腎炎課件
- 院感基礎(chǔ)知識(shí)培訓(xùn)
- 《建筑工程質(zhì)量與安全管理》教案
- 19J102-1 19G613混凝土小型空心砌塊墻體建筑與結(jié)構(gòu)構(gòu)造
- 建筑垃圾清運(yùn)及處置 投標(biāo)方案(技術(shù)方案)
- 2024年常州信息職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)及答案解析
- 《中國(guó)陶瓷史》課件-1-中國(guó)陶瓷史概述
評(píng)論
0/150
提交評(píng)論