freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

嵌入式系統(tǒng)的定義及特點(編輯修改稿)

2025-07-14 01:12 本頁面
 

【文章內(nèi)容簡介】 時性,使得uClinux可以應(yīng)用于工業(yè)控制、進程控制等一些實時要求較高的應(yīng)用。6 uClinux的開發(fā)環(huán)境1,GNU開發(fā)套件GNU開發(fā)套件作為通用的Linux開放套件,包括一系列的開發(fā)調(diào)試工具。主要組件:Gcc: 編譯器,可以做成交叉編譯的形式,即在宿主機上開發(fā)編譯目標上可運行的二進制文件。Binutils:一些輔助工具,包括objdump(可以反編譯二進制文件),as(匯編編譯器),ld(連接器)等等。Gdb:調(diào)試器,可使用多種交叉調(diào)試方式,gdbbdm(背景調(diào)試工具),gdbserver(使用以太網(wǎng)絡(luò)調(diào)試)。2, Clinux的打印終端通常情況下,uClinux的默認終端是串口,內(nèi)核在啟動時所有的信息都打印到串口終端(使用printk函數(shù)打印),同時也可以通過串口終端與系統(tǒng)交互。uClinux在啟動時啟動了telnetd(遠程登錄服務(wù)),操作者可以遠程登錄上系統(tǒng),從而控制系統(tǒng)的運行。至于是否允許遠程登錄可以通過燒寫romfs文件系統(tǒng)時由用戶決定是否啟動遠程登錄服務(wù)。3, 交叉編譯調(diào)試工具支持一種新的處理器,必須具備一些編譯,匯編工具,使用這些工具可以形成可運行于這種處理器的二進制文件。對于內(nèi)核使用的編譯工具同應(yīng)用程序使用的有所不同。在解釋不同點之前,需要對gcc連接做一些說明:ld(link description)文件:ld文件是指出連接時內(nèi)存映象格式的文件。:應(yīng)用程序編譯連接時需要的啟動文件,主要是初始化應(yīng)用程序棧。pic:position independence code ,與位置無關(guān)的二進制格式文件,在程序段中必須包括reloc段,從而使的代碼加載時可以進行重新定位。內(nèi)核編譯連接時,形成可執(zhí)行文件映象,所形成的代碼段既可以使用間接尋址方式(即使用reloc段進行尋址),也可以使用絕對尋址方式。這樣可以給編譯器更多的優(yōu)化空間。因為內(nèi)核可能使用絕對尋址,所以內(nèi)核加載到的內(nèi)存地址空間必須與ld文件中給定的內(nèi)存空間完全相同。應(yīng)用程序的連接與內(nèi)核連接方式不同。應(yīng)用程序由內(nèi)核加載(可執(zhí)行文件加載器將在后面討論),由于應(yīng)用程序的ld文件給出的內(nèi)存空間與應(yīng)用程序?qū)嶋H被加載的內(nèi)存位置可能不同,這樣在應(yīng)用程序加載的過程中需要一個重新地位的過程,即對reloc段進行修正,使得程序進行間接尋址時不至于出錯。(這個問題在i386等高級處理器上方法有所不同)。由上述討論,至少需要兩套編譯連接工具:1) 二進制工具(Binutils)GNU binutils包包括了匯編工具、鏈接器和基本的目標文件處理工具。對binutils包的設(shè)置定義了所需的目標文件的格式和字節(jié)順序。Binutils包種的工具都使用了二進制文件描述符(BFD)庫來交換數(shù)據(jù)。,可以指定默認的二進制文件格式(例如elf little endian)和任何工具可用的格式,見例1。例1 arm*uClinux* | armel*uClinux*tag_defvec=bfd_elf32_littlearm_vectarg_selvecs=”bfd_elf32_bigarm_vec armcoff_little_vec armcoff_big_vec”2) C編譯器GNU編譯器集GCC是通過使用一種叫做“寄存器轉(zhuǎn)換語言”(RTL)的方式實現(xiàn)的。假定現(xiàn)在有一種基本的機器描述性文件,它已經(jīng)能滿足大家的需要?,F(xiàn)在要做的僅僅是設(shè)置默認情況下使用的參數(shù)和如何將文件組合成可執(zhí)行文件的方式。GNU的文檔提供了所有必需的資料,使得用戶可以為新型的處理器的指令集合提供支持。如果要針對體系的機器建立一個新的目標機器,那么就必須指定默認編譯參數(shù)和定制系統(tǒng)的特定參數(shù),見例2。對于特定的目標系統(tǒng)。目標tmakefile段指定了應(yīng)該構(gòu)建哪一個額外的例程和其編譯的方式。例2 #undef TARGET_DEFAULTdefine TARGET_DEFAULT(ARM_FLAG_APCS_32|ARM_FLAG_NO_GOT)4 可執(zhí)行文件格式先對一些名詞作一些說明:coff(mon object file format):一種通用的對象文件格式elf(excutive linked file):一種為Linux系統(tǒng)所采用的通用文件格式,支持動態(tài)連接flat:elf格式有很大的文件頭,flat文件對文件頭和一些段信息做了簡化uClinux系統(tǒng)使用flat可執(zhí)行文件格式,gcc的編譯器不能直接形成這種文件格式,但是可以形成coff或elf格式的可執(zhí)行文件,這兩種文件需要coff2flt或elf2flt工具進行格式轉(zhuǎn)化,形成flat文件。當用戶執(zhí)行一個應(yīng)用時,內(nèi)核的執(zhí)行文件加載器將對flat文件進行進一步處理,主要是對reloc段進行修正。以下對reloc段進一步討論。需要reloc段的根本原因是,程序在連接時連接器所假定的程序運行空間與實際程序加載到的內(nèi)存空間不同。假如有這樣一條指令:jsr app_start。這一條指令采用直接尋址,跳轉(zhuǎn)到app_start地址處執(zhí)行,連接程序?qū)⒃诰幾g完成是計算出app_start的實際地址(設(shè)若實際地址為0x10000),這個實際地址是根據(jù)ld文件計算出來(因為連接器假定該程序?qū)⒈患虞d到由ld文件指明的內(nèi)存空間)。但實際上由于內(nèi)存分配的關(guān)系,操作系統(tǒng)在加載時無法保證程序?qū)磍d文件加載。這時如果程序仍然跳轉(zhuǎn)到絕對地址0x10000處執(zhí)行,通常情況這是不正確的。一個解決辦法是增加一個存儲空間,用于存儲app_start的實際地址,設(shè)若使用變量addr表示這個存儲空間。則以上這句程序?qū)⒏臑椋簃ovl addr, a0。jsr (a0)。增加的變量addr將在數(shù)據(jù)段中占用一個4字節(jié)的空間,連接器將app_start的絕對地址存儲到該變量。在可執(zhí)行文件加載時,可執(zhí)
點擊復(fù)制文檔內(nèi)容
黨政相關(guān)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1