嵌入式Linux開發(fā)環(huán)境搭建



Click to edit Title Slide,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,嵌入式,Linux,開發(fā)環(huán)境搭建,廣州嵌入式軟件公共技術(shù)支持中心,梁老師,2007,年,04,月,嵌入式系統(tǒng)定義,嵌入到對象體中的專用計算機系統(tǒng),三要素:,嵌入、專用、計算機,嵌入式系統(tǒng)的特點,:,由三要素引出,嵌入性,:嵌入到對象體系中,有對象環(huán)境要求,專用性,:軟、硬件按對象要求裁減,計算機,:實現(xiàn)對象的智能化功能,嵌入式系統(tǒng)的應(yīng)用,嵌入式Linux開發(fā)環(huán)境,嵌入式系統(tǒng)通常是一個資源受限的系統(tǒng),因此直接在嵌入式系統(tǒng)的硬件平臺上編寫軟件比較困難,有時候甚至是不可能的解決辦法:,首先在通用計算機上編寫程序;,然后通過,交叉編譯,生成目標平臺上可以運行的二進制代碼格式;,最后,再下載到目標平臺上,的特定位置上運行嵌入式Linux開發(fā)環(huán)境,關(guān)于交叉編譯,在一種平臺上編譯出能在另一種平臺(體系結(jié)構(gòu)不同)上運行的程序在,PC,平臺,(X86 CPU),上編譯出能運行在,arm,平臺上的程序,編譯得到的程序在,X86 CPU,平臺上是不能運行的,必須放到,arm,平臺上才能運行。
用來編譯這種程序的編譯器就叫,交叉編譯器,為了不跟本地編譯器混淆,交叉編譯器的名字一般都有前綴例如:,arm-linux-gcc,嵌入式Linux開發(fā)環(huán)境,嵌入式Linux開發(fā)環(huán)境,嵌入式Linux開發(fā)環(huán)境,需要交叉開發(fā)環(huán)境(,Cross Development Environment,)的支持是嵌入式應(yīng)用軟件開發(fā)時的一個顯著特點交叉編譯器只是交叉開發(fā)環(huán)境的一部分交叉開發(fā)環(huán)境,是指編譯、鏈接和調(diào)試嵌入式應(yīng)用軟件的環(huán)境,它與運行嵌入式應(yīng)用軟件的環(huán)境有所不同,通常采用,宿主機目標機模式,嵌入式Linux開發(fā)環(huán)境,宿主機目標板模式,宿主機(,Host,)是一臺通用計算機,它,通過串口或者以太網(wǎng)接口與目標機通信,宿主機的軟硬件資源比較豐富,能夠大大提高嵌入式應(yīng)用軟件的開發(fā)速度和效率目標板(,Target,),應(yīng)用程序?qū)嶋H運行的平臺,或者是能夠替代實際運行環(huán)境的仿真系統(tǒng)軟硬件資源通常都比較有限嵌入式Linux開發(fā)環(huán)境,宿主機目標機模式,首先利用宿主機上豐富的資源和良好的開發(fā)環(huán)境開發(fā)和仿真調(diào)試目標機上的軟件;,然后通過串口或者以網(wǎng)絡(luò)將交叉編譯生成的目標代碼傳輸并裝載到目標機上,并在監(jiān)控程序或者操作系統(tǒng)的支持下利用交叉調(diào)試器進行分析和調(diào)試;,最后目標機在特定環(huán)境下脫離宿主機單獨運行。
嵌入式Linux開發(fā)環(huán)境,開放的交叉開發(fā)環(huán)境的典型代表是GNU工具鏈目前已經(jīng)能夠支持x86、ARM、MIPS、PowerPC等多種處理器商業(yè)的交叉開發(fā)環(huán)境則主要有Metrowerks CodeWarrior、ARM Software Development Toolkit等等嵌入式Linux開發(fā)環(huán)境,GNU,交叉工具鏈,交叉編譯器,例如,arm-linux-gcc,交叉匯編器,例如,arm-linux-as,交叉鏈接器,例如,arm-linux-ld,用于處理可執(zhí)行程序和庫的一些基本工具例如,arm-linux-strip,嵌入式Linux開發(fā)環(huán)境,GNU,交叉工具鏈的下載,ARM,官方網(wǎng)站下載,可以從該站點下載以及,3.2,工具鏈,嵌入式Linux開發(fā)環(huán)境,包的安裝:,mkdir/usr/local/arm,cp cross-2.95.3.tar.bz2/usr/local/arm,添加環(huán)境變量,在文件,/etc/bashrc,文件最后添加:,export PATH=/usr/local/arm/2.95.3/bin:$PATH,工具,鏈安裝完,成嵌入式Linux開發(fā)環(huán)境,GNU交叉工具鏈的常用工具介紹,嵌入式Linux開發(fā)環(huán)境,主要工具的使用,arm-linux-gcc,的使用,arm-linux-gcc o hello hello.c,arm-linux-ar,和,arm-linux-ranlib,的使用,建立一個靜態(tài)庫,arm-linux-ar r libhello.a h1.o h2.o,為靜態(tài)庫建立索引,arm-linux-ar s libhello.a,arm-linux-ranlib libhello.a,由靜態(tài)庫產(chǎn)生可執(zhí)行文件,arm-linux-gcc-o hello hello.c lhello L./,arm-linux-gcc-o hello hello.c libhello.a,嵌入式Linux開發(fā)環(huán)境,主要工具的使用,arm-linux-strip,的使用,移除所有的符號信息,-strip-all,Cp hello hello1,arm-linux-strip,-strip-all,hello,-rwxr-xr-x 1 arm root,2856,7,月,3 15:14 hello,-rwxr-xr-x 1 arm root,13682,7,月,3 15:13 hello1,被,strip,后的,hello,程序比原來的,hello1,程序要小很多。
移除調(diào)試符號信息,-g,arm-linux-strip -g hello,-rwxr-xr-x 1 arm root,4501,7,月,3 15:17 hello,-rwxr-xr-x 1 arm root,13682,7,月,3 15:13 hello1,遠程訪問目標板,如何觀察應(yīng)用程序在目標板的運行情況,即查看程序的輸出信息?,通過串口線連接宿主機和目標板配置串口做為目標板的輸出設(shè)備例如在交叉編譯目標板的,linux,內(nèi)核時,配置指定終端為串口:,noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttyS0,115200,在宿主機上通過串口通信軟件查看目標板系統(tǒng)的運行情況遠程訪問目標板,超級終端的使用,打開超級終端,超級終端程序通常位于附件中的通訊中,,“Hypertrm”,圖標所指即是超級終端程序為新的連接取一個名字,遠程訪問目標板,超級終端的使用,選擇連接目標板的串口,遠程訪問目標板,超級終端的使用,設(shè)置串口,注意必須選擇,無流控制,,否則只能看到輸出而不能輸入串口波特率是,11520,遠程訪問目標板,超級終端的使用,當所有的連接參數(shù)都設(shè)置好以后,打開目標板電源開關(guān),就會看到系統(tǒng),的啟動信息,當,Linux,啟動以后,超級終端就相當于虛擬終端,可通過它來操作目標板。
選擇超級終端“文件”菜單下的“另存為,”,,保存該連接設(shè)置,以便于以后再連接時就不必重新執(zhí)行以上設(shè)置了,遠程訪問目標板,超級終端的使用,打開目標板電源開關(guān),就會看到系統(tǒng),的啟動信息,當,Linux,啟動以后,超級終端就相當于虛擬終端,可通過它來操作目標板遠程訪問目標板,minicom,的使用,minicom,的設(shè)置:,minicom-s,遠程訪問目標板,minicom,的使用,選擇串口,選擇菜單中的“,Serial port setup”,,按回車,進入如下圖所示界面按“,A”,以設(shè)置“,Serial Device”,(串口,1-/dev/ttyS0,,串口,2-/dev/ttyS1),遠程訪問目標板,minicom,的使用,設(shè)置波特率,按“,E”,鍵進入設(shè)置“,bps/par/Bits”,(波特率)界面再按“,I”,以設(shè)置波特率為,115200,遠程訪問目標板,minicom,的使用,設(shè)置無流控制,按回車退回到上一級菜單,按“,F”,鍵設(shè)置“,Hardware Flow Control”,為“,NO”,,其他選項使用缺省值遠程訪問目標板,minicom,的使用,保存設(shè)置,再選擇“,Exit”,退出設(shè)置模式。
剛才的設(shè)置被保存到“,/etc/minirc.dfl”,設(shè)置完畢,打開目標板電源的電源開關(guān),,minicom,輸出目標板的啟動信息,當,Linux,啟動以后,,minicom,就相當于虛擬終端,可通過它來操作目標板遠程訪問目標板,minicom,的使用,退出,minicom,同時按下“,Ctrl+A”,鍵,緊接著再按下“,Q”,鍵,在跳出的窗口中,選擇“,Yes”,下載程序映象到目標板,通過串口下載,使用三星公司的,DNW,軟件設(shè)置波特率,115200,、端口號、下載地址,0 x30200000,上電啟動開發(fā)板,進入,BIOS,界面,選擇,2,串口下載,點擊“,serial port”,菜單,選擇“,Transmit”,選項,下載程序映象到目標板,通過,usb,下載,同樣使用三星公司的,DNW,軟件設(shè)置波特率,115200,、端口號、下載地址,0 x30200000,上電啟動開發(fā)板,進入,BIOS,界面,接上,USB DEVICE,的連接線,選擇“,0”,,選擇,USB,下載,注意用,USB,下載要先在,PC,端裝好驅(qū)動程序,保證,USB,連接好有時,PC,端出現(xiàn)發(fā)現(xiàn)無法識別的,USB,設(shè)時,可在,BIOS,中輸入,ESC,取消下載,等幾秒鐘再輸入“,0”,啟動,USB,下載。
出現(xiàn)“,Now USB is connected”,說明,USB,正確枚舉點擊“,USB Port”Transmit”,選項下載程序映象到目標板,通過,TFTP,方式下載,TFTP,協(xié)議是簡單的文件傳輸協(xié)議,適合目標板,Bootloader,的使用u-boot,、,vivi,),TFTP,文件傳輸基于,UDP,通過,TFTP,來傳輸目標板啟動需要的內(nèi)核映象文件,zImage,傳輸速度快,使用方便下載程序映象到目標板,通過,TFTP,方式下載,tftp,分服務(wù)器和客戶端在宿主機開啟,tftp,服務(wù),設(shè)置好,tftp,的根目錄內(nèi)容,在目標板開啟,tftp,客戶端程序在目標板的,bootloader,交互節(jié)目中通過,tftpboot,命令下載內(nèi)核tftpboot 0 x30200000 zImage,下載程序映象到目標板,通過,TFTP,方式下載,Linux,的,tftp,服務(wù)器的配置,編輯,/etc/xinetd.d/tftp,只有在安裝了,tftp,服務(wù)后,才會出現(xiàn),tftp,文件修改其中,disable,和,server_args,項,其余可保持不變Service tftp,socket type=dgram,protocol=udp,wait=yes,user=root,server=/usr/sbin/in.tftpd,server_args=-s/tftpboot-,設(shè)置,tftp,服務(wù)輸出目錄。
disable=no-,默認為,yes,,應(yīng)修改成,no,per_source=11,cps=100 2,flags=IPv4,下載程序映象到目標板,通過,TFTP,方式下載,重啟,xinetd,服務(wù),使得更改的配置有效,Service xinetd restart,確認,tftp,服務(wù)是否已經(jīng)開啟,netstat -au,在目標板啟動,tftp,客戶端程序,tftpboot 0 x30200000 zImage,下載信息:,Filename zImage.,Load address:0 x30200000,Loading:,#,#,#,done,Bytes transferred=913880(df1d8 hex),下載程序映象到目標板,通過掛載,NFS,方式下載,NFS,服務(wù)就是將宿主機的一個目錄通過網(wǎng)絡(luò)可以被掛載到其他計算機上,并且,作為其他計算機的一個目錄,在嵌入式開發(fā)中,通過,NFS,可以很方便的將修改的文件通過,NFS,傳輸?shù)侥繕税迳喜挥梅磸?fù)燒寫鏡像文件下載程序映象到目標板,通過掛載,NFS,方式下載,NFS,的使用分服務(wù)器端和客戶端,服務(wù)器端提供要共享的文件,客戶端通過掛載“,mount”,實現(xiàn)對共享文件的訪問操作。
