創(chuàng)建嵌入式系統(tǒng)開發(fā)環(huán)境課件_第1頁
創(chuàng)建嵌入式系統(tǒng)開發(fā)環(huán)境課件_第2頁
創(chuàng)建嵌入式系統(tǒng)開發(fā)環(huán)境課件_第3頁
創(chuàng)建嵌入式系統(tǒng)開發(fā)環(huán)境課件_第4頁
創(chuàng)建嵌入式系統(tǒng)開發(fā)環(huán)境課件_第5頁
已閱讀5頁,還剩279頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

創(chuàng)建嵌入式系統(tǒng)開發(fā)環(huán)境創(chuàng)建嵌入式系統(tǒng)開發(fā)環(huán)境第3章主要內(nèi)容1、Linux與嵌入式Linux概述2、Windows下的Linux環(huán)境軟件---cygwin3、Linux文件系統(tǒng)結構4、Linux常用命令5、Linux文本編輯器vi6、Linux編譯器gcc及編譯工具7、交叉編譯工具的創(chuàng)建第3章主要內(nèi)容1、Linux與嵌入式Linux概述1、Linux操作系統(tǒng)的組成2、Linux操作系統(tǒng)的內(nèi)核版本3、嵌入式LinuxLinux與嵌入式Linux概述Linux與嵌入式Linux概述

Linux操作系統(tǒng)的組成LINUX的內(nèi)核:含有設備驅動程序、系統(tǒng)服務等程序,具有中斷處理、進程調(diào)度、原語管理等功能。LINUXSHELL:Shell是系統(tǒng)的用戶界面,它是一個命令解釋器,它解釋用戶輸入的命令,并且把它們送到內(nèi)核。提供了用戶與內(nèi)核進行交互操作的一種接口。LINUX文件系統(tǒng):是文件存放在磁盤等存儲設備上的組織方法。Linux能支持多種目前許多的文件系統(tǒng),如EXT2、EXT3、FAT、VFAT、ISO9660、NFS、SMB等。LINUX應用系統(tǒng):標準的Linux系統(tǒng)都有一整套稱為應用程序的程序集,包括文本編輯器、編程語言、XWindow、辦公套件、Internet工具、數(shù)據(jù)庫等。Linux操作系統(tǒng)的組成LINUX的內(nèi)核:含有設備驅動程序Linux內(nèi)核采用雙樹結構:一棵樹是穩(wěn)定樹,主要用于發(fā)行;另一棵樹是非穩(wěn)定樹或開發(fā)樹,用于產(chǎn)品開發(fā)、改進、測試。源代碼版本序號形式:為x.y.zz結構,其中x為主版本號,代表核心的改動升級;y為次版本號,表示功能性的改動;zz為末版本號,表示BUG的改動。其中x介于0到9之間,yy和zz則介于0到99之間。雙樹區(qū)分:對于穩(wěn)定樹來說,y是偶數(shù);對于開發(fā)樹來說,y是比相應穩(wěn)定樹大1的奇數(shù)。例2.4.18等為穩(wěn)定內(nèi)核版本。Linux的內(nèi)核版本Linux內(nèi)核采用雙樹結構:一棵樹是穩(wěn)定樹,主要用于發(fā)行;另嵌入式Linux操作系統(tǒng)概述一、嵌入式Linux操作系統(tǒng)嵌入式Linux是按照嵌入式操作系統(tǒng)的要求而設計的一種小型操作系統(tǒng)。由一個內(nèi)核及一些根據(jù)需要進行定制的系統(tǒng)模塊組成。其kernel很小,一般只有幾百kB左右。即使加上其它必須的模塊和應用程序,所需的存儲空間也很小。它具有多任務、多進程的系統(tǒng)特征,有些還具有實時性。嵌入式Linux需要移植:對于嵌入式Linux,一般都不是原封不動地使用,而是要考慮各種具體系統(tǒng)的特點,有針對性地對Linux內(nèi)核加以裁減、修改和補充。嵌入式Linux操作系統(tǒng)概述一、嵌入式Linux操作系統(tǒng)下面是嵌入式Linux的基本示意圖:BootLoader內(nèi)核初始化設備驅動程序文件系統(tǒng)網(wǎng)絡模塊下面是嵌入式Linux的基本示意圖:BootLoader內(nèi)BootLoaderBootLoader:負責Linux內(nèi)核的啟動,它用于初始化系統(tǒng)資源,包括SDRAM。這部分代碼用于建立Linux內(nèi)核運行環(huán)境和從Flash中裝載初始化ramdisk(steppingstone)。BootLoaderBootLoader:負責Linux內(nèi)核初始化內(nèi)核初始化:Linux內(nèi)核的入口點是start_kernel()函數(shù)。它初始化內(nèi)核的其它部分,包括捕獲異常,IRQ通道,調(diào)度,設備驅動,標定延遲循環(huán),最重要的是能夠fork(創(chuàng)建)“init”進程,以啟動整個多任務環(huán)境。系統(tǒng)調(diào)用函數(shù)/捕獲函數(shù):在執(zhí)行完“init”程序后,內(nèi)核對程序流不再有直接的控制權,此后,它的作用僅僅是處理異步事件(例如硬件中斷)和為系統(tǒng)調(diào)用提供進程。內(nèi)核初始化內(nèi)核初始化:Linux內(nèi)核的入口點是start_設備驅動設備驅動:設備驅動占據(jù)了Linux內(nèi)核很大部分。同其它操作系統(tǒng)一樣,設備驅動為它們所控制的硬件設備和操作系統(tǒng)提供接口。設備驅動包括:字符型設備驅動,塊設備驅動,網(wǎng)絡設備驅動設備驅動設備驅動:設備驅動占據(jù)了Linux內(nèi)核很大部分。同文件系統(tǒng):Linux最重要的特性之一就是對多種文件系統(tǒng)的支持。如EXT2、EXT3、FAT、VFAT、ISO9660、NFS、SMB.這種特性使得Linux很容易地同其它操作系統(tǒng)共存。文件系統(tǒng)的概念使得用戶能夠查看存儲設備上的文件和路徑而無須考慮實際物理設備的文件系統(tǒng)類型。Linux透明的支持許多不同的文件系統(tǒng),將各種安裝的文件和文件系統(tǒng)以一個完整的虛擬文件系統(tǒng)的形式呈現(xiàn)給用戶。文件系統(tǒng):Linux最重要的特性之一就是對多種文件系統(tǒng)的支5.3.1Linux文件系統(tǒng)概述文件結構是文件存放在磁盤等存貯設備上的組織方法。文件結構主要體現(xiàn)在對文件和目錄的組織上。目錄提供了管理文件的一個方便而有效的途徑。linux使用標準的目錄結構,在安裝的時候,安裝程序就已經(jīng)為用戶創(chuàng)建了文件系統(tǒng)和完整而固定的目錄組成形式,并指定了每個目錄的作用和其中的文件類型

5.3.1Linux文件系統(tǒng)概述文件結構是文件存放在磁盤12Linux目錄結構Linux目錄結構Linux與DOS文件系統(tǒng)區(qū)別

Linux文件系統(tǒng)是一個目錄樹結構,最上層是根目錄,其他的所有目錄都是從根目錄出發(fā)而生成的。

Dos文件系統(tǒng)也采用目錄樹的結構,但DOS以每個分區(qū)為樹根,有幾個分區(qū)就有幾個樹型結構。/sbin/usr/etc/root/lib/hom/mnt/CDELinux與DOS文件系統(tǒng)區(qū)別 Linux文件系統(tǒng)是一個目14Linux下,任何一個目錄都可以是一個分區(qū)。因此,在分區(qū)時,必須將一個分區(qū)安裝在樹根下面。Linux不僅將分區(qū)安裝為一個目錄,而且還將所有的硬件設備都安裝成一個個設備文件。對設備的操作是通過文件的操作完成的。Linux下,任何一個目錄都可以是一個分區(qū)。因此,在分區(qū)時,15Linux文件系統(tǒng)結構“/”根目錄:

包含基本的操作系統(tǒng)和維護工具。這個目錄的文件可以啟動系統(tǒng),并且需要的話,可以完成緊急維護和修復的功能。

“/root”目錄:

系統(tǒng)管理員(也叫超級用戶或根用戶)的Home目錄?!?usr”目錄:

包含所有的命令、程序庫、文檔和其它文件。這些文件在正常操作中不會被改變的。這個目錄也包含你的Linux發(fā)行版本的主要的應用程序。

/usr/bin,/bin:一般性執(zhí)行程序放置的地方/usr/sbin,/sbin:系統(tǒng)管理員常用的指令集Linux文件系統(tǒng)結構“/”根目錄:包含基本的操作系16“/home”目錄:

包含用戶的文件:參數(shù)設置文件、個性化文件、文檔、數(shù)據(jù)、EMAIL、緩存數(shù)據(jù)等。這個目錄在系統(tǒng)升級時應該保留。“/mnt”目錄:

一般用來臨時掛載別的文件系統(tǒng),如FAT32,NTFS等“/bin”目錄:

系統(tǒng)啟動時需要的執(zhí)行文件(二進制),這些文件可以被普通用戶使用?!?sbin”目錄:

系統(tǒng)執(zhí)行文件(二進制),這些文件不打算被普通用戶使用。(普通用戶仍然可以使用它們,但要指定目錄。)“/home”目錄:包含用戶的文件:參數(shù)設置文件、個性17“/etc”目錄:

操作系統(tǒng)的配置文件目錄。/etc/rc.d/init.d:系統(tǒng)開機的時候載入的服務程序的scripts的放置點“/dev”目錄:

設備文件目錄。LINUX下設備被當成文件,正常情況下,設備會有一個獨立的子目錄。這些設備的內(nèi)容會出現(xiàn)在獨立的子目錄下?!?lib”目錄:根文件系統(tǒng)目錄下程序和核心模塊的共享庫?!?var”目錄:

存放在操作中被改變的文件:假脫機文件、記錄文件、加鎖文件、臨時文件和頁格式化文件等?!?etc”目錄:操作系統(tǒng)的配置文件目錄。18“/boot”目錄: 用于啟動加載程序的文件。當計算機啟動時(如果有多個操作系統(tǒng),有可能允許你選擇啟動哪一個操作系統(tǒng)),這些文件首先被裝載。這個目錄也會包含Linux核(壓縮文件vmlinuz)。但Linux核也可以存在別處,只要配置LILO并且LILO知道Linux核在哪兒。

用于啟動加載程序(LILO或GRUB)“/opt”目錄:

可選的應用程序。譬如,REDHAT5.2下的KDE(REDHAT6.0下,KDE放在其它的X-WINDOWS應用程序中,主執(zhí)行程序在/usr/bin目錄下)“/boot”目錄: 用于啟動加載程序的文件。當計算機啟19“/tmp”目錄:

臨時文件。該目錄會被自動清理干凈?!?lost+found”目錄:

在文件系統(tǒng)修復時恢復的文件。“/tmp”目錄: 臨時文件。該目錄會被自動清理干凈。20Linux的文件類型文件名Linux文件的名字可以由字母字符、下劃線和數(shù)字組成,也可以加上句號和逗號。文件名的第一個字符不能是數(shù)字,短劃線、句點和星號等被系統(tǒng)用作特殊符號的其他符號。用“.”開始的文件為隱藏文件,稱為“點文件”??捎谩癴ile文件名”來查看文件類型。Linux的文件類型文件名21(1)、壓縮的和歸檔的文件.bz2—使用bzip2壓縮的文件.gz—使用gzip壓縮的文件.tar—使用tar(tapearchive,磁帶歸檔的簡寫)壓縮的文件,又稱tar文件.tbz—用tar和bzip壓縮的文件.tgz—用tar和gzip壓縮的文件.zip—使用ZIP壓縮的文件,在MS-DOS應用程序中常見。多數(shù)為Linux壓縮的文件使用gzip壓縮,因此Linux文件中的.zip歸檔較少見。

(1)、壓縮的和歸檔的文件22創(chuàng)建嵌入式系統(tǒng)開發(fā)環(huán)境課件23(2)、文件格式.au—音頻文件.gif—GIF圖像文件.html/.htm—HTML文件.jpg—JPEG圖像文件.pdf—文檔的電子映像;PDF代表PortableDocumentFormat(可移植文檔格式).png—PNG圖像文件(PortableNetworkGraphic的簡寫,可移植網(wǎng)絡圖形)

.ps—PostScript文件,為打印而格式化過的文件.txt—純ASCII文本文件.wav—音頻文件.xpm—圖像文件(2)、文件格式24(3)、系統(tǒng)文件..conf—一種配置文件。配置文件有時也使用.cfg。.lock—鎖(lock)文件;用來判定程序或設備是否正在被使用.rpm—RedHat用來安裝軟件的軟件包管理器文件(3)、系統(tǒng)文件25(4)、編程和腳本文件.c—C程序語言的源碼文件.cpp—C++程序語言的源碼文件.h—C或C++程序語言的頭文件.o—程序的對象文件.pl—Perl腳本.py—Python腳本.so—庫文件.sh—shell腳本.tcl—TCL腳本(4)、編程和腳本文件26創(chuàng)建嵌入式系統(tǒng)開發(fā)環(huán)境課件27創(chuàng)建嵌入式系統(tǒng)開發(fā)環(huán)境課件28常用的Linux文件系統(tǒng)

Linux系統(tǒng)核心支持十多種文件系統(tǒng)類型:ext、ext2、ext3、CRAMFS、msdos、umsdos、Vfat、NTFS等。

minixlinux:最早使用的文件系統(tǒng)ext2linux和ext3linux:目前常用的文件系統(tǒng)nfs:網(wǎng)絡文件系統(tǒng)cramfs:只讀文件系統(tǒng)

常用的Linux文件系統(tǒng)Linux系統(tǒng)核心支持十多種29主要內(nèi)容 1、Linux外殼shell 2、Linux常用命令Linux常用命令主要內(nèi)容Linux常用命令30

Linux外殼的功能: shell是一種命令解釋器,提供了用戶和操作系統(tǒng)之間的交互接口。對用戶輸入的命令,由外殼進行解釋,然后將解釋的命令送到操作系統(tǒng)去執(zhí)行。 shell可以執(zhí)行Linux的系統(tǒng)命令,也可以執(zhí)行應用程序。用戶還可以利用外殼編程,執(zhí)行復雜的命令程序。 Linux有多種shell,為用戶提供選擇。Linux外殼shell Linux外殼的功能:Linux外殼shell31常用的shell:

bash、ash、csh、ksh、tcsh等。

bash是Linux默認使用的shell,它由BrianFox和ChetRamey共同完成的。bash是BourneAgainShell的縮寫,內(nèi)部命令有40個。Bash有如下特點: 1)使用方向鍵查閱已使用過的命令行。 2)補全命令行,按Tab鍵。 3)可以使用通配符“?”、“*”。 4)有管道命令“|”,用“|”可將多個命令連接起來執(zhí)行,前面命令的輸出是后者的輸入。常用的shell:32

1、ls---文件及子目錄名列表語法格式:ls[option][file]

如: ls 以默認方式顯示當前目錄下的子目錄和文件。 ls–a 顯示所有文件,包括隱藏文件。 ls–l 以默認方式顯示文件屬性,包括大小、日期、所有者、權限及名稱。 ls–F 以默認方式顯示文件及類型,以“/”結尾的為目錄,以“*”結尾的為可執(zhí)行文件,以“@”結尾的為符號鏈接。Linux常用命令 1、ls---文件及子目錄名列表Linux常用命令33屬性文件數(shù)量所有者屬性文件數(shù)量所有者34文件屬性符號

格式:

arwxrwxrwxnownergroupsizedatename例如:drwxr-xr-x2rootroot40962008-3-3bin

a:文件性質,可以是: d: 目錄文件; n: l: 符號鏈接文件; (1)對文件指硬連接數(shù) b: 塊類型設備文件; (2)對目錄指含的子目錄數(shù) c: 字符型設備文件。 r: read,讀 w: write,寫 x: execute,執(zhí)行紅色:文件擁有者權限黑色:文件組擁有者權限藍色:其他用戶的權限文件屬性符號紅色:文件擁有者權限3513)chmod更改訪問權限chmod用于改變文件或目錄的訪問權限。用戶用它控制文件或目錄的訪問權限。該命令有兩種用法。一種是包含字母和操作符表達式的文字設定法;另一種是包含數(shù)字的數(shù)字設定法。

13)chmod更改訪問權限chmod用于改變文件或目錄的361.文字設定法

語法:chmod[who][+|-|=][mode]文件名例如:chmodg+r,o+rexample操作對象who可是下述字母中的任一個或者它們的組合:u表示“用戶(user)”,即文件或目錄的所有者。g表示“同組(group)用戶”,即與文件屬主有相同組ID的所有用戶。o表示“其他(others)用戶”。a表示“所有(all)用戶”。它是系統(tǒng)默認值。操作符號可以是:+:添加某個權限。-:取消某個權限。=:賦予給定權限并取消其他所有權限設置mode所表示的權限可用下述字母的任意組合:r可讀、w可寫、x可執(zhí)行……(其他省略)1.文字設定法

語法:chmod[who][+|37語法:chmod[who][+|-|=][mode]文件名文件名:以空格分開的要改變權限的文件列表,支持通配符。在一個命令行中可給出多個權限方式,其間用逗號隔開。例如:chmodg+r,o+rexample%使同組和其他用戶對文件example有讀權限。語法:chmod[who][+|-|=][mo382.chmod數(shù)字設定法我們必須首先了解用數(shù)字表示的屬性的含義:0表示沒有權限,1表示可執(zhí)行權限,2表示可寫權限,4表示可讀權限,然后將其相加。所以數(shù)字屬性的格式應為3個從0到7的八進制數(shù),其順序是(u)(g)(o)。例如,如果想讓某個文件的屬主有“讀/寫”二種權限,需要把4(可讀)+2(可寫)=6(讀/寫)。數(shù)字設定法的一般形式為:語法:chmod[mode]文件名

比如chmod777example;%表示用戶\同組用戶\其他用戶對文件example具有可讀\可寫\執(zhí)行的權限比如chmod755example;%表示用戶對文件example具有可讀\可寫\執(zhí)行的權限,同組用戶\其他用戶只具有執(zhí)行和可讀的權限2.chmod數(shù)字設定法39

3、cd---改變工作目錄(目錄切換)語法格式:cd[directory]如:

cddir 切換到當前目錄下的dir目錄。 cd/ 切換到根目錄。 cd.. 切換到上一級目錄。 cd~/abc 切換到當前目錄下的某目錄下的abc目錄。 幾個符號目錄: “/”:根目錄 “.”:本級目錄; “..”:上級目錄 3、cd---改變工作目錄(目錄切換)40創(chuàng)建嵌入式系統(tǒng)開發(fā)環(huán)境課件41

4、cp---復制文件和目錄語法格式: cp[源文件及路徑][目標文件及路徑] cp-r源目錄目標目錄如: cpfile1file2 將文件file1復制成file2。 cp/root/file. 將/root目錄下的文件file復制到當前目錄下,名字仍為file。 cpfile/usr 將當前目錄下的文件file復制到/usr目錄下,名字仍為file。 cp–rdir1dir2 將dir1下的文件和目錄,全部復制到dir2目錄下。 4、cp---復制文件和目錄42

5、rm---刪除文件

語法格式:rm[filename]如:

rmfile1 刪除當前目錄下的file1文件 rm*.c 刪除當前目錄下的所有c文件 rmabc.* 刪除當前目錄下主文件名為abc的所有文件。

rm* 刪除當前目錄下的所有文件 5、rm---刪除文件43

6、mv---移動或更改文件、目錄名語法格式:mv源地址目標地址如:

mv file1file2 將文件file1更改為file2 mv file1dir2 將文件file1移動到目錄dir2下,文件名仍為file1。 mv dir1dir2 將目錄dir1更改為dir2。 6、mv---移動或更改文件、目錄名44

7、建立目錄語法格式:mkdir[option]目錄名如:

mkdirdir1 在當前目錄下建立新目錄dir1。

mkdirdir1/dir2 在當前目錄下的dir1目錄下建立新目錄dir2。

mkdir-pdir3/dir4 在當前目錄下先建立新目錄dir3,然后在dir3下建立新目錄dir4。 7、建立目錄45

8、刪除目錄語法格式:rmdir目錄名 rm–r目錄名如: rmdirdir1 刪除目錄dir1(dir1下必須為空)。 rm–rdir2 刪除目錄dir2及其子目錄下所有文件。 8、刪除目錄46

2、查看文件內(nèi)容命令 1)cat---連續(xù)顯示 格式:catfilename如: catfile1 以連續(xù)方式顯示file1內(nèi)容 catfile2|more 以分頁方式顯示file2內(nèi)容

2)more---分頁顯示 格式:morefilename 按空格查看下一頁,按回車下一行。 2、查看文件內(nèi)容命令47 3)less---分頁并且可往回查看 格式:lessfilename 按“空格”查看下一頁;按“b”查看上一頁;按“回車”下一行;按“q”鍵退出。 3)less---分頁并且可往回查看48

10、ln---文件鏈接 (1)硬鏈接

語法格式: ln源文件名及路徑目標文件名及路徑如:lnfile1dir2/file2 將當前目錄下file1,鏈接到當前目錄下的dir2下,名為file2 lndir3/file3file4 將當前目錄下的dir3目錄下的file3,鏈接到當前目錄下,名為file4

刪除方法:用rm命令 10、ln---文件鏈接49

(2)符號鏈接(相當于Win2k的快捷方式)語法格式: ln–s源文件名及路徑目標文件名及路徑如:ln-sfile1dir2/file2 將當前目錄下的文件file1,鏈接到當前目錄下的dir2目錄下,文件名為file2。ln–sdir3/file3file4 將當前目錄下dir3目錄下的文件file3,鏈接到當前目錄下,文件名為file4。

刪除方法:用rm命令 (2)符號鏈接(相當于Win2k的快捷方式)5011、tar---壓縮與解壓語法格式:

tar-參數(shù)(必選)+參數(shù)(可選)

目標文件(.tar.gz)

源文件/目錄

主選項

c

創(chuàng)建檔案文件

r

追加文件到創(chuàng)建好的檔案文件末尾

t

列出檔案文件包含的文件

u

更新檔案文件,如果有則覆蓋,沒有則追加末尾

x

釋放檔案文件輔助選項

b

磁帶機專用塊大小20(20*512bytes)

f

必須選項

k

壓縮/解壓縮過程中保存同名文件

m

還原文件時,修改文件時間為當前時間

M

創(chuàng)建多卷文件

v

顯示處理信息

w

每一步都要求確認

z

用gzip壓縮/解壓縮文件11、tar---壓縮與解壓語法格式:51

11、tar---壓縮與解壓

(1)壓縮文件語法格式:

tarcfzv目標文件路徑被壓縮的目錄如: tarcfzvdir1/file1.tgzdir2 將當前目錄下的dir2目錄下的所有文件,壓縮為文件file.tgz,存放在當前目錄下的dir1目錄下。 說明:選項4個字母cfzv,不分次序。 11、tar---壓縮與解壓52

(2)解壓文件

tarxfzv被解壓的文件路徑保存的目錄

tarxfzvfile.tgz dir1將文件file.tgz解壓,保存到當前目錄下的dir1目錄下。說明:選項4個字母xfzv,不分次序 (2)解壓文件53實例#tar-cfmydir.tarmydir

#將mydir目錄下所有文件打包到mydir.tar#tar-ufmydir.tarmydir

#更新mydir.tar#tar-tfmydir.tar

#顯示mydir.tar內(nèi)的文件#tar-cf/dev/fd0mydir

#用設備名稱作檔案名#tar-xf/dev/fd0

#恢復軟盤中的文件實例54 12、磁盤、目錄掛接與卸載

(1)mount---掛接語法格式:mount[option]被掛接的設備掛接點 mountIP地址:被掛接的目錄掛接點option:文件類型:二進制、文本、可執(zhí)行等如:mount-tyaffs/dev/mtdblock/0/mnt把/dev/mtdblock/0裝載到/mnt目錄mount-tnfs:/friendly-arm/root/mnt將nfs服務的共享目錄/friendly-arm/root掛接到/mnt目錄

(2)umount---卸載語法格式:umount被掛接目錄或掛接點 12、磁盤、目錄掛接與卸載55掛載文件系統(tǒng)將一個文件系統(tǒng)的頂層目錄掛到另一個文件系統(tǒng)的子目錄上,使它們成為一個整體,稱為掛載。把該子目錄稱為掛載點。當一個機器上裝了多個操作系統(tǒng),比如在Linux工作時需訪問Windows下的C盤,則需要在Linux上掛載采用mount命令掛載,umount命令卸載。為避免每次系統(tǒng)啟動時都掛接,可寫入相應命令到/etc/fstab。掛載文件系統(tǒng)將一個文件系統(tǒng)的頂層目錄掛到另一個文件系統(tǒng)的子目56加掛FAT32系統(tǒng) 首先進入/mnt目錄,新建所掛接分區(qū)對應目錄,例winDmount–tvfat–oiocharset=cp936

/dev/hda2/mnt/winD其中,hda2為D盤對應的設備文件,可通過“fdisk-l”命令或“系統(tǒng)工具/硬件瀏覽器”中查看各盤對應的設備文件。加掛ntfs系統(tǒng) -tntfs加掛U盤上的文件系統(tǒng)mount–tvfat–oiocharset=cp936/dev/sda1/mnt/udisk加掛FAT32系統(tǒng)57pwd(print

working

directory)功能說明:顯示工作目錄。

語法:pwd

[--help][--version]

補充說明:執(zhí)行pwd指令可立刻得知您目前所在的工作目錄的絕對路徑名稱。

參數(shù):

--help

在線幫助。

--version

顯示版本信息。例子:/root#pwd(回車)/root#/rootpwd(print

working

directory)功能58export功能說明:設置或顯示環(huán)境變量。例子:/root#exportlib_dir=/usr/lib/bin語法:export

[-fnp][變量名稱]=[變量設置值]補充說明:在shell中執(zhí)行程序時,shell會提供一組環(huán)境變量。export可新增,修改或刪除環(huán)境變量,供后續(xù)執(zhí)行的程序使用。export的效力僅及于該此登陸操作。

參數(shù):

-f

代表[變量名稱]中為函數(shù)名稱。

-n

刪除指定的變量。變量實際上并未刪除,只是不會輸出到后續(xù)指令的執(zhí)行環(huán)境中。

-p

列出所有的shell賦予程序的環(huán)境變量。export功能說明:設置或顯示環(huán)境變量。59

12、shell應用手冊---man

對于Linux的命令,隨時可以使用隨機所帶的應用手冊獲得幫助。

獲得幫助方法: man命令名 如: man cp 12、shell應用手冊---man60

13、Linux應用程序的幫助---help 對于Linux的應用程序,可以使用各個應用的幫助功能---help,獲得幫助。

獲得幫助方法: 應用程序名--help 如: gcc--help 13、Linux應用程序的幫助---help61Linux命令大全/special/linuxcom/Linux命令大全http://linux.chinaitl623.2Windows下的Linux環(huán)境軟件---Cygwin主要內(nèi)容1、Cygwin軟件功能2、Cygwin軟件下載3、Cygwin軟件安裝3.2Windows下的Linux環(huán)境軟件---Cygw633.2.1Cygwin軟件功能Cygwin是一個在Windows平臺上運行的、模擬Linux環(huán)境的軟件,并且該軟件也將GNU工具移植到了Win32系統(tǒng)上。可以將Cygwin理解成一個DLL.安裝了Cygwin后,啟動Cygwin,Windows系統(tǒng)就模擬出一部Linux主機,用戶便可像在純Linux下一樣使用Linux及其各種工具軟件、應用軟件等。工具包括Bashshell等常用工具.該軟件對于剛開始使用Linux的人來說,是極好的選擇,用戶可以方便地回到Windows下查看文件和目錄結構,也可以在Windows下進行各種文件操作,如復制刪除文件、移動文件、解壓文件、查找文件等。3.2.1Cygwin軟件功能Cygwin是一個在Win643.2.2Cygwin軟件下載3.2.2Cygwin軟件下載65

有三項:“IntallfromInternet”、“DownloadwithoutIntalling”、“IntallfromLocalDirectory”,一般應選擇第二項,先下載,再安裝,不進行直接安裝。 有三項:“IntallfromInternet”、“D66

1、啟動安裝

再次運行Cygwin目錄下的“setup.exe”,選擇第三項“IntallfromLocalDirectory”,進行本地安裝。P61

3.2.3Cygwin軟件安裝 1、啟動安裝3.2.3Cygwin軟件安裝672、選擇安裝、使用范圍

當出現(xiàn)如下界面時,(1)需要選擇安裝目錄,一般不安裝在C盤,注意磁盤空間應不少于2GB;(2)選擇使用范圍和文本文件類型,選擇默認項:“AllUsers”、“Unix”即可。2、選擇安裝、使用范圍68 3、選擇安裝軟件包

每種軟件包有“Default”、“Install”、“Reinstall”、“Uninstall”4種安裝選擇,可以根據(jù)需要逐一選擇。 一般可以做如下選擇: (1)選擇All為“Default” (2)對如下軟件包選擇“Install”: Admin: 基本服務工具Archive: 壓縮、解壓工具Base: 基本的Linux工具Libs: 系統(tǒng)庫文件Net: 網(wǎng)絡工具Untils: 實用工具 Shall: 外殼工具集Editor: 編輯器集

3、選擇安裝軟件包69

703.4交叉編譯預備知識1)交叉編譯器概述交叉編譯就是在一個平臺上生成可以在另一個平臺上執(zhí)行的代碼。注意這里的平臺,實際上包含兩個概念:體系結構(Architecture)、操作系統(tǒng)(OperatingSystem)。同一個體系結構可以運行不同的操作系統(tǒng);同樣,同一個操作系統(tǒng)也可以在不同的體系結構上運行。舉例來說,我們常說的x86Linux平臺實際上是Intelx86體系結構和Linuxforx86操作系統(tǒng)的統(tǒng)稱;而x86WinNT平臺實際上是Intelx86體系結構和WindowsNTforx86操作系統(tǒng)的簡稱。3.4交叉編譯預備知識1)交叉編譯器概述711、采用交叉編譯的主要原因:多數(shù)嵌入式目標機不能提供足夠的資源供編譯過程使用,因而只好將編譯工作轉移到高性能的宿主機中進行。2、編譯環(huán)境:即創(chuàng)建交叉編譯工具的編譯環(huán)境是一個由編譯器、連接器和解釋器組成的綜合開發(fā)環(huán)境。3、交叉編譯工具(鏈):交叉編譯工具(鏈)主要包括針對目標系統(tǒng)的編譯器gcc、目標系統(tǒng)的二進制工具binutils、目標系統(tǒng)的標準c庫glibc和目標系統(tǒng)的Linux內(nèi)核頭文件。3.4交叉編譯預備知識1、采用交叉編譯的主要原因:多數(shù)嵌入式目標機不能提供足夠的資723.4交叉編譯預備知識我們接下來所要使用的是ARM-Linux2.6平臺,說明我們的體系結構是ARM,而操作系統(tǒng)為Linux2.6而對應的目標平臺還有MIPS,SuperH、POWERPC等而所涉及到的目標硬件S3C2410而言,之所以使用交叉編譯是因為在該硬件上無法安裝我們所需的編譯器,只好借助于宿主機(PC機),在宿主機(PC機)上對即將運行在目標機上的應用程序進行編譯,生成可在目標機上運行的代碼格式。宿主機一般是一個基于X86架構的計算機,我們統(tǒng)稱為i386平臺。3.4交叉編譯預備知識我們接下來所要使用的是ARM-Linu73GNU工具簡介

GNU工具簡介

74運行于Linux操作系統(tǒng)下的自由軟件GNUgcc編譯器,不僅可以編譯Linux操作系統(tǒng)下運行的應用程序,還可以編譯Linux內(nèi)核本身。甚至可以作交叉編譯,編譯運行于其它CPU上的程序。在這里我們用的是arm-linux-工具鏈。如arm-linux-gcc和arm-linux-g++運行于Linux操作系統(tǒng)下的自由軟件GNUgcc編譯器75主要內(nèi)容 1、vim概述 2、vim的啟動 3、vim的工作模式Linux文本編輯器vim主要內(nèi)容Linux文本編輯器vim76vim概述

vim是Linux的全屏幕編輯器,是vi(Visualinterface)的增強型版本,用它可以進行文本文件的編輯、數(shù)據(jù)文件編輯,也用它做源程序的編輯。類似于Windows/DOS下的EDIT編輯器。 Vim可以執(zhí)行輸出、刪除、查找、替換、塊操作等眾多文本操作。Vim的啟動有兩種方法: (1)vim 回車 啟動vim,并且打開一個新文件。 (2)vim file 回車 啟動vim,并且打開file文件,如果file不存在,則創(chuàng)建file文件。

vim概述 vim是Linux的全屏幕編輯器,是vi(Vi77vim的工作模式

vim有三種工作模式:命令行模式、文本輸入模式、末行模式。 一、命令行模式

1、命令行模式的功能 就是vim認為從鍵盤輸入的是命令,完成各種編輯操作。 注意:(1)在該模式下,從鍵盤所有輸入的命令,都不在屏幕上顯示出來;(2)如果輸入的不是合法命令則響鈴報警。

二、文本輸入模式

在該模式下從鍵盤輸入的均作為編輯的內(nèi)容。三、末行命令模式

在屏幕的末行有“:”符號,輸入的命令在末行顯示,按回車執(zhí)行命令。vim的工作模式 vim有三種工作模式:命令行模式、文本輸78

二、文本輸入模式

在該模式下從鍵盤輸入的均作為編輯的內(nèi)容。

文本輸入模式進入方法 使用所有的“增加文本命令”和“改變和替換命令”后,均切換到文本輸入模式。

最常用的是“a命令”和“i命令”:a :在光標位置后增加文本i :在光標位置前增加文本 二、文本輸入模式79 三、末行命令模式

在屏幕的末行有“:”符號,輸入的命令在末行顯示,按回車執(zhí)行命令。

1、進入末行命令模式的方法 在命令模式下按“:”鍵,便進入末行命令模式。

2、退出末行模式的方法 一個末行命令執(zhí)行完后,便自動回到命令行模式。

3、末行模式的功能與命令 功能有二:保存文件、退出編輯器。 三、末行命令模式80

末行模式的命令如下:

(1)保存和寫文件命令:w 將緩沖區(qū)的內(nèi)容寫到文件:w文件名 將緩沖區(qū)的內(nèi)容寫到指定文件:w!文件名 強制覆蓋寫已經(jīng)存在的文件

(2)退出編輯器命令:q 未修改則退出,做過修改則提示保存:q! 不保存退出:x 保存后退出(總做保存) 對:q有提示時,若不保存退出,再進入末行模式,:q!;若保存退出,可輸入Z、Z,或再進入末行模式,:x 末行模式的命令如下:812、進入命令行的方法 (1)啟動Vim時自動進入; (2)在其它模式時按“ESC”鍵進入。3、命令行命令(1)退出編輯器 Z、Z :保存所編輯的內(nèi)容,退出vim,返回到shell。(2)增加文本命令a :在光標位置后增加文本shift+a :在當前行末增加文本i :在光標位置前增加文本shift+i :在當前行前面增加文本o :在當前行下打開一行增加文本shift+o :在當前行上打開一行增加文本2、進入命令行的方法82 (3)塊復制命令V/v :塊開始Y/y :塊結束并復制P/p :塊粘貼 (4)刪除文本x :刪除光標位置的字符d、$ :從當前光標位置刪除到行尾d、d :刪除當前行shift+d :刪除當前行的剩余部分 (3)塊復制命令83

(5)改變和替換命令r :替換一個字符shift+r :替換字符序列c、w :把當前字從光標位置改變到字尾c、e :同上c、b :把當前字從字的開始改變到光標的前一個字符c、$ :把一行從光標位置改寫到行尾shift+c :同上c、c :改變整行 (5)改變和替換命令84主要內(nèi)容 1、編譯器gcc 2、編譯工具make命令和makefile文件

Linux編譯器gcc及編譯工具主要內(nèi)容Linux編譯器gcc及編譯工具853.4.3Linux編譯器gccp93gcc的是GNUCCompiler的縮寫,由RichardStallman開發(fā)。是我們這套工具鏈的主角.經(jīng)過多年的發(fā)展,gcc不僅僅支持C語言,還支持Adc語言、C++語言、Java語言、pascal語言、COBOL語言等等。變成了GNUCompilerCollection,即GMU編譯器集。gcc對于各種硬件平臺都提供了完善的支持。gcc是GNU組織的免費C編譯器。由gcc編譯所生成的代碼執(zhí)行效率較高,平均效率高出20---30%。3.4.3Linux編譯器gccp9386

gcc的功能

gcc的整個編譯過程,實質上是分四步進行的,每一步完成一個特定的工作,這四步分別是:

預處理(也稱預編譯,Preprocessing) 編譯(Compilation) 匯編(Assembly) 連接(Linking)一般來說開發(fā)人員要做的只是提供源代碼,其他工作都可以由gcc完成.具體完成哪一步,是由gcc后面的開關選項和文件類型決定的。 gcc的功能87gcc所包含的工具cc:C編譯器cpp:C預處理器。編譯器用它來將#include和#define這類聲明在源文件中展開。g++:C++編譯器gcc:C編譯器gccbug:一個shell腳本,幫助創(chuàng)建有價值的bug報告。gcov:覆蓋測試工具,用來分析在程序的哪里做優(yōu)化的效果最好。libgccgcc:的運行時庫libstdc++:準C++庫,包含許多常用的函數(shù)。libsupc++:為C++語言提供支持的庫函數(shù)。gcc所包含的工具cc:C編譯器881、命令gcc首先調(diào)用cpp進行預處理,在預處理過程中,對源代碼文件中的文件包含(include)、預編譯語句(如宏定義define等)進行分析。2、接著調(diào)用cc進行編譯,這個階段根據(jù)輸入文件生成以.o為后綴的目標文件。3、匯編過程是針對匯編語言的步驟,調(diào)用as進行工作,一般來講,以.s和.S的匯編語言源代碼文件經(jīng)過預編譯的匯編語言源代碼文件都生成以.o為后綴的目標文件。4、當所有的目標文件都生成之后,gcc就調(diào)用ld來完成最后的關鍵性工作,這個階段就是連接。在連接階段,所有的目標文件被安排在可執(zhí)行程序中的恰當?shù)奈恢茫瑫r,該程序所調(diào)用到的庫函數(shù)也從各自所在的檔案庫中連到合適的地方。創(chuàng)建嵌入式系統(tǒng)開發(fā)環(huán)境課件89二、gcc應用格式gcc的格式為:gcc[option]file……

gcc編譯器有許多選項,但對于普通用戶來說只要知道其中常用的幾個就夠了。下面為幾個最常用的選項:

-o

表示要求編譯器生成所指定名字的可執(zhí)行文件(必須指定名字);

-c

表示只要求編譯器進行編譯和匯編,而不要求鏈接,生成后綴為.o的同名的目標文件(不需要指定名字);二、gcc應用格式gcc的格式為:gcc[option]90

編輯源程序,文件名為Hello.cvoidmain(){ printf(“Hellotheworld!\n”);}1) gcc–o

hellohello.c 對hello.c進行編譯鏈接,生成可執(zhí)行文件hello.exe。需要輸入目標文件名。2) gcc–chello.c 只對hello.c進行編譯、匯編,不鏈接。產(chǎn)生的目標文件為hello.o。三、gcc應用舉例 編輯源程序,文件名為Hello.c三、gcc應用舉例91

-g要求編譯器在編譯的時候,產(chǎn)生對程序進行調(diào)試的信息;(不用輸入所產(chǎn)生的可執(zhí)行文件名,自動生成a.exe)例如: gcc–ghello.c 編譯時產(chǎn)生調(diào)試信息,也產(chǎn)生了可執(zhí)行文件a.exe。不需要輸入目標文件名。

-E表示編譯器對源文件只進行預處理就停止,而不做編譯、匯編和鏈接;-S表示編譯器只進行編譯,而不做匯編和鏈接;(不需要輸入目標文件名)例如: gcc–Shello.c 只對hello.c編譯,產(chǎn)生了匯編語言文件hello.s。不需要輸入目標文件名。-g要求編譯器在編譯的時候,產(chǎn)生對程序進行調(diào)試的信息;92-O是編譯器對程序提供的編譯優(yōu)化選項,可以提高執(zhí)行文件的運行效率;例如:gcc–Ohello.c 優(yōu)化編譯,并且產(chǎn)生了可執(zhí)行文件a.exe。不需要輸入目標文件名。-Wall指定產(chǎn)生全部的警告信息。

例如:gcc–Wallhello.c 產(chǎn)生全部警告信息,同時產(chǎn)生了可執(zhí)行文件a.exe。不需要輸入目標文件名。創(chuàng)建嵌入式系統(tǒng)開發(fā)環(huán)境課件93輸入文件的類型gcc是通過后綴名來區(qū)別輸入文件的類型,下面是gcc所遵循的部分約定規(guī)則。c為后綴的文件,C語言源代碼文件;

.a為后綴的文件,是由目標文件構成的檔案庫文件;

.C,.cc或.cxx為后綴的文件,是C++源代碼文件;

.h為后綴的文件,是程序所包含的頭文件;

.i為后綴的文件,是已經(jīng)預處理過的C源代碼文件;

.ii為后綴的文件,是已經(jīng)預處理過的C++源代碼文件;

.m為后綴的文件,是Objective-C源代碼文件;

.o為后綴的文件,是編譯后的目標文件;

.s為后綴的文件,是匯編語言源代碼文件;

.S為后綴的文件,是經(jīng)過預編譯的匯編語言源代碼文件。輸入文件的類型gcc是通過后綴名來區(qū)別輸入文件的類型,下面是94

gcc所生成的目標文件格式

所生成的為可執(zhí)行文件,Linux有兩種可執(zhí)行文件:ELF(a.exe)和a.out。 ELF(Executivelinkedfile)為可執(zhí)行鏈接文件,是一種新標準,功能更強大。文件的擴展名為.exe。 ELF為Linux的默認格式

gcc所生成的目標文件格式95交叉編譯命令gcc基于命令行的。當作為交叉編譯工具使用時,gcc支持很多種的平臺和“宿主機-目標機”的組合。對應交叉編譯,常用的命令就是arm-linux-gcc。這樣,當用C語言寫好一個應用程序時,使用此命令就是以生成可以在目標平臺上執(zhí)行的可執(zhí)行文件,通過超級終端執(zhí)行后,就可以在目標板上看到程序的結果。交叉編譯命令gcc基于命令行的。963.4.1GNUmake工具3.4.1GNUmake工具973.4.1GNUmake工具什么是Makefile文件?在大型的開發(fā)項目中,通常有幾十個到上百個的源文件,如果每次均手工鍵入gcc命令進行編譯,會非常不方便。Linux專門為軟件開發(fā)提供了一個自動化的管理工具GNUMake。Make的主要工作是讀取Makefile文件的內(nèi)容。該文件描述了目標文件之間的依賴關系,以及制定編譯過程中使用的工具。同時,Make檢查目的文件的時間戳,如果目的文件的時間戳至少比他的一個依靠文件舊,Make可以自動地更新和編譯程序。3.4.1GNUmake工具什么是Makefile文件98我們先舉一個實例來認識Make和Makefile文件的用法我們先舉一個實例來認識Make和Makefile文件的用法99make概述make依靠Makefile文件完成。默認情況下,GNUmake工具在當前工作目錄中按如下順序搜索makefile:”GNUmakefile”→”makefile”→”Makefile”。在Linux系統(tǒng)中,習慣使用Makefile作為makefile文件。如果要使用其他文件作為makefile,則可利用下面make命令指明makefile文件:”#make–fMakefile.debug”。比如:“Make.Linux”,“Make.Solaris”,“Make.AIX”等,如果要指定特定的Makefile,你可以使用make的“-f”和“--file”參數(shù),如:make-fMake.Linux或make--fileMake.AIX。

Makefile是一個文本格式的數(shù)據(jù)庫文件,包含一些規(guī)則,告訴make編譯哪些文件,在什么條件下編譯。make概述make依靠Makefile文件完成。100make規(guī)則Makefile中的每條規(guī)則包括下面內(nèi)容: 一個目標體(target):make最終需創(chuàng)建的對象。 包含一個或多個依賴體(Dependency)的列表,依賴體指明編譯目標時需要用到的其它文件。

命令(Command)列表,指明從依賴體文件創(chuàng)建出目標對象所需要執(zhí)行的命令。樣式:(注:每個命令行前必須是一個Tab字符) target:dependency[dependency[…]] command command[…]make規(guī)則Makefile中的每條規(guī)則包括下面內(nèi)容:101如果一個工程有3個頭文件,和8個C文件,我們?yōu)榱送瓿汕懊嫠龅哪侨齻€規(guī)則,我們的Makefile應該是下面的這個樣子的。

edit:main.okbd.ocommand.odisplay.o\insert.osearch.ofiles.outils.ogcc-o

editmain.okbd.ocommand.odisplay.o\insert.osearch.ofiles.outils.omain.o:main.cdefs.h

gcc-cmain.ckbd.o:kbd.cdefs.hcommand.h

gcc-ckbd.ccommand.o:command.cdefs.hcommand.hgcc-ccommand.cdisplay.o:display.cdefs.hbuffer.hgcc-cdisplay.c反斜杠(\)是換行符的意思以TAB鍵開頭如果一個工程有3個頭文件,和8個C文件,我們?yōu)榱送瓿汕懊嫠?02insert.o:insert.cdefs.hbuffer.hgcc-cinsert.csearch.o:search.cdefs.hbuffer.hgcc-csearch.cfiles.o:files.cdefs.hbuffer.hcommand.hgcc-cfiles.cutils.o:utils.cdefs.hgcc-cutils.cclean:rm

editmain.okbd.ocommand.odisplay.o\insert.osearch.ofiles.outils.oinsert.o:insert.cdefs.hbuf103makefile中使用變量在上面的例子中,先讓我們看看edit的規(guī)則:edit:main.okbd.ocommand.odisplay.o\insert.osearch.ofiles.outils.o

gcc-oeditmain.okbd.ocommand.odisplay.o\insert.osearch.ofiles.outils.o

我們可以看到[.o]文件的字符串被重復了兩次,如果我們的工程需要加入一個新的[.o]文件,那么我們需要在兩個地方加。當然,我們的makefile并不復雜,所以在兩個地方加也不累,但如果makefile變得復雜,那么我們就有可能會忘掉一個需要加入的地方,而導致編譯失敗。所以,為了makefile的易維護,在makefile中我們可以使用變量。makefile的變量也就是一個字符串,理解成C語言中的宏可能會更好。makefile中使用變量在上面的例子中,先讓我們看看ed104比如,我們聲明一個變量,叫objects.我們在makefile一開始就這樣定義:objects=main.okbd.ocommand.odisplay.o\insert.osearch.ofiles.outils.o

很方便地在我們的makefile中以“$(objects)”的方式來使用這個變量了程序如下:objects=main.okbd.ocommand.odisplay.o\insert.osearch.ofiles.outils.oedit:$(objects)gcc-oedit$(objects)……clean:rmedit$(objects)

比如,我們聲明一個變量,叫objects.我們在makefi105make的“隱晦規(guī)則GNU的make很強大,它可以自動推導文件以及文件依賴關系后面的命令,于是我們就沒必要去在每一個[.o]文件后都寫上類似的命令,因為,我們的make會自動識別,并自己推導命令。只要make看到一個[.o]文件,它就會自動的把[.c]文件加在依賴關系中,如果make找到一個whatever.o,那么whatever.c,就會是whatever.o的依賴文件。并且gcc-cwhatever.c也會被推導出來,于是,我們的makefile再也不用寫得這么復雜。新的makefile又出爐了。

make的“隱晦規(guī)則GNU的make很強大,它可以自動推導文106objects=main.okbd.ocommand.odisplay.o\insert.osearch.ofiles.outils.oedit:$(objects)gcc-oedit$(objects)main.o:defs.hkbd.o:defs.hcommand.hcommand.o:defs.hcommand.hdisplay.o:defs.hbuffer.hinsert.o:defs.hbuffer.hsearch.o:defs.hbuffer.hfiles.o:defs.hbuffer.hcommand.hutils.o:defs.h.PHONY:cleanclean:rmedit$(objects)自動推導文件以及文件依賴關系后面的命令PHONY意思表示clean是一個“偽目標”objects=main.okbd.ocommand107注釋Makefile中只有行注釋,和UNIX的Shell腳本一樣,其注釋是用“#”字符,這個就像C/C++中的“//”一樣。如果你要在你的Makefile中使用“#”字符,可以用反斜框進行轉義,如:“\#”。例如:#thatisamakefileHello:hello.o……..注釋Makefile中只有行注釋,和UNIX的Shell腳本108(1)每個子目錄都有自己的Makefile,負責本子目錄文件的編譯和控制下級目錄的編譯。(2)系統(tǒng)有一規(guī)則文件Rules.make,為整個系統(tǒng)所有的Makefile所用,放在頂層.(3)上級Makefile文件對下級Makefile文件進行控制,逐級遞歸到最低層的Makefile文件。最頂層的Makefile文件給出創(chuàng)建的目標文件。完成大工程系統(tǒng)編譯的方法(1)每個子目錄都有自己的Makefile,負責本子目錄文件109交叉編譯中makefile的例子CROSS=/work/cgf/2410/2.95.3/bin/arm-linux-CFLAGS=-D__KERNEL__CFLAGS+=-DMODULECFLAGS+=-I/work/cgf/2410/2.4.18-rmk7/includeCFLAGS+=-I/work/cgf/2410/2.4.18-rmk7/include/linuxCFLAGS+=-I/work/cgf/2410/2.95.3/arm-linux\includeCFLAGS+=-Wall-Wstrict-prototypes-Wno-trigraphs-Os-mapcsCFLAGS+=-fno-strict-aliasing-fno-common-fno-common-pipe-mapcs-32CFLAGS+=-march=armv4-mtune=arm9tdmi-mshort-load-bytes-msoft-floatCFLAGS+=-DKBUILD_BASENAME=gpiodrvall:gpiodrv.ogpiodrv.o:gpiodrv.c$(CROSS)gcc$(CFLAGS)-c-ogpiodrv.ogpiodrv.cclean:rm-f*.o系統(tǒng)變量make就會這個參數(shù)所指定的目錄下去尋找交叉編譯中makefile的例子CROSS=/work/c110具體的參見<跟我一起寫makefile>具體的參見<跟我一起寫makefile>111Glibc庫Glibc是提供系統(tǒng)調(diào)用和基本函數(shù)C庫,比如打開設備使用的open函數(shù)、用來讀設備的read和write函數(shù)等。所有的動態(tài)鏈接庫都要用到它。一般存放在/lib和/usr/lib目錄中。工具如p95表3-7所示。2006年3月,Glibc推出了2.4版本,Glibc2.4需要Linux2.6.0以上的版本,推薦使用gcc4.1編譯。對于Linux2.4內(nèi)核用戶,使用2.3系列版本。查詢版本的命令:#/lib/libc.so.6Glibc庫Glibc是提供系統(tǒng)調(diào)用和基本函數(shù)C庫,比如打112查詢Glibc庫版本查詢Glibc庫版本113GDBGDB是GNU開源組織發(fā)布的一個強大的UNIX下的C、C++程序調(diào)試工具。開發(fā)人員可以用它通過串口或網(wǎng)絡進行遠程調(diào)試,為嵌入式開發(fā)板上的程序調(diào)試提供方便。一般來說,GDB主要幫忙你完成下面四個方面的功能:1、啟動并根據(jù)要求調(diào)試運行程序。2、可以設置斷點,3、當程序被停住時,可以檢查此時你的程序中所發(fā)生的事??梢圆榭醋兞浚拇嫫?,內(nèi)存及堆棧。4、動態(tài)的改變你程序的執(zhí)行環(huán)境。

在shell提示符下輸入”gdb”就可以進入GDBgdb支持按Tab鍵讓gdb幫你補齊一個唯一的命令,也能用光標鍵上下翻動歷史命令.GDBGDB是GNU開源組織發(fā)布的一個強大的UNIX下的C、114基本gdb命令命令描述

file裝入想要調(diào)試的可執(zhí)行文件.kill終止正在調(diào)試的程序list列出產(chǎn)生執(zhí)行文件的源代碼的一部分.next執(zhí)行一行源代碼但不進入函數(shù)內(nèi)部.step執(zhí)行一行源代碼而且進入函數(shù)內(nèi)部.Run執(zhí)行當前被調(diào)試的程序quit終止gdbwatch使你能監(jiān)視一個變量的值而不管它何時被改變break在代碼里設置斷點,這將使程序執(zhí)行到這里時被掛起.make使你能不退出gdb就可以重新產(chǎn)生可執(zhí)行文件shell.使你能不離開gdb就執(zhí)行UNIXshell命令.基本gdb命令命令描述file裝入想要調(diào)試的可執(zhí)行115通過一個實例說明,見視頻gdb對gdb命令的詳細介紹參見文件gdb命令總結.doc通過一個實例說明,見視頻gdb116主要內(nèi)容 1、交叉編譯的幾個概念 2、交叉編譯工具的創(chuàng)建方法

3.5交叉編譯工具的創(chuàng)建主要內(nèi)容3.5交叉編譯工具的創(chuàng)建117

一、交叉編譯的幾個概念

1、交叉編譯:就是在一個平臺上生成可以在另一個平臺上執(zhí)行的代碼。 采用交叉編譯的主要原因是,多數(shù)嵌入式目標機不能提供足夠的資源供編譯過程使用,因而只好將編譯工作轉移到高性能的宿主機中進行。

2、編譯環(huán)境:即創(chuàng)建交叉編譯工具的編譯環(huán)境是一個由編譯器、連接器和解釋器組成的綜合開發(fā)環(huán)境。

3、交叉編譯工具(鏈):交叉編譯工具(鏈)主要包括針對目標系統(tǒng)的編譯器gcc、目標系統(tǒng)的二進制工具binutils、目標系統(tǒng)的標準c庫glibc和目標系統(tǒng)的Linux內(nèi)核頭文件。 一、交叉編譯的幾個概念118

二、交叉編譯工具的創(chuàng)建方法

1、準備編譯工具和Linux內(nèi)核

包括binutils、gcc、glibc及Linux內(nèi)核在內(nèi)的源代碼,盡量選用較新版本,glibc和內(nèi)核源代碼的版本必須與目標機上實際使用的版本保持一致,并設定shell變量PREFIX指定可執(zhí)行程序的安裝路徑。

2、編譯binutils

運行configure文件,并使用--prefix=$PREFIX參數(shù)指定安裝路徑,使用--target=arm-linux參數(shù)指定目標機類型,然后執(zhí)行makeinstall。 二、交叉編譯工具的創(chuàng)建方法119

3、配置Linux內(nèi)核頭文件

執(zhí)行makemrproper進行清理工作,然后執(zhí)行makeconfigARCH=arm(或makemenuconfig/xconfigARCH=arm)進行配置。一定要在命令行中使用ARCH=arm指定CPU架構,因為默認架構為主機的CPU架構,這一步需要根據(jù)目標機的實際情況進行詳細的配置。

配置完成之后,需要將內(nèi)核頭文件拷貝到安裝目錄:cp-drinclude/asm-arm$PREFIX/arm-linux/include/asmcp-drinclude/linux$PREFIX/arm-linux/include/linux 3、配置Linux內(nèi)核頭文件120

4、第一次編譯gcc

configure的運行參數(shù)設置:--prefix=$PREFIX--target=arm-linux--disable-threads-disable-shared--enable-languages=c 執(zhí)行makeinstall,將生成一個最簡單的gcc。由于編譯整個gcc是需要目標機的glibc庫的,它現(xiàn)在還不存在,因此需要首先生成一個最簡單的gcc,它只需要具備編譯目標機glibc庫的能力即可。 4、第一次編譯gcc121

5、交叉編譯glibc 由于這一步生成的代碼是針對目標機cpu的,因此它屬于一個交叉編譯過程。 又因為該過程要用到Linux內(nèi)核頭文件,默認路徑為$PREFIX/arm-linux/sys-linux,因而需要在$PREFIX/arm-linux中建立一個名為sys-linux的軟連接,使其指向內(nèi)核頭文件所在的include目錄;也可以在接下來要執(zhí)行的configure命令中使用--with-headers參數(shù)指定linux內(nèi)核頭文件的實際路徑。 5、交叉編譯glibc122

6、第二次編譯gcc

運行configure參數(shù)設置為:--prefix=$PREFIX--target=arm-linux--enable-languages=c,c++。 運行makeinstall。 到此為止整個交叉編譯環(huán)境就完全生成了。建立一個交叉編譯工具鏈是一個相當復雜的過程,為了節(jié)省時間,網(wǎng)上有一些編譯好的可用的交叉編譯工具鏈可以下載。 6、第二次編譯gcc1233.5.8其他交叉編譯方法Crosstool:p115開發(fā)的一套腳本程序,可以自動編譯不同版本的gcc和glibc,并做出測試.其中包含有gcc,g++,binutils,genromfs,flthdr和elf2flt等各種實用工具。目前的版本是0.42,大家在選用之前必須注意版本的組合。(P116)只有通過測試的工具鏈才可以放心使用,可以訪問其官方網(wǎng)站:/crosstool/Scratchbox通過二進制軟件包創(chuàng)建交叉編譯環(huán)境3.5.8其他交叉編譯方法Crosstool:p115開發(fā)的1241)利用crosstools建立交叉編譯環(huán)境

下面的步驟是在LINUX操作系統(tǒng)平臺下做的,redhat9.0.建立交叉編譯環(huán)境步驟如下:(1)編譯工具包cross-2.95.tar.bz2在FS2410P教學平臺的配套光盤中提供了(2)解壓編譯工具包先將光盤目錄下的“Linux源碼和工具”的“toolchain”文件夾下的cross-2.95.tar.bz2拷貝到任意目錄下,然后進入這個目錄,執(zhí)行命令:tar–xjvfcross-2.95.tar.bz2解壓后在cross-2.95.tar.bz2的同一目錄下出現(xiàn)一個2.95.3的目錄,該目錄下面有gcc,g++,binutils,genromfs,flthdr和elf2flt等各種實用工具。就這樣,交叉編譯工具就安裝好了。1)利用crosstools建立交叉編譯環(huán)境

下面的步驟是在1252)編譯內(nèi)核1)解壓內(nèi)核包先將光盤目錄下的“Linux源碼和工具”的“內(nèi)核源碼包”文件夾下的kernel2410.tgz拷貝到任意目錄下,然后進入該目錄,輸入內(nèi)核解壓命令:tarzxvfkernel2410.tgz這樣就將Linux內(nèi)核解壓到了該目錄下了。2)編譯內(nèi)核1)解壓內(nèi)核包1263)編輯Makefile文件

進入解壓的目錄后,運行命令:viMakefile找到CROSS_COMPILE=opt/host/armv41/bin/armv41-unknown-lin

溫馨提示

  • 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

提交評論