技術(shù)員聯(lián)盟提供win764位系統(tǒng)下載,win10,win7,xp,裝機(jī)純凈版,64位旗艦版,綠色軟件,免費(fèi)軟件下載基地!

當(dāng)前位置:主頁(yè) > 教程 > 服務(wù)器類 >

LINUX網(wǎng)絡(luò)嵌入式設(shè)備

來(lái)源:技術(shù)員聯(lián)盟┆發(fā)布時(shí)間:2019-02-26 00:22┆點(diǎn)擊:

  這不是什么新鮮東西,無(wú)線路由器很早前就開(kāi)始使用了,不過(guò)最近才慢慢理解其原理?,F(xiàn)在網(wǎng)絡(luò)嵌入式設(shè)備的功能越來(lái)越強(qiáng)大了,各芯片廠商的解決方法支持著這種復(fù)雜性。最近公司實(shí)習(xí),做一個(gè)家庭網(wǎng)關(guān)的項(xiàng)目。下面的內(nèi)容應(yīng)該不算泄密吧,寫得隨意一點(diǎn)。

  1.一個(gè)網(wǎng)絡(luò)芯片架構(gòu)

LINUX網(wǎng)絡(luò)嵌入式設(shè)備 三聯(lián)

  大家應(yīng)該看得出來(lái),這是一個(gè)DSL芯片。其網(wǎng)絡(luò)部分由一個(gè)switch core構(gòu)成核心,對(duì)外有3個(gè)交換口(粉紅色的):左側(cè)為以太網(wǎng)MAC,可外接以太網(wǎng)芯片MAC或PHY,稱為L(zhǎng)AN端;右側(cè)為DSL的TPS子層,按照DSL標(biāo)準(zhǔn)傳輸ATM/PTM數(shù)據(jù),成為WAN端;上面的是一個(gè)PDMA片級(jí)總線,與片上系統(tǒng)SoC通信。

  另外還有幾個(gè)額外的交換口,主要是提供額外功能的:一個(gè)QDMA用于擴(kuò)展core外Mem;LTR和WTR是兩個(gè)轉(zhuǎn)換引擎,當(dāng)LAN或WAN端的數(shù)據(jù)包需要一些特殊處理時(shí)(如VLAN、PPPOE頭等),會(huì)被分別交換到這兩個(gè)口進(jìn)行轉(zhuǎn)換后,再發(fā)回Queue中。再另外,LAN、WAN端各有一個(gè)classifier,是預(yù)分類器,在數(shù)據(jù)包進(jìn)入switch core前,先進(jìn)行一個(gè)粗略的劃分,決定發(fā)往哪個(gè)端口。

  以上的這些功能都市switch core獨(dú)立完成的,SoC系統(tǒng)只需對(duì)其進(jìn)行簡(jiǎn)單的配置、控制即可。所以SoC的新能并不需要太高(CPU大概是130MHz的)。注意,該switch core和一般以太網(wǎng)switch的區(qū)別,首先其端口類型就不同,所提供的功能也跟為復(fù)雜。

  這里給出一個(gè)簡(jiǎn)單的以太網(wǎng)switch芯片的架構(gòu),如下圖所示,其核心就是一個(gè)register集,對(duì)它們進(jìn)行配置(內(nèi)部EEPROM、或外部MDIO總線),可以實(shí)現(xiàn)port-VLAN、二層filter等功能。其結(jié)構(gòu)相對(duì)簡(jiǎn)單,因?yàn)槠渌卸丝诙际且蕴W(wǎng)口。

LINUX網(wǎng)絡(luò)嵌入式設(shè)備

  用該芯片接在上述DSL芯片的LAN端,構(gòu)成網(wǎng)絡(luò)系統(tǒng)如下圖所示:

LINUX網(wǎng)絡(luò)嵌入式設(shè)備

  以太網(wǎng)switch可以自主實(shí)現(xiàn)port-VLAN功能,并通過(guò)一個(gè)trunk口與switch core相連。而switch core有很好的vlan_tag classifier功能。另外WAN端實(shí)現(xiàn)了8個(gè)硬件通道PVCs,且switch core也能對(duì)它進(jìn)行很好的classifier。綜上,就可以實(shí)現(xiàn)所謂的port-mapping功能,只要一跟DSL接入線,就可在家庭里實(shí)現(xiàn)IPTV、Internet、可視電話等業(yè)務(wù)的分離。

  注意,所有這些功能都是switch core自動(dòng)完成的,網(wǎng)絡(luò)數(shù)據(jù)包不需要進(jìn)入SoC的協(xié)議棧,這和后面講的一般的路由器是不同的。

  2.嵌入式片上系統(tǒng)

  2.1與外界的交互方式

  這里的SoC系統(tǒng)主要功能有:與外界用戶的交互,解析用戶指令,配置系統(tǒng)。

  解析指令對(duì)軟件系統(tǒng)來(lái)說(shuō)很簡(jiǎn)單,配置系統(tǒng),前面也說(shuō)了,主要是讀寫一些register,也很簡(jiǎn)單。關(guān)鍵就在于與外界用戶交互。

  很容易想到的一種方式是網(wǎng)絡(luò),SoC也連在switch core上,有自己的IP、MAC。當(dāng)然它和switch core是片上bus相連的,通信時(shí)并不需要MAC,這里只是把自己偽裝成一個(gè)通用的以太網(wǎng)設(shè)備,可以被switch core和外界PC識(shí)別。

  要通信,當(dāng)然就需要協(xié)議棧了,不過(guò),這里的SoC系統(tǒng)不需要處理額外(正常通信)的數(shù)據(jù),所以協(xié)議棧也選擇簡(jiǎn)單的LWIP,如之前的博文所述。最常用的網(wǎng)絡(luò)通信方式就http了,另外還有telent等。

  呵呵,連接192.168.1.1實(shí)際就是去連接其內(nèi)部的SoC,一般的交換機(jī)、路由器都是這樣的,而不是什么端口。當(dāng)我還是一個(gè)超級(jí)菜鳥(niǎo)時(shí),這個(gè)問(wèn)題困擾了好久,糾結(jié)。

  另外,嵌入式系統(tǒng)中,還有一個(gè)最常用的交互方式是串口UART。UART是一個(gè)非常簡(jiǎn)單的I/O設(shè)備,它通過(guò)直接讀寫管腳的電平信號(hào)(串行的)來(lái)實(shí)現(xiàn)輸入輸出,沒(méi)有任何額外的中斷、控制等機(jī)制。雖然簡(jiǎn)單,不能用以實(shí)現(xiàn)復(fù)雜、可靠的功能,但用作嵌入式系統(tǒng)的調(diào)試方法卻非常有效。

  UART就像是嵌入式設(shè)備的鍵盤/顯示器。它是一種非常簡(jiǎn)單的硬件資源,在它之上可以構(gòu)建通用的I/O設(shè)備tty,在tty之上,就可以實(shí)現(xiàn)各種應(yīng)用,如shell等。

LINUX網(wǎng)絡(luò)嵌入式設(shè)備

  硬件資源UART、虛擬層設(shè)備tty都是系統(tǒng)的資源,在Uc/OS中,一般作為全局量,在其上的應(yīng)用則通過(guò)task來(lái)完成。如XSHELL_TASK中,就是通過(guò)一個(gè)while(1)循環(huán),不停地通過(guò)tty_get_line()讀取命令行。注意,該函數(shù)已經(jīng)不是裸的硬件操作了,而是加上了一個(gè)上層操作,即識(shí)別/r/n來(lái)作為結(jié)束符,也是通過(guò)一個(gè)while(1)循環(huán)來(lái)作的。讀到電平為空,則忽略,因?yàn)閁ART太簡(jiǎn)單了,沒(méi)有中斷、緩存機(jī)制等(沒(méi)有詳細(xì)區(qū)考究,只是粗略地瀏覽了一下代碼,好像是這樣的吧!)。

  最后,外界用戶讀寫電平,當(dāng)然不同用示波器了。呵呵,PC上裝個(gè)串口驅(qū)動(dòng),那么PC的鍵盤/顯示器就為嵌入式板子所用啦。

  2.2bootloader

  這就像一個(gè)心結(jié),你一天不理解它,就一天不能安心地開(kāi)發(fā)嵌入式系統(tǒng),盡管你可以把軟件寫得很出色。