国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
GNU的編譯器和調(diào)試工具

GNU的編譯器和調(diào)試工具

2016年08月24日 15:28:11 yanbixing123 閱讀數(shù):1961更多
個(gè)人分類: 嵌入式
版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。 https://blog.csdn.net/yanbixing123/article/details/52300860

GNU的編譯器和調(diào)試工具


. 編譯工具

1.編輯工具介紹

GNU 提供的編譯工具包括匯編器asC編譯器gcc、C++編譯器g++、連接器ld和二進(jìn)制轉(zhuǎn)換工具objcopy?;?/span>ARM平臺(tái)的工具分別為arm-linux-as、arm-linux-gcc、arm-linux-g++、arm-linux-ldarm-linux-objcopyGNU的編譯器功能非常強(qiáng)大,共有上百個(gè)操作選項(xiàng),這也是這類工具讓初學(xué)者頭痛的原因。不過,實(shí)際開發(fā)中只需要用到有限的幾個(gè),大部分可以采用缺省選項(xiàng)。GNU工具的開發(fā)流程如下:編寫CC++語言或匯編源程序,用gccg++生成目標(biāo)文件,編寫連接腳本文件,用連接器生成最終目標(biāo)文件(elf格式),用二進(jìn)制轉(zhuǎn)換工具生成可下載的二進(jìn)制代碼。

1)編寫C、C++語言或匯編源程序

通常匯編源程序用于系統(tǒng)最基本的初始化,如初始化堆棧指針、設(shè)置頁表、操作ARM的協(xié)處理器等。初始化完成后就可以跳轉(zhuǎn)到C代碼執(zhí)行。需要注意的是,GNU的匯編器遵循AT&T的匯編語法,讀者可以從GNU的站點(diǎn)(www.gnu.org)上下載有關(guān)規(guī)范。匯編程序的缺省入口是 start標(biāo)號(hào),用戶也可以在連接腳本文件中用ENTRY標(biāo)志指明其它入口點(diǎn)(見下文關(guān)于連接腳本的說明)。


2)用gccg++生成目標(biāo)文件

如果應(yīng)用程序包括多個(gè)文件,就需要進(jìn)行分別編譯,最后用連接器連接起來。如筆者的引導(dǎo)程序包括3個(gè)文件:init.s(匯編代碼、初始化硬件)xmrecever.c(通信模塊,采用Xmode協(xié)議)和flash.cFlash擦寫模塊)。

分別用如下命令生成目標(biāo)文件: arm-linux-gcc-c-O2-oinit.oinit.sarm-linux-gcc-c-O2-oxmrecever.oxmrecever.carm-linux-gcc-c-O2-oflash.oflash.c 其中-c命令表示只生成目標(biāo)代碼,不進(jìn)行連接;-o命令指明目標(biāo)文件的名稱-O2表示采用二級(jí)優(yōu)化,采用優(yōu)化后可使生成的代碼更短,運(yùn)行速度更快。如果項(xiàng)目包含很多文件,則需要編寫makefile文件。關(guān)于makefile的內(nèi)容,請(qǐng)感興趣的讀者參考相關(guān)資料。

3*編寫連接腳本文件

gcc 等編譯器內(nèi)置有缺省的連接腳本。如果采用缺省腳本,則生成的目標(biāo)代碼需要操作系統(tǒng)才能加載運(yùn)行。為了能在嵌入式系統(tǒng)上直接運(yùn)行,需要編寫自己的連接腳本文件。編寫連接腳本,首先要對(duì)目標(biāo)文件的格式有一定了解。GNU編譯器生成的目標(biāo)文件缺省為elf格式。elf文件由若干段(section)組成,如不特殊指明,C源程序生成的目標(biāo)代碼中包含如下段:.text(正文段)包含程序的指令代碼;.data(數(shù)據(jù)段)包含固定的數(shù)據(jù),如常量、字符串;.bss(未初始化數(shù)據(jù)段)包含未初始化的變量、數(shù)組等C++源程序生成的目標(biāo)代碼中還包括.fini(析構(gòu)函數(shù)代碼)和.init(構(gòu)造函數(shù)代碼)等。連接器的任務(wù)就是將多個(gè)目標(biāo)文件的.text.data.bss等段連接在一起,而連接腳本文件是告訴連接器從什么地址開始放置這些段。例如連接文件link.lds為:

ENTRY(begin) ;指明程序的入口點(diǎn)為begin標(biāo)號(hào)

SECTION ;段

{

.=0x30000000; ;指明目標(biāo)代碼的起始地址為0x30000000,這一段地址為片內(nèi)RAM

.text:{*(.text)} ;表示從0x30000000開始放置所有的目標(biāo)文件的代碼段

.data:{*(.data)} ;數(shù)據(jù)段從代碼段的末尾開始

.bss:{*(.bss)} ;bss段從數(shù)據(jù)段的末尾開始

}

其中,ENTRY(begin)指明程序的入口點(diǎn)為begin標(biāo)號(hào);.=0x00300000指明目標(biāo)代碼的起始地址為0x30000000,這一段地址為 MX1的片內(nèi)RAM;.text:{*(.text)}表示從0x30000000開始放置所有目標(biāo)文件的代碼段,隨后的.data:{*(.data)}表示數(shù)據(jù)段從代碼段的末尾開始,再后是.bss段。

4)用連接器生成最終目標(biāo)文件

有了連接腳本文件,如下命令可生成最終的目標(biāo)文件:

arm-linux-ld–no stadlib –o bootstrap.elf -Tlink.lds init.o xmrecever.oflash.o

其中,ostadlib表示不連接系統(tǒng)的運(yùn)行庫(kù),而是直接從begin入口-o指明目標(biāo)文件的名稱;-T指明采用的連接腳本文件(也可以使用-Ttextaddress,address表示執(zhí)行區(qū)地址);最后是需要連接的目標(biāo)文件列表。

5)生成二進(jìn)制代碼

連接生成的elf文件還不能直接下載執(zhí)行,通過objcopy工具可生成最終的二進(jìn)制文件

arm-linux-objcopy–O binary bootstrap.elf bootstrap.bin

其中-Obinary指定生成為二進(jìn)制格式文件Objcopy還可以生成S格式的文件,只需將參數(shù)換成-Osrec。還可以使用-S選項(xiàng),移除所有的符號(hào)信息及重定位信息如果想將生成的目標(biāo)代碼反匯編,還可以用objdump工具:

arm-linux-objdump-D bootstrap.elf

至此,所生成的目標(biāo)文件就可以直接寫入Flash中運(yùn)行了。


2Makefile實(shí)例

example:head.s main.c

arm-linux-gcc-c -o head.o head.s

arm-linux-gcc-c -o main.o main.c

arm-linux-ld-Tlink.lds head.o ain.o -o example.elf

arm-linux-objcopy-O binary -S example_tmp.o example

arm-linux-objdump-D -b binary -m arm example >ttt.s


. 調(diào)試工具

Linux 下的GNU調(diào)試工具主要是gdb、gdbserverkgdb。其中gdbgdbserver可完成對(duì)目標(biāo)板上Linux下應(yīng)用程序的遠(yuǎn)程調(diào)試。 gdbserver是一個(gè)很小的應(yīng)用程序,運(yùn)行于目標(biāo)板上,可監(jiān)控被調(diào)試進(jìn)程的運(yùn)行,并通過串口與上位機(jī)上的gdb通信。開發(fā)者可以通過上位機(jī)的gdb輸入命令,控制目標(biāo)板上進(jìn)程的運(yùn)行,查看內(nèi)存和寄存器的內(nèi)容。gdb5.1.1以后的版本加入了對(duì)ARM處理器的支持,在初始化時(shí)加入- target==arm參數(shù)可直接生成基于ARM平臺(tái)的gdbservergdb工具可以從ftp://ftp.gnu.org/pub/gnu/gdb/上下載。

對(duì)于Linux內(nèi)核的調(diào)試,可以采用kgdb工具,同樣需要通過串口與上位機(jī)上的gdb通信,對(duì)目標(biāo)板的Linux內(nèi)核進(jìn)行調(diào)試??梢詮?/span>http://oss.sgi.com/projects/kgdb/上了解具體的使用方法。



參考資料:

1.Richard Blum,ProfessionalAssembly Language

2.GNU ARM 匯編快速入門,http://blog.chinaunix.net/u/31996/showart.php?id=326146

3.ARM GNU 匯編偽指令簡(jiǎn)介,http://www.cppblog.com/jb8164/archive/2008/01/22/41661.aspx

4.GNU匯編使用經(jīng)驗(yàn),http://blog.chinaunix.net/u1/37614/showart_390095.html

5.GNU的編譯器和開發(fā)工具,http://blog.ccidnet.com/blog-htm-do-showone-uid-34335-itemid-81387-type-blog.html

6. GNU工具開發(fā)基于ARM的嵌入式系統(tǒng),http://blog.163.com/liren0@126/blog/static/32897598200821211144696/

7.objcopy命令介紹,http://blog.csdn.net/junhua198310/archive/2007/06/27/1669545.aspx


<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
閱讀(263) | 評(píng)論(0) | 轉(zhuǎn)發(fā)(0) |
給主人留下些什么吧!~~
評(píng)論熱議
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
用GNU工具開發(fā)基于ARM的嵌入式系統(tǒng)
GNU ARM 匯編指令簡(jiǎn)介
Linux下的C編程實(shí)戰(zhàn)之開發(fā)平臺(tái)搭建 - 天極網(wǎng)
STM32高級(jí)開發(fā)(1)
ARM工具鏈中的概念
手把手教你在Keil MDK中使用GCC編譯器工具鏈
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服