新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > Linux串口上網的程序實現方法

        Linux串口上網的程序實現方法

        作者: 時間:2011-05-10 來源:網絡 收藏

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

        本文引用地址:http://www.104case.com/article/150775.htm

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

        Linux簡單串口上網原理

        簡單串口上網的原理如圖1所示。


        圖 1

        Linux Box A 和 Linux Box B 是兩個安裝有Linux操作系統的終端(可以是PC,也可以是嵌入式設備),它們通過一條串口通信線(null modem cable line)連接。控制串口通信的服務進程server讀和寫兩個字符設備:發送字符設備sending device和接收字符設備receiving device。

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

        Linux串口上網設備加載和注銷形式

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

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

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


        圖 2

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

        [root@localhost test]insmod ed_device.o,

        [root@localhost test]ifconfig ed0 192.168.5.1 up

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

        [root@localhost test]ifconfig ed0 down

        [root@localhost test]rmmod ed_device

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

        linux相關文章:linux教程



        上一頁 1 2 3 4 5 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 香格里拉县| 思茅市| 虎林市| 永福县| 抚松县| 井冈山市| 永修县| 闽侯县| 福安市| 宁强县| 卓资县| 定日县| 赤水市| 江北区| 赤壁市| 鄱阳县| 唐河县| 湖北省| 宁波市| 庆安县| 安平县| 城步| 贵州省| 元谋县| 漳平市| 娄烦县| 井研县| 兰西县| 南郑县| 安达市| 板桥市| 将乐县| 碌曲县| 泗水县| 施甸县| 新闻| 屏南县| 怀集县| 桂东县| 天峨县| 云林县|