嵌入式微处理器系统课件_第1页
嵌入式微处理器系统课件_第2页
嵌入式微处理器系统课件_第3页
嵌入式微处理器系统课件_第4页
嵌入式微处理器系统课件_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式微處理器系統嵌入式微處理器系統GNU開發工具與U-Boot環境實驗一:程式編譯、連結與函式庫製作main.cfunc1.cfunc2.clib_func1.clib_func2.clib_func3.cmain.ofunc1.ofunc2.oldgcclib_func1.olib_func2.olib_func3.oarlibtest.alibm.aexecutablegccGNU開發工具與U-Boot環境實驗一:程式編譯、連結與函式【實驗一】相關知識執行檔製作流程GCC常用參數與操作LD常用參數與操作靜態與動態函式庫的製作與使用其它常用工具【實驗一】相關知識執行檔製作流程【實驗一】相關知識執行檔製作流程前置處理(Preprocessing)編譯(Compiling)組譯(Assembling)連結(Linking)【實驗一】相關知識執行檔製作流程【實驗一】相關知識原始程式碼(SourceCode)#include<stdio.h>#defineSTRING"HelloWorld!\n“intmain(void){printf(STRING);return0;}【實驗一】相關知識原始程式碼(SourceCode)#i【實驗一】相關知識前置處理(Preprocessing)…略…externintfprintf(FILE*__restrict__stream,__constchar*__restrict__format,...);externintprintf(__constchar*__restrict__format,...);externintsprintf(char*__restrict__s,__constchar*__restrict__format,...);…略…intmain(void){printf("HelloWorld!\n");return0;}【實驗一】相關知識前置處理(Preprocessing)…【實驗一】相關知識編譯(Compiling)…略….LC0:.ascii"HelloWorld!\012\000".text.align2.globalmain.typemain,functionmain:stmfdsp!,{lr}bl__gccmainldrr0,.L3blprintf__FPCcemovr0,#0ldmfdsp!,{pc}…略…【實驗一】相關知識編譯(Compiling)…略…【實驗一】相關知識組譯(Assembling)Disassemblyofsection.text:00000000<main>:0:e52de004strlr,[sp,-#4]!4:e59f0008ldrr0,[pc,#8]8:ebfffffebl8<main+0x8>8:R_ARM_PC24putsc:e3a00000movr0,#0;0x010:e49df004ldrpc,[sp],#4…略…Disassemblyofsection.rodata:00000000<.rodata>:0:6c6c6548stcvsl5,cr6,[r12],-#2884:6f57206fswivs0x0057206f8:21646c72cmncsr4,r2,rorr12【實驗一】相關知識組譯(Assembling)Disass【實驗一】相關知識連結(Linking)…略…Disassemblyofsection.text:000083d0<main>:83d0:e52de004strlr,[sp,-#4]!83d4:e59f0008ldrr0,[pc,#8]83d8:ebffffb3bl82ac<$a+0x18>83dc:e3a00000movr0,#0;0x083e0:e49df004ldrpc,[sp],#4…略…Disassemblyofsection.rodata:000084c8<_IO_stdin_used>:84c8:00020001andeqr0,r2,r184cc:6c6c6548stcvsl5,cr6,[r12],-#28884d0:6f57206fswivs0x0057206f84d4:21646c72cmncsr4,r2,rorr12【實驗一】相關知識連結(Linking)…略…【實驗一】相關知識執行檔製作流程GCC常用參數與操作LD常用參數與操作靜態與動態函式庫的製作與使用其它常用工具【實驗一】相關知識執行檔製作流程【實驗一】相關知識GCC常用參數與操作-ooutput_name:指定輸出檔名-E:對程式碼進行前置處理-S:執行到編譯動作便停止,不做組譯與連結-c:編譯並組譯程式碼,但不做連結#gcc-ohellohello.c#gcc-Ehello.c-ohello.i#gcc-Shello.c-ohello.S#gcc-chello.c-ohello.o【實驗一】相關知識GCC常用參數與操作#gcc-ohe【實驗一】相關知識GCC常用參數與操作-Ihdr_path:將指定路徑加入標頭檔搜尋路徑中-Llib_path:將指定路徑加入函式庫搜尋路徑中-llib_name:與指定函式庫進行連結#gcc-c-I/home/kenny/include-ohello.ohello.c#gcc-L/home/kenny/lib-ohellohello.o#gcc-L/home/kenny/lib-lm-lpthread-ohellohello.o指定與名為libm和libpthread函式庫做連結【實驗一】相關知識GCC常用參數與操作#gcc-c-I【實驗一】相關知識GCC常用參數與操作-Olevel:設定編譯最佳化程度

<最佳化層級>

-O或-O0:不做最佳化

-O1:第一層級最佳化

-O2:第二層級最佳化(較多)

-O3:第三層級最佳化(更多)

-Os:最佳化CodeSize#gcc-O2-c-ohello.ohello.c【實驗一】相關知識GCC常用參數與操作#gcc-O2-【實驗一】相關知識執行檔製作流程GCC常用參數與操作LD常用參數與操作靜態與動態函式庫的製作與使用其它常用工具【實驗一】相關知識執行檔製作流程【實驗一】相關知識LD常用參數與操作-ooutput_name:指定輸出檔名-Llib_path:將指定路徑加入函式庫搜尋路徑中-llib_name:與指定函式庫進行連結-eaddr:設定連結啟始位址#ld-ohellocrt0.ohello.o#ld-L/home/kenny/lib-ohellocrt0.ohello.o#ld-L/home/kenny/lib-lc-lm-ohellocrt0.ohello.o#ld-L/home/kenny/lib-lc-lm-e0x10000-ohellocrt0.ohello.o【實驗一】相關知識LD常用參數與操作#ld-ohell【實驗一】相關知識LD常用參數與操作-s:移除所有符號-S:移除除錯符號-r:輸出可重定位(relocatable)的檔案-Mapmap_file:產生連結後的符號位址對應檔#ld-L/home/kenny/lib-lc-lm-s-ohellocrt0.ohello.o#ld-L/home/kenny/lib-lc-lm-S-ohellocrt0.ohello.o#ld-r-oromfs.oromfs.img#ld-L/home/kenny/lib-lc-lm-ohellocrt0.ohello.o-Maphello.map【實驗一】相關知識LD常用參數與操作#ld-L/hom【實驗一】相關知識LD常用參數與操作-T:指定LinkScript-Ttextaddr:指定text段位址-Tdataaddr:指定data段位址-Tbssaddr:指定bss段位址#ld-lc-lm-Thello.ld-ohellocrt0.ohello.o#ld-lc-lm-Ttext0x1000-ohellocrt0.ohello.o#ld-lc-lm-Ttext0x0-Tdata0x1000-ohellocrt0.ohello.o#ld-lc-Ttext0x0-Tdata0x1000-Tbss0x3000-ohellocrt0.ohello.o【實驗一】相關知識LD常用參數與操作#ld-lc-lm【實驗一】相關知識執行檔製作流程GCC常用參數與操作LD常用參數與操作靜態與動態函式庫的製作與使用其它常用工具【實驗一】相關知識執行檔製作流程【實驗一】相關知識靜態與動態函式庫的製作與使用靜態函式庫與靜態連結hello.olibc.aStaticLinkinghello.exeCodeofprintf()libm.aCodeofsin()【實驗一】相關知識靜態與動態函式庫的製作與使用hello.oRAM【實驗一】相關知識靜態與動態函式庫的製作與使用動態函式庫與動態連結hello.olibc.soDynamicLinkingCodeofprintf()libm.soCodeofsin()hello.exeExecuteCodeof

hello.exeLoadRAM【實驗一】相關知識靜態與動態函式庫的製作與使用hell【實驗一】相關知識靜態與動態函式庫的製作與使用製作靜態函式庫–使用archive

使用方法:ar[options]archive_filesrc_files建立Archive查看Archive內容取出Archive中的檔案連結靜態函式庫#ar-rlibabc.aa.ob.oc.o#ar-tvlibabc.a#ar-xlibabc.aa.o#gcc-static-labchello.o-ohello【實驗一】相關知識靜態與動態函式庫的製作與使用#ar-r【實驗一】相關知識靜態與動態函式庫的製作與使用製作動態函式庫–利用gcc安裝動態函式庫將函式庫拷貝至搜尋路徑中,或者將函式庫所在路徑加入/etc/ld.so.conf檔中執行ldconfig以更新系統搜尋路徑與函式庫資料庫連結動態函式庫#gcc-shareda.ob.oc.o-olibabc.so#gcc-labchello.o-ohello【實驗一】相關知識靜態與動態函式庫的製作與使用#gcc-【實驗一】相關知識靜態與動態函式庫的製作與使用查看程式相依函式庫–利用ldd【實驗一】相關知識靜態與動態函式庫的製作與使用【實驗一】相關知識執行檔製作流程GCC常用參數與操作LD常用參數與操作靜態與動態函式庫的製作與使用其它常用工具【實驗一】相關知識執行檔製作流程【實驗一】相關知識其它常用工具as–組譯器nm–列出目標檔中的符號符號類型:R:唯讀符號N:除錯用符號D:已初始化變數符號T:Text段符號U:未定義符號S:未初始化變數符號#as-ohello.ohello.S#nmhello.o【實驗一】相關知識其它常用工具#as-ohello.o【實驗一】相關知識其它常用工具objdump–查看目標檔資訊-D:反組譯並顯示所有區段內容-d:反組譯並顯示可執行區段內容-r:顯示重定位入口-h:顯示各區段之資訊#objdump-Drhello.o【實驗一】相關知識其它常用工具#objdump-Drh【實驗一】相關知識其它常用工具objcopy–拷貝與轉換目標檔格式-Obfdname:指定輸出格式--only-section=name:轉換時保留指定區段--remove-section=name:轉換時移除指定區段--gap-fill=value:將區段間的空隙以指定值填滿#objcopy--gap-fill=0xff-Obinaryhello.elfhello.bin【實驗一】相關知識其它常用工具#objcopy--gap【實驗一】實驗內容根據實驗一之編譯流程圖,將範例中的程式碼編譯並連結成可執行檔【註】連結動作以gcc代替ld來簡化參數設定【實驗一】實驗內容根據實驗一之編譯流程圖,將範例中的程式碼編【實驗一】實驗步驟進入Topic1之實驗一資料夾【實驗一】實驗步驟進入Topic1之實驗一資料夾【實驗一】實驗步驟分別編譯資料夾下的C程式(僅編譯不連結)【實驗一】實驗步驟分別編譯資料夾下的C程式(僅編譯不連結)【實驗一】實驗步驟進入lib資料夾並分別編譯資料夾下的C程式【實驗一】實驗步驟進入lib資料夾並分別編譯資料夾下的C程式【實驗一】實驗步驟將lib資料夾下的Object檔製作成靜態函式庫【實驗一】實驗步驟將lib資料夾下的Object檔製作成靜態【實驗一】實驗步驟回到上一層資料夾並連結所有Object檔與函式庫【實驗一】實驗步驟回到上一層資料夾並連結所有Object檔與【實驗一】實驗步驟執行test程式【實驗一】實驗步驟執行test程式嵌入式微處理器系統嵌入式微處理器系統GNU開發工具與U-Boot環境實驗一:程式編譯、連結與函式庫製作main.cfunc1.cfunc2.clib_func1.clib_func2.clib_func3.cmain.ofunc1.ofunc2.oldgcclib_func1.olib_func2.olib_func3.oarlibtest.alibm.aexecutablegccGNU開發工具與U-Boot環境實驗一:程式編譯、連結與函式【實驗一】相關知識執行檔製作流程GCC常用參數與操作LD常用參數與操作靜態與動態函式庫的製作與使用其它常用工具【實驗一】相關知識執行檔製作流程【實驗一】相關知識執行檔製作流程前置處理(Preprocessing)編譯(Compiling)組譯(Assembling)連結(Linking)【實驗一】相關知識執行檔製作流程【實驗一】相關知識原始程式碼(SourceCode)#include<stdio.h>#defineSTRING"HelloWorld!\n“intmain(void){printf(STRING);return0;}【實驗一】相關知識原始程式碼(SourceCode)#i【實驗一】相關知識前置處理(Preprocessing)…略…externintfprintf(FILE*__restrict__stream,__constchar*__restrict__format,...);externintprintf(__constchar*__restrict__format,...);externintsprintf(char*__restrict__s,__constchar*__restrict__format,...);…略…intmain(void){printf("HelloWorld!\n");return0;}【實驗一】相關知識前置處理(Preprocessing)…【實驗一】相關知識編譯(Compiling)…略….LC0:.ascii"HelloWorld!\012\000".text.align2.globalmain.typemain,functionmain:stmfdsp!,{lr}bl__gccmainldrr0,.L3blprintf__FPCcemovr0,#0ldmfdsp!,{pc}…略…【實驗一】相關知識編譯(Compiling)…略…【實驗一】相關知識組譯(Assembling)Disassemblyofsection.text:00000000<main>:0:e52de004strlr,[sp,-#4]!4:e59f0008ldrr0,[pc,#8]8:ebfffffebl8<main+0x8>8:R_ARM_PC24putsc:e3a00000movr0,#0;0x010:e49df004ldrpc,[sp],#4…略…Disassemblyofsection.rodata:00000000<.rodata>:0:6c6c6548stcvsl5,cr6,[r12],-#2884:6f57206fswivs0x0057206f8:21646c72cmncsr4,r2,rorr12【實驗一】相關知識組譯(Assembling)Disass【實驗一】相關知識連結(Linking)…略…Disassemblyofsection.text:000083d0<main>:83d0:e52de004strlr,[sp,-#4]!83d4:e59f0008ldrr0,[pc,#8]83d8:ebffffb3bl82ac<$a+0x18>83dc:e3a00000movr0,#0;0x083e0:e49df004ldrpc,[sp],#4…略…Disassemblyofsection.rodata:000084c8<_IO_stdin_used>:84c8:00020001andeqr0,r2,r184cc:6c6c6548stcvsl5,cr6,[r12],-#28884d0:6f57206fswivs0x0057206f84d4:21646c72cmncsr4,r2,rorr12【實驗一】相關知識連結(Linking)…略…【實驗一】相關知識執行檔製作流程GCC常用參數與操作LD常用參數與操作靜態與動態函式庫的製作與使用其它常用工具【實驗一】相關知識執行檔製作流程【實驗一】相關知識GCC常用參數與操作-ooutput_name:指定輸出檔名-E:對程式碼進行前置處理-S:執行到編譯動作便停止,不做組譯與連結-c:編譯並組譯程式碼,但不做連結#gcc-ohellohello.c#gcc-Ehello.c-ohello.i#gcc-Shello.c-ohello.S#gcc-chello.c-ohello.o【實驗一】相關知識GCC常用參數與操作#gcc-ohe【實驗一】相關知識GCC常用參數與操作-Ihdr_path:將指定路徑加入標頭檔搜尋路徑中-Llib_path:將指定路徑加入函式庫搜尋路徑中-llib_name:與指定函式庫進行連結#gcc-c-I/home/kenny/include-ohello.ohello.c#gcc-L/home/kenny/lib-ohellohello.o#gcc-L/home/kenny/lib-lm-lpthread-ohellohello.o指定與名為libm和libpthread函式庫做連結【實驗一】相關知識GCC常用參數與操作#gcc-c-I【實驗一】相關知識GCC常用參數與操作-Olevel:設定編譯最佳化程度

<最佳化層級>

-O或-O0:不做最佳化

-O1:第一層級最佳化

-O2:第二層級最佳化(較多)

-O3:第三層級最佳化(更多)

-Os:最佳化CodeSize#gcc-O2-c-ohello.ohello.c【實驗一】相關知識GCC常用參數與操作#gcc-O2-【實驗一】相關知識執行檔製作流程GCC常用參數與操作LD常用參數與操作靜態與動態函式庫的製作與使用其它常用工具【實驗一】相關知識執行檔製作流程【實驗一】相關知識LD常用參數與操作-ooutput_name:指定輸出檔名-Llib_path:將指定路徑加入函式庫搜尋路徑中-llib_name:與指定函式庫進行連結-eaddr:設定連結啟始位址#ld-ohellocrt0.ohello.o#ld-L/home/kenny/lib-ohellocrt0.ohello.o#ld-L/home/kenny/lib-lc-lm-ohellocrt0.ohello.o#ld-L/home/kenny/lib-lc-lm-e0x10000-ohellocrt0.ohello.o【實驗一】相關知識LD常用參數與操作#ld-ohell【實驗一】相關知識LD常用參數與操作-s:移除所有符號-S:移除除錯符號-r:輸出可重定位(relocatable)的檔案-Mapmap_file:產生連結後的符號位址對應檔#ld-L/home/kenny/lib-lc-lm-s-ohellocrt0.ohello.o#ld-L/home/kenny/lib-lc-lm-S-ohellocrt0.ohello.o#ld-r-oromfs.oromfs.img#ld-L/home/kenny/lib-lc-lm-ohellocrt0.ohello.o-Maphello.map【實驗一】相關知識LD常用參數與操作#ld-L/hom【實驗一】相關知識LD常用參數與操作-T:指定LinkScript-Ttextaddr:指定text段位址-Tdataaddr:指定data段位址-Tbssaddr:指定bss段位址#ld-lc-lm-Thello.ld-ohellocrt0.ohello.o#ld-lc-lm-Ttext0x1000-ohellocrt0.ohello.o#ld-lc-lm-Ttext0x0-Tdata0x1000-ohellocrt0.ohello.o#ld-lc-Ttext0x0-Tdata0x1000-Tbss0x3000-ohellocrt0.ohello.o【實驗一】相關知識LD常用參數與操作#ld-lc-lm【實驗一】相關知識執行檔製作流程GCC常用參數與操作LD常用參數與操作靜態與動態函式庫的製作與使用其它常用工具【實驗一】相關知識執行檔製作流程【實驗一】相關知識靜態與動態函式庫的製作與使用靜態函式庫與靜態連結hello.olibc.aStaticLinkinghello.exeCodeofprintf()libm.aCodeofsin()【實驗一】相關知識靜態與動態函式庫的製作與使用hello.oRAM【實驗一】相關知識靜態與動態函式庫的製作與使用動態函式庫與動態連結hello.olibc.soDynamicLinkingCodeofprintf()libm.soCodeofsin()hello.exeExecuteCodeof

hello.exeLoadRAM【實驗一】相關知識靜態與動態函式庫的製作與使用hell【實驗一】相關知識靜態與動態函式庫的製作與使用製作靜態函式庫–使用archive

使用方法:ar[options]archive_filesrc_files建立Archive查看Archive內容取出Archive中的檔案連結靜態函式庫#ar-rlibabc.aa.ob.oc.o#ar-tvlibabc.a#ar-xlibabc.aa.o#gcc-static-labchello.o-ohello【實驗一】相關知識靜態與動態函式庫的製作與使用#ar-r【實驗一】相關知識靜態與動態函式庫的製作與使用製作動態函式庫–利用gcc安裝動態函式庫將函式庫拷貝至搜尋路徑中,或者將函式庫所在路徑加入/etc/ld.so.conf檔

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论