新聞中心

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

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

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

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

關(guān)于GNU和公共許可證協(xié)議的詳細(xì)資料,讀者可以參看GNU網(wǎng)站的介紹,http://www,gnu.oTgfhDmc.html。GNU開發(fā)套件作為通用的Linux開放套件,包括一系列的開發(fā)調(diào)試工具。GNU開發(fā)工具都是采用命令行的方式,用戶掌握起來(lái)相對(duì)比較困難,不如基于Windows系統(tǒng)的開發(fā)工具好用,但是GNU工具的復(fù)雜性是由于它更貼近編譯器和操作系統(tǒng)的底層,并提供了更大的靈活性。一旦學(xué)習(xí)和掌握了相關(guān)工具后,就了解了系統(tǒng)設(shè)計(jì)的基礎(chǔ)知識(shí)。運(yùn)行于Linux操作系統(tǒng)下的自由軟件GNU gcc編譯器,不僅可以編譯Llnux操作系統(tǒng)下運(yùn)行的應(yīng)用程序,還可以編譯Linux內(nèi)核本身,甚至可以作交叉編譯,編譯運(yùn)行于其它CPU上的程序。所以,在進(jìn)行嵌入式系統(tǒng)應(yīng)用程序開發(fā)時(shí),這些工具得到了日益廣泛的應(yīng)用。

⑵uCIinux的打印終端

通常情況下,uClinux的默認(rèn)終端是串口,內(nèi)核在啟動(dòng)時(shí)所有的信息都打印到串口終端(使用printk函數(shù)打印),同時(shí)也可以通過(guò)串口終端與系統(tǒng)交互。uClinux在啟動(dòng)時(shí)啟動(dòng)了telnetd(遠(yuǎn)程登錄服務(wù)),操作者可以遠(yuǎn)程登錄上系統(tǒng),從而控制系統(tǒng)的運(yùn)行。至于是否允許遠(yuǎn)程登錄可以通過(guò)燒寫romfs文件系統(tǒng)時(shí)由用戶決定是否啟動(dòng)遠(yuǎn)程登錄服務(wù)。

⑶交叉編譯調(diào)試工具

支持一種新的處理器,必須具備一些編譯,匯編工具,使用這些工具可以形成可運(yùn)行于這種處理器的二進(jìn)制文件。對(duì)于內(nèi)核使用的編譯工具同應(yīng)用程序使用的有所不同。

路由器軟件系統(tǒng)的設(shè)計(jì)過(guò)程

uClinux 操作系統(tǒng)提供了嵌入式Web服務(wù)器、PPPOE拔號(hào)軟件、基于IPTable過(guò)濾防火墻等功能模塊的源代碼。路由器軟件系統(tǒng)的設(shè)計(jì)包括uClinux操作系統(tǒng)的裁剪、基于uClinux操作系統(tǒng)提供的以上功能模塊源代碼下的修改和設(shè)計(jì),從而實(shí)現(xiàn)本路由器的嵌入式Web服務(wù)器、PPPOE拔號(hào)軟件、基于IPTable過(guò)濾防火墻。

1、uClinux操作系統(tǒng)裁剪

⑴裁剪前準(zhǔn)備

uclinux的裁剪牽涉到對(duì)目標(biāo)的硬件支持問(wèn)題。要讓uClinux支持一個(gè)新硬件體系,要做的第一件事情就是收集和構(gòu)建代碼的工具。然后就可以裁減和編譯內(nèi)核。一旦內(nèi)核支持基本的處理器功能,它就可以運(yùn)作了,但是如果缺乏驅(qū)動(dòng)程序的支持,就起不了多大作用。典型的驅(qū)動(dòng)程序集合中包括了諸如控制臺(tái)終端、基本串行設(shè)備和一個(gè)可能包含了根文件系統(tǒng)的塊設(shè)備的驅(qū)動(dòng)等。

在這里主要介紹針對(duì)我們剛才介紹的實(shí)例系統(tǒng)采用的uClinux裁剪方法。本實(shí)例中的宿主機(jī)上裝redhat9操作系統(tǒng),因?yàn)閞edhat9具備安裝uClinux交叉編譯工具時(shí)所需要的庫(kù)。

首先必須在redhat9下建立uclinux開發(fā)環(huán)境,建立uclinux開發(fā)環(huán)境的方法有很多,而且也十分方便。可以從http://www.uClinux.org處下載最新的uClinux的源代碼、最新的gcc3的工具鏈,不過(guò)針對(duì)于不同的工具鏈在不同的操作系統(tǒng)下,以及目標(biāo)板的MCU的不一樣,可能在編譯內(nèi)核時(shí)會(huì)產(chǎn)生錯(cuò)誤,在這里,我講解實(shí)例所使用的不是最新版本的。同樣的,針對(duì)不同的硬件開發(fā)環(huán)境要對(duì)uClinux源代碼進(jìn)行不同的適當(dāng)修改,修改部分通常是以代碼補(bǔ)丁形式實(shí)現(xiàn)的,一般網(wǎng)絡(luò)上會(huì)有各種通用模式的補(bǔ)丁提供使用。好了,切入正題,有了齊全的軟件包后,安裝過(guò)程如下:

(1) 下載內(nèi)核和工具包

內(nèi)核包 : uClinux-disc-200408.tar.gz

補(bǔ)丁文件:uClinux-disc-200408.patch

uclinux的源代碼和文件系統(tǒng)的源代碼,軟件包后的數(shù)字代表完成的日期。

工具鏈 : arm-elf-gcc-200403.sh

(2) 安裝工具包

sh arm -elf-gcc-200403.sh

(3) 解壓縮內(nèi)核

tar -xzvfuClinux-dist-200408.tar.gz,生成uClinux-disk目錄。

(4)安裝補(bǔ)丁:

將補(bǔ)丁文件復(fù)制到uClinux-disk目錄下,進(jìn)入該目錄,在Shell命令中使用如下命令:

patch -pl-f

⑵內(nèi)核的編譯和生成

執(zhí)行以下命令可以進(jìn)行uClinux編譯:

make xconfig。具體的編譯選項(xiàng)配置過(guò)程本文不做詳細(xì)介紹。但在此給出編譯的一些基本思想:

ucLinux作為一個(gè)自由軟件,在廣大愛(ài)好者的支持下,內(nèi)核版本不斷更新。新的內(nèi)核修訂了舊內(nèi)核的bug,并增加了許多新的特性。如果用戶想要使用這些新特性,或想根據(jù)自己的系統(tǒng)度身定制一個(gè)更高效,更穩(wěn)定的內(nèi)核,就需要重新編譯內(nèi)核。

為了正確的合理地設(shè)置內(nèi)核編譯配置選項(xiàng),從而只編譯系統(tǒng)需要的功能的代碼,一般主要有下面四個(gè)考慮:

自己定制編譯的內(nèi)核運(yùn)行更快(具有更少的代碼)。

系統(tǒng)將擁有更多的內(nèi)存(內(nèi)核部分將不會(huì)被交換到虛擬內(nèi)存中)。

不需要的功能編譯進(jìn)入內(nèi)核可能會(huì)增加被系統(tǒng)攻擊者利用的漏洞。

將某種功能編譯為模塊方式會(huì)比編譯到內(nèi)核內(nèi)的方式速度要慢一些。

在此需要補(bǔ)充說(shuō)明的是內(nèi)核編譯的目的是為了創(chuàng)建一個(gè)能夠放置在flash上支持flash讀取的完成要求功能的內(nèi)核,同時(shí)也是flash讀取步驟其中一步。對(duì)uCLinux的內(nèi)核進(jìn)行配置和創(chuàng)建要對(duì)uCLinux內(nèi)核的版本進(jìn)行選擇:uCLinux內(nèi)核的版本號(hào)有三種:主號(hào)、次號(hào)、修訂號(hào)。以2.4.10為例一般來(lái)說(shuō),主號(hào)如目前的2是很穩(wěn)定的。主號(hào)的變動(dòng)說(shuō)明了操作系統(tǒng)發(fā)生了很大的變動(dòng)。次號(hào)如目前的.4,用來(lái)說(shuō)明內(nèi)核的穩(wěn)定性。當(dāng)次號(hào)為偶數(shù)號(hào)((0,2, 4, 6) 時(shí),表明現(xiàn)在的內(nèi)核的穩(wěn)定性強(qiáng),而當(dāng)次號(hào)為奇數(shù)號(hào)(1,3, 5) 時(shí),表明現(xiàn)在的內(nèi)核處于測(cè)試的階段,其穩(wěn)定性值得考慮,如果你使用次號(hào)為奇數(shù)號(hào)的內(nèi)核進(jìn)行配置和創(chuàng)建時(shí)、就值得三思而行了。而修訂號(hào)的發(fā)表比較的頻繁,它主要是用來(lái)對(duì)前面的版本進(jìn)行修補(bǔ)。開發(fā)新的版本和修改以前的版本是同時(shí)進(jìn)行的,很有可能修改的修訂版本在新的版本出來(lái)之后。

依次執(zhí)行以下命令完成uClinux的編譯過(guò)程:

cd/usr/local/src/uclinux=dist

make dep

make clean

make lib_only

make user_only

make romfs

make image

最終在image目錄下生成2個(gè)文件:

zImage——uClinux內(nèi)核2.4.x的壓縮方式可執(zhí)行映象文件;

romfs——文件系統(tǒng)的映象文件。

這就是我們要用來(lái)燒錄到硬件板內(nèi)的最終文件了。具體燒寫可以通過(guò)使用專用的燒寫工具來(lái)實(shí)現(xiàn),燒寫過(guò)程一定要參照燒寫工具的說(shuō)明要求來(lái)進(jìn)行。



關(guān)鍵詞:

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉