• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于ARM和Linux的嵌入式網(wǎng)關(guān)的設(shè)計(jì)與實(shí)現(xiàn)

    2010-08-15 00:49:27馬新濤李洪平
    關(guān)鍵詞:開發(fā)板網(wǎng)卡網(wǎng)關(guān)

    馬新濤 李洪平

    (1、中國(guó)海洋大學(xué)信息科學(xué)與技術(shù)學(xué)院,山東 青島 2661002、中國(guó)海洋大學(xué)海洋遙感所,山東 青島 266100)

    1 引言

    本文中所要設(shè)計(jì)實(shí)現(xiàn)的嵌入式網(wǎng)關(guān)需要完成的功能就是連接兩個(gè)不同協(xié)議的無線網(wǎng)絡(luò),實(shí)現(xiàn)數(shù)據(jù)的轉(zhuǎn)發(fā)。基于ZigBee網(wǎng)絡(luò)協(xié)議的無線傳感器節(jié)點(diǎn)采集有用數(shù)據(jù),并通過ZigBee網(wǎng)絡(luò)將數(shù)據(jù)準(zhǔn)確傳輸至ZigBee協(xié)調(diào)器,網(wǎng)關(guān)通過讀串口操作將協(xié)調(diào)器的數(shù)據(jù)寫入緩沖區(qū),最后將緩沖區(qū)的數(shù)據(jù)通過與網(wǎng)關(guān)相連的usb無線網(wǎng)卡打包送入無線局域網(wǎng)。網(wǎng)關(guān)本質(zhì)上是一個(gè)RS232協(xié)議轉(zhuǎn)換為802.11g協(xié)議的協(xié)議轉(zhuǎn)換器。

    2 開發(fā)平臺(tái)配置

    2.1 硬件平臺(tái)介紹

    我們選用了聯(lián)智公司基于EP9301處理器的開發(fā)板DG9301。DG9301開發(fā)板的主要組件包括:EP9301 ARM9處理器,16M的FLASH 和32M的SDRAM,兩個(gè)RS232串行接口,一個(gè)自適應(yīng)的10M/100M以太網(wǎng)接口,24個(gè)引出的GPIO引腳,支持用戶外接,標(biāo)準(zhǔn)的 JTAG 接口,2個(gè) USB host,5路 12bit的模擬輸入等等。

    2.2 軟件平臺(tái)搭建

    2.2.1 開發(fā)方式介紹

    由于目標(biāo)板不具備一定的處理器能力和存儲(chǔ)空間,所以只有在宿主機(jī)上對(duì)即將在目標(biāo)機(jī)上運(yùn)行的應(yīng)用程序進(jìn)行編譯,生成可以在目標(biāo)機(jī)上運(yùn)行的代碼格式,然后移植到目標(biāo)板上,才可以完成程序開發(fā),即目前嵌入式程序開發(fā)的Host/Target模式。宿主機(jī)采用的是運(yùn)行redhat9.0系統(tǒng)的x86通用PC機(jī)平臺(tái),并安裝交叉編譯環(huán)境。

    2.2.2 搭建交叉編譯環(huán)境

    所謂交叉編譯,簡(jiǎn)單地說就是在一個(gè)平臺(tái)上生成在另一個(gè)平臺(tái)上執(zhí)行的代碼,即在宿主機(jī)上對(duì)應(yīng)用程序進(jìn)行交叉編譯,生成可以在目標(biāo)板上執(zhí)行的代碼。制作交叉編譯器可行性較高的方法是采用現(xiàn)成的、有專門的機(jī)構(gòu)維護(hù)的交叉工具鏈,出現(xiàn)問題容易得到技術(shù)支持。在這里,我們?nèi)砸悦嫦駾G9301的開發(fā)為例:

    首先,將資料光盤中的arm-linux-gcc-3.3.tar拷貝到開發(fā)機(jī)的根目錄,并將文件解壓縮。

    然后,再把資料光盤中的arm-elf-gcc-3.2.1-full.tar.bz2拷貝到開發(fā)主機(jī)的根目錄,并將文件解壓縮。

    最后,為了不每次設(shè)置PATH,將下面這行加到開發(fā)主機(jī)的.bash_profile文件中:

    PATH =/usr/local/arm/3.3/bin:/usr/local/arm/3.2.1-elf/bin:$PATH

    至此,PC機(jī)的交叉編譯環(huán)境就已經(jīng)建立起來了,可以用arm-linux-gcc命令編譯在PC機(jī)上編輯好的程序,然后下載到目標(biāo)板上測(cè)試執(zhí)行。

    2.2.3 搭建NFS環(huán)境

    首先,在裝有redhat9.0的PC主機(jī)上執(zhí)行setup命令,彈出菜單界面后選中System services進(jìn)入系統(tǒng)服務(wù)選項(xiàng)菜單,在其中選中[*]nfs,然后退出setup界面返回到命令提示符下。

    編輯/etc/exports文件,將這個(gè)默認(rèn)的空文件修改為只有一行內(nèi)容:/(rw),保存退出后執(zhí)行如下命令以啟動(dòng)NFS服務(wù):service nfs restart,如果每個(gè)啟動(dòng)項(xiàng)的結(jié)果都顯示為OK,則說明配置成功。

    2.2.4 配置TFTP服務(wù)

    進(jìn)入System services菜單界面,選中tftp一項(xiàng),并去掉ipchains和iptables兩項(xiàng)服務(wù)。

    然后,退出setup界面,執(zhí)行service xinetd restart命令以啟動(dòng)TFTP服務(wù)。

    3 Linux下讀串口程序的開發(fā)設(shè)計(jì)

    前面已經(jīng)介紹過,嵌入式網(wǎng)關(guān)的功能在本質(zhì)上是實(shí)現(xiàn)RS232串口到無線局域網(wǎng)的數(shù)據(jù)轉(zhuǎn)發(fā),所以應(yīng)用層軟件實(shí)際上就是讀串口數(shù)據(jù),借助于公共緩沖區(qū),打成標(biāo)準(zhǔn)的TCP數(shù)據(jù)包,利用無線網(wǎng)卡實(shí)現(xiàn)數(shù)據(jù)的發(fā)送。

    在Linux系統(tǒng)中,串口的驅(qū)動(dòng)由Linux內(nèi)核的drivers文件夾內(nèi)的serial.c來實(shí)現(xiàn)。在Linux下,/dev是提供給應(yīng)用層的接口,Linux通過識(shí)別/dev下串口設(shè)備的主設(shè)備號(hào)和次設(shè)備號(hào),配合找到底層的串口驅(qū)動(dòng),并進(jìn)行調(diào)用。而我們需要做的就是在應(yīng)用層借助read()和write()函數(shù)進(jìn)行讀串口程序的開發(fā)。

    讀串口程序設(shè)計(jì)大致可以分為打開串口、配置串口、讀串口三個(gè)步驟。其中,打開串口可以使用open_port函數(shù)來實(shí)現(xiàn)。配置串口可以使用set_opt函數(shù)來實(shí)現(xiàn)。讀串口操作可以使用read()函數(shù)來實(shí)現(xiàn)。

    4 嵌入式Linux下的網(wǎng)絡(luò)編程

    4.1 Linux網(wǎng)絡(luò)編程基礎(chǔ)

    Linux中的網(wǎng)絡(luò)編程是通過socket接口來進(jìn)行的。系統(tǒng)在pc機(jī)與ARM開發(fā)板之間通過一個(gè)可靠的面向連接的網(wǎng)絡(luò)套接字服務(wù),使得嵌入式網(wǎng)關(guān)可以通過連有無線網(wǎng)卡的usb口與連有無線ap的pc機(jī)進(jìn)行數(shù)據(jù)交換。

    4.2 Linux網(wǎng)絡(luò)編程模型

    在客戶端/服務(wù)器模式中,一個(gè)服務(wù)程序通常在一個(gè)指定的地址監(jiān)聽對(duì)服務(wù)的請(qǐng)求,當(dāng)一個(gè)客戶對(duì)這個(gè)服務(wù)的地址提出了連接請(qǐng)求。此時(shí),服務(wù)程序被激活,它創(chuàng)建一個(gè)子進(jìn)程為客戶提供服務(wù),而父進(jìn)程繼續(xù)在原地址監(jiān)聽。在子進(jìn)程完成了相應(yīng)的操作后,服務(wù)器關(guān)閉此連接套接字,并結(jié)束此子進(jìn)程。

    4.3 Linux下socket與讀串口程序的綜合編程

    在這里,我們的嵌入式網(wǎng)關(guān)被看作是客戶端,無線局域網(wǎng)的pc節(jié)點(diǎn)被看作是服務(wù)器端。通過socket編程和讀串口程序的綜合,可以在實(shí)現(xiàn)服務(wù)器和客戶端網(wǎng)絡(luò)連接的基礎(chǔ)上,完成讀串口寫網(wǎng)口的操作以及數(shù)據(jù)的轉(zhuǎn)發(fā)、傳輸和接收。

    在client.c程序編輯完成后,使用Linux下ARM的交叉編譯工具arm-linux-gcc將其編譯成ARM芯片上可運(yùn)行的應(yīng)用程序client:arm-linux-gcc-o client client.c

    然后再將client通過網(wǎng)口下載到ARM開發(fā)板上。同時(shí)在服務(wù)器端編輯編譯server程序,配置好雙方的ip地址之后就可以執(zhí)行應(yīng)用程序?qū)崿F(xiàn)開發(fā)板和主機(jī)之間的通訊。實(shí)驗(yàn)證明,我們可以在服務(wù)器端接收到來自ZigBee協(xié)調(diào)點(diǎn)的數(shù)據(jù)信息。

    測(cè)試成功后我們還需要將客戶端應(yīng)用程序client添加到ramdisk文件系統(tǒng)中,然后再將其壓縮的映像文件ramdisk.gz下載燒寫到開發(fā)板的flash上。同時(shí),我們還需要修改系統(tǒng)腳本/etc/rc.sysinit,使開發(fā)板能夠在系統(tǒng)啟動(dòng)后自動(dòng)加載無線網(wǎng)卡驅(qū)動(dòng)和客戶端應(yīng)用程序client。

    5 結(jié)束語

    和通用計(jì)算機(jī)不同,嵌入式系統(tǒng)是面向應(yīng)用、產(chǎn)品和用戶的。本文就是結(jié)合實(shí)際需求,以應(yīng)用為基礎(chǔ),詳細(xì)介紹了嵌入式設(shè)備--網(wǎng)關(guān)開發(fā)設(shè)計(jì)和實(shí)現(xiàn)的整體過程,并在實(shí)際項(xiàng)目中得到了檢驗(yàn),希望能對(duì)其他嵌入式系統(tǒng)產(chǎn)品的開發(fā)有一定的借鑒意義。

    [1]許先斌,熊慧軍,李洲,等.基于 ARM9 的嵌入式Linux開發(fā)流程的研究[J].微計(jì)算機(jī)信息,2006:87-89.

    [2]尤盈盈,孟利民.構(gòu)建嵌入式Linux交叉編譯環(huán)境[J].計(jì)算機(jī)與數(shù)字工程,2006:30-32.

    [3]李駒光,鄭耿,江澤明.嵌入式 Linux 系統(tǒng)開發(fā)詳解[M].清華大學(xué)出版社,2006:166-182.

    [4]王丹,祝躍飛,李勤,等.基于 Linux2.6 內(nèi)核的嵌入式VPN網(wǎng)關(guān)實(shí)現(xiàn)[J].微電子學(xué)與計(jì)算機(jī),2006:137-140.

    [5]孫瓊.嵌入式Linux應(yīng)用程序開發(fā)詳解[M].人民郵電出版社,2006.

    [6]俞冬麗.基于嵌入式Linux系統(tǒng)的網(wǎng)絡(luò)編程技術(shù)[J].中國(guó)科技信息,2006:77-80.

    猜你喜歡
    開發(fā)板網(wǎng)卡網(wǎng)關(guān)
    在DDS 中間件上實(shí)現(xiàn)雙冗余網(wǎng)卡切換的方法
    基于改進(jìn)RPS技術(shù)的IPSEC VPN網(wǎng)關(guān)設(shè)計(jì)
    Server 2016網(wǎng)卡組合模式
    Microchip最新推出兩款PIC32 Curiosity開發(fā)板
    淺析單片機(jī)開發(fā)板的設(shè)計(jì)與制作
    電子制作(2017年22期)2017-02-02 07:10:14
    挑戰(zhàn)Killer網(wǎng)卡Realtek網(wǎng)游專用Dragon網(wǎng)卡
    LTE Small Cell網(wǎng)關(guān)及虛擬網(wǎng)關(guān)技術(shù)研究
    應(yīng)對(duì)氣候變化需要打通“網(wǎng)關(guān)”
    太陽能(2015年7期)2015-04-12 06:49:50
    Mouser為您呈上開發(fā)關(guān)鍵之STMicroelectronics Nucleo開發(fā)板
    Arduino和Atmel發(fā)布Arduino Zero開發(fā)板
    台安县| 衡水市| 大渡口区| 墨脱县| 汉沽区| 威远县| 浪卡子县| 苍溪县| 神池县| 大田县| 忻城县| 永平县| 淳化县| 两当县| 新营市| 石景山区| 兴隆县| 门源| 竹北市| 深州市| 鲁甸县| 蕉岭县| 乐至县| 宜章县| 拉萨市| 三穗县| 阳新县| 湛江市| 南华县| 当阳市| 云霄县| 灯塔市| 甘肃省| 太谷县| 城步| 黄平县| 湟源县| 临江市| 曲水县| 孙吴县| 申扎县|