




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
本文件適用djyosV0.4.1及以后版本。2、自動化程度高,任何下增加刪除改名文件或子,只需修改該下的makefile文件即可,不但總控makefile在內(nèi)的所有其他makefile都不用修改,就連連接.ld文件也自3、應(yīng)用程序增減源程序文件和時,當(dāng)前下的makefile需修改的部分也很少??赡芤牡闹挥?行,實(shí)際上可能只有1行需要改。makefile的功makemakefile文件就是定義了一系列制作目標(biāo)的規(guī)則。make的目的,就makefile中描寫的規(guī)則的指引下,生成最終所需要的目標(biāo),什么是最終目標(biāo)呢?最終目標(biāo)是執(zhí)行make命令時從命令行輸入的:makerm- *.ldrm命令成功執(zhí)行,clean目標(biāo)就算完成了。make$(sub_make)-fmake_ld$(sub_make)-fmake_ld編譯生成的文件說明 編譯命令和目標(biāo)說明boot_rom.bin文件,這個文件只包含啟動代碼,然后就進(jìn)入死循環(huán)。當(dāng)需要用硬件仿真器調(diào)試操作系統(tǒng)時,就應(yīng)該先編譯boot_rom.bin并燒錄到0地址的norflash中。2makedebug編譯產(chǎn)生產(chǎn)生用于調(diào)試的debug.elf文件,編譯器的優(yōu)化級別是0,且含gdwarf-2格式的調(diào)試信息,由調(diào)試軟件比如realview2.2或gdb直接加載到內(nèi)存中調(diào)試。3makerun_inram0norflashrun_inram.bin,由于經(jīng)過會自動把代碼copy到ram中,自動執(zhí)行內(nèi)存操作,然后跳轉(zhuǎn)到ram中執(zhí)行,si版本的djyos沒有獨(dú)立的bootloader,可近似理解為si版本內(nèi)含bootloader的部分功能。本命令產(chǎn)生run_inflash.bin文件,與run_inram命令相似,唯一不同的是,本生成的可執(zhí)行文件不把代碼copyram中,而是直接在flash中運(yùn)行,適合于在ram很少的單片機(jī)中使用。5makeclean何時應(yīng)該使用make不會重編譯。比如兩次編譯間,a.ca.ca.oa.o就不會被重新編譯,但有時候,我們不希望這種“查新”機(jī)制起作用,就要用makeclean命令把目標(biāo)文件刪掉,強(qiáng)制重新編譯。原理上講,如果依賴關(guān)系做得好,頭文件也成為.o文件的依賴文件的話,頭文件修改后,編譯c源文件的依賴關(guān)系很復(fù)雜,并且在編程過程中會有調(diào)整,要完全描述這種依賴關(guān)系變得很,且makefile會很復(fù)雜難讀。因此,djyos的makefile不描述頭文件和C文件的依賴關(guān)系,故在修改頭文件后,需要執(zhí)行makeclean命令刪掉所有.o文件,強(qiáng)迫重新生成所有.o文件。makedebug編譯調(diào)試版本makerun_inramdebug時,已經(jīng)產(chǎn)生了.o文件,而.c文件又沒有修會重是直debug時產(chǎn)生的.o文件重run_inramdebug的發(fā)布源代碼時,實(shí)際上只希望發(fā)布源代碼文件和.binmakeclean刪掉其他編譯產(chǎn)------------------------如果你只是想知道如何編 djyos,到此為止--------------------------修改總控makefile在工程下,比如工程是myprj,則myprj下的makefile文件就是總控makefile文件了。djyos被移植到新的cpu,或者改變指令集(由ARM改為thumb),或者改變器大小端時,makefilemakefile中這些內(nèi)容都用變量表示,makefile總共只有幾十行,絕大部分在移植時是無需修改的,即使上述幾個方面同時需要調(diào)整,需要修改的也不超過10行。一般情況下只需要修改:CPUarm7tdmi \trom :org= len=\tram :org= len= 添加和修改子工程中添加子或者源程序文件時,就需要添加子makefile,當(dāng)改名、刪除子或者源程subdir=rom_init=preload=sysload=critical=雙引號,行末也沒有分號或其他符號,比如在driver下有兩個包含源程序文件的子:uart、和flash_chip,則driver下的makefile中subdir的值就這樣描述:subdir=uart subdir=uartflash_chiptty下也要添加makefile,只要從其他copy一個過來,再修改前述幾個變量的值添加和刪除以及改名源文件的方法相當(dāng)簡單,就是修改相應(yīng)下的makefile中的boot_rom、rom_init、preload、sysload、critical中的一個或幾個變量。---------------如果你不打算分析djyos的makefile實(shí)現(xiàn)方法,就此止步吧makefile在工程下,比如工程是myprj,則myprj下的makefile文件就makefilemakefilemakefilemake_ld文件,為什么要分成兩個呢?是為了實(shí)現(xiàn)自動化生成連接文件,待介紹make_ld文件的時候再仔細(xì)說明。下面開始介紹makefile的各部分代碼,斜體部分是從makefile文件中copy的代碼。變Cmakefile的變量。其實(shí)這兩者的差別非常之大,C語言的變量是一個地址makefile的變量就是字由空格分開的連續(xù)的字符構(gòu)成一個單詞。makefile有許多方法處理變量,實(shí)際上處理的是字符串。makefile中,這些字符串不需要用雙引號。1exporttopdir=$(s 路徑名字符串。exporttopdir=$(spwd)的含義是,利用操作系統(tǒng)的s命令取當(dāng) ,由于總控makefile在工程根 的路徑名,賦值給topdir。export的含義是使topdir在子makefile中可見,注意,在子makefile中,topdir的值仍然是工程根目2MCUarm7tdmi3sub_makeexportsub_make=@make--no-print-@的含義是不在屏幕上輸出本行命令,--no-print-directory是不輸出進(jìn)入和離開某子 這兩者的使用使得屏幕輸出比較簡潔,當(dāng)調(diào)試makefile時,可打開這兩類輸出,幫助定位錯誤。45、其他變量 AS:匯編器名,gcc中匯編器和c編譯器都使用arm-elf-gcc。 生成目1rm_obj_list刪除編譯子中產(chǎn)生的ld_obj_list文件,這是一個臨時文件,如果上一次的編譯過程成功完2、 中間目顧名思義,這個目標(biāo)是進(jìn)入子,執(zhí)行子下的編譯任務(wù),在子的makefile中,又以同樣令執(zhí)行子子的編譯任務(wù),就這樣一級級嵌套,直到所有子下的變異任務(wù)全部完成。$(subdir)$(sub_make)-C$@ 命令,$(subdir)subdir變量展開,$@makefile中比較晦澀難懂的符號,意思是$(subdir)$(sub_make)-C$@$(sub_make)–Capp$(MAKECMDGOALS)$(sub_make–Cdjyos$(MAKECMDGOALS)3、最終目標(biāo)debug\run_inram\run_inflashboot_rom:rm_obj_list$(sub_make)-fmake_ld自動生成連接ld文編譯產(chǎn)生的是可重定位的目標(biāo)文件,目標(biāo)文件中不包含地址信息,需要經(jīng)過連接后才能生成真正可執(zhí)行的文件。連接文件就是告訴器如何連接目標(biāo)文件的文件,不同的編譯系統(tǒng)對1、器描述,描寫系統(tǒng)中的器配置,比如44b0版本的ld文件的器描述如下:{rom(rx) :org=0, len=2Mram :org= len=}norflash;第二塊是可讀寫和執(zhí)行的,起始地址為0xc000000,長度8M,對應(yīng)sdram。3、輸出可供連接器識別的符號,比如djyos的器管理模塊就需要cfg_heap_topmakefile中,用這幾個變量:boot_rom、rom_init、preload、sysload、critical表示具體文件成方法和變量含義參見子makefile的說明。rom_init_obj+=preload_obj+=際上是makefile文件的一部分,由make_ld文件用:ifneq($(target),)包含進(jìn)來的,5debug、run_inram、run_inflash、boot_rom5個*.mld文件,該文件對應(yīng)5個用于描述5個最終目標(biāo)的連接文件。*.mld文件非常簡單,就是用1條s內(nèi)置函數(shù)printf生成*.ld文件,并把輸出轉(zhuǎn)向保存到*.ld文件中。連接生成可執(zhí)行文件$(sub_make)-fmake_ld$(sub_make)-fmake_ldincludeld_obj_listifneq($(target),)includeld_obj_listifneq($(target),)debug$(objcopy)$(target).elfrm-fld_obj_list$(objcopy)$(objcopy)$(target).elfrm-fld_obj_list$(CC)$(LDFLAGS)$(rom_init_obj)$(preload_obj)$(critical_obj)$(sysload_obj)-o-$(objcopy)$(target).elfrm-fld_obj_list$(CC)$(LDFLAGS)$(rom_init_obj)$(preload_obj)$(critical_obj)$(sysload_obj)-o-$(objcopy)$(target).elfrm-fld_obj_listmake_ld$(sub_make)-fmake_ld$(CC)本文件,除了一個目標(biāo)后連續(xù)出現(xiàn)令是按順序執(zhí)行的外,其他的一切,比如變量,include等,a= c=c= a=$(sub_make)-C$@時自動就要確保實(shí)includeld_obj_list必須在生成$(subdir)makefile和而現(xiàn)在的做法,最終目標(biāo)依賴$(subdir),可以確保在完成$(subdir)目標(biāo)之后$(sub_make)-fmake_ld 所有子makefile文件中,第10行開始是雷同的,本想在工程根 下用mksubinc文件描述雷同部分,然后在子makefile中用:includemakefile:11:/cygdrive/g/siyf/mksubinc:Nosuchfileor源文件和下 描 currentdir=$(spwd)subdir=appdjyosrom_init=preload=sysload=critical=12 下,有app和 ,而 3 4rom初始化部分代碼,這些代碼在復(fù)位后在rom中執(zhí)行,除非你打算利用MMU重映射ram5些代碼由rom_init中的預(yù)加載器copyram中,然后把控制權(quán)交給預(yù)加載器。67生成中間變量ifneqboot_rom_asm=$(filter%.s,$(boot_rom))boot_rom_asmobj=$(patsubst boot_rom_c=$(filter%.c,$(boot_rom)) boot_rom_obj=$(patsubst 推導(dǎo)出boot_rom_asmobj、boot_rom_cobj、boot_rom_obj三個中間目標(biāo)變量,boot_rom_asmobjrom_init、preload、sysload、critical這5個變量。填寫ld_obj_list文件@printf"rom_init_obj+=$(rom_init_obj)\n\boot_rom_obj+=$(boot_rom_obj)\n\criti
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電力增值服務(wù)合同協(xié)議
- 電腦升級維護(hù)合同協(xié)議
- 生意合伙協(xié)議書合同
- 體育合同的要素與分析試題及答案
- 2025至2030年中國粉銹寧數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國硅酸鋁用絲纖維棉數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國漫反射型光纖傳感器數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國活體指紋專業(yè)門禁系統(tǒng)數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國暖奶器發(fā)熱圈數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國無管網(wǎng)自動滅火裝置數(shù)據(jù)監(jiān)測研究報告
- 2022-2023學(xué)年統(tǒng)編版選擇性必修三 邏輯與思維 10-2 體會認(rèn)識發(fā)展的歷程 教案-
- 萬邦特種材料股份有限公司年產(chǎn)18000噸特種紙遷建項(xiàng)目環(huán)境影響報告書
- 【建模教程】-建模-數(shù)學(xué)建模夏令營
- 寧波軌道交通工程施工測量管理辦法
- 高中英語高頻詞匯拓展延伸
- 誠信友善教學(xué)反思(十篇)
- 2023版思想道德與法治專題6遵守道德規(guī)范錘煉道德品格PPT
- 部編本六年級下冊語文課件古詩詞誦讀
- 銷售立項(xiàng)申請表
- 裝飾裝修掛靠工程合同協(xié)議書范本
- 一案八制方案
評論
0/150
提交評論