拿起手術(shù)刀 深入剖解路由器的“心臟”技術(shù)
其中zImage已經(jīng)包含了文件系統(tǒng)映象文件,通常直接燒寫到Flash文件上即可執(zhí)行了。當(dāng)然在這之前要進(jìn)行BootLoader的燒錄, BootLoader其實(shí)就是一個(gè)引導(dǎo)程序,主要作用就是初始化系統(tǒng),進(jìn)而來引導(dǎo)操作系統(tǒng)。在嵌入式系統(tǒng)中,處理器上電后首先執(zhí)行的一段代碼就是BootLoader,BootLoader與硬件密切相關(guān),其代碼主要用C和匯編語言寫成,不同的系統(tǒng)中,BootLoader的功能有所不同,但主要作用還是差不多的,主要有下面幾點(diǎn):
本文引用地址:http://butianyuan.cn/article/201809/388544.htm初始化微控制器MCU運(yùn)行的時(shí)鐘頻率;
初始化Flash和內(nèi)存的數(shù)據(jù)寬度,讀/寫訪問周期和刷新周期;
初始化中斷系統(tǒng);
初始化系統(tǒng)中各種片內(nèi)、片外設(shè)備和I/O端口設(shè)備;
初始化系統(tǒng)各種運(yùn)行模式下的寄存器和堆棧;
加載和引導(dǎo)操作系統(tǒng);
BLOb是BootLoaderObject的縮寫,它是一個(gè)功能強(qiáng)大、源代碼公開的自由軟件,它已經(jīng)實(shí)現(xiàn)了對多種處理器芯片的Linux 引導(dǎo)支持。對ARM7等核心的BootLoader支持版本可以到專業(yè)網(wǎng)站上進(jìn)行下載,并稍微做適當(dāng)修改來滿足開發(fā)應(yīng)用中的硬件環(huán)境要求即可,在此我們不做過多講述。
上面所講述的內(nèi)核編譯過程只是比較寬泛的、籠統(tǒng)的操作過程,也就是說只是基本的操作過程,而在真正的路由功能實(shí)現(xiàn)過程中,還要對內(nèi)核進(jìn)行多種設(shè)置編譯,比如說對硬件系統(tǒng)中設(shè)計(jì)到的部件進(jìn)行驅(qū)動配置安裝等,當(dāng)然,這些并不是特別難的操作技術(shù),再比如我們下面就要講到的內(nèi)容,這可就是很有挑戰(zhàn)性的核心技術(shù)了,這些都是針對內(nèi)核進(jìn)行技術(shù)性操作來實(shí)現(xiàn)特定的網(wǎng)絡(luò)功能。
內(nèi)核編譯核心部分
1、文件系統(tǒng)分析
文件系統(tǒng)是uClinux操作系統(tǒng)的重要組成部分,uClinux文件系統(tǒng)是操作運(yùn)行的基礎(chǔ)。許多嵌入式系統(tǒng)在不存在磁盤的情況下也可以運(yùn)行。文件系統(tǒng)可以隨同內(nèi)核一起被打包并在啟動時(shí)作為一個(gè)文件系統(tǒng)的映像被加載。對一個(gè)簡單的應(yīng)用系統(tǒng)來說,這己足夠了。文件系統(tǒng)可以存放在一個(gè)傳統(tǒng)磁盤中,但也可以存放在非易失性的存儲介質(zhì)— 閃存中。閃存有一個(gè)引導(dǎo)塊,它存放了CPU上電后運(yùn)行的第一個(gè)軟件,這個(gè)軟件可以是uclinux的引導(dǎo)程序,也可以是自己編的bootloader。uClinux的內(nèi)核可以被引導(dǎo)程序從閃存中拷貝到RAM中全速運(yùn)行。閃存也可以作為文件的存儲介質(zhì),必要時(shí)寫入一些需要保存的數(shù)據(jù)。
uClinux支持NFS(Network File System),它允許通過網(wǎng)絡(luò)加載各種應(yīng)用程序。由于用在每一個(gè)嵌入式系統(tǒng)上的軟件可以從一個(gè)公用的服務(wù)器上加載,這在控制軟件的修訂或升級中是很重要的.在系統(tǒng)運(yùn)行的過程中,導(dǎo)入和導(dǎo)出數(shù)據(jù)、配置、狀態(tài)信息的備份也很重要。對用戶監(jiān)控而言,這是一個(gè)非常強(qiáng)大的功能。例如,一個(gè)嵌入式系統(tǒng)可能裝配了一個(gè)RAM DISK,它包含著與系統(tǒng)當(dāng)前狀態(tài)的更新維持一致的(狀態(tài))文件。那么別的嵌入式系統(tǒng)僅需通過網(wǎng)絡(luò)把這個(gè)RAM DISK作為遠(yuǎn)程磁盤mount過來便可以訪問那些位于遠(yuǎn)端RAM DISK中的狀態(tài)文件。這也允許在另一臺機(jī)器上的WEB服務(wù)器借助簡單的CGI腳本來訪問那些狀態(tài)信息。運(yùn)行在其他機(jī)器上的應(yīng)用程序包能夠很容易地訪問這些數(shù)據(jù)。uClinux操作系統(tǒng)根據(jù)不同的安裝選擇可以生成不同的文件系統(tǒng)。系統(tǒng)中提供了十分豐富的文件系統(tǒng)以供不同需要的用戶選擇。每種類型的文件系統(tǒng)的基本塊大小、優(yōu)化分配策略、一次傳送的數(shù)據(jù)長度等等都是相互匹配的,使得本類文件系統(tǒng)均有相應(yīng)的最佳性能。
2、嵌入式Web服務(wù)器
對uClinux操作系統(tǒng)下嵌入式Web技術(shù)的實(shí)現(xiàn)主要用于用戶可以通過網(wǎng)
頁方式來管理路由器。
⑴uClinux下Web Server的實(shí)現(xiàn)
uClinux下,主要有三個(gè)WebServer:htpd,thttpd和Boa。Httpd是最簡單的一個(gè)Web Server,它的功能最弱,不支持認(rèn)證,不支持CGI。Thttpd和Boa都支持認(rèn)證、CGI等,功能都比較全。為了實(shí)現(xiàn)動態(tài)Web技術(shù),這里我們選擇實(shí)現(xiàn)一個(gè)支持CGI的、非常適合于嵌入式系統(tǒng)的Boa Web Server。Boa是一個(gè)單任務(wù)的http服務(wù)器,源代碼開放、性能高。目前,uClinux的代碼中已經(jīng)包含boa的源代碼,在uClinux下實(shí)現(xiàn)Boa,需要對Boa做一些配置和修改。這主要通過對boa.conf和mime.types文件進(jìn)行修改來實(shí)現(xiàn),需要改動的配置有以下幾項(xiàng):
①建目錄
由于uClinux默認(rèn)的根文件系統(tǒng)romfs是只讀的,不能用mkdir等命令來新建目錄,故應(yīng)在編譯內(nèi)核前先建好要用到的目錄,這通過修改
/uclinux-samsung/vendors/Samsung/4510b/makefile文件來實(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/目錄,通過修改define.h文件中#define ERVER ROOT /home”語句來指定SERVER ROOT。另外,還可以通過命令行來指定,例如: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)首頁和CGI程序所在目錄,即
DirectoyIndex index.html
ScriptAlias/cgi-bin//home/web/cgi-bin/
這樣指定后,.index.htm為遠(yuǎn)程瀏覽客戶訪問WebServer所看到的首頁默認(rèn)值,用C編寫的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
配置過程后,重新編譯內(nèi)核,編譯時(shí)選中Boa選項(xiàng)。把編譯好的內(nèi)核下載到硬件板,啟動uclinux,完成IP配置,啟動Boa Web Server,然后就可以通過lE訪問你的網(wǎng)頁了。如果想啟動uclinux時(shí)自動啟動Boa Web Server,可以修改re文件,進(jìn)入uclinux-samsung/vendors/Samsung/4510B目錄,在運(yùn)行腳本rc中增加兩行:
評論