版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第二章搭建
Linux交叉編譯開發(fā)環(huán)境
Crosscompilingenvironment第二章搭建
Linux交叉編譯開發(fā)環(huán)境
Crossco什么是交叉編譯呢?簡(jiǎn)單地說,就是在一個(gè)平臺(tái)上生成另一個(gè)平臺(tái)上的可執(zhí)行代碼。這里需要注意的是所謂平臺(tái),實(shí)際上包含兩個(gè)概念:體系結(jié)構(gòu)(Architecture)和操作系統(tǒng)(OperatingSystem)。同一個(gè)體系結(jié)構(gòu)可以運(yùn)行不同的操作系統(tǒng);同一個(gè)操作系統(tǒng)也可以在不同的體系結(jié)構(gòu)上運(yùn)行。2.1什么是交叉編譯
什么是交叉編譯呢?簡(jiǎn)單地說,就是在一個(gè)平臺(tái)上生成另一個(gè)22.2.1編譯工具鏈以下是一個(gè)基于RedHatlinux的交叉編譯環(huán)境的建立過程。整個(gè)編譯過程包括:下載源文件、補(bǔ)丁和建立編譯的目錄;建立內(nèi)核頭文件;建立二進(jìn)制工具(binutils);建立初始編譯器(bootstrapgcc);建立c庫(kù)(glibc);建立全套編譯器(fullgcc)。2.2建立交叉編譯開發(fā)工具鏈
2.2.1編譯工具鏈2.2建立交叉編譯開發(fā)工具鏈
3需求:下載源文件、補(bǔ)丁和建立編譯的目錄
a,下載:binutils-2.11.2.tar,diff-2.4.9-ac9-rmk1-np1,gcc-2.95.3.tar,glibc-2.2.4.tar,glibc-linuxthreads-2.2.4.tar,linux-2.4.9.tar,patch-2.4.9-ac9,patch-2.4.9-ac9-rmk1,patch-2.4.9-ac9-rmk2 b,建目錄:將所有的源代碼放到/usr/tmp/下; 交叉編譯器將安裝在/opt/host/armv5/
2.2建立交叉編譯開發(fā)工具鏈需求:下載源文件、補(bǔ)丁和建立編譯的目錄2.2建立交叉編譯開4
建立整個(gè)toolchain的步驟
2.2建立交叉編譯開發(fā)工具鏈 建立整個(gè)toolchain的步驟2.2建立交叉編譯開發(fā)5(1)Installingbinutils#cd/tmp#tarzxvfbinutils-2.11.2.tar.gz#cdbinutils-2.11.2#./configure--target=armv5-unknown-linux--prefix=/opt/host/armv5#make#makeinstall2.2建立交叉編譯開發(fā)工具鏈(1)Installingbinutils2.2建立交6注意:這樣就在/opt/host/armv5/bin下產(chǎn)生了binutils,它們的作用如下:addr2line——將要找的地址轉(zhuǎn)成文件和行號(hào),它要使用debug信息。ar——產(chǎn)生、修改和解開一個(gè)存檔文件。as——gnu的匯編器。2.2建立交叉編譯開發(fā)工具鏈注意:這樣就在/opt/host/armv5/bin下產(chǎn)生了7c++filt——C++和java中有一種重載函數(shù),所用的重載函數(shù)最后會(huì)被編譯轉(zhuǎn)化成匯編的標(biāo)號(hào),c++filt就是實(shí)現(xiàn)這種反向的轉(zhuǎn)化,根據(jù)標(biāo)號(hào)得到函數(shù)名。gasp——gnu匯編器預(yù)編譯器。2.2建立交叉編譯開發(fā)工具鏈2.2建立交叉編譯開發(fā)工具鏈8ld——gnu的連接器。nm——列出目標(biāo)文件的符號(hào)和對(duì)應(yīng)的地址。objcopy——將某種格式的目標(biāo)文件轉(zhuǎn)化成另外格式的目標(biāo)文件。objdump——顯示目標(biāo)文件的信息。2.2建立交叉編譯開發(fā)工具鏈ld——gnu的連接器。2.2建立交叉編譯開發(fā)工具鏈9ranlib——為一個(gè)存檔文件產(chǎn)生一個(gè)索引,并將這個(gè)索引存入存檔文件中。readelf——顯示elf格式的目標(biāo)文件的信息。size——顯示目標(biāo)文件各個(gè)節(jié)的大小和目標(biāo)文件的大小。strings——打印出目標(biāo)文件中可以打印的字符串,有個(gè)默認(rèn)的長(zhǎng)度,為4。strip——?jiǎng)兊裟繕?biāo)文件的所有的符號(hào)信息。2.2建立交叉編譯開發(fā)工具鏈ranlib——為一個(gè)存檔文件產(chǎn)生一個(gè)索引,并將這個(gè)索引存入10(2)輸出工具的路徑,使得以后的編譯工作能看到這些工具:
#exportPATH=/opt/host/armv5/bin:$PATH2.2建立交叉編譯開發(fā)工具鏈(2)輸出工具的路徑,使得以后的編譯工作能看到這些工具:2.11(3)建立編譯需要使用的頭文件#cd/tmp#tarzxvflinux-2.4.9.tar.gz#mvlinuxlinux-2.4.9-ac9-rmk1-np1#mvpatch-2.4.9-ac9.gzpatch-2.4.9-ac9-rmk1.bz2diff-2.4.9-ac9-rmk1-np1.gz./linux-2.4.9-ac9-rmk1-np12.2建立交叉編譯開發(fā)工具鏈(3)建立編譯需要使用的頭文件2.2建立交叉編譯開發(fā)工具鏈12#cdlinux-2.4.9-ac9-rmk1-np1:kernel2.4.9#gzip-cdpatch-2.4.9-ac9.gz|patch-p1:AlanCoxpatch#bzip2-cdpatch-2.4.9-ac9-rmk1.bz2|patch-p1:RussellKingpatch#gzip-cddiff-2.4.9-ac9-rmk1-np1.gz|patch-p1:NicholasPitrepatch#makemenuconfig:DotocreateARMheaderfiles.Whenyouexit,selectsaveitem.#cdlinux-2.4.9-ac9-rmk1-np113#makedep:Alsodotocreateheaderfiles.#cd/opt/host/armv4l/armv4l-unknown-linux#cdinclude:Ifnotexisting,makeincludedirectory.#cp-a/usr/include/*.:Copyallheaderfilesunder/usr/includedirtothecurrentdir.#makedep:Alsodotocreate14#ln-s/tmp/linux-2.4.9-ac9-rmk1-np1/include/asm-armasm#ln-s/tmp/linux-2.4.9-ac9-rmk1-np1/include/linuxlinux注意:要把linux的頭文件拷做來(lái)作為編譯的頭文件的原因是,我們要編譯的是給ARM處理器使用的編譯器,那么就需要一個(gè)用于ARM處理器的Linux內(nèi)核系統(tǒng)的頭文件#ln-s/tmp/linux-2.4.9-ac9-r15(4)編譯ARM-GCC交叉編譯器#cdgcc-2.95.3#./configure--target=armv4l-unknown-linux--prefix=/opt/host/armv4l#makeLANGUAGES=c#makeLANGUAGES=cinstall(4)編譯ARM-GCC交叉編譯器16注意:gcc——gnu的C語(yǔ)言編譯器。unprotoize——將ANSIC的源碼轉(zhuǎn)化為K&RC的形式,去掉函數(shù)原型中的參數(shù)類型。cpp——gnu的C的預(yù)編譯器。gcov——gcc的輔助測(cè)試工具,可以用它來(lái)分析和優(yōu)化程序。2.2建立交叉編譯開發(fā)工具鏈注意:2.2建立交叉編譯開發(fā)工具鏈17建立c庫(kù)(glibc)
#cd/tmp#tarzxvfglibc-2.2.4.tar.gz#mvglibc-linuxthreads-2.2.4.tar.gz./glibc-2.2.4#cdglibc-2.2.4#tarzxvfglibc-linuxthreads-2.2.4.tar.gz2.2建立交叉編譯開發(fā)工具鏈建立c庫(kù)(glibc)2.2建立交叉編譯開發(fā)工具鏈18#CC=armv5-unknown-linux-gcc./configurearm-linux--enable-add-ons--build=i686-pc-linux-gnu--disable-iconv--with-headers=/tmp/linux-2.4.9-ac9-rmk1-np1/include--prefix=/opt/host/armv4l#make#makeinstall2.2建立交叉編譯開發(fā)工具鏈#CC=armv5-unknown-linux-gcc.19注意:glibc主要是程序運(yùn)行所需要的庫(kù)函數(shù)的集合,包括輸入輸出,數(shù)學(xué),io控制等等2.2建立交叉編譯開發(fā)工具鏈注意:glibc主要是程序運(yùn)行所需要的庫(kù)函數(shù)的集合,包括輸入20 (6)安裝g++#cd/tmp/gcc-2.95.3#./configure--target=armv4l-unknown-linux--with-libs=/opt/host/armv4l/lib--with-headers=/opt/host/armv4l/include--prefix=/opt/host/armv4l#makeLANGUAGES="cc++"#makeLANGUAGES="cc++"install2.2建立交叉編譯開發(fā)工具鏈 (6)安裝g++2.2建立交叉編譯開發(fā)工具鏈21注意:g++——gnu的c++編譯器。protoize——與unprotoize相反,將K&RC的源碼轉(zhuǎn)化為ANSIC的形式,函數(shù)原型中加入?yún)?shù)類型。c++——gnu的c++編譯器。2.2建立交叉編譯開發(fā)工具鏈注意:2.2建立交叉編譯開發(fā)工具鏈222.2.2下載工具鏈這里主要介紹一下Denx公司發(fā)布的一整套開放源碼的嵌入式Linux開發(fā)工具鏈——ELDK(EmbeddedLinuxDevelopmentKit)
ELDK可以安裝和運(yùn)行在以下主機(jī)環(huán)境中:FedoraCore1,2,3RedHatLinux7.3,8.0,9SuSELinux8.x,9.0,9.1,9.22.2建立交叉編譯開發(fā)工具鏈2.2.2下載工具鏈2.2建立交叉編譯開發(fā)工具鏈23Debian3.0(Woody)andtesting(Sarge)Ubuntu4.10FreeBSD5.0SuseLinux7.2,7.3Mandrake8.2Slackware8.1beta2GentooLinux1.4_rc2ELDK同時(shí)支持ARM、PPC、MIPS等多種處理器。2.2建立交叉編譯開發(fā)工具鏈Debian3.0(Woody)andtesting24 ELDK包括了一個(gè)安裝工具和許多RPM包,他們可以安裝到用戶的交叉編譯的主機(jī)的硬盤中。ELDK的RPM包可以分為2種:嵌入式Linux開發(fā)工具;為目標(biāo)處理器編譯好的工具和元件。其中,第一部分包括執(zhí)行在開發(fā)主機(jī)上的交叉編譯工具,有GNU交叉編譯器GCC、Binutils和GDB等。第二部分是一些已經(jīng)編譯好的、可以在目標(biāo)開發(fā)板上運(yùn)行的工具和庫(kù)。這些工具和庫(kù)可以用來(lái)建立一個(gè)Linux的Roofs文件系統(tǒng)。2.2建立交叉編譯開發(fā)工具鏈 ELDK包括了一個(gè)安裝工具和許多RPM包,他們可以安裝到用252.2.3驗(yàn)證工具鏈 注意: 通過上述兩種方式建立的工具鏈,還需要經(jīng)過驗(yàn)證方可使用,我們主要通過實(shí)際編譯一個(gè)例子程序來(lái)驗(yàn)證。2.2建立交叉編譯開發(fā)工具鏈2.2.3驗(yàn)證工具鏈2.2建立交叉編譯開發(fā)工具鏈26在嵌入式軟件開發(fā)過程中,有些主機(jī)服務(wù)是必要的,同時(shí)也會(huì)為我們的開發(fā)工作帶來(lái)便利。這里主要介紹四種主機(jī)服務(wù):samba、DHCP、TFTP和NFS。
2.3配置主機(jī)服務(wù)
在嵌入式軟件開發(fā)過程中,有些主機(jī)服務(wù)是必要的,同時(shí)也會(huì)為我們272.3.1配置sambaSamba服務(wù)使Linux和Windows之間實(shí)現(xiàn)文件共享,方便對(duì)文件的編輯。
1) 修改samba配置文件/etc/samba/smb.conf 2) 為Samba創(chuàng)建一個(gè)單獨(dú)的口令文件。要根據(jù)你的現(xiàn)存/etc/passwd文件來(lái)創(chuàng)建 3) 改變Samba口令文件的權(quán)限許可,因此只有根用戶才有讀寫權(quán)限
2.3配置主機(jī)服務(wù)
2.3.1配置samba
2.3配置主機(jī)服務(wù)
28
4) 要設(shè)置每個(gè)Samba用戶的口令,使用以下命令(把username替換為每個(gè)用戶的用戶名) 5) 加密口令必須在Samba配置文件中被啟用 6) 在shell提示下鍵入servicesmbrestart來(lái)確定smb服務(wù)被啟動(dòng) 7) 為避免每次啟動(dòng)主機(jī)都要手工啟動(dòng)samba服務(wù),使用命令使得samba服務(wù)在每次系統(tǒng)啟動(dòng)時(shí)都默認(rèn)執(zhí)行
2.3配置主機(jī)服務(wù)
4) 要設(shè)置每個(gè)Samba用戶的口令,使用以下命令(把292.3.2配置DHCPDHCP是動(dòng)態(tài)主機(jī)配置協(xié)議。這個(gè)協(xié)議用于向計(jì)算機(jī)自動(dòng)提供IP地址,子網(wǎng)掩碼和路由信息。在開發(fā)的過程中,目標(biāo)系統(tǒng)并沒有自己的靜態(tài)IP地址,它是在啟動(dòng)時(shí)向DHCP服務(wù)器申請(qǐng),因此需要在主機(jī)上配置DHCP服務(wù),以便在目標(biāo)系統(tǒng)請(qǐng)求IP時(shí),動(dòng)態(tài)為它分配IP地址。DHCP服務(wù)的配置文件為/etc/dhcpd.conf,通過修改該文件進(jìn)行配置。etc/dhcpd.conf通常包括三部分:parameters、declarations、option。
2.3配置主機(jī)服務(wù)
2.3.2配置DHCP
2.3配置主機(jī)服務(wù)
30 (1) DHCP配置文件中的parameters(參數(shù)):表明如何執(zhí)行任務(wù),是否要執(zhí)行任務(wù),或?qū)⒛男┚W(wǎng)絡(luò)配置選項(xiàng)發(fā)送給客戶
(2) DHCP配置文件中的declarations(聲明):用來(lái)描述網(wǎng)絡(luò)布局、提供客戶的IP地址等 (3) DHCP配置文件中的option(選項(xiàng)):用來(lái)配置DHCP可選參數(shù),全部用option關(guān)鍵字作為開始
2.3配置主機(jī)服務(wù)
(1) DHCP配置文件中的parameters(參數(shù)):31重新啟動(dòng)dhcp服務(wù)為避免每次啟動(dòng)主機(jī)都要手工啟動(dòng)dhcp服務(wù),使用命令使得dhcp服務(wù)在每次系統(tǒng)啟動(dòng)時(shí)都默認(rèn)執(zhí)行
2.3配置主機(jī)服務(wù)
重新啟動(dòng)dhcp服務(wù)
2.3配置主機(jī)服務(wù)
322.3.3配置TFTP 在目標(biāo)系統(tǒng)的開發(fā)過程中,Linux內(nèi)核是從主機(jī)下載到目標(biāo)系統(tǒng)上解壓并運(yùn)行的,因此主機(jī)必須提供這種文件傳輸服務(wù)。Tftp是一種簡(jiǎn)單的文件傳輸協(xié)議,多用于嵌入系統(tǒng)應(yīng)用中,因此主機(jī)需要配置tftp服務(wù),供下載內(nèi)核時(shí)使用
2.3配置主機(jī)服務(wù)
2.3.3配置TFTP
2.3配置主機(jī)服務(wù)
33修改配置參數(shù)在主機(jī)上創(chuàng)建/tftpboot目錄,以供存放內(nèi)核重新啟動(dòng)tftp服務(wù)為避免每次啟動(dòng)主機(jī)都要手工啟動(dòng)tftp服務(wù),使用命令使得tftp服務(wù)在每次系統(tǒng)啟動(dòng)時(shí)都默認(rèn)執(zhí)行
2.3配置主機(jī)服務(wù)
修改配置參數(shù)
2.3配置主機(jī)服務(wù)
342.3.4配置NFS 網(wǎng)絡(luò)文件系統(tǒng)(NFS)是一種在網(wǎng)絡(luò)上的機(jī)器間共享文件的方法,在開發(fā)的過程中,目標(biāo)系統(tǒng)沒有足夠的本地存儲(chǔ)設(shè)備供使用,它可以通過主機(jī)提供的NFS服務(wù),使用在主機(jī)上的文件系統(tǒng),就如同位于本地硬盤驅(qū)動(dòng)器上一樣
2.3配置主機(jī)服務(wù)
2.3.4配置NFS
2.3配置主機(jī)服務(wù)
35修改NFS配置文件
注意: 上面格式表示,同一共享目錄提供給兩個(gè)不同的主機(jī),但提供給這兩臺(tái)主機(jī)的權(quán)限和參數(shù)可以是不同的。可以設(shè)定的參數(shù)主要有以下幾種:
2.3配置主機(jī)服務(wù)
修改NFS配置文件
2.3配置主機(jī)服務(wù)
36rw:可讀寫的權(quán)限;ro:只讀的權(quán)限;root_squash:root用戶的所有請(qǐng)求映射成如anonymous用戶一樣的權(quán)限(默認(rèn));no_root_squash:保留共享文件的UID和GID(默認(rèn));all_squash:共享文件的UID和GID映射匿名用戶anonymous,適合公用目錄;
2.3配置主機(jī)服務(wù)
rw:可讀寫的權(quán)限;
2.3配置主機(jī)服務(wù)
37no_all_squash:保留共享文件的UID和GID(默認(rèn));sync:資料同步寫入到內(nèi)存與硬盤當(dāng)中;async:資料會(huì)先暫存于內(nèi)存當(dāng)中,而非直接寫入硬盤;secure
:NFS通過1024以下的安全TCP/IP端口發(fā)送;insecure:NFS通過1024以上的端口發(fā)送;hide
:在NFS共享目錄中不共享其子目錄;no_hide
:共享NFS目錄的子目錄
2.3配置主機(jī)服務(wù)
no_all_squash:保留共享文件的UID和GID(默38重新啟動(dòng)NFS服務(wù)為避免每次啟動(dòng)主機(jī)都要手工啟動(dòng)dhcp服務(wù),使用命令使得dhcp服務(wù)在每次系統(tǒng)啟動(dòng)時(shí)都默認(rèn)執(zhí)行
2.3配置主機(jī)服務(wù)
重新啟動(dòng)NFS服務(wù)
2.3配置主機(jī)服務(wù)
39 本章主要向讀者介紹了如何搭建一個(gè)嵌入式Linux交叉編譯開發(fā)環(huán)境。我們首先介紹了“什么是交叉編譯”,接著向讀者展示了建立交叉編譯開發(fā)工具鏈的兩種方法。在自己動(dòng)手編譯一個(gè)工具鏈,或者直接下載制作好的工具鏈之后,我們就可以交叉編譯應(yīng)用程序了。在嵌入式軟件開發(fā)過程中,有些主機(jī)服務(wù)是必要的,同時(shí)也會(huì)為我們的開發(fā)工作帶來(lái)便利,因此我們?cè)诒菊伦詈蠼榻B了四個(gè)主機(jī)服務(wù)的配置方法。2.4本章小結(jié) 本章主要向讀者介紹了如何搭建一個(gè)嵌入式Linux交叉編譯開40演講完畢,謝謝觀看!演講完畢,謝謝觀看!41第二章搭建
Linux交叉編譯開發(fā)環(huán)境
Crosscompilingenvironment第二章搭建
Linux交叉編譯開發(fā)環(huán)境
Crossco什么是交叉編譯呢?簡(jiǎn)單地說,就是在一個(gè)平臺(tái)上生成另一個(gè)平臺(tái)上的可執(zhí)行代碼。這里需要注意的是所謂平臺(tái),實(shí)際上包含兩個(gè)概念:體系結(jié)構(gòu)(Architecture)和操作系統(tǒng)(OperatingSystem)。同一個(gè)體系結(jié)構(gòu)可以運(yùn)行不同的操作系統(tǒng);同一個(gè)操作系統(tǒng)也可以在不同的體系結(jié)構(gòu)上運(yùn)行。2.1什么是交叉編譯
什么是交叉編譯呢?簡(jiǎn)單地說,就是在一個(gè)平臺(tái)上生成另一個(gè)432.2.1編譯工具鏈以下是一個(gè)基于RedHatlinux的交叉編譯環(huán)境的建立過程。整個(gè)編譯過程包括:下載源文件、補(bǔ)丁和建立編譯的目錄;建立內(nèi)核頭文件;建立二進(jìn)制工具(binutils);建立初始編譯器(bootstrapgcc);建立c庫(kù)(glibc);建立全套編譯器(fullgcc)。2.2建立交叉編譯開發(fā)工具鏈
2.2.1編譯工具鏈2.2建立交叉編譯開發(fā)工具鏈
44需求:下載源文件、補(bǔ)丁和建立編譯的目錄
a,下載:binutils-2.11.2.tar,diff-2.4.9-ac9-rmk1-np1,gcc-2.95.3.tar,glibc-2.2.4.tar,glibc-linuxthreads-2.2.4.tar,linux-2.4.9.tar,patch-2.4.9-ac9,patch-2.4.9-ac9-rmk1,patch-2.4.9-ac9-rmk2 b,建目錄:將所有的源代碼放到/usr/tmp/下; 交叉編譯器將安裝在/opt/host/armv5/
2.2建立交叉編譯開發(fā)工具鏈需求:下載源文件、補(bǔ)丁和建立編譯的目錄2.2建立交叉編譯開45
建立整個(gè)toolchain的步驟
2.2建立交叉編譯開發(fā)工具鏈 建立整個(gè)toolchain的步驟2.2建立交叉編譯開發(fā)46(1)Installingbinutils#cd/tmp#tarzxvfbinutils-2.11.2.tar.gz#cdbinutils-2.11.2#./configure--target=armv5-unknown-linux--prefix=/opt/host/armv5#make#makeinstall2.2建立交叉編譯開發(fā)工具鏈(1)Installingbinutils2.2建立交47注意:這樣就在/opt/host/armv5/bin下產(chǎn)生了binutils,它們的作用如下:addr2line——將要找的地址轉(zhuǎn)成文件和行號(hào),它要使用debug信息。ar——產(chǎn)生、修改和解開一個(gè)存檔文件。as——gnu的匯編器。2.2建立交叉編譯開發(fā)工具鏈注意:這樣就在/opt/host/armv5/bin下產(chǎn)生了48c++filt——C++和java中有一種重載函數(shù),所用的重載函數(shù)最后會(huì)被編譯轉(zhuǎn)化成匯編的標(biāo)號(hào),c++filt就是實(shí)現(xiàn)這種反向的轉(zhuǎn)化,根據(jù)標(biāo)號(hào)得到函數(shù)名。gasp——gnu匯編器預(yù)編譯器。2.2建立交叉編譯開發(fā)工具鏈2.2建立交叉編譯開發(fā)工具鏈49ld——gnu的連接器。nm——列出目標(biāo)文件的符號(hào)和對(duì)應(yīng)的地址。objcopy——將某種格式的目標(biāo)文件轉(zhuǎn)化成另外格式的目標(biāo)文件。objdump——顯示目標(biāo)文件的信息。2.2建立交叉編譯開發(fā)工具鏈ld——gnu的連接器。2.2建立交叉編譯開發(fā)工具鏈50ranlib——為一個(gè)存檔文件產(chǎn)生一個(gè)索引,并將這個(gè)索引存入存檔文件中。readelf——顯示elf格式的目標(biāo)文件的信息。size——顯示目標(biāo)文件各個(gè)節(jié)的大小和目標(biāo)文件的大小。strings——打印出目標(biāo)文件中可以打印的字符串,有個(gè)默認(rèn)的長(zhǎng)度,為4。strip——?jiǎng)兊裟繕?biāo)文件的所有的符號(hào)信息。2.2建立交叉編譯開發(fā)工具鏈ranlib——為一個(gè)存檔文件產(chǎn)生一個(gè)索引,并將這個(gè)索引存入51(2)輸出工具的路徑,使得以后的編譯工作能看到這些工具:
#exportPATH=/opt/host/armv5/bin:$PATH2.2建立交叉編譯開發(fā)工具鏈(2)輸出工具的路徑,使得以后的編譯工作能看到這些工具:2.52(3)建立編譯需要使用的頭文件#cd/tmp#tarzxvflinux-2.4.9.tar.gz#mvlinuxlinux-2.4.9-ac9-rmk1-np1#mvpatch-2.4.9-ac9.gzpatch-2.4.9-ac9-rmk1.bz2diff-2.4.9-ac9-rmk1-np1.gz./linux-2.4.9-ac9-rmk1-np12.2建立交叉編譯開發(fā)工具鏈(3)建立編譯需要使用的頭文件2.2建立交叉編譯開發(fā)工具鏈53#cdlinux-2.4.9-ac9-rmk1-np1:kernel2.4.9#gzip-cdpatch-2.4.9-ac9.gz|patch-p1:AlanCoxpatch#bzip2-cdpatch-2.4.9-ac9-rmk1.bz2|patch-p1:RussellKingpatch#gzip-cddiff-2.4.9-ac9-rmk1-np1.gz|patch-p1:NicholasPitrepatch#makemenuconfig:DotocreateARMheaderfiles.Whenyouexit,selectsaveitem.#cdlinux-2.4.9-ac9-rmk1-np154#makedep:Alsodotocreateheaderfiles.#cd/opt/host/armv4l/armv4l-unknown-linux#cdinclude:Ifnotexisting,makeincludedirectory.#cp-a/usr/include/*.:Copyallheaderfilesunder/usr/includedirtothecurrentdir.#makedep:Alsodotocreate55#ln-s/tmp/linux-2.4.9-ac9-rmk1-np1/include/asm-armasm#ln-s/tmp/linux-2.4.9-ac9-rmk1-np1/include/linuxlinux注意:要把linux的頭文件拷做來(lái)作為編譯的頭文件的原因是,我們要編譯的是給ARM處理器使用的編譯器,那么就需要一個(gè)用于ARM處理器的Linux內(nèi)核系統(tǒng)的頭文件#ln-s/tmp/linux-2.4.9-ac9-r56(4)編譯ARM-GCC交叉編譯器#cdgcc-2.95.3#./configure--target=armv4l-unknown-linux--prefix=/opt/host/armv4l#makeLANGUAGES=c#makeLANGUAGES=cinstall(4)編譯ARM-GCC交叉編譯器57注意:gcc——gnu的C語(yǔ)言編譯器。unprotoize——將ANSIC的源碼轉(zhuǎn)化為K&RC的形式,去掉函數(shù)原型中的參數(shù)類型。cpp——gnu的C的預(yù)編譯器。gcov——gcc的輔助測(cè)試工具,可以用它來(lái)分析和優(yōu)化程序。2.2建立交叉編譯開發(fā)工具鏈注意:2.2建立交叉編譯開發(fā)工具鏈58建立c庫(kù)(glibc)
#cd/tmp#tarzxvfglibc-2.2.4.tar.gz#mvglibc-linuxthreads-2.2.4.tar.gz./glibc-2.2.4#cdglibc-2.2.4#tarzxvfglibc-linuxthreads-2.2.4.tar.gz2.2建立交叉編譯開發(fā)工具鏈建立c庫(kù)(glibc)2.2建立交叉編譯開發(fā)工具鏈59#CC=armv5-unknown-linux-gcc./configurearm-linux--enable-add-ons--build=i686-pc-linux-gnu--disable-iconv--with-headers=/tmp/linux-2.4.9-ac9-rmk1-np1/include--prefix=/opt/host/armv4l#make#makeinstall2.2建立交叉編譯開發(fā)工具鏈#CC=armv5-unknown-linux-gcc.60注意:glibc主要是程序運(yùn)行所需要的庫(kù)函數(shù)的集合,包括輸入輸出,數(shù)學(xué),io控制等等2.2建立交叉編譯開發(fā)工具鏈注意:glibc主要是程序運(yùn)行所需要的庫(kù)函數(shù)的集合,包括輸入61 (6)安裝g++#cd/tmp/gcc-2.95.3#./configure--target=armv4l-unknown-linux--with-libs=/opt/host/armv4l/lib--with-headers=/opt/host/armv4l/include--prefix=/opt/host/armv4l#makeLANGUAGES="cc++"#makeLANGUAGES="cc++"install2.2建立交叉編譯開發(fā)工具鏈 (6)安裝g++2.2建立交叉編譯開發(fā)工具鏈62注意:g++——gnu的c++編譯器。protoize——與unprotoize相反,將K&RC的源碼轉(zhuǎn)化為ANSIC的形式,函數(shù)原型中加入?yún)?shù)類型。c++——gnu的c++編譯器。2.2建立交叉編譯開發(fā)工具鏈注意:2.2建立交叉編譯開發(fā)工具鏈632.2.2下載工具鏈這里主要介紹一下Denx公司發(fā)布的一整套開放源碼的嵌入式Linux開發(fā)工具鏈——ELDK(EmbeddedLinuxDevelopmentKit)
ELDK可以安裝和運(yùn)行在以下主機(jī)環(huán)境中:FedoraCore1,2,3RedHatLinux7.3,8.0,9SuSELinux8.x,9.0,9.1,9.22.2建立交叉編譯開發(fā)工具鏈2.2.2下載工具鏈2.2建立交叉編譯開發(fā)工具鏈64Debian3.0(Woody)andtesting(Sarge)Ubuntu4.10FreeBSD5.0SuseLinux7.2,7.3Mandrake8.2Slackware8.1beta2GentooLinux1.4_rc2ELDK同時(shí)支持ARM、PPC、MIPS等多種處理器。2.2建立交叉編譯開發(fā)工具鏈Debian3.0(Woody)andtesting65 ELDK包括了一個(gè)安裝工具和許多RPM包,他們可以安裝到用戶的交叉編譯的主機(jī)的硬盤中。ELDK的RPM包可以分為2種:嵌入式Linux開發(fā)工具;為目標(biāo)處理器編譯好的工具和元件。其中,第一部分包括執(zhí)行在開發(fā)主機(jī)上的交叉編譯工具,有GNU交叉編譯器GCC、Binutils和GDB等。第二部分是一些已經(jīng)編譯好的、可以在目標(biāo)開發(fā)板上運(yùn)行的工具和庫(kù)。這些工具和庫(kù)可以用來(lái)建立一個(gè)Linux的Roofs文件系統(tǒng)。2.2建立交叉編譯開發(fā)工具鏈 ELDK包括了一個(gè)安裝工具和許多RPM包,他們可以安裝到用662.2.3驗(yàn)證工具鏈 注意: 通過上述兩種方式建立的工具鏈,還需要經(jīng)過驗(yàn)證方可使用,我們主要通過實(shí)際編譯一個(gè)例子程序來(lái)驗(yàn)證。2.2建立交叉編譯開發(fā)工具鏈2.2.3驗(yàn)證工具鏈2.2建立交叉編譯開發(fā)工具鏈67在嵌入式軟件開發(fā)過程中,有些主機(jī)服務(wù)是必要的,同時(shí)也會(huì)為我們的開發(fā)工作帶來(lái)便利。這里主要介紹四種主機(jī)服務(wù):samba、DHCP、TFTP和NFS。
2.3配置主機(jī)服務(wù)
在嵌入式軟件開發(fā)過程中,有些主機(jī)服務(wù)是必要的,同時(shí)也會(huì)為我們682.3.1配置sambaSamba服務(wù)使Linux和Windows之間實(shí)現(xiàn)文件共享,方便對(duì)文件的編輯。
1) 修改samba配置文件/etc/samba/smb.conf 2) 為Samba創(chuàng)建一個(gè)單獨(dú)的口令文件。要根據(jù)你的現(xiàn)存/etc/passwd文件來(lái)創(chuàng)建 3) 改變Samba口令文件的權(quán)限許可,因此只有根用戶才有讀寫權(quán)限
2.3配置主機(jī)服務(wù)
2.3.1配置samba
2.3配置主機(jī)服務(wù)
69
4) 要設(shè)置每個(gè)Samba用戶的口令,使用以下命令(把username替換為每個(gè)用戶的用戶名) 5) 加密口令必須在Samba配置文件中被啟用 6) 在shell提示下鍵入servicesmbrestart來(lái)確定smb服務(wù)被啟動(dòng) 7) 為避免每次啟動(dòng)主機(jī)都要手工啟動(dòng)samba服務(wù),使用命令使得samba服務(wù)在每次系統(tǒng)啟動(dòng)時(shí)都默認(rèn)執(zhí)行
2.3配置主機(jī)服務(wù)
4) 要設(shè)置每個(gè)Samba用戶的口令,使用以下命令(把702.3.2配置DHCPDHCP是動(dòng)態(tài)主機(jī)配置協(xié)議。這個(gè)協(xié)議用于向計(jì)算機(jī)自動(dòng)提供IP地址,子網(wǎng)掩碼和路由信息。在開發(fā)的過程中,目標(biāo)系統(tǒng)并沒有自己的靜態(tài)IP地址,它是在啟動(dòng)時(shí)向DHCP服務(wù)器申請(qǐng),因此需要在主機(jī)上配置DHCP服務(wù),以便在目標(biāo)系統(tǒng)請(qǐng)求IP時(shí),動(dòng)態(tài)為它分配IP地址。DHCP服務(wù)的配置文件為/etc/dhcpd.conf,通過修改該文件進(jìn)行配置。etc/dhcpd.conf通常包括三部分:parameters、declarations、option。
2.3配置主機(jī)服務(wù)
2.3.2配置DHCP
2.3配置主機(jī)服務(wù)
71 (1) DHCP配置文件中的parameters(參數(shù)):表明如何執(zhí)行任務(wù),是否要執(zhí)行任務(wù),或?qū)⒛男┚W(wǎng)絡(luò)配置選項(xiàng)發(fā)送給客戶
(2) DHCP配置文件中的declarations(聲明):用來(lái)描述網(wǎng)絡(luò)布局、提供客戶的IP地址等 (3) DHCP配置文件中的option(選項(xiàng)):用來(lái)配置DHCP可選參數(shù),全部用o
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024司機(jī)聘用合同
- 挖掘機(jī)租賃市場(chǎng)合同樣本
- 2024年房屋經(jīng)紀(jì)服務(wù)合同
- 2024競(jìng)價(jià)房屋買賣合同范本
- 江蘇省徐州市七年級(jí)上學(xué)期語(yǔ)文期中試卷5套【附答案】
- 2024【股權(quán)投資信托合同】股權(quán)投資合同
- 施工安全協(xié)議書案例分析
- 專業(yè)咨詢委托協(xié)議參考
- 房屋買賣合同協(xié)議書委托人2024年
- 標(biāo)準(zhǔn)的汽車租賃合同范本
- 10000中國(guó)普通人名大全
- 開放式小區(qū)物業(yè)管理方案(精選8篇)
- 《突發(fā)事件應(yīng)對(duì)法》理論考試題庫(kù)(含答案)
- 國(guó)家開放大學(xué)酒店管理概論作業(yè)1-4答案
- 景觀植物設(shè)計(jì)-3-各類植物的種植設(shè)計(jì)課件
- 客運(yùn)駕駛員安全指引課件
- 經(jīng)理課后答案1-4(僅作參考)
- 創(chuàng)思維與方法思維標(biāo)準(zhǔn)課件
- 數(shù)字經(jīng)濟(jì)實(shí)體經(jīng)濟(jì)融合課件整理
- 團(tuán)委書記崗位競(jìng)聘報(bào)告課件
- 滬教版數(shù)學(xué)二年級(jí)上冊(cè)《正方體、長(zhǎng)方體的初步認(rèn)識(shí)》課件
評(píng)論
0/150
提交評(píng)論