1 引 言 向下一代互聯網過渡的進程已經開始。IPv6作為下一代互聯網的核心協議,能夠提供幾乎無限的地址空間,從根本上克服了IPv4中地址空間不足的問題,也為在不遠的將來把數量眾多的嵌入式設備接入網絡創造了條件。Linux的內核從2.4版就已經開始支持IPv6,同時,Linux作為開源的操作系統,也便于向不同的硬件平臺移植。由于現有的網絡基礎設施運行的大都是IPv4協議棧,選擇隧道方式接入IPv6網絡,是一種充分利用現有設備的過渡手段;谝陨显,本文選用支持IPv6的Linux內核,通過隧道方式把基于ARM的嵌入式設備接入IPv6網絡。 2 編譯支持IPv6的Linux內核 本文所用的硬件環境是Xscale的Sitsang開發板。要向ARM核的CPU移植Linux,首先要準備交叉編譯環境,包括armlinuxgcc、armlinuxld、armlinuxas,以便在PC機上編譯可運行于ARM核CPU的目標代碼。實驗選用的Linux內核源碼包是linux2.4.19.tar.bz2,另外還有一個針對Sitsang 板的內核補。ò寗映绦颍﹑atch2.4.19sitsang2.gz。以下是編譯支持IPv6的Linux內核的過程。 (1) 解開源碼包并打專用補丁 #tar jvxf linux-2.4.19.tar.bz2 #ln -s linux-2.4.19 linux #gzip -dc patch-2.4.19-sitsang2.gz | patch -p0 上述第2行命令建立符號鏈接,是為了第3行命令對Linux的標準內核進行打補丁的操作。 (2) 配置編譯選項 現在得到的Linux內核版本是支持IPv6的,但是支持IPv6的模塊默認并不是編譯入內核的。在make menuconfig的時候,注意把Network Options下有關IPv6和隧道(tunnel)的模塊選為內核模式,以便得到所需要的內核文件。其他選項不需要更改。 (3) 編譯內核 #make dep #make zImage #make modules 以上命令分別表示建立內核中各模塊的依賴關系,編譯內核,編譯驅動模塊。編譯無誤,就在../linux/arch/arm/boot/目錄下得到了所需的Linux內核文件zImage。 已經有了支持IPv6的內核,接下來的工作是把啟動程序和內核文件外加一個精簡的文件系統燒錄到開發板上去,開發板就可以啟動了。關于如何燒錄啟動程序、內核和文件系統并不是本文的主要內容,可參看其他嵌入式系統開發的資料。 3 重新編譯工具程序 配置和測試網絡環境需要ifconfig、ping、traceroute等工具程序。上面的精簡文件系統并沒有包括以上工具程序支持IPv6的版本,如ping6、traceroute6等,因此需要重新編譯包含這些工具程序的源碼包nettools和netutils。注意選用版本較新的源碼包,以確保其支持IPv6。將源碼包解開后,修改其Makefile文件,使之使用交叉編譯工具鏈編譯和鏈接,生成所需的目標代碼。將編譯生成的在ARM核的CPU上可執行的文件ifconfig、ping6和traceroute6拷貝到嵌入式設備文件系統的相應位置,以備下面的配置和測試時使用。 4 配置隧道將嵌入式設備接入IPv6網絡 首先到以下地址申請一段IPv6的地址:http://knight.6test.edu.cn/tb/html/。在頁面中點擊“ Register ”,填寫用戶名、Email和所需的Subnet Prefix Length(64/128),提交之后就得到了一段IPv6地址。要開始使用這段申請到的地址,還得點擊頁面中的“Activate the tunnel”鏈接加以激活。假設申請到的地址是3ffe:321f:0:775::/64,Tunnel Broker Server的地址是202.38.99.9,下面就開始配置隧道。 由于上面申請到的地址需要激活才能使用,而對于一些沒有圖形界面的嵌入式設備通過Web方式激活不方便;另外,由于與Tunnel Broker Server直接隧道連接需要一個獨立的IPv4地址,而申請到的地址總量巨大(64位地址總量達2的64次方),為避免浪費,本文采取了用一臺PC機與Tunnel Broker Server連接充當IPv6網關,而包括Sitsang開發板在內的其他設備通過網關接入的辦法。 實驗中,作為網關的PC機運行的是RedHat Linux 9,有兩塊網卡,IPv4地址分別是166.111.249.184(eth0)和192.168.1.184(eth1),Sitsang開發板有一個以太網口,IPv4地址是192.168.2.231(eth0),默認網關是192.168.2.184。IPv4的路由已設置好,即Sitsang開發板已經能ping通外部的IPv4網絡。 (1) 建立網關與Tunnel Broker Server的隧道 在網關PC機上執行以下命令: #insmod ipv6 #iptunnel add sit1 mode sit remote 202.38.99.9 local 166.111.249.184 #ifconfig sit1 up #ifconfig sit1 inet6 add 3ffe:321f:0:775::1/128 #route ?A inet6 add 2000::/3 sit1 #echo 1 > /proc/sys/net/ipv6/conf/all/forwarding 以上命令分別表示: ◆ 手動裝入IPv6模塊。RedHat 9的2.4.20內核默認并沒有把IPv6模塊裝入內核; ◆ 建立與Tunnel Broker Server的隧道sit1; ◆ 激活sit1; ◆ 為sit1添加IPv6地址; ◆ 添加通過sit1的路由項; ◆ 設置所有網絡接口都可以轉發數據包。 以Web方式激活后,可以用ping6測試www.ipv6.org或[url=http://www.6bone.net]www.6bone.net,確認連通性。 (2) 激活網關與嵌入式設備的自動隧道 分別在網關PC機和Sitsang開發板上執行以下命令,激活自動隧道: #ifconfig sit0 up sit0是一個自動隧道,激活之后就會添加相應的IPv4兼容的IPv6地址。其格式為::x.x.x.x(x.x.x.x是IPv4地址)。具體來說,網關PC機的sit0將會自動加::166.111.249.184/96,::127.0.0.1/96,::192.168.2.184/96三個兼容地址;而Sitsang開發板上的sit0將會自動添加::127.0.0.1/96,::192.168.2.231/96兩個兼容地址。 現在可以分別在網關PC機和Sitsang開發板上用ping6測試::166.111.249.184和::192.168.2.231,以確認自動隧道工作正常。 (3) 配置IPv6路由項 為嵌入式設備和網關PC機添加全局IPv6地址,并配置靜態路由。在Sitsang開發板上: #ifconfig inet6 sit0 add 3ffe:321f:0:775::192.168.2.231/128 #route ?A inet6 ::/0 gw ::192.168.2.184 在網關PC機上: # ifconfig inet6 sit1 add 3ffe:321f:0:775::192.168.2.184/128 #route ?A inet6 3ffe:321f:0:775::192.168.2.231/128 gw ::192.168.2.231 至此,Sitsang開發板已經有了一個全局IPv6地址(ffe:321f:0:775:: 192.168.2.231/128),并且能夠通過網關訪問外部IPv6網絡了。 同樣,可以在Sitsang開發板上用ping6測試www.ipv6.org或[url=http://www.6bone.net]www.6bone.net確認。 5 結語 本文介紹了如何在采用XScale的Sitsang開發板的硬件環境下,使用交叉編譯工具鏈移植支持IPv6的Linux操作系統;著重介紹了如何采用隧道方式,通過網關把嵌入式設備接入IPv6網絡的方法。本文介紹的方法均已在硬件設備上實際調試通過。其基本方法適用于移植了Linux操作系統的各種嵌入式設備。 |