新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 拿起手術(shù)刀 深入剖解路由器的“心臟”技術(shù)

拿起手術(shù)刀 深入剖解路由器的“心臟”技術(shù)

作者: 時(shí)間:2018-09-06 來(lái)源:網(wǎng)絡(luò) 收藏

其中zImage已經(jīng)包含了文件系統(tǒng)映象文件,通常直接燒寫(xiě)到Flash文件上即可執(zhí)行了。當(dāng)然在這之前要進(jìn)行BootLoader的燒錄, BootLoader其實(shí)就是一個(gè)引導(dǎo)程序,主要作用就是初始化系統(tǒng),進(jìn)而來(lái)引導(dǎo)操作系統(tǒng)。在嵌入式系統(tǒng)中,處理器上電后首先執(zhí)行的一段代碼就是BootLoader,BootLoader與硬件密切相關(guān),其代碼主要用C和匯編語(yǔ)言寫(xiě)成,不同的系統(tǒng)中,BootLoader的功能有所不同,但主要作用還是差不多的,主要有下面幾點(diǎn):

本文引用地址:http://butianyuan.cn/article/201809/388544.htm

初始化微控制器MCU運(yùn)行的時(shí)鐘頻率;

初始化Flash和內(nèi)存的數(shù)據(jù)寬度,讀/寫(xiě)訪問(wèn)周期和刷新周期;

初始化中斷系統(tǒng);

初始化系統(tǒng)中各種片內(nèi)、片外設(shè)備和I/O端口設(shè)備;

初始化系統(tǒng)各種運(yùn)行模式下的寄存器和堆棧;

加載和引導(dǎo)操作系統(tǒng);

BLOb是BootLoaderObject的縮寫(xiě),它是一個(gè)功能強(qiáng)大、源代碼公開(kāi)的自由軟件,它已經(jīng)實(shí)現(xiàn)了對(duì)多種處理器芯片的Linux 引導(dǎo)支持。對(duì)ARM7等核心的BootLoader支持版本可以到專(zhuān)業(yè)網(wǎng)站上進(jìn)行下載,并稍微做適當(dāng)修改來(lái)滿足開(kāi)發(fā)應(yīng)用中的硬件環(huán)境要求即可,在此我們不做過(guò)多講述。

上面所講述的內(nèi)核編譯過(guò)程只是比較寬泛的、籠統(tǒng)的操作過(guò)程,也就是說(shuō)只是基本的操作過(guò)程,而在真正的路由功能實(shí)現(xiàn)過(guò)程中,還要對(duì)內(nèi)核進(jìn)行多種設(shè)置編譯,比如說(shuō)對(duì)硬件系統(tǒng)中設(shè)計(jì)到的部件進(jìn)行驅(qū)動(dòng)配置安裝等,當(dāng)然,這些并不是特別難的操作技術(shù),再比如我們下面就要講到的內(nèi)容,這可就是很有挑戰(zhàn)性的核心技術(shù)了,這些都是針對(duì)內(nèi)核進(jìn)行技術(shù)性操作來(lái)實(shí)現(xiàn)特定的網(wǎng)絡(luò)功能。

內(nèi)核編譯核心部分

1、文件系統(tǒng)分析

文件系統(tǒng)是uClinux操作系統(tǒng)的重要組成部分,uClinux文件系統(tǒng)是操作運(yùn)行的基礎(chǔ)。許多嵌入式系統(tǒng)在不存在磁盤(pán)的情況下也可以運(yùn)行。文件系統(tǒng)可以隨同內(nèi)核一起被打包并在啟動(dòng)時(shí)作為一個(gè)文件系統(tǒng)的映像被加載。對(duì)一個(gè)簡(jiǎn)單的應(yīng)用系統(tǒng)來(lái)說(shuō),這己足夠了。文件系統(tǒng)可以存放在一個(gè)傳統(tǒng)磁盤(pán)中,但也可以存放在非易失性的存儲(chǔ)介質(zhì)— 閃存中。閃存有一個(gè)引導(dǎo)塊,它存放了CPU上電后運(yùn)行的第一個(gè)軟件,這個(gè)軟件可以是uclinux的引導(dǎo)程序,也可以是自己編的bootloader。uClinux的內(nèi)核可以被引導(dǎo)程序從閃存中拷貝到RAM中全速運(yùn)行。閃存也可以作為文件的存儲(chǔ)介質(zhì),必要時(shí)寫(xiě)入一些需要保存的數(shù)據(jù)。

uClinux支持NFS(Network File System),它允許通過(guò)網(wǎng)絡(luò)加載各種應(yīng)用程序。由于用在每一個(gè)嵌入式系統(tǒng)上的軟件可以從一個(gè)公用的服務(wù)器上加載,這在控制軟件的修訂或升級(jí)中是很重要的.在系統(tǒng)運(yùn)行的過(guò)程中,導(dǎo)入和導(dǎo)出數(shù)據(jù)、配置、狀態(tài)信息的備份也很重要。對(duì)用戶(hù)監(jiān)控而言,這是一個(gè)非常強(qiáng)大的功能。例如,一個(gè)嵌入式系統(tǒng)可能裝配了一個(gè)RAM DISK,它包含著與系統(tǒng)當(dāng)前狀態(tài)的更新維持一致的(狀態(tài))文件。那么別的嵌入式系統(tǒng)僅需通過(guò)網(wǎng)絡(luò)把這個(gè)RAM DISK作為遠(yuǎn)程磁盤(pán)mount過(guò)來(lái)便可以訪問(wèn)那些位于遠(yuǎn)端RAM DISK中的狀態(tài)文件。這也允許在另一臺(tái)機(jī)器上的WEB服務(wù)器借助簡(jiǎn)單的CGI腳本來(lái)訪問(wèn)那些狀態(tài)信息。運(yùn)行在其他機(jī)器上的應(yīng)用程序包能夠很容易地訪問(wèn)這些數(shù)據(jù)。uClinux操作系統(tǒng)根據(jù)不同的安裝選擇可以生成不同的文件系統(tǒng)。系統(tǒng)中提供了十分豐富的文件系統(tǒng)以供不同需要的用戶(hù)選擇。每種類(lèi)型的文件系統(tǒng)的基本塊大小、優(yōu)化分配策略、一次傳送的數(shù)據(jù)長(zhǎng)度等等都是相互匹配的,使得本類(lèi)文件系統(tǒng)均有相應(yīng)的最佳性能。

2、嵌入式Web服務(wù)器

對(duì)uClinux操作系統(tǒng)下嵌入式Web技術(shù)的實(shí)現(xiàn)主要用于用戶(hù)可以通過(guò)網(wǎng)

頁(yè)方式來(lái)管理路由器。

⑴uClinux下Web Server的實(shí)現(xiàn)

uClinux下,主要有三個(gè)WebServer:htpd,thttpd和Boa。Httpd是最簡(jiǎn)單的一個(gè)Web Server,它的功能最弱,不支持認(rèn)證,不支持CGI。Thttpd和Boa都支持認(rèn)證、CGI等,功能都比較全。為了實(shí)現(xiàn)動(dòng)態(tài)Web技術(shù),這里我們選擇實(shí)現(xiàn)一個(gè)支持CGI的、非常適合于嵌入式系統(tǒng)的Boa Web Server。Boa是一個(gè)單任務(wù)的http服務(wù)器,源代碼開(kāi)放、性能高。目前,uClinux的代碼中已經(jīng)包含boa的源代碼,在uClinux下實(shí)現(xiàn)Boa,需要對(duì)Boa做一些配置和修改。這主要通過(guò)對(duì)boa.conf和mime.types文件進(jìn)行修改來(lái)實(shí)現(xiàn),需要改動(dòng)的配置有以下幾項(xiàng):

①建目錄

由于uClinux默認(rèn)的根文件系統(tǒng)romfs是只讀的,不能用mkdir等命令來(lái)新建目錄,故應(yīng)在編譯內(nèi)核前先建好要用到的目錄,這通過(guò)修改

/uclinux-samsung/vendors/Samsung/4510b/makefile文件來(lái)實(shí)現(xiàn)。在ROWFS_DIRS=bin dev etc home lib mnt proc usr var的后邊增加home/webhome/web/cgi-bin,這樣修改后編譯內(nèi)核,編譯好的根文件系統(tǒng)romfs中就包含這些目錄了。

②指定Web 服務(wù)器的根目錄路徑(SERVER ROOT)

進(jìn)入 /uclinux-samsung/user/boa/src/目錄,通過(guò)修改define.h文件中#define ERVER ROOT /home”語(yǔ)句來(lái)指定SERVER ROOT。另外,還可以通過(guò)命令行來(lái)指定,例如:boa-c/home/。而且命令行指定的SERVER ROOT可以覆蓋define.h文件所指定的。

③修改boa.conf文件

在. /uclinux-samsung/user/boa/src/boa.conf里修改:

*將 user obody和Group ogroup改為User0 和Group0 ;

*將 DocumentRoot/var/www改為DocumentRoot/home/web,這樣web服務(wù)器的文檔根目錄為/home/web;

*將 MimeTypes/eWmime.types改為MimeTypes/home/web/mime.types;

定義默認(rèn)首頁(yè)和CGI程序所在目錄,即

DirectoyIndex index.html

ScriptAlias/cgi-bin//home/web/cgi-bin/

這樣指定后,.index.htm為遠(yuǎn)程瀏覽客戶(hù)訪問(wèn)WebServer所看到的首頁(yè)默認(rèn)值,用C編寫(xiě)的CGI程序編譯成二進(jìn)制文件,放到/cgi-bin/目錄下,CGI程序能被正確地執(zhí)行。

Boa.conf文件和mime.types文件必須放到Web服務(wù)器根目錄下,所以把修改后的bao.conf和mime.types拷貝到“./uclinux-samsung/romfs/home/”目錄下。然后在/uclinux- samsung/Vendors/Samsung/4510b/initab里修改,在:inet:unknown:/bin/inetd后加入: boa:unknown:/bin/boac/homeo

配置過(guò)程后,重新編譯內(nèi)核,編譯時(shí)選中Boa選項(xiàng)。把編譯好的內(nèi)核下載到硬件板,啟動(dòng)uclinux,完成IP配置,啟動(dòng)Boa Web Server,然后就可以通過(guò)lE訪問(wèn)你的網(wǎng)頁(yè)了。如果想啟動(dòng)uclinux時(shí)自動(dòng)啟動(dòng)Boa Web Server,可以修改re文件,進(jìn)入uclinux-samsung/vendors/Samsung/4510B目錄,在運(yùn)行腳本rc中增加兩行:



關(guān)鍵詞:

評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉