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

當前位置:主頁 > 教程 > 服務器類 >

LINUX網(wǎng)絡嵌入式設備

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

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

  1.一個網(wǎng)絡芯片架構

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

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

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

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

  這里給出一個簡單的以太網(wǎng)switch芯片的架構,如下圖所示,其核心就是一個register集,對它們進行配置(內部EEPROM、或外部MDIO總線),可以實現(xiàn)port-VLAN、二層filter等功能。其結構相對簡單,因為其所有端口都是以太網(wǎng)口。

LINUX網(wǎng)絡嵌入式設備

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

LINUX網(wǎng)絡嵌入式設備

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

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

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

  2.1與外界的交互方式

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

  解析指令對軟件系統(tǒng)來說很簡單,配置系統(tǒng),前面也說了,主要是讀寫一些register,也很簡單。關鍵就在于與外界用戶交互。

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

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

  呵呵,連接192.168.1.1實際就是去連接其內部的SoC,一般的交換機、路由器都是這樣的,而不是什么端口。當我還是一個超級菜鳥時,這個問題困擾了好久,糾結。

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

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

LINUX網(wǎng)絡嵌入式設備

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

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

  2.2bootloader

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