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