資源描述:
《嵌入式開發(fā)流程及開發(fā)工具介紹課件.ppt》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、嵌入式Linux開發(fā)流程及開發(fā)工具介紹內(nèi)容概要嵌入式Linux開發(fā)步驟嵌入式Linux常見的開發(fā)工具嵌入式Linux常見的調(diào)試工具針對(duì)arm-linux交叉編譯環(huán)境的搭建嵌入式Linux開發(fā)步驟電路設(shè)計(jì)(第1版)電路設(shè)計(jì)(第3版)電路設(shè)計(jì)(第2版)編譯器移植bootloader應(yīng)用程序開發(fā)內(nèi)核移植文件系統(tǒng)開發(fā)嵌入式Linux開發(fā)任務(wù)硬件開發(fā):芯片設(shè)計(jì),電路設(shè)計(jì),選擇芯片等軟件開發(fā):制作交叉編譯器,移植bootloader,移植內(nèi)核,開發(fā)文件系統(tǒng),開發(fā)應(yīng)用程序等嵌入式Linux開發(fā)步驟嵌入式Linux常見的開發(fā)工具嵌入式Linux常見的調(diào)試工具針對(duì)arm-linux交叉編譯環(huán)境的搭建嵌入式L
2、inux開發(fā)工具Vi編輯器GCCMakeMakefileGCC介紹全稱為GNUGCC,GNU項(xiàng)目中符合ANSIC標(biāo)準(zhǔn)的編譯系統(tǒng)編譯如C、C++、JAVA、ObjectC、Fortran、Pascal,Modula-3和Ada等多重語言針對(duì)嵌入式Linux系統(tǒng)常用交叉編譯器,比如針對(duì)ARM平臺(tái),使用arm-linux-gcc等Make工程管理器管理較多的文件Make工程管理器也就是個(gè)“自動(dòng)編譯管理器”,這里的“自動(dòng)”是指它能夠根據(jù)文件時(shí)間戳自動(dòng)發(fā)現(xiàn)更新過的文件而減少編譯的工作量,同時(shí),它通過讀入Makefile文件的內(nèi)容來執(zhí)行大量的編譯工作MakefileMakefile的作用是根據(jù)項(xiàng)目配置的
3、情況,構(gòu)造出需要編譯的源文件列表,然后分別編譯,鏈接。Linux內(nèi)核中與Makefile相關(guān)的文件※頂層Makefile:整個(gè)內(nèi)核配置、編譯的總體控制文件※.config:內(nèi)核配置文件、包括由用戶選擇的配置選項(xiàng),用來存放內(nèi)核配置后的結(jié)果※arch/*/Makefile:位于各種CPU體系結(jié)構(gòu)下的Makefile,如arch/arm/Makefile,是針對(duì)特定平臺(tái)的Makefile※各個(gè)子目錄下的Makefile:比如drivers/Makefiel,負(fù)責(zé)所在子目錄下源代碼的管理。嵌入式Linux開發(fā)步驟嵌入式Linux常見的開發(fā)工具嵌入式Linux常見的調(diào)試工具針對(duì)arm-linux交叉編
4、譯環(huán)境的搭建嵌入式Linux調(diào)試工具printk函數(shù)strace命令OOPS分析GDBKDBKGDB使用printk進(jìn)行調(diào)試※優(yōu)點(diǎn)#隨時(shí)調(diào)用#在中斷中調(diào)用#在進(jìn)程上下文中調(diào)用#在持有鎖時(shí)調(diào)用#在多處理器上同時(shí)使用※缺點(diǎn)#終端啟動(dòng)前無法調(diào)用strace命令※顯示程序調(diào)用的所有系統(tǒng)調(diào)用※從內(nèi)核接受信息,而且不需要以任何特殊的方式來構(gòu)建內(nèi)核※用法:eg.$stracels#-t:顯示調(diào)用發(fā)生的時(shí)間#-T:顯示調(diào)用花費(fèi)的時(shí)間#-e:#strace命令※顯示程序調(diào)用的所有系統(tǒng)調(diào)用※從內(nèi)核接受信息,而且不需要以任何特殊的方式來構(gòu)建內(nèi)核※用法:eg.$stracels#-t:顯示調(diào)用發(fā)生的時(shí)間#-T:顯示
5、調(diào)用花費(fèi)的時(shí)間#-e:限定被跟蹤的調(diào)用類型#-o:將輸出定向到一個(gè)文件中OOPS分析OOPS消息包含系統(tǒng)錯(cuò)誤的細(xì)節(jié),如CPU寄存器的內(nèi)容。在Linux中,調(diào)試系統(tǒng)崩潰的傳統(tǒng)方法是在發(fā)生崩潰時(shí)發(fā)送到系統(tǒng)控制臺(tái)的OOPS消息。一旦你掌握了細(xì)節(jié),就可以將消息發(fā)送到ksymoops實(shí)用程序,它試圖將代碼轉(zhuǎn)換為指令并將堆棧值映射到內(nèi)核符號(hào)。在很多情況下,這些信息就足夠確定錯(cuò)誤的可能原因是什么了。請(qǐng)注意,OOPS消息并不包含核心文件。GDB※運(yùn)行被調(diào)試的程序,設(shè)置所有的能影響該程序的參數(shù)和變量?!WC被調(diào)試的程序在指定的條件下停止運(yùn)行?!?dāng)被調(diào)試程序停止時(shí),讓開發(fā)工程師檢查發(fā)生了什么※更具每次調(diào)試器的提
6、示信息來做相應(yīng)的改變,以便修正某個(gè)錯(cuò)誤引起的問題KDB介紹Linux內(nèi)核調(diào)試器是Linux內(nèi)核的補(bǔ)丁,提供了一種在系統(tǒng)能運(yùn)行時(shí)對(duì)內(nèi)核內(nèi)存和數(shù)據(jù)結(jié)構(gòu)檢查的辦法??梢蕴砑宇~外的命令,給出該數(shù)據(jù)結(jié)構(gòu)的標(biāo)識(shí)或地址,這些命令便可以格式化和顯示基本的系統(tǒng)數(shù)據(jù)結(jié)構(gòu)。它適合于調(diào)試內(nèi)核空間的程序代碼,譬如進(jìn)行內(nèi)核模塊的調(diào)試,設(shè)備驅(qū)動(dòng)程序的調(diào)試KDB允許的內(nèi)核操作※處理器單步執(zhí)行※執(zhí)行到某條特定指令時(shí)停止※當(dāng)存?。ɑ蛐薷模┠硞€(gè)特定的虛擬內(nèi)存位置時(shí)停止※當(dāng)存取輸入/輸出地址空間中的寄存器時(shí)停止,對(duì)當(dāng)前活動(dòng)的任務(wù)和所有其他任務(wù)進(jìn)行堆?;厮莞櫍ㄍㄟ^進(jìn)程ID)※對(duì)指令進(jìn)行反匯編※追擊內(nèi)存溢出KGDB※需要的軟件#內(nèi)核
7、源代碼:linux-x.x.x.tar.bz2#Kgdb補(bǔ)?。簂inux-x.x.x-kgdb-1.9.patch#gdbmod-x.x.bz2※使用兩臺(tái)計(jì)算機(jī)進(jìn)行開發(fā),一臺(tái)為開發(fā)主機(jī),一臺(tái)為目標(biāo)主機(jī)。通常用串口線相連內(nèi)核調(diào)試工具比較※GDB:在調(diào)試模塊時(shí)缺少一些至關(guān)重要的功能,如不能修改內(nèi)核數(shù)據(jù),不能設(shè)置斷點(diǎn)或觀察點(diǎn),或者但不跟蹤內(nèi)核函數(shù)。它可用來查看內(nèi)核的運(yùn)行情況,包括反匯編內(nèi)核函數(shù)?!鵎DB:可以交互式