前言:想要寫出一篇令人眼前一亮的文章嗎?我們特意為您整理了5篇linux系統(tǒng)范文,相信會為您的寫作帶來幫助,發(fā)現(xiàn)更多的寫作思路和靈感。
關(guān)鍵詞:嵌入式linux 操作系統(tǒng);應用前景
近年來,隨著計算技術(shù)、通信技術(shù)的飛速發(fā)展,特別是互聯(lián)網(wǎng)的迅速普及和3C(計算機、通信、消費電子)合一的加速,微型化和專業(yè)化成為發(fā)展的新趨勢,嵌入式產(chǎn)品成為信息產(chǎn)業(yè)的主流。Linux從1991年問世到現(xiàn)在,短短的十幾年時間已經(jīng)發(fā)展成為功能強大、設計完善的操作系統(tǒng)之一;可運行在X86、Alpha、Sparc、MIPS、PPC、Motorola、NEC、ARM等多種硬件平臺,而且開放源代碼,可以定制;可與各種傳統(tǒng)的商業(yè)操作系統(tǒng)分庭抗爭。越來越多的企業(yè)和研發(fā)機構(gòu)都轉(zhuǎn)向嵌入式Linux的開發(fā)和研究上,在新興的嵌入式操作系統(tǒng)領(lǐng)域內(nèi)也獲得了飛速發(fā)展。
1 嵌入式Linux的特點
嵌入式系統(tǒng)是以應用為中心,以計算機為基礎,軟硬件可裁剪,適用于系統(tǒng)對功能、可靠性、成本、功耗嚴格要求的專用計算機系統(tǒng)。實時性是嵌入式系統(tǒng)的基本要求,其次,還要求代碼小,速度快,可靠性高。嵌入式Linux(Embedded Linux)是指對Linux經(jīng)過裁剪小型化后,可固化在存儲器或單片機中,應用于特定嵌入式場合的專用Linux操作系統(tǒng)。嵌入式Linux的開發(fā)和研究已經(jīng)成為目前操作系統(tǒng)領(lǐng)域的一個熱點。與其它嵌入式操作系統(tǒng)相比,Linux的特點如下:
第一,Linux系統(tǒng)是層次結(jié)構(gòu)且內(nèi)核完全開放。Linux是由很多體積小且性能高的微內(nèi)核系統(tǒng)組成。在內(nèi)核代碼完全開放的前提下,不同領(lǐng)域和不同層次的用戶可以根據(jù)自己的應用需要方便地對內(nèi)核進行改造,低成本地設計和開發(fā)出滿足自己需要的嵌入式系統(tǒng)。
第二,強大的網(wǎng)絡支持功能。Linux誕生于因特網(wǎng)時代并具有Unix的特性,保證了它支持所有標準因特網(wǎng)協(xié)議,并且可以利用Linux的網(wǎng)絡協(xié)議棧將其開發(fā)成為嵌入式的TCP/IP網(wǎng)絡協(xié)議棧。
第三,Linux具備一整套工具鏈,容易自行建立嵌入式系統(tǒng)的開發(fā)環(huán)境和交叉運行環(huán)境,可以跨越嵌入式系統(tǒng)開發(fā)中仿真工具的障礙。Linux也符合IEEE POSIX.1標準,使應用程序具有較好的可移植性。
傳統(tǒng)的嵌入式開發(fā)的程序調(diào)試和調(diào)試工具是用在線仿真器(ICE)實現(xiàn)的。它通過取代目標板的微處理器,給目標程序提供一個完整的仿真環(huán)境,完成監(jiān)視和調(diào)試程序;但一般價格比較昂貴,只適合做非常底層的調(diào)試。
第四,Linux具有廣泛的硬件支持特性。無論是RISC還是CISC、32位還是64位等各種處理器,Linux都能運行。這意味著嵌入式Linux將具有更廣泛的應用前景。
2 Linux嵌入式系統(tǒng)開發(fā)平臺
2.1 系統(tǒng)軟件操作平臺
操作系統(tǒng)是一種在計算機上運行的軟件。它的主要任務是管理計算機上的系統(tǒng)資源,為用戶提供使用計算機及其外部設備的接口。它存在的目的是為了管理所有硬件資源,并且提供應用軟件一個合適的操作環(huán)境。
Linux作為嵌入式操作系統(tǒng)是完全可行的。因為Linux提供了完成嵌入功能的基本內(nèi)核和所需要的所有用戶界面,能處理嵌入式任務和用戶界面。將Linux看作是連續(xù)的統(tǒng)一體,從一個具有內(nèi)存管理、任務切換和時間服務及其它分拆的微內(nèi)核到完整的服務器,支持所有的文件系統(tǒng)和網(wǎng)絡服務。
嵌入式Linux系統(tǒng)需要下面三個基本元素:系統(tǒng)引導工具(用于機器加電后的系統(tǒng)定位引導)、Linux微內(nèi)核(內(nèi)存管理、 程序管理)、初始化進程。但如果要它成為完整的操作系統(tǒng)并且繼續(xù)保持小型化,還必須加上硬件驅(qū)動程序、硬件接口程序和應用程序組。
Linux是基于GNU的C編譯器,作為GNU工具鏈的一部分,與gdb源調(diào)試器一起工作的。它提供了開發(fā)嵌入式Linux系統(tǒng)的所有軟件工具。
2.2 系統(tǒng)硬件平臺
在選擇硬件時,常由于缺乏完整或精確的信息而使硬件選擇成為復雜且困難的工作?,F(xiàn)在比較流行的硬件平臺有Intel公司的StrongARM 系列,Motorola公司的DragonBall系列,NEC公司的VR系列,Hitachi公司的SH3、SH4系列等等。選定硬件平臺前,首先要確定系統(tǒng)的應用功能和所需要的速度,并制定好外接設備和接口標準。這樣才能準確地定位所需要的硬件方案,得到性價比最高的系統(tǒng)。
3 嵌入式Linux系統(tǒng)開發(fā)模式
嵌入式系統(tǒng)通常為一個資源受限的系統(tǒng)。直接在嵌入式系統(tǒng)的硬件平臺上編寫軟件比較困難,有時甚至是不可能的。目前,一般采用的辦法是,先在通用計算機上編寫程序,然后,通過交叉編譯,生成目標平臺上可運行的二進制代碼格式,最后下載到目標平臺上的特定位置上運行,具體步驟如下。
第一步,建立嵌入式Linux交叉開發(fā)環(huán)境。目前,常用的交叉開發(fā)環(huán)境主要有開放和商業(yè)兩種類型。開放的交叉開發(fā)環(huán)境的典型代表是GNU工具鏈,目前已經(jīng)能夠支持x86、ARM、MIPS、PowerPC等多種處理器。商業(yè)的交叉開發(fā)環(huán)境主要有Metrowerks CodeWarrior、ARM Software Development Toolkit、SDS Cross compiler、WindRiver Tornado、Microsoft Embedded Visual C++等。交叉開發(fā)環(huán)境是指編譯、鏈接和調(diào)試嵌入式應用軟件的環(huán)境。它與運行嵌入式應用軟件的環(huán)境有所不同,通常采用宿主機/目標機模式。
第二步,交叉編譯和鏈接。在完成嵌入式軟件的編碼之后,就是進行編譯和鏈接,以生成可執(zhí)行代碼。由于開發(fā)過程大多是在Intel公司x86系列CPU的通用計算機上進行的,而目標環(huán)境的處理器芯片卻大多為ARM、MIPS、PowerPC、DragonBall等系列的微處理器,這就要求在建立好的交叉開發(fā)環(huán)境中進行交叉編譯和鏈接。
第三步,交叉調(diào)試。
① 硬件調(diào)試。如果不采用在線仿真器,可以讓CPU直接在其內(nèi)部實現(xiàn)調(diào)試功能,并通過在開發(fā)板上引出的調(diào)試端口,發(fā)送調(diào)試命令和接收調(diào)試信息,完成調(diào)試過程。目前,ARM公司提供的開發(fā)板上使用的則是JTAG調(diào)試端口。
② 軟件調(diào)試。在嵌入式Linux系統(tǒng)中,Linux系統(tǒng)內(nèi)核調(diào)試,可以先在Linux內(nèi)核中設置一個調(diào)試樁(debug stub),用作調(diào)試過程中和宿主機之間的通信服務器。然后,可以在宿主機中通過調(diào)試器的串口與調(diào)試樁進行通信,并通過調(diào)試器控制目標機上Linux內(nèi)核的運行。
第四步,系統(tǒng)測試。整個軟件系統(tǒng)編譯過程,嵌入式系統(tǒng)的硬件一般采用專門的測試儀器進行測試,而軟件則需要有相關(guān)的測試技術(shù)和測試工具的支持,并要采用特定的測試策略。測試技術(shù)指的是軟件測試的專門途徑,以及能夠更加有效地運用這些途徑的特定方法。
// 讀取Table.DAT
{
FILE *tab = fopen(TABLE_FILE, "r") ;
// 打開文件
int count = fread(Tab, sizeof(int), TAB_SIZE, tab) ;
fflush(tab) ;
// 刷新文件流
for (int i=0; i
if ( Tab[i] != -1 && Tab[i+1] != -1 )
Tab[i+1] = Tab[i+1] + Tab[i] ;
else
break ;
return TRUE ;
}
int LoadPack()
// 加載數(shù)據(jù)包
{
int i ;
int load_packs
= 0 ;
FILE *pack = fopen(PACK_FILE, "r") ;
for (i = 0; i < BUF_COUNT; i++)
{
if ( Tab[to_be_load+i] != -1 && Tab[to_be_load+i+1] != -1 )
{
int size = Tab[to_be_load+i+1] - Tab[to_be_load+i] ;
int offset = Tab[to_be_load+i] ;
if ( fread(buf+i, size, 1, pack) != 1 )
{
printf("Read error...\n\n") ;
exit(1) ;
}
load_packs ++ ;
// 更新變量
}
else
{
/* do nothing */
}
}
fflush(pack) ;
// 刷新數(shù)據(jù)流
to_be_load += load_packs ;
// 更新變量
return load_packs ;
// 返回讀取的數(shù)目
}
3.4.2 系統(tǒng)中的buffer
在現(xiàn)實中的很多系統(tǒng)中,buffer是很重要的一種思想,為的就是減少讀取外部存儲的次數(shù),延長設備的使用壽命。Buffer在計算機系統(tǒng)中,應用是很廣泛的,例如,在硬盤和內(nèi)存之間存在一層緩沖區(qū),在CPU和內(nèi)存之間同樣也存在一層緩沖區(qū),這層緩沖區(qū)通常被稱作Cache。
在本系統(tǒng)中,也同樣利用了Buffer思想,有著傳統(tǒng)意義上的原因,當然還考慮到用戶操作時的特殊性,系統(tǒng)的Buffer思想描述如下:
l
在任意時刻,Buffer內(nèi)最多存儲100個Package數(shù)據(jù)
l
剛開始,加載pack0 ~ pack99共計100個package,當要查看pack100時,則采取的方法是:保留舊的50個package, 加載新的50個package,則package編號變?yōu)椋簆ack50 ~ pack149,這樣操作的原因是為了用戶的方便,因為用戶經(jīng)常會查看某個報文附近的幾個報文。
初始狀態(tài)下,假設系統(tǒng)已經(jīng)加載了編號為0到99的數(shù)據(jù)包,如圖2.7所示:
圖2.7
加載前緩沖區(qū)內(nèi)容
在某一時刻,假設用戶想查看編號為100的數(shù)據(jù)包,則需要重新加載,重新加載后的數(shù)據(jù)包如圖2.8所示:
圖2.8
加載后緩沖區(qū)內(nèi)容
使用此種Buffer思想,用戶操作的方便性即體現(xiàn)在這個方面,在對某條報文進行研究時,會經(jīng)常查看它的臨近報文,使用此種機制,那么便不會不斷的對要查看的臨近報文進行加載,減少了讀取硬盤的次數(shù)。
3.4.3 系統(tǒng)的顯示問題
在控制臺上,要想建造一個好的用戶操作界面,是一件比較難的事情,根據(jù)我的體驗,linux下著名的Sniffer工具tcpdump的操作界面也不夠友好,普通用戶很難操作。在window環(huán)境下的Sniffer工具Ethereal界面比較美觀,方便操作,所以,建造一個好的用戶操作界面成為我此次畢設的攻克重點。
本系統(tǒng)的顯示分為兩種顯示模式:“detail”模式 和 “simple”模式,“detail”模式意為“詳細顯示模式”,“simple”模式意為“簡單顯示模式”。
在“detail”模式下,每個包得到盡可能詳細的解析,解析包的每一層信息,示意如圖2.9:
圖2.9
詳細顯示模式
根據(jù)上圖顯示的信息,可以得知此包是一個ICMP Package,具體內(nèi)容屬于ping Reply,更詳細得知是本主機ping本主機的一個數(shù)據(jù)包。
“simple”模式意為簡單模式,所謂簡單模式就是對每個Package盡可能的用一句話來描述,雖然盡可能的簡短,但是一定要包含以下信息:
l
Package的類型
l
Package的作用
這種模式的重要作用是在用戶對包進行檢測和測量時,通常會查看相鄰的幾個Package,這樣的模式方便用戶進行“查看上一個Package”和“查看下一個Package”,只要用戶在這種模式下按“N”或者“n”就可以查看下一個package,只要按“L”或“l(fā)”鍵就可以查看上一個Package。
“simple”模式的示意如圖2.10所示:
圖2.10
簡單顯示模式
從圖中可以看出,當前正在查看的包用“藍色”的線條標出,方面用戶的操作,當用戶向上或者向下進行選擇時,此藍色線條也同樣會向上或向下運動,這樣做的原因是是的系統(tǒng)顯示具有動態(tài)效果。
“detail”模式的顯示比較簡單,只要逐層進行解析就可以了,下面我們主要討論下“simple”模式下的顯示算法。
在“simple”模式下,當前控制臺最多可以顯示20個Package,主要是由函數(shù)List20Packages函數(shù)實現(xiàn)的。什么時候應該對Package標上藍色的線條,以下代碼即說明此問題:
if ( i == p_recorder % 20 )
// if the package is the current
printf(COLOR_START) ;
// color_start
無論示在簡單顯示模式還是在詳細顯示模式下,均支持以下三種操作:
向上操作(Prev) ----- 查看上一條報文
向下操作(Next) ----- 查看下一條報文
任意操作(Goto) ----- 查看任一條報文
第四章
Sniffer其它相關(guān)
4.1 文怎樣獲取一個數(shù)據(jù)包?
4.1.1 Libpcap方法
Libpcap 是由洛侖茲伯克利國家實驗室編寫的Linux 平臺下的網(wǎng)絡數(shù)據(jù)包捕獲函數(shù)庫,是一種與系統(tǒng)無關(guān),用于訪問數(shù)據(jù)鏈路層,是一個獨立于系統(tǒng)接口的用戶級捕包函數(shù)據(jù)庫,為底層的網(wǎng)絡數(shù)據(jù)提供了可移植框架,它的應用包括網(wǎng)絡統(tǒng)計、安全監(jiān)聽、網(wǎng)絡調(diào)試、性能測量、入侵檢測、口令攔截等。Libpcap 可以在絕大多數(shù)類Unix 平臺下工作,絕大多數(shù)的現(xiàn)代操作系統(tǒng)都提供了對底層網(wǎng)絡數(shù)據(jù)包捕獲的機制,在捕獲機制之上可以開發(fā)網(wǎng)絡監(jiān)控應用軟件。采用Libpcap 實施網(wǎng)絡數(shù)據(jù)包捕獲時,將要用到一個重要的函數(shù)pcap_open_live(),它的函數(shù)原型是:pcap_t * pcap_open_live(const char *device, int snaplen, int promisc, int to_ms, char *ebuf),其中,如果device 為NULL 或any,則對所有接口捕獲,snaplen 代表用戶期望的捕獲數(shù)據(jù)包最大長度,promisc 代表設置接口為混雜模式,捕獲所有到達接口的數(shù)據(jù)包,但只有在設備給定的情況下才有意義,to_ms 代表函數(shù)超時返回的時間。
編程要點如下:
l
查找可以捕獲數(shù)據(jù)包的設備
device = pcap_lookupdev(errbuf);
l
創(chuàng)建捕獲句柄,準備進行捕獲
p =pcap_open_live(device, 8000, 1, 500, errbuf);
l
如果用戶設置了過濾條件,則編譯和安裝過濾代碼
pcap_compile(p, &fcode, filter_string, 0, netmask);
pcap_setfilter(p, &fcode);
l
進入循環(huán),反復捕獲數(shù)據(jù)包
for( ; ; )
while((ptr = (char *)(pcap_next(p, &hdr))) == NULL);
l
對捕獲的數(shù)據(jù)進行類型轉(zhuǎn)換,轉(zhuǎn)化成以太數(shù)據(jù)包類型
eth = (struct libnet_ethernet_hdr *)ptr;
l
對以太頭部進行分析,判斷所包含的數(shù)據(jù)包類型,做進一步的處理
if(eth->ether_type == ntohs(ETHERTYPE_IP))
if(eth->ether_type == ntohs(ETHERTYPE_ARP))
l
關(guān)閉捕獲句柄
pcap_close(p);
4.1.2 Socket方法
在Linux 下編寫網(wǎng)絡包捕獲程序,比較簡單的方法是在超級用戶模式下,利用類型為SOCK_PACKET 的套接口(socket函數(shù))來捕獲鏈路幀。Linux SOCK_PACKET 編程要點如下:
l
設置套接口以捕獲鏈路幀:在設置套接口之前,需要引用如下文件:
#include
#include
#include
#include
調(diào)用socket 函數(shù)的原型是:int socket(int domain, int type,int protocol);
本函數(shù)涉及3 個輸入?yún)?shù):domain 參數(shù)表示所使用的協(xié)議族;type 參數(shù)表示套接口的類型;protocol 參數(shù)表示所使用的協(xié)議族中某個特定的協(xié)議。如果函數(shù)調(diào)用成功,套接口的描述符(非負整數(shù)) 就作為函數(shù)的返回值,假如返回值為-1,就表明有錯誤發(fā)生。使用socket 函數(shù)捕獲鏈路層數(shù)據(jù)幀,domain參數(shù)應指定為AF_INET 協(xié)議族,表示采用Internet 協(xié)議族;type參數(shù)指定為SOCK_PACKET,表示獲取鏈路層數(shù)據(jù),進而分析各層的協(xié)議數(shù)據(jù)單元;而protocol 參數(shù)采用htons(0x0003),表示可以截取所有類型的數(shù)據(jù)幀。這里htons 函數(shù)用于短整數(shù)的字節(jié)順序轉(zhuǎn)換。計算機數(shù)據(jù)存儲有兩種字節(jié)優(yōu)先順序:高位字節(jié)優(yōu)先和低位字節(jié)優(yōu)先。Internet 上數(shù)據(jù)以高位字節(jié)優(yōu)先順序在網(wǎng)絡上傳輸,所以對于在內(nèi)部是以低位字節(jié)優(yōu)先方式存儲數(shù)據(jù)的機器,在Internet 上傳輸數(shù)據(jù)時就需要進行轉(zhuǎn)換,否則就會出現(xiàn)數(shù)據(jù)不一致。在捕獲數(shù)據(jù)包時socket 函數(shù)調(diào)用形式為:
int fd;
// fd 是套接口的描述符
fd=socket(AF_INET, SOCK_PACKET, htons(0x0003));
l
設置網(wǎng)卡工作模式:要使建立的套接口能夠真正捕獲到同一網(wǎng)段其它站點的數(shù)據(jù),還必須設置網(wǎng)卡工作于“混雜”模式,可以使用ioctl 函數(shù),原型如下:
int ioctl(int d, int request,&ifr),ioctl 系統(tǒng)調(diào)用用于對套接口、網(wǎng)卡等軟硬件設施進行底層控制,實際的操作來自各個設備自己提供的ioctl 接口。設置網(wǎng)卡于“混雜”方式的Linux C 程序段如下:
struct ifreq ifr;
strcpy(ifr.ifr_name, dev);
//(char *)dev 標識設備名,如:eth0
i=ioctl(fd,SIOCGIFFLAGS,&ifr); // 表示要求取出工作方式
if(i
{
close(fd);
perror("can't get flags\n");
exit(0);
}
ifr.ifr_flags |= IFF_PROMISC;
//在標志中加入“混雜”方式
i=ioctl(fd,SIOCSIFFLAGS,&ifr);
// 表示要求設定工作方式
if(i
{
perror("can't set promiscuous\n");
exit(0);
}
l
從套接口讀取鏈路幀:套接口建立以后,就可以從中循環(huán)地讀取鏈路層數(shù)據(jù)幀。因此,還需要建立數(shù)據(jù)幀的緩沖區(qū),并把幀頭結(jié)構(gòu)的指針指向這一緩沖區(qū)的首地址:
char ep[ETH_FRAME_LEN]; struct ethhdr *eh; int fl;
eh=(struct ethhdr *)ep;
// 指向幀頭
fl0 = read(fd, (etherpacket *)ep, sizeof(ep)) ;
//fl0 為截取的數(shù)據(jù)幀幀長
這里幀頭結(jié)構(gòu)類型ethhdr 在/usr/include/linux/if_ether.h 中
定義:struct ethhdr {unsigned char h_dest [ETH_ALEN]; //目標MAC 地址
unsigned char h_source[ETH_ALEN];
`
//源MAC 地址
unsigned short h_proto;
//幀中數(shù)據(jù)協(xié)議類型代碼
}
基于上述定義,一旦ep 讀入幀中數(shù)據(jù),就可以通過eh->h_dest、eh->h_source、eh->h_proto 獲取幀首部信息。
4.2 怎樣解析一個報文?
無論采用Lipcap 方法,還是采用SOCK 方法,都可獲得以太網(wǎng)幀,由于在以太網(wǎng)幀首部中含有協(xié)議類型字段,所以可進一步實現(xiàn)上層協(xié)議包的首部提取,為篇幅起見,本處僅對Socket方法獲得幀為例,介紹TCP/IP 首部的提取的一般方法,以便今后作進一步的數(shù)據(jù)分析與處理。
IP 報頭首部提取
根據(jù)h_proto 的值,可以確定幀數(shù)據(jù)將交由上層何種協(xié)議處理,常見的h_proto 值與協(xié)議的對應關(guān)系有:
0x0800:IP協(xié)議;
0x0806:ARP 協(xié)議;
0x8035:RARP 協(xié)議。
因此,一旦捕獲的幀中h_proto 的取值為0x800,將類型為iphdr 的結(jié)構(gòu)指針指向幀頭后面負載數(shù)據(jù)的起始位置,則IP 信包首部的數(shù)據(jù)結(jié)構(gòu)將一覽無余。以下程序段表明這一定位過程:
char ep[ETH_FRAME_LEN];
struct ethhdr * eh;
struct iphdr *ip;
int fl;
eh=(struct ethhdr *)ep;
// eh 指向幀頭
ip=(struct iphdr *)((unsigned long)ep + ETH_HLEN);
// ETH_HLEN為幀長
fl1=read(fd, (struct erhhdr *)ep, sizeof(ep));
//fl1為捕獲的數(shù)據(jù)幀長
printf("saddr:%x =>daddr:%x\n",ip->saddr, ip->daddr); //取源和目標IP 地址
TCP 報文段首部提取
在IP 協(xié)議首部中包含協(xié)議數(shù)據(jù)單元類型標識域:_u8 protocol;這一標識域的常見取值及其協(xié)議對應關(guān)系如下:
1:ICMP;
6:TCP;
17:UDP。
因此,如果IP 報頭的協(xié)議域取值為6,那么緊跟在IP 報頭之后就是TCP 報頭。IP 報頭的長度可以通過ihl 域取得。這樣,假如緩沖數(shù)組ep 存放捕獲到的以太網(wǎng)數(shù)據(jù)幀,iph 是指向其中IP 基本報頭結(jié)構(gòu)的指針,而tcph 是指向TCP 報頭結(jié)構(gòu)的指針,那么,定位tcph=(struct tcphdr *)(((unsignedlong)ep)+ETH_HLEN+ iph->ihl*4),TCP 報頭的結(jié)構(gòu)信息就存放在*tcph 中,并可通過以下語句獲取相關(guān)信息:
fl2=read(fd, (struct ethhdr *)ep, sizeof(ep));
// fl2 為捕獲的數(shù)據(jù)幀幀長
printf("source=%x,dest=%x\n",tcph->source,tcph->dest); //取源端口和目的端口號
4.3 怎樣把網(wǎng)卡置為“混雜模式”?
在以太網(wǎng)中,通過廣播實現(xiàn)數(shù)據(jù)傳輸,在同一子網(wǎng)段的所有網(wǎng)卡都可“聽”到網(wǎng)絡總線上傳輸?shù)乃袛?shù)據(jù),但不是所有數(shù)據(jù)都能被接收到。在系統(tǒng)正常工作時,一個合法的網(wǎng)絡接口只響應兩種數(shù)據(jù)幀:幀的目標MAC地址與本地網(wǎng)卡地址相符;幀的目標地址是廣播地址,除此之外數(shù)據(jù)幀將被丟棄。
由于網(wǎng)卡有4 種工作模式:廣播(能夠接收網(wǎng)絡中的廣播信息)、組播(能接收組播數(shù)據(jù))、直接(只有目的網(wǎng)卡才能接收該數(shù)據(jù))和混雜(能夠接收一切數(shù)據(jù))模式,所以為了能夠捕獲以太網(wǎng)所有數(shù)據(jù)包,通常需要將網(wǎng)卡設置成混雜工作模式。當主機連接在共享型以太網(wǎng)集線器上時,采用“混雜”方式可以捕獲到同一沖突域上傳輸?shù)臄?shù)據(jù)幀;但當主機連接在交換機上時,由于交換機通常不會將數(shù)據(jù)幀廣播到所有端口上(除非在其MAC 地址——端口映射表內(nèi)找不到相應表項),因而不能利用以太網(wǎng)絡的廣播特性進行捕獲。這時,可以利用交換機的端口鏡像功能實現(xiàn)網(wǎng)絡數(shù)據(jù)包捕獲。因為當端口A 和端口B 之間建立鏡像關(guān)系后,流經(jīng)端口A 的所有信息流量將同時通過端口B 輸出,所以可以在端口B 捕獲到端口A的數(shù)據(jù)。
所以,要想運行Sniffer工具,執(zhí)行“偵聽”功能,就必須使得網(wǎng)卡處于“混雜模式”,把網(wǎng)卡置為“混雜模式”的代碼如下:
BOOL SetPromis()
{
int fd ;
fd = socket(AF_INET, SOCK_PACKET, htons(0x0003) ) ;
if ( fd == -1 )
{
printf("Can Not Establish A Socket To Control The Card...\n\n") ;
return FALSE ;
}
struct ifreq ifr ;
strcpy(ifr.ifr_name, "eth0") ;
int i = ioctl(fd, SIOCGIFFLAGS, &ifr) ;
if ( i < 0 )
{
close(fd) ;
printf("Can Not Get Flags Of The Net Card...\n\n") ;
return FALSE ;
}
ifr.ifr_flags |= IFF_PROMISC ;
i = ioctl(fd, SIOCSIFFLAGS, &ifr) ;
if ( i < 0 )
{
printf("Can Not Set The Net Card Promiscuous...\n\n") ;
return FALSE ;
}
printf("Set The Card To Be Promiscuous..............OK\n\n") ;
return TRUE ;
}
4.4 Sniffer攻擊的防范
Sniffer軟件可以進行網(wǎng)絡流量監(jiān)控、拓撲發(fā)現(xiàn)、入侵檢測,給網(wǎng)絡管理帶來了極大的便利。正由于它能被動獲取網(wǎng)絡傳輸?shù)拿魑男畔?,因此,一旦被黑客利用,給網(wǎng)絡帶來的危害也是巨大的。
作為一種入侵手段,嗅探器令人防不勝防,因為它被動接受而不主動獲得。它不會向網(wǎng)絡上發(fā)出任何包,網(wǎng)絡用戶很難發(fā)現(xiàn)它的存在。到目前為止還沒有一種比較好的防范手段。防范 Sniffer攻擊,只能依靠用戶和網(wǎng)絡軟件設計者的安全意識。我們知道,F(xiàn)TP, Telnet等軟件都是進行明文傳輸,因此,對攻擊者來說,他們傳輸?shù)男畔⒕偷扔谕耆┞冻鰜?。因此,必須對傳輸?shù)臄?shù)據(jù)進行加密,這也是反嗅探器的唯一途徑。在Linux系統(tǒng)中,我們主張用SSH和openSSH來對傳輸數(shù)據(jù)進行加密。這樣即使攻擊者能得到數(shù)據(jù)流,也不能得到具體信息了。
另一種防范嗅探攻擊的方式就是檢查網(wǎng)絡中有無網(wǎng)絡接口處于混亂模式。在Linux環(huán)境下可以用ifconfig來檢鋇本地機器是否處于混亂模式,ifconfig是Linux自帶的工具。對于子網(wǎng)中網(wǎng)絡接口的檢測,可以使用NEPED工具。然而該工具是利用Linux的ARP實現(xiàn)中的缺陷來檢測這些接口口它發(fā)送一個ARP請求,一次來引起嗅探工作站的響應。然而它本身就是一個缺陷,因為它是利用了Linux的其它缺陷來實現(xiàn)的。隨著Linux系統(tǒng)的越來越完善,如果ARP實現(xiàn)得到修補,嗅探工作站不再響應ARP請求。
另外,安全的拓撲結(jié)構(gòu)也是必要的,因為嗅探器只能在當前網(wǎng)絡段上進行數(shù)據(jù)捕獲。這就意味著,將網(wǎng)絡分段工作進行得越細,嗅探器能夠收集的信息就越少。
以上討論了目前對嗅探攻擊防范的困難,對此本人作出下列兩點設想:
l
因為以太網(wǎng)在局域網(wǎng)中進行傳輸是使用廣播方式,如果不采用這種方式,直接使用地址解析 ((ARP)影射物理地址,嗅探器就無法接收數(shù)據(jù)了?;蛘哌M行雙向驗證,即主機對數(shù)據(jù)需要檢查,數(shù)據(jù)對主機也需檢查。
l
由于進行原始數(shù)據(jù)接收時需要將網(wǎng)卡設置為混亂模式,但如果網(wǎng)卡不
提供這種模式,嗅探器也無法工作了。另外,前面提供的兩種檢測網(wǎng)卡是否處于混亂模式的方式都有缺陷,希望以后能研究出沒有缺陷的檢測網(wǎng)卡狀態(tài)的方式。
4.5 Sniffer引入網(wǎng)絡管理中的可行性
Sniffer作為能夠捕獲網(wǎng)絡報文的設備,通常用來在網(wǎng)絡上截取閱讀位于OS工協(xié)議模型中各個協(xié)議層次上的數(shù)據(jù)包。Sniffer可以攔截所有的正在網(wǎng)絡上傳送的數(shù)據(jù),通過相應的軟件分析處理,對網(wǎng)絡實時信息和歷史信息進行監(jiān)控和統(tǒng)計分析,進而分析子網(wǎng)的網(wǎng)絡狀態(tài)和網(wǎng)絡整體布局。為網(wǎng)絡性能的分析、網(wǎng)絡故障的判斷、信息流量的審計、配置管理得調(diào)整、網(wǎng)絡安全的檢測提供強有力的使用工具,對網(wǎng)絡管理提供信息依據(jù)。
Sniffer可以在網(wǎng)絡管理中實現(xiàn)的主要的功能:
①
實時網(wǎng)絡包捕獲:Sniffer能夠以線速率實時捕獲用戶定義的網(wǎng)絡數(shù)據(jù)包截獲通信的內(nèi)容。對網(wǎng)絡上主機間的通信,通過設置過濾條件,給出一個詳細的逐包的統(tǒng)計信息。
②
網(wǎng)絡實時監(jiān)控:Sniffer以表格、圖形等形式,實時顯示出網(wǎng)絡運行情況,如協(xié)議分布、流量分布、帶寬利用率、錯誤率等。
③
對協(xié)議進行解析:有些只能分析一種協(xié)議,而另一些能夠分析幾百種協(xié)議。
④
統(tǒng)計歷史數(shù)據(jù)和發(fā)出警報:Sniffer可提供幾十種長期數(shù)據(jù)報告,以便將來的歷史查詢和分析,并可根據(jù)預先設定的閥值發(fā)出事件警報。
⑤
報文發(fā)送:通過設置目的地址,發(fā)送次數(shù),發(fā)送延遲和報文大小,形成報文并發(fā)送,可以實現(xiàn)網(wǎng)絡流量模擬。
4.6 Sniffer技術(shù)在網(wǎng)絡管理中開發(fā)的可行性與必要性
根據(jù)以上各章節(jié)的論述,我們大致了解了網(wǎng)絡管理技術(shù)和Sniffer技術(shù)的基本概念,在Sniffer本身所具有的抓取網(wǎng)絡數(shù)據(jù)報的特性的基礎之上,首先產(chǎn)生了一些簡單的Sniffer的工具,其后Sniffer技術(shù)融合其他方面的技術(shù),包括:人工智能、數(shù)據(jù)庫、分布式等技術(shù),在網(wǎng)絡管理領(lǐng)域得到了極大的發(fā)展,在不同網(wǎng)絡類型、不同操作系統(tǒng)中都得到了或多或少的應用,形成了各種專用的或通用的Sniffer產(chǎn)品,從簡單捕獲400字節(jié)數(shù)據(jù)包的Sniffit工具到集成的功能強到的具有 Sniffer網(wǎng)絡管理性質(zhì)的 TVN商業(yè)軟件。從研究和實際應用上說明Sniffer技術(shù)在網(wǎng)絡管理中是一種行之有效的技術(shù)。
由于現(xiàn)有網(wǎng)絡管理工具的存在,許多人認為沒有自己再開發(fā)網(wǎng)絡管理軟件的必要了。事實上,這種觀念是不正確的。因為:盡管現(xiàn)有的網(wǎng)絡管理工具提供了強大的網(wǎng)絡管理功能,但它不可能包羅萬象,適合于任何情況。也基于這個原因,很多的網(wǎng)絡管理平臺提供了API,可以使第三方或客戶進行二次開發(fā)。這雖然使得網(wǎng)絡管理工具的開發(fā)容易了許多,但前提是要掌握網(wǎng)絡管理的深厚的專業(yè)知識。功能強大的網(wǎng)絡管理工具其使用相應也較為復雜,而客戶使用可能只關(guān)心自己想要實現(xiàn)的功能,而不迷失于相對無必要的復雜的功能環(huán)境中,同時希望減少管理負擔,減少培訓、操作和維護的費用。另外優(yōu)秀的網(wǎng)絡管理工具的價格也是很昂貴的,微小型企業(yè)可能無法承受。
⑥
因此Sniffer技術(shù)在網(wǎng)絡管理中的開發(fā)應用有著很大的必要性。ShuSniffer是我們自主開發(fā)的具有獨立版權(quán)的軟件產(chǎn)品。它是針對廣播信道網(wǎng)絡環(huán)境下的企事業(yè)單位局域網(wǎng)而專業(yè)設計的一套小巧、可靠、操作簡便的計算機網(wǎng)絡診聽分析軟件。它主要依靠信息在局域網(wǎng)中傳播的廣播方式,捕獲信道上的報文,進行一系列特定分析,提取出實用數(shù)據(jù)提供給用戶作為參考。并且把數(shù)據(jù)存入數(shù)據(jù)庫,提供歷史查詢。它可以模擬網(wǎng)絡報文傳輸,以及對截獲的報文進行深層次的分析,了解報文的具體內(nèi)容。它實現(xiàn)的主要功能包括:網(wǎng)絡實時監(jiān)視、報文捕獲與分析、報文發(fā)送、歷史查詢、系統(tǒng)配置,為網(wǎng)絡健康性能狀態(tài)的分析、調(diào)整提供強有力的實用工具,成為計算機網(wǎng)絡管理體系中的重要組成部分。
4.7 Sniffer對多協(xié)議的捕捉和分析的不足
當前Sniffer技術(shù)的應用還十分簡單,對復雜多協(xié)議的捕獲和分析也有很大的缺陷。從推廣Sniffer技術(shù)的企業(yè)來看,Sniffer因要十分具體的應用于某個領(lǐng)域,因此只能做到對某個特定協(xié)議集做到精確專業(yè)的分析口而今天的網(wǎng)絡通常由多個網(wǎng)段經(jīng)過路由器、網(wǎng)橋、交換機和WAN鏈路組成。任何一個網(wǎng)段都可能運行多種網(wǎng)絡協(xié)議。例如,TCP/IP協(xié)議與局域傳輸協(xié)議(如Novell的IPX)一起用于連接企業(yè)范圍網(wǎng)絡的協(xié)議。對于某些商業(yè)站點,可能同時需要運行多種協(xié)議簇— NetBEUI, IPX/SPX, TCP/IP, 802.3和SNA等,每個協(xié)議簇中又包括多種具體應用協(xié)議。這時很難找到一種Sniffer幫助解決網(wǎng)絡問題,因為許多Sniffer往往將某些正確的協(xié)議數(shù)據(jù)包當成了錯誤數(shù)據(jù)包,然而我們要想解決復雜的網(wǎng)絡問題,通常需要詳細地解析各協(xié)議數(shù)據(jù)包內(nèi)容。
在實際應用中,現(xiàn)有的Sniffer軟件管理工具通常只能對單個協(xié)議或少數(shù)的協(xié)議進行捕獲,例如Sniffer工具軟件不能檢測諸如HTTP和FTP之類的應用協(xié)議。這在工nterne七八ntranet環(huán)境中對網(wǎng)絡的有效管理是一個大缺陷。所以Sniffer應該有對多種協(xié)議的捕獲和分析能力,包含了目前最熱門的W49W所使用的通訊協(xié)議.提供廣泛且詳盡的協(xié)議解析,使Sniffer成為一個功能齊全,完全透視網(wǎng)絡的強大網(wǎng)絡管理工具。
參考文獻
[1] Tim Berners-Lee,James Handler,Ora Lassia.The semantic web[J].Scientific American, 2001,284(5):34-43.
[2] W3C Recommendation 10 February 2004.OWL web ontology language guide [EB/OL]. 2004
[3] Robert Shimonski, Sniffer Network Optimization and Troubleshooting Handbook. Syngress Media, 2002.6.
[4] Douglas E.Comer. Internetworking with TCP/IP, Vol 1. 5th Edition.
United States :Prentice Hall ,2006:90-200.
[5] W.Richard Stevens. TCP/IP Illustrated, Vol 1: The Protocols. United States: Addison-Wesley,2004:70-150.
[6] 李景.本體論在系統(tǒng)中的應用研究[M].北京:北京圖書館出版社, 2005.
[7] 譚思亮,監(jiān)聽與隱藏網(wǎng)絡偵聽揭密[M].北京:人民郵電出版社,2002.
[8] 肖新峰,宋強. TCP/IP 協(xié)議與標準教程. 北京:清華大學出版社,2007:1-115.
[9] 楊延雙. TCP/IP 協(xié)議分析與應用. 北京:機械工業(yè)出版社,2007:60-148.
[10] 蘭少華,楊余旺,呂建勇. TCP/IP 網(wǎng)絡與協(xié)議. 北京:清華大學出版社,2006:1-110
[11] 李景.本體論在文獻檢索系統(tǒng)中的應用研究[M]. 北京:北京圖書館出版社, 2005. 70-150
[12] 朱禮軍,陶蘭,黃赤.語義萬維網(wǎng)的概念、方法及應用[J].計算機工程與應用, 2004,40(3):79-83
[13] 任彬.一種特定領(lǐng)域的語義網(wǎng)模型[D].吉林:吉林大學, 2004.
[14] 田春虎.國內(nèi)語義Web 研究綜述[J].情報學報,2005,24(2):243-249.
[15] 杜小勇,李曼,王大治.語義Web與本體研究綜述[J].計算機應用, 2004,24(10):14-16.
[16] 周武,金遠平.構(gòu)建XML 本體信息研究[J].微機發(fā)展, 2003,13(10):61-64.
[17] 馬恒太,蔣建春.一個基于Uuix 平臺的分布式網(wǎng)絡監(jiān)視器系統(tǒng)[J].計算機研究與發(fā)展, 2001,38(3):268-274.
[18] 李力,肖慶.Linux 下GUI 網(wǎng)絡數(shù)據(jù)包嗅探器的研究與實現(xiàn)[J].計算機工程與設計, 2006,27(2):344-346.
關(guān)鍵詞:S3C2410;嵌入式系統(tǒng);Bootloader;內(nèi)核;文件系統(tǒng)
中圖分類號:TP316文獻標識碼:B
文章編號:1004-373X(2008)24-040-03
Method of Porting on the Embedded Linux System
LI Jing,ZHAO Xiaoqiang,FAN Jiulun
(Xi′an Institute of Posts and Telecommunication,Xi′an,710061,China)
Abstract:Linux is used widely in the embedded field,it is important to build our embedded Linux system,according to the project,this paper introduces the method of building the embedded Linux system.Taking the Linux transplanted onto the target board based on the process or of S3C2410 as an example.Method of embedded Linux is transplanted,then,how to build up an environment is described,focusing on the framework and functionality of Bootloader and transplant of Linux kernel.This method proves high effective,the transplanted Linux in the embedded system runs well and a good reference to the others embedded operator system is given.
Keywords:S3C2410;embedded system;Bootloader;kernel;file system
嵌入式系統(tǒng)是以應用為中心,以計算機技術(shù)為基礎,軟硬件可裁剪,適用于對功能、可靠性、成本、體積、功耗等有嚴格要求的專用計算機系統(tǒng)。嵌入式Linux是按照嵌入式操作系統(tǒng)的要求設計的一種小型操作系統(tǒng),非常適合于移植到嵌入式系統(tǒng)中。嵌入式Linux應用最廣泛的地方就是基于ARM地應用,ARM芯片是一種高性能、低功耗地RISC芯片,被廣泛地應用于各個領(lǐng)域[1,2]。
目前,基于ARM核的處理器成為市場的主流,建立面向ARM架構(gòu)的操作系統(tǒng)成為人們研究的熱點,而Linux由于它的開源性,被廣泛地應用于嵌入式系統(tǒng)中,任何人都可以根據(jù)自己的需要來對其進行裁減,以適應自己的系統(tǒng)。根據(jù)實際需要將Linux移植到基于ARM920T核的s3c2410處理器芯片上,在總結(jié)現(xiàn)有方法存在的問題的基礎上,詳細介紹了移植的原理與方法技巧,對于構(gòu)建其他的嵌入式Linux有一定的參考意義。
1 開發(fā)環(huán)境構(gòu)建
1.1 嵌入式硬件平臺
系統(tǒng)硬件平臺核心部件為三星S3C2410 ARM920T芯片,其工作頻率最高達200 MHz。包括64 MB的NAND FLASH 和64 MB的RAM,鍵盤接口、串口、CPLD譯碼單元、網(wǎng)絡單元、語音單元、LCD及觸摸屏等。
1.2 嵌入式軟件平臺
軟件平臺一般包括Bootloader、內(nèi)核、文件系統(tǒng)以及用戶程序4大部分,它們的可執(zhí)行映像存放在系統(tǒng)的存儲設備上。在FLASH空間上存儲的順序如下:0~128 kB用于存儲啟動代碼(VIVI);128~192 kB用于存儲啟動參數(shù);192 kB~3 MB用于存儲內(nèi)核映像,3 MB以上用于存儲文件系統(tǒng),其余為用戶程序。FLASH存儲結(jié)構(gòu)如圖1所示。
1.3 交叉開發(fā)環(huán)境搭建
基于Linux 操作系統(tǒng)的應用開發(fā)環(huán)境一般是由目標系統(tǒng)的硬件系統(tǒng)和宿主PC機構(gòu)成。目標硬件系統(tǒng)用于運行操作系統(tǒng)和系統(tǒng)應用軟件,而目標硬件系統(tǒng)所用到的操作系統(tǒng)的內(nèi)核編譯、應用程序的開發(fā)需要通過宿主PC機來編譯完成。雙方之間可以通過建立以太網(wǎng)接口、USB等來調(diào)試編譯好的驅(qū)動或應用程序。當編譯、調(diào)試通過后,再添加到內(nèi)核中去。首先要正確安裝Linux操作系統(tǒng),下面介紹用Crosstool制作交叉工具鏈。
首先下載所需要的資源文件[3]:
Crosstol-0.4.2.tar.gz,binutils-2.15.tar.bz2,gcc-3.3.6.tar.gz,glibc-2.3.2.tar.gz,linux-lib-header-2.6.12.0.tar.bz2,glibc-linxuthreads-2.3.2.tar.gz。準備好這些資源之后需要在crosstool-0.42目錄下創(chuàng)建配置文件arm.sh,指出工具鏈源碼所在位置和安裝的目錄,再修改配置文件arm.dat和gcc-3.3.6-glibc-2.3.2.dat文件,最后執(zhí)行arm.sh腳本就可以在指定目錄生成所需要的交叉編譯工具。
2 嵌入式Linux的移植
2.1 BootLoader的移植
在嵌入式系統(tǒng)中,BootLoader的作用與PC 機上的BIOS 類似,通過BootlLoader可以完成對系統(tǒng)板上的主要部件如CPU,SDRAM,F(xiàn)LASH,串行口等進行初始化,也可以下載文件到系統(tǒng)板上,對FLASH進行擦除與編程。當運行操作系統(tǒng)時,Bootloader會在操作系統(tǒng)內(nèi)核運行之前運行,通過它可以分配內(nèi)存空間的映射,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)準備好正確的環(huán)境[4]。
2.2 BootLoader的架構(gòu)功能
系統(tǒng)使用的BootLoader是VIVI,VIVI是CPU加電后運行的第一段程序,其基本功能是初始化硬件設備,建立內(nèi)存空間的映射圖,從而為調(diào)用嵌入式 Linux內(nèi)核做好準備。VIVI由2部分組成:一部分是依賴于CPU體系結(jié)構(gòu)的代碼,用匯編語言實現(xiàn)對硬件環(huán)境的初始化,并為第二部分代碼的執(zhí)行做好準備;另一部分是用C語言實現(xiàn)內(nèi)存空間的映射,并將內(nèi)存映像和根文件系統(tǒng)映像從FLASH中讀取到RAM中,設置好啟動參數(shù)后啟動內(nèi)核。
VIVI的stage1是BootLoader一開始就執(zhí)行的操作,其目的是為了stage2的執(zhí)行以及隨后的內(nèi)核的執(zhí)行設置好一些基本的硬件環(huán)境。其步驟如下所示:
(1) 硬件初始化:當上電或復位后,VIVI啟動,位于NAND中的前4 kB程序便從NANDFLASH中由S3C2410自動拷貝到SteppingStone的前4kB的內(nèi)部RAM中該RAM之后被映射到地址0x00處。此時VIVI的前4 kB代碼開始運行,關(guān)閉Watchdog,關(guān)閉中斷,初始化PLL和時鐘主頻設定,初始化存儲器設定;
(2) 配置串口:初始化串口控制器;
(3) 復制自身到SDRAM中:當初始化串口結(jié)束后,VIVI開始把自身從NANDFLASH中復制到SDRAM中;
(4) 跳轉(zhuǎn)到 stage2的入口點。VIVI的stage2階段,包括以下步驟:
① 繼續(xù)初始化系統(tǒng)硬件;
② 內(nèi)存影射初始化,內(nèi)存管理單元初始化;
③ 初始化堆棧;
④ 初始化mtd 設備;
⑤ 初始化私有數(shù)據(jù);
⑥ 初始化內(nèi)置命令;
⑦ 啟動VIVI。
2.3 BootLoader的移植
(1) 修改Malkefile,指定交叉編譯:
ARCH = arm
CROSS_COMPILE=/opt/crosstool/gcc-3.3.6-glibc-2.3.2/arm-linux/bin/arm-linux-
(2) 修改/arch/s3c2410/smdk..c文件,按照上面所指定大小指定NAND分區(qū);
(3) 編譯生成VIVI。
2.4 Linux內(nèi)核的移植
本實驗系統(tǒng)運行的Linux版本是針對2.6.14.1進行移植,下載內(nèi)核代碼在/linux下,移植按照以下步驟:
(1) 設置目標平臺和指定交叉編譯器:
在最上層的根目錄/Makefile文件中,首先要指定所移植的硬件平臺,以及所使用的交叉編譯器。改為如下:
ARCH = arm CROSS_COMPILE =/opt/crosstool/gcc-3.3.6-glibc-2.3.2/arm-linux/bin/arm-linux-
(2) 設置NAND FLASH分區(qū):
在arch/arm/mach-s3c2410/devs.c中添加頭文件:
#include
#include
#include
(3) 將static struct mtd_partition partition_info[]中的分區(qū)和VIVI中的分區(qū)分成一樣大小。
(4) 加入 NAND FLASH分區(qū):
struct s3c2410_nand_set nandset = {nr_partitions:5,partitions:partition_info,};
(5) 建立芯片支持
struct s3c2410_platform_nand superlpplatform =
{tacls:0,twrph0:30,twrph1:0,sets:&nandset,nr_set s:1,};
(6) 在NAND FLASH驅(qū)動里加入NAND FLASH 芯片支持:
在s3c_device_ nand中增加dev = {.platform_data =&super-lpplatform}。
(7) 在 arch/arm/machs3c2410/ machsmdk2410.c 中的__initdata 部分增加 &s3c_device_ nand,使內(nèi)核啟動時初始化 NAND FLASH信息。
(8)去掉NADD FLASH的ECC,修改drivers/mtd/nand/s3c2410.c,在s3c2410_nand_init_chip函數(shù)里修改NAND_ECC_SOFT為NAND_ECC_NON。
(9) 配置編譯項,通過在終端下輸入命令make menuconfig來對Linux進行配置,配置完成后通過輸入命令:make 即可在/arch/arm/boot下生成所需要的內(nèi)核文件zImage。
2.5 制作文件系統(tǒng)
Cramfs被設計為簡單的較小的可壓縮的文件系統(tǒng),它主要用于較小ROM的嵌入式系統(tǒng),它是一個壓縮的文件系統(tǒng),本系統(tǒng)采用Cramfs文件系統(tǒng)。
可以利用工具軟件Busboy和MKCRAMFS制作CRAMFS文件系統(tǒng)。首先在本地建立根文件系統(tǒng)myroot,然后在其目錄下建立所需要的子目錄,如bin,dev,etc,lib,mnt,proc,sbin,usr等。建立好目錄之后要給各相應的目錄復制相應的文件或庫,可以通過BusyBox來實現(xiàn)。BusyBox是一個可配置的工具。通過make menuconfig 配置完成BusyBox后,修改BusyBox的Makefile內(nèi)容,使用交叉編譯環(huán)境。然后通過make 命令進行編譯,make install進行安裝,再將生成的目錄下的相應文件復制到所構(gòu)建的文件系統(tǒng)的相應目錄下,然后編寫相應的linuxrc等文件。完成這些步驟后,利用MKCRAMFS工具來制作所需要的文件系統(tǒng),只需要在終端通過命令mkcramfs myroot myroot.crarmfs就可以把myroot制作成只讀的壓縮的cramfs文件系統(tǒng)。
2.6 內(nèi)核及文件系統(tǒng)的下載
利用VIVI通過超級終端重新下載VIVI,內(nèi)核和root,在Windows下啟動超級終端,或者Linux下啟動Minicom設置其為(115200,8位數(shù)據(jù),1位停止位,無奇偶校驗),用串口線連接實驗系統(tǒng)和 PC 機的串口。系統(tǒng)上電后,在VIVI命令行下操作:
下載VIVI:輸入vivi> load FLASH vivi x,之后,通過 xmodem 協(xié)議發(fā)送vivi 文件;
下載內(nèi)核:輸入vivi> load FLASH kernel x,通過 xmodem 協(xié)議發(fā)送內(nèi)核文件;
下載文件系統(tǒng):輸入vivi> load FLASH root x,通過 xmodem 協(xié)議發(fā)送root文件系統(tǒng)。
3 結(jié) 語
針對嵌入式Linux的構(gòu)建,以S3C2410處理器為例,詳細闡述整個Linux系統(tǒng)構(gòu)建的原理框架和移植的方法,對移植中的關(guān)鍵技術(shù)和重要步驟給出了詳細的說明。移植后的Linux 系統(tǒng)在開發(fā)板上運行穩(wěn)定,性能良好。操作過程對嵌入式Linux系統(tǒng)在其他處理器上的移植也具有參考意義。
參考文獻
[1]劉振綱,劉成安,盧劍翔.移植標準Linux到S3C2410[J].微計算機信息,2006(11):152-153.
[2]陶列駿,潘金貴.Linux的可移植性[J].小型微型計算機系統(tǒng),2002(1):50-53.
[3]李亞鋒,歐文盛.ARM嵌入式Linux系統(tǒng)開發(fā)[M].北京:清華大學出版社,2007.
[4]張杰,吳敏,曹衛(wèi)華.基于S3C2410的Linux移植[J].微型電腦應用,2005(3):57-59.
[5]章曉明,杜春燕,陸建德.HHPPC8245上的嵌入式Linux移植及VPN開發(fā)[J].計算機工程,2007(1):274-276.
[6]陳峰,李濱滔,戈志華.基于S3C2410的嵌入式 Linux系統(tǒng)構(gòu)建[J].現(xiàn)代電子技術(shù),2007,30(24):55-57.
[7]劉明博,鄧中亮.基于ARM的嵌入式操作系統(tǒng)移植的研究[J].計算機系統(tǒng)應用,2006(11):87-88.
[8]許榮.基于AT91RM9200的嵌入式Linux系統(tǒng)移植[J].電子技術(shù),2006(3):64-68.
[9]Daniel P.Bovel Understanding the Linux Kernel[M].2ndEdition.OReilly,2002.
需求描述
海運船舶安裝使用航運管理系統(tǒng),必須充分考慮船舶遠離陸岸,震動大、鹽分高,硬件容易出故障等等因素,因此如何制訂運行高效、穩(wěn)定可靠、經(jīng)濟可行的技術(shù)方案尤為重要。系統(tǒng)的設計本著快速應用、適用性、先進性、開放性、技術(shù)獨立性等原則,利用現(xiàn)有資源,提供一個高性能、低成本、安全穩(wěn)定的應用系統(tǒng)。
中海貨運決定在其所擁有的船舶上應用中標普華Linux服務器,同時使用中標普華Linux提供的postgresql數(shù)據(jù)庫軟件,來構(gòu)筑其船舶數(shù)據(jù)庫與應用服務器。該數(shù)據(jù)庫服務器作為船載數(shù)據(jù)庫服務器負責船只日常數(shù)據(jù)采集與管理,通過衛(wèi)星無限傳輸采用email等方式與岸上服務器進行數(shù)據(jù)通信,每日的增量數(shù)據(jù)為50K左右。用戶對Linux服務器的要求如下:
―能支持TOMCAT,支持MYSQL、甲骨文等除MSSQL外所有數(shù)據(jù)庫。
―能高效運行JAVA程序。
―日增數(shù)據(jù)量50K左右。
―每天通過電郵與岸上服務器進行數(shù)據(jù)同步。
―高可靠性與高穩(wěn)定性。
―抵御病毒和黑客攻擊的能力強。
―提供有效數(shù)據(jù)備份和恢復方案。
―提供多種靈活易用的方式進行系統(tǒng)的升級與更新。
―管理方便,易于培訓與使用。
―良好經(jīng)濟性,利于大規(guī)模部署。
應用中標普華Linux的高可用的實時數(shù)據(jù)備份與鏡像方案,保證了用戶應用的可持續(xù)性和連續(xù)性。
系統(tǒng)的設計充分考慮了航運管理系統(tǒng)的經(jīng)濟性、安全性、可維護性等多個方面,為用戶提供了從系統(tǒng)及應用的安裝、調(diào)試、運行、到系統(tǒng)與應用的維護支持與培訓等一條龍的全面解決方案,保證了航運管理系統(tǒng)的順利實施與維護。
應用特點
航運管理在海事安全方面的重要性不言而喻,系統(tǒng)一旦出現(xiàn)故障,可能產(chǎn)生災難性后果,陸岸技術(shù)人員在提供技術(shù)支持、排除故障等方面也很不方便。通過應用以下方案,保證系統(tǒng)的穩(wěn)定。主要包括:
服務器后備
兩臺服務器都安裝中標普華inux操作系統(tǒng)和航運管理系統(tǒng),利用中標普華Linux提供的自動熱備功能,相互之間做到系統(tǒng)和數(shù)據(jù)的實時備份。
遠程系統(tǒng)和數(shù)據(jù)恢復
如果主機和副機的磁介質(zhì)同時損壞,用備份光盤安裝操作系統(tǒng)和航運管理系統(tǒng),公司服務器用郵件將該輪數(shù)據(jù)發(fā)送到船舶,恢復數(shù)據(jù)。
病毒防護
船舶的數(shù)據(jù)庫服務器采用Linux操作系統(tǒng),避免了Windows上的各種病毒造成的系統(tǒng)問題。
航運管理系統(tǒng)的維護升級
關(guān)鍵詞 Linux 系統(tǒng)安全 用戶管理 安全工具
中圖分類號:TP316.8 文獻標識碼:A
安全是當今IT相關(guān)頭條新聞的重要話題。經(jīng)常出現(xiàn)的系統(tǒng)漏洞和安全補丁以及病毒和蠕蟲是每個使用計算機的人都耳熟能詳?shù)拿~。因為幾乎每臺計算機系統(tǒng)都連接到另外的計算機或者連接到Internet,因此確保這些計算機的安全,對于減少入侵、數(shù)據(jù)竊取或丟失、誤用甚至對第三方的責任而言都是至關(guān)重要的。①
Linux作為一個現(xiàn)代的、開放源代碼的操作系統(tǒng),它允許用戶自由的復制和修改其源代碼,用戶可以根據(jù)自己的環(huán)境定制Linux、向操作系統(tǒng)添加新部件等,正是由于軟件的每個用戶和開發(fā)者都可以訪問其源代碼,因而有許多人在控制和審視源代碼中可能的安全漏洞。軟件缺陷很快會被發(fā)現(xiàn)。一方面,這會導致這些缺陷更早被利用;另一方面,很快就會有可用的安全補丁。
當系統(tǒng)連接到網(wǎng)絡并向其他計算機提供服務時,系統(tǒng)就會有可能成為被攻擊的對象。在這種情況下,系統(tǒng)漏洞可能會讓入侵者控制計算機。因此,從開始計劃直到拆除系統(tǒng)的整個系統(tǒng)生命周期中安全都是一個最基本的問題。
那么,如何保護Linux安全呢?
1 系統(tǒng)的用戶管理
與其他UNIX操作系統(tǒng)一樣,在進入Linux系統(tǒng)時需要驗證賬號和密碼。Linux一般將密碼加密之后,存放在/etc/passwd文件中,Linux系統(tǒng)上的所有用戶都可以讀到該文件,這種方法不太安全,因為一般的用戶可以利用現(xiàn)成的密碼破譯工具,用窮舉法猜測出密碼。②比較安全的方法是設定影子文件/etc/shadow,通過影子文件允許特殊權(quán)限的用戶閱讀該文件。在Linux系統(tǒng)中,如果要采用影子文件,必須將所有的公用程序重新編譯,才能支持影子文件。這種方法比較麻煩,比較簡單的方法是采用插入式驗證模塊(PAM)。很多Linux系統(tǒng)都帶有PAM,它是一種身份驗證機制,可以用來動態(tài)地改變身份驗證的方法和要求,而不要求重新編譯其他公用程序。這是因為PAM采用封閉包的方式,將所有與身份驗證有關(guān)的邏輯全部隱藏在模塊內(nèi),因此它是影子文件的最佳幫手。
除密碼之外,用戶賬號也有安全等級,這是因為在Linux上每個賬號可以被賦予不同的權(quán)限,因此在建立一個新用戶ID時,系統(tǒng)管理員應該根據(jù)需要賦予該賬號不同的權(quán)限,并且歸并到不同的用戶組中。
在Linux系統(tǒng)中,可以在/etc/hosts.allow文件中設定允許上機人員的名單,同時在/etc/hosts.deny文件中設置不允許上機人員的名單,Linux將自動把允許進入或不允許進入的結(jié)果記錄到/rar/log/secure文件中,系統(tǒng)管理員可以據(jù)此查出可疑的進入記錄。
每個賬號ID應該有專人負責。在企業(yè)中,如果負責某個ID的職員離職,管理員應立即從系統(tǒng)中刪除該賬號。很多入侵事件都是利用了那些很久不用的賬號。
在用戶賬號之中,尤其要注意具有root權(quán)限的賬號,這種超級用戶權(quán)力無限,可以修改或刪除各種系統(tǒng)設置。因此,在給任何賬號賦予root權(quán)限之前,都必須仔細考慮,最好不要輕易將超級用戶授權(quán)出去。Linux系統(tǒng)中的/etc/security文件包含了一組能夠以root賬號登陸的終端機名稱,該文件的初始值僅允許本地虛擬控制臺(rtys)以root權(quán)限登陸,而不允許遠程用戶以root權(quán)限登陸,最好不要修改該文件。有些程序的安裝和維護工作必須要求有超級用戶的權(quán)限,在這種情況下,可以利用sudo這樣的工具讓這類用戶有部分超級用戶的權(quán)限。
2 安全工具
下面介紹一些可以用于Linux的安全工具,這些工具使用戶的服務器運行起來更加安全,可以解決各方面的問題。
2.1 nmap和nessus網(wǎng)絡安全掃描工具
nmap工具是一個端口掃描工具,它能掃描整個網(wǎng)絡或一臺主機上的開放端口。如果讀者對安全擔憂或者要尋找攻擊者將會發(fā)現(xiàn)的漏洞,那么應花些時間來安裝并使用nmap。nmap集成了大量的掃描技術(shù)。nmap工具還可以使用TCP/IP指紋來識別一個遠程系統(tǒng)運行的是哪種操作系統(tǒng)。該工具處于系統(tǒng)管理員和攻擊工具之間的灰色區(qū)域。如果讀者負責一個網(wǎng)絡,可以使用nmap檢測本地網(wǎng)絡是否有安全漏洞。
nessus是一個功能強大而又易于使用的遠程安全掃描器,它不僅免費而且更新極快。安全掃描器的功能是對指定網(wǎng)絡進行安全檢查,找出該網(wǎng)絡是否存在會導致對手攻擊的安全漏洞。該系統(tǒng)被設計為C/S模式,服務器段負責進行安全檢查,客戶端用來配置管理服務器。nessus的安全檢查是由大量插件完成的,其擴展性強,容易使用,功能強大,可以掃描出多種安全漏洞。
2.2 弱點測試工具
(1)chkacct。chkacct是一個檢查用戶賬號安全的工具。它能檢查文件的權(quán)限并恢復到初始權(quán)限。它還能尋找那些能被所有用戶可讀的文件并查看以點號開頭的文件。它可以被用戶使用或者被系統(tǒng)或安全管理員專用。
(2)Courtney。Courtney檢測一個網(wǎng)絡,查明SATAN探索的結(jié)果 ,并試圖識別他們的來源。它從tcpdump獲得輸入并計算一臺機器在一個特定時段內(nèi)產(chǎn)生新的服務請求的次數(shù)。如果在該時段內(nèi),一臺機器和大量服務器連接,Courtney就把該機器識別為一個潛在的SATAN主機
3 日志工具(logrotate,swatch,logcheck)
(1)logrotate。一般的Linux發(fā)行版中都自帶這個工具,能夠解決日志文件過大的問題。它可以自動使日志循環(huán),刪除保存最久的日志??梢园阉旁赾rontab中,每天定期運行。這在很多Linux發(fā)行版中都是默認設置的。
(2)swatch。Swatch是一個實時的日志監(jiān)控工具。讀者可以設置感興趣的時間,它可以在事件發(fā)生的時候告訴讀者。Swatch有兩種運行方式:一種可以在檢查日志完畢退出,另一種可以連續(xù)監(jiān)視日志中的新信息。
4 SSH和Tripwire
(1)SSH服務
傳統(tǒng)的網(wǎng)絡服務程序,如ftp、pop和telnet在本周上都是不安全的,因為它們在網(wǎng)絡上用明文傳送口令和數(shù)據(jù),別有用心的人非常容易截獲這些口令和數(shù)據(jù)。而且,這些服務程序的安全驗證方式也是有其弱點的,就是很容易收到“中間人”方式的攻擊。這些“中間人”冒充真正的服務器接收用戶傳給服務器的數(shù)據(jù),然后冒充用戶的數(shù)據(jù)傳給真正的服務器。
通過使用SSH,用戶可以把所有傳輸?shù)臄?shù)據(jù)進行加密,這樣“中間人”這種攻擊方式就不可能實現(xiàn)了,而且也能夠防止DNS和IP欺騙。還有一個額外的好處就是傳輸?shù)臄?shù)據(jù)是經(jīng)過壓縮的,所以可以加快傳輸?shù)乃俣取?/p>
(2)Tripwire
如果有人侵入了你的系統(tǒng),在系統(tǒng)中放置了木馬和后門,你怎么才能知道呢?tripwire就是這樣一個對系統(tǒng)做完整性檢查的工具,它是目前最為著名的Linux下文件系統(tǒng)完整性檢查的軟件工具,這一軟件采用的技術(shù)核心就是對每個要監(jiān)控的文件產(chǎn)生一個數(shù)字簽名,保留下來。當文件現(xiàn)在的數(shù)字簽名與保留的數(shù)字簽名不一致時,那么現(xiàn)在這個文件必定被改動過了。
5 反掃描工具Portsentry
通過防火墻可以限制自己系統(tǒng)中什么端口開放,什么端口不開放。對于外部的人們來說,這些信息都是保密的。黑客為了得到他人計算機中開放的端口,往往會進行各種方式的掃描,這樣的掃描在互聯(lián)網(wǎng)上也推出課件。一般的掃描活動都是進行入侵的前奏,對安全是極大的威脅。Portsentry就是這樣一個反掃描工具,它可以實時發(fā)現(xiàn)并分析記錄對本機的掃描,它通過syslog做記錄,將掃描的主機加入/etc/hosts.deny,馬上禁止所有通向掃描主機的網(wǎng)絡流量,同時過濾掉所有來自掃描主機的網(wǎng)絡流量。
從計算機安全角度來看,世界上沒有百分之百安全的計算機系統(tǒng),Linux系統(tǒng)也不例外,作為Linux系統(tǒng)管理員,需要保持一定的安全防范意識,對系統(tǒng)要定期做檢查,發(fā)現(xiàn)問題要立即采取措施,根據(jù)實際的應用場景,靈活地綜合采取以上方法和工具,才能取得較好的效果。
注釋