嵌入式開發(fā)環(huán)境_第1頁
嵌入式開發(fā)環(huán)境_第2頁
嵌入式開發(fā)環(huán)境_第3頁
嵌入式開發(fā)環(huán)境_第4頁
嵌入式開發(fā)環(huán)境_第5頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第4章嵌入式開發(fā)環(huán)境本章主要內(nèi)容:1.嵌入式系統(tǒng)軟件開發(fā)環(huán)境的建立2.嵌入式程序調(diào)試燒寫工具3.Linux操作系統(tǒng)移植4.ARM開發(fā)工具ADS等4.1建立嵌入式系統(tǒng)的軟件開發(fā)環(huán)境本節(jié)主要介紹Linux操作系統(tǒng)。Linux操作系統(tǒng)和引導程序的編譯,根文件系統(tǒng)的制作等都要在Linux環(huán)境下進行。因此,需要一臺安裝有Linux操作系統(tǒng)的PC作為軟件開發(fā)的機器。如果現(xiàn)在使用的是安裝了Windows的計算機,那么最好的方法就是在Windows里安裝一個虛擬機,然后再在虛擬機里安裝Linux操作系統(tǒng),這樣既不影響原來的工作環(huán)境,又可建立新的開發(fā)環(huán)境。4.1.1在虛擬機上運行Linux操作系統(tǒng)

PC上常用的虛擬機軟件有VMWare和VirtualPC兩種。根據(jù)實際需求,選擇分配給虛擬機的硬盤空間。RedhatLinux典型的安裝一般是2GB左右,因此選擇8GB的空間就足夠用了。通過共享文件夾的方式,在虛擬機中還可以訪問到Windows下的文件。在虛擬機中可以通過掛起系統(tǒng)的方式,保存當前的工作環(huán)境,當重新啟動虛擬機時,再恢復到前一次的工作環(huán)境,繼續(xù)沒有完成的工作。這樣啟動的速度比重新啟動系統(tǒng)要快得多。在虛擬機上運行Linux如圖4-1所示。圖4-1在虛擬機上云新Linux常用輔助工具

嵌入式Linux一般使用ARM處理器的第一個串口做為默認的控制臺設備,啟動過程中,Linux利用printk向串口輸出啟動信息。在進行引導程序或操作系統(tǒng)移植等工作時,經(jīng)常利用串口輸出的信息進行調(diào)試。常用的串口工具有secureCRT、Windows自帶的超級終端和網(wǎng)上可以下載的免費串口工具(如串口助手和丁丁串口工具等)。圖4-2嵌入式系統(tǒng)調(diào)試用的串口工具secureCRT的窗口4.2程序調(diào)試燒寫工具學習嵌入式開發(fā)的第一個問題通常是想了解程序是怎么燒寫到閃存的。燒寫的方式有兩種,一種方法是用編程器進行燒寫,這通常是在生產(chǎn)中進行的;另一種方法是用通常芯片的JTAG口進行燒寫,在研發(fā)調(diào)試過程中一般采用這種方法。4.2.1JTAG燒寫線的制作

JTAG下載線非常簡單,就是利用PC并行端口的輸出帶鎖存的特點,使用軟件通過并口引腳產(chǎn)生JTAG時序。計算機并行口引腳的定義如表4-1所列。表4-1并行口引腳

引腳號名稱類型功能1STROBE輸出選通脈沖,低電平表示數(shù)據(jù)線上的數(shù)據(jù)有效2~9D0~D7輸出8位數(shù)據(jù)信號線10ACK輸入確認11BUSY輸入高電平表示打印機處于忙狀態(tài)12PE輸入高電平表示打印機的紙用完13SEL輸入高電平表示選擇當前打印機14AUTOFD輸出自動送紙15ERROR輸入低電平表示出現(xiàn)錯誤16INIT輸出初始化17SELIN輸出選擇18~25GND—信號地使用D0~D3作為JTAG接口的TCK、TDI和TMS,用PIN11(BUSY)作為TDO。JTAG接口的另一個信號線TRST(復位信號線)并沒有使用。電路圖如圖4-3所示。圖4-3JTAG下載線電路圖VccP133pF33pFC3C2LPT_TMSLPT_TDILPT_TCK2.2K2.2KR6R72.2KR5J1ARM_JTAG-33pF33pF33pFC7C6C5TDOLPT_TDO4.7FC100.1F+C974HCT244Vcc2.2KR4R3TDO100100R2LPT_TDI100R1LPT_TCK計算機并口12345678910111213141516171819202122232425A18A2A3A4A5A6A7A8Y18Y2Y3Y4Y5Y6Y7Y81OE2OE2468111317LPT_TMS15LPT_TDO11918161412973512345678C433pFVcc33pFC1燒寫程序Jflash簡介有了前面的下載線,再使用Jflash軟件,就可以把程序燒寫到閃存中。Jflash是使用JTAG口直接寫閃存的流行工具。Jflash在Linux和Windows操作系統(tǒng)中都可以使用,現(xiàn)在主要還是介紹在Linux中的使用。Jflash在S3C2410的嵌入式系統(tǒng)中進行燒寫時在屏幕上的輸出如圖4-4所示。圖4-4閃存燒寫程序JflashJflash命令格式:./jf2410/f:test,test是要燒寫到閃存的文件。從圖4-4中輸出的信息可以看出Jflash的版本是v0.3,嵌入式系統(tǒng)中S3C2410處理器的ID是0x0032409d,這個程序當前支持的閃存有K9S1208(Samsung公司的NandFlash)和28F128J3A(Intel公司的NorFlash)。此外,還支持內(nèi)存的讀/寫操作,包括硬件存放器的讀/寫,在開發(fā)調(diào)試中,這個功能比較有用。4.3Linux操作系統(tǒng)移植Linux操作系統(tǒng)是一個完全開放源代碼的操作系統(tǒng),用戶可以自己下載、閱讀、修改并重新編譯內(nèi)核,從而使開發(fā)人員能夠完全自己定制相關的操作系統(tǒng)功能,以適合自己的需要。在Linux操作系統(tǒng)應用到一個新的系統(tǒng)平臺時,需要進行代碼修改,也就是操作系統(tǒng)的移植。嵌入式系統(tǒng)和PC不同之處在于嵌入式系統(tǒng)的硬件設備多種多樣,同時由于資源的限制,操作系統(tǒng)又不能太龐大,因此需要針對具體系統(tǒng)進行裁剪。4.3.1Bootloader概述基于IntelX86體系結構的PC也一樣需要使用Bootloader。計算機上電后從地址0xFFFF0取第一條指令,這個地址存放的就是計算機主板的BIOS。BIOS完成開機時的硬件啟動檢測,然后讀取硬盤的引導扇區(qū)。對于使用Linux操作系統(tǒng)的計算機,引導扇區(qū)上的程序先讀入引導程序LILO或是GRUB,再由引導程序把Linux裝入到內(nèi)存中,然后把控制權交給Linux。1.Bootloader主要功能包括啟動和下載。啟動功能:所謂啟動功能就是Bootloader從嵌入式系統(tǒng)的固態(tài)存儲器(通常都是Flash)上將操作系統(tǒng)加載到RAM中運行,然后將控制權交給操作系統(tǒng),之后由操作系統(tǒng)接管系統(tǒng)的初始化和引導操作系統(tǒng)。對于使用Linux操作系統(tǒng)的ARM嵌入式系統(tǒng),Bootloader必須給Linux準備必要的運行環(huán)境:Bootloader給Linux準備必要的運行環(huán)境①ARM處理器的存放器必須滿足r0=0,r1=設備類序號(machinetypenumber),r2=啟動參數(shù)taggedlist再ARM中的物理地址。以后的內(nèi)核用taggedlist的形式來傳遞啟動參數(shù)。啟動參數(shù)從ATAG_CORE開始,至ATAG_NONE結束。②屏蔽所有中斷,ARM處理器運行模式在SVC模式。③MMU必須處于關閉狀態(tài),數(shù)據(jù)高速緩沖(Datacache)必須關閉。下載功能:在嵌入式系統(tǒng)開發(fā)的過程中,需要移植操作系統(tǒng)、編寫設備驅(qū)動等工作,在調(diào)試過程中,可能要屢次下載內(nèi)核映像文件到存儲介質(zhì)中。Bootloader可以通過串口、USB口或以太網(wǎng)口等通信接口由PC(主機)下載內(nèi)核映像文件。內(nèi)核映像文件先下載到SRAM中,這時可以直接轉(zhuǎn)移到內(nèi)核映像運行,也可以把內(nèi)核映像寫到Flash的內(nèi)核分區(qū)。Bootloader通過串口進行文件傳輸時。使用xmodem、ymodem或zmodem協(xié)議。在開發(fā)調(diào)試時,串口傳輸?shù)乃俣缺容^慢。因此,目前比較流行的Bootloader都支持以太網(wǎng)連接,通過TFTP來下載文件。目前用于ARM嵌入式Linux系統(tǒng)比較流行的Bootloader由U-Boot、vivi、Redboot和Blob等。各種Bootloader的實現(xiàn)各有特點,但完成的工作都是類似的。有的主要是在ARM嵌入式系統(tǒng)中使用,如ARMboot、vivi和Blob等;有些支持多種硬件平臺,如U-Boot和Redboot等。如果對Bootloader的功能要求不多,僅是把操作系統(tǒng)從Flash復制到RAM中運行,完全可以自己編寫一個Bootloader。2.常見的一些Bootloader(1)U-Boot(2)vivi(3)RedBoot(4)Blob操作系統(tǒng)目錄結構移植Linux操作系統(tǒng)就是修改平臺相關的源文件,因此要知道這些文件在源代碼樹中的位置,也就是要了解Linux的目錄系統(tǒng)結構,了解各個目錄下源代碼文件的功能。Linux操作系統(tǒng)源代碼非常龐大、復雜,要全部閱讀理解完整的內(nèi)核代碼幾乎是不可能的。但內(nèi)核代碼文件的組織是非常清晰的,每一個目錄都對應特定功能。系統(tǒng)的移植只是涉及其中很小一局部代碼。以內(nèi)核版本2.6為例來了解Linux的目錄結構arch這個目錄中根據(jù)Linux支持的處理器類型設置不同的子目錄,包括arm、mips和i386等。在arch/arm/目錄下,還根據(jù)不同的ARM處理器設置不同的子目錄,如mach-s3c2410等。block這個目錄中是塊設備(如硬盤)的I/O算法相關的文件。crypto加密算法相關的文件目錄。Documentation這個目錄中是內(nèi)核自帶的幫助文件。drivers設備驅(qū)動的目錄,包括串口、IDE和PCI等。fs這個目錄是存放Linux支持的各種文件系統(tǒng)源文件,如EXT3、sysfs和yaffs2等。include內(nèi)核頭文件目錄。其中目錄asm-XXX是不同處理器結構相關的頭文件,對于ARM處理器是asm-arm。init系統(tǒng)初始化可以分為兩個階段,第一個階段是和處理器結構緊密相關的代碼,根本是用匯編語言寫的;第二個階段是與處理器無關的代碼,用C語言編寫,這局部文件就放在這個目錄中。ipc進程間通信相關文件目錄,如消息隊列、信號量和共享內(nèi)容等。kernel與結構無關的根本內(nèi)核文件的目錄。lib內(nèi)核庫函數(shù)文件目錄。mm內(nèi)存管理文件目錄。net網(wǎng)絡協(xié)議相關文件目錄,如IPV4、IPV6等。scripts這個目錄存放編譯內(nèi)核時需要使用到一些腳本文件。security內(nèi)核平安相關文件目錄。sound音頻相關的文件目錄。use和initramfs文件系統(tǒng)相關的文件目錄。initramfs是一種建立在內(nèi)存中的文件系統(tǒng)。在根目錄下,還有一個Makefile文件!其他ARM架構通用的代碼:如:arch/arm/kernel::Linux核心代碼;arch/arm/mm:內(nèi)存管理代碼;arch/arm/lib:庫函數(shù);arch/arm/nwfpe:實現(xiàn)浮點計算的代碼;arch/arm/configs:各種硬件平臺的默認配置文件;arch/arm/tools:自動生成各種文件(如機器ID定義文件mach-types等)的腳本;arch/arm/boot:內(nèi)核啟動的代碼。4.3.3Bootloader與Linux操作系統(tǒng)Bootloader的功能不只是把Linux內(nèi)核加載到內(nèi)存,還要將參數(shù)傳遞內(nèi)核。以后的內(nèi)核以標記列表(taggedlist)的形式來傳遞啟動參數(shù)。參數(shù)的列表以標記ATAG_CORE開始,以標記ATAG_NONE結束。每個標記由表示被傳遞參數(shù)的tag_header結構以及隨后的參數(shù)值數(shù)據(jù)結構來組成。參數(shù)必須存放在系統(tǒng)的RAM中,推薦放在RAM的前16KB的位置。在嵌入式Linux系統(tǒng)中,常見啟動參數(shù)ATAG_CORE、ATAG_MEM、ATAG_CMDLINE、ATAG_RAMDISK和ATAG_INITRD等。4.3.4編譯及配置內(nèi)核Linux內(nèi)核源代碼修改完成后,就可以進行內(nèi)核的編譯了。在源代碼根目錄下的Makefile文件需要修改兩個地方:一是指定CPU類型,而是指定使用的編譯器。在Makefile中,修改如下:ARCH=armCROSS_COMPILE=arm-linux-編譯器gcc的版本和Linux內(nèi)核版本關系密切。從Linux源代碼根目錄下的README可以找到內(nèi)核對gcc版本的要求。4.3.5制作根文件系統(tǒng)Linux的文件系統(tǒng)有一個根節(jié)點“/〞,這個根節(jié)點存在于內(nèi)存之中。系統(tǒng)啟動時,要將某一個具體的設備安裝到節(jié)點“/〞上,稱為根設備,根設備上的文件系統(tǒng)就稱為根文件系統(tǒng)。對于PC,這個設備一般是硬盤上的某一個分區(qū);而對于嵌入式設備,通常就是Flash上的一個分區(qū)。嵌入式系統(tǒng)中常用的根文件系統(tǒng)是cramfs,這是一個只讀的文件系統(tǒng),由于使用了zlib壓縮算法,整個文件系統(tǒng)可以很小,適合嵌入式系統(tǒng)的要求。但因為它是一個只讀的文件系統(tǒng),不能隨意增加或刪除文件節(jié)點,因此需要預先用工具mkcrmfs建立文件系統(tǒng)的映像。在BootLoader中,把根文件系統(tǒng)的映像寫到Flash的某個分區(qū)中,然后再啟動Linux時將類似“root=/dev/mtdblock3〞的參數(shù)傳遞給Linux內(nèi)核。Linux的根文件系統(tǒng)一般包括如下目錄①/bin目錄中存放Linux標準命令和應用程序,如ls、cp等。②/dev目錄中存放設備文件節(jié)點。系統(tǒng)上的每個設備在/dev里都有一個對應的設備文件。這個目錄中的內(nèi)容對不同版本的Linux操作系統(tǒng)會有所不同。在沒有引入devfs文件系統(tǒng)以前,/dev目錄下的節(jié)點是預先建立好的,即在存儲介質(zhì)(硬盤、Flash等)上分配了空間。在使用了devfs文件系統(tǒng)以后,目錄/dev下的節(jié)點是動態(tài)建立的。系統(tǒng)剛啟動時,目錄為空,以后每掛載一個設備,就在目錄/dev下增加一個或是幾個節(jié)點。③/etc目錄中存放系統(tǒng)設置文件和其他的系統(tǒng)文件,例如/etc/fstab記錄了啟動時要掛載的文件系統(tǒng)。④/lib目錄中存放系統(tǒng)的動態(tài)鏈接庫文件。庫文件從編譯器(如arm-uclibc-gcc)的目錄中復制相關文件。⑤/mnt用戶臨時掛載文件系統(tǒng)的地方。嵌入式系統(tǒng)的根文件系統(tǒng)通常是使用只讀的文件系統(tǒng)cramfs,而用戶程序可能需要進行升級,同時要存儲采集的數(shù)據(jù)等。因此存儲這些可寫數(shù)據(jù)的Flash分區(qū)一般是掛載到這個目錄下。⑥/proc用于掛載proc文件系統(tǒng)。proc是Linux特殊的文件系統(tǒng),系統(tǒng)剛上電時,這個目錄為空。系統(tǒng)啟動過程中或是在設備掛載過程中,在目錄/proc中動態(tài)生成各種文件。這個目錄下的文件也是比較特殊的,文件的內(nèi)容是在讀/寫時根據(jù)系統(tǒng)相關信息生成。⑦/root超級用戶主目錄。⑧/sbin目錄中存放系統(tǒng)管理程序,如fsck和mount等;⑨/tmp目錄中存放不同的程序執(zhí)行時產(chǎn)生的臨時文件。但由于根文件系統(tǒng)為只讀文件系統(tǒng),因此必須在這個目錄下掛載其他的文件系統(tǒng)。⑩/usr目錄中存放用戶應用程序和文件,通常有/usr/bin和/usr/sbin等子目錄。例如,假設存放根文件系統(tǒng)的目錄名為/home/qcd/myroot/,那么可用以下命令生成cramfs的根文件系統(tǒng):mkcramfs/home/qcd/myrootmyroot.img即可在當前目錄下生成名為myroot.img的文件系統(tǒng)映像。為了確認文件系統(tǒng)的映像是否正確,可以用以下命令把它掛載到某個目錄(如/mount/myroot)下查看其內(nèi)容:mout-oloop-tcramfsmyroot.img/mount/myroot根文件系統(tǒng)各個目錄的作用和在PC上的Linux操作系統(tǒng)的文件系統(tǒng)是一樣的。4.4ARM開發(fā)工具ADS根底ARMADS全稱為ARMDeveloperSuite,是由ARM公司提供的專門用于ARM處理器應用開發(fā)和調(diào)試的綜合性工具軟件。目前使用的ADS1.2版本是一款功能強大的開發(fā)工具和易于使用的集成開發(fā)環(huán)境(IntegratedDevelopmentEnvironment,IDE)。它可以安裝在WindowsNT4,Windows2000,Windows98,Windows95,WindowsXP和WindowsMe操作系統(tǒng)中。ADS囊括了一系列的應用工具,并有相關的文檔和實例的支持。使用者可以用它來編寫和調(diào)試各種基于ARM家族處理器的應用,可以為ARM和Thumb處理器開發(fā)、編譯和調(diào)試采用C、C++和ARM匯編語言編寫的程序代碼。ADS主要包含CodeWarriorIDE和AXD兩局部。CodeWarriorIDE工具主要用于工程的管理配置、源程序的編輯、編譯和鏈接;AXD主要用于工程的下載和調(diào)試。本節(jié)將重點介紹圖形界面的ADS1.2IDE開發(fā)工具。CodeWarriorIDECodeWarriorIDE是基于Windows操作系統(tǒng)平臺的工程管理工具,用戶可以根據(jù)特定的目標系統(tǒng)配置工具環(huán)境,為源代碼文件、庫文件建立工程,通過編譯鏈接可生成包含調(diào)試信息的ELF格式的映像文件(*.asf)和可以直接燒寫至Flash的BIN格式的二進制可執(zhí)行文件(*.bin)。用戶使用CodeWarriorIDE,可以便捷地管理工程、源文件和編譯工程等。AXD是基于Windows操作系統(tǒng)平臺的ARM調(diào)試器,它提供了一個功能完備的調(diào)試環(huán)境,可用于調(diào)試C、C++和匯編語言級編寫的用戶代碼。在AXD中翻開ELF格式映像文件后,可以選擇全速運行代碼、設置斷點或單步運行代碼,可以查看各個存放器、存儲器單元及變量的值等。1.ADS環(huán)境下ARM程序開發(fā)方式(1)開發(fā)工具(2)編譯器(3)仿真與調(diào)試目前常見的調(diào)試方法有4種:1)指令集模擬器2)Angel調(diào)試監(jiān)控軟件3)JTAG(JointTestActionGroup,聯(lián)合測試行為組織)仿真器4)在線仿真器ICE2.ADS工具介紹(1)CodeWarrior集成開發(fā)環(huán)境CodeWarrior集成開發(fā)環(huán)境(CodeWarriorIDE)是一套專為基于ARM處理器而設計的、完整的集成開發(fā)工具,它充分發(fā)揮了ARM處理器體系結構的優(yōu)勢。開發(fā)人員只需在一個集成軟件環(huán)境中就能完成ARM應用開發(fā)的各個階段。在整個開發(fā)周期中,開發(fā)人員無需離開CodeWarrior開發(fā)環(huán)境,節(jié)省了在不同環(huán)境工具間的切換等,使得開發(fā)人員有更多的精力投入到代碼的編寫和調(diào)試中。(2)ADS調(diào)試器ADS調(diào)試器(AXD)是一個工具軟件,用戶使用AXD可以對用戶程序進行諸如斷電的設置與去除、程序運行控制、單步執(zhí)行、存放器數(shù)據(jù)監(jiān)視和變量的查看等調(diào)試操作。AXD掛接在CodeWarriorIDE中,用戶可在CodeWarriorIDE中直接點擊啟動AXD,調(diào)試用戶程序;也可以單獨啟動AXD,加載、調(diào)試用戶代碼。4.4.2ADS中的工程管理工具CodeWarriorIDE1.ADS系統(tǒng)中的文件類型2.工程模板3.創(chuàng)立工程4.工程管理4.4.5AXD調(diào)試器中常用的調(diào)試窗口1.Registers窗口選擇菜單【AXD】→【ProcessorViews】→【Registers】,翻開ARM7TDMI-SRegisters窗口,如圖4-22Registers窗口所示。2.Memory窗口選擇菜單【AXD】→【ProcessorViews】→【Memory】,翻開ARM7TDMI-SMemory窗口,如圖4-23所示。Memory窗口顯示了某個存儲區(qū)域的內(nèi)容。使用Memory窗口,可以實現(xiàn)下面的功能:(1)通過窗口上的垂直滾動條顯示存儲區(qū)域的內(nèi)容,顯示格式可由用戶指定。(2)修改某存儲單元的內(nèi)容。(3)在ARM7TDMI-MemroyStartAddr欄中可以指定查看存儲的地址。圖4-23Memory窗口3.Disassembly窗口選擇菜單【AXD】→【ProcessorViews】→【Disassembly】,翻開ARM7TDMI-SDisassembly窗口,如圖4-24所示。Disass

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論