<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > Linux串口上網(wǎng)的程序實(shí)現方法

Linux串口上網(wǎng)的程序實(shí)現方法

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

提供了豐富的支持,比如PPP(Peer-to-Peer Protocol, 端對端協(xié)議)和SLIP(Serial Line Interface Protocol, 非常老的串行線(xiàn)路接口協(xié)議)。

本文引用地址:http://dyxdggzs.com/article/150775.htm

這里所說(shuō)的是指把當成一個(gè)網(wǎng)絡(luò )接口,通過(guò)封裝網(wǎng)絡(luò )數據包(如IP包)以達到無(wú)網(wǎng)卡的終端可以通過(guò)進(jìn)行網(wǎng)絡(luò )通信。但是使用這兩種協(xié)議必須得到內核的支持。例如,如果在沒(méi)有配置PPP的環(huán)境中使用PPP,除了安裝PPP應用層軟件外,還必須重新編譯內核。SLIP是一個(gè)比較老的簡(jiǎn)單的協(xié)議,現在的內核缺省配置都支持,不需要重新編譯內核,盡管如此,其源代碼看上去有點(diǎn)古怪而復雜。在嵌入式Linux系統使用過(guò)程中,如果內核已經(jīng)被燒入Flash中,而為了節省空間內核又沒(méi)有提供諸如PPP或者SLIP的支持,當然就沒(méi)有辦法在不重新燒寫(xiě)Flash的情況下直接使用PPP或者SLIP了,事實(shí)上用戶(hù)必須動(dòng)態(tài)加載PPP和SLIP的內核模塊。對某些嵌入式應用來(lái)說(shuō)移植或者修改PPP源代碼變成了乏味和繁鎖的工作。這里介紹一種非常經(jīng)濟而且實(shí)用的串口的簡(jiǎn)單。

Linux簡(jiǎn)單串口上網(wǎng)原理

簡(jiǎn)單串口上網(wǎng)的原理如圖1所示。


圖 1

Linux Box A 和 Linux Box B 是兩個(gè)安裝有Linux操作系統的終端(可以是PC,也可以是嵌入式設備),它們通過(guò)一條串口通信線(xiàn)(null modem cable line)連接??刂拼谕ㄐ诺姆?wù)進(jìn)程server讀和寫(xiě)兩個(gè)字符設備:發(fā)送字符設備sending device和接收字符設備receiving device。

在內核空間,偽網(wǎng)絡(luò )設備驅動(dòng)pseudo network driver可以直接讀寫(xiě)發(fā)送字符設備和接收字符設備,事實(shí)上在內核空間它們之間的通信只是對共享緩存區的讀寫(xiě)而已。偽網(wǎng)絡(luò )設備驅動(dòng)具有大部分普通網(wǎng)卡驅動(dòng)提供服務(wù)功能,只是沒(méi)有硬件部分代碼的實(shí)現而已。當用戶(hù)空間的進(jìn)程要發(fā)送數據的時(shí)候,其首先讓數據經(jīng)過(guò)Linux操作系統的TCP/IP處理層進(jìn)行數據打包,然后把打包后的數據直接寫(xiě)入sending device,等待server進(jìn)程讀取,最后通過(guò)串口發(fā)送到另一個(gè)Linux Box的server進(jìn)程;而當server進(jìn)程發(fā)現有數據從串口傳送過(guò)來(lái)時(shí)就把數據寫(xiě)入receiving device,偽網(wǎng)絡(luò )驅動(dòng)程序發(fā)現receiving device設備有新數據的時(shí)候,就又把數據傳遞到TCP/IP層處理,最終網(wǎng)絡(luò )應用程序收到對方發(fā)來(lái)的數據。本文設計的源程序主要有三個(gè),ed_device.c、ed_device.h、server.c。其中在ed_device.c是串口上網(wǎng)的內核部分的主程序,包含字符設備和偽網(wǎng)絡(luò )接口設備程序,server.c負責串口通信。主文件ed_device.c中包括的頭文件在源程序中,這里就不一一列舉了。

Linux串口上網(wǎng)設備加載和注銷(xiāo)形式

Linux串口上網(wǎng)程序的整個(gè)內核部分是以L(fǎng)KM(Loadable Kernel Module)形式實(shí)現的。LKM加載的時(shí)候完成偽網(wǎng)絡(luò )設備、發(fā)送字符設備、接收字符設備的初始化和注冊。注冊的目的是讓操作系統可以識別用戶(hù)進(jìn)程所要操作的設備,并完成在其上的操作(比如read,write等系統調用)。Linux加載模塊,實(shí)際上就是模塊鏈表的插入;刪除模塊象是模塊鏈表成員的刪除。

初始化內核模塊入口函數init_module()中包括對字符設備的初始化入口 函數eddev_module_init()和偽網(wǎng)絡(luò )設備初始化入口函數ednet_module_init()。

在內核需要卸載的時(shí)候,必須進(jìn)行資源釋放以及設備注銷(xiāo), cleanup_module()完成這個(gè)任務(wù)。函數cleanup_module()中用eddev_module_cleanup()來(lái)釋放字符設備占用的資源(比如分配的緩存區等);有ednet_module_cleanup()來(lái)釋放偽網(wǎng)絡(luò )設備占用的資源。本文的內核部分模塊程序編譯后就是ed_device.o,加載后使用lsmod命令查看,模塊名就是ed_device。模塊ed_device的加載和注銷(xiāo)函數如圖2所示。


圖 2

當我們需要加載模塊的時(shí)候,我們只需要使用insmod命令,如果需要卸載模塊,我們使用rmmod命令。比如加載ed_device模塊,并且配置偽網(wǎng)絡(luò )接口IP地址為192.168.5.1

[root@localhost test]insmod ed_device.o,

[root@localhost test]ifconfig ed0 192.168.5.1 up

這時(shí)可以在/proc/net/dev 文件中看到有ed0偽網(wǎng)絡(luò )設備了。如果需要卸載ed_device模塊,應先停止其網(wǎng)絡(luò )數據發(fā)送和接收工作,然后卸載模塊:

[root@localhost test]ifconfig ed0 down

[root@localhost test]rmmod ed_device

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

linux相關(guān)文章:linux教程



上一頁(yè) 1 2 3 4 5 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>