色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于pSoSystem操作系統實現通用網絡代碼框架的設計

電子設計 ? 來源:廈門大學學報:自然科學 ? 作者:陳海華,胡林,楊 ? 2021-05-27 10:40 ? 次閱讀

作者:陳海華,胡林,楊晨暉

pSoSystem操作系統簡介

pSoSystem是一種專門用以嵌入式處理器的高性能的、模塊化的操作系統?;陂_放操作系統標準,它提供了一種復雜的多任務運行環境。同時,它也提供了一系列的集成開發工具,這些開發工具可用于Unix系統,也可用于Windows系統。另外,由于pSoSystem是一種模塊化的操作系統,所以,開發人員可以根據需要,選用不同的操作系統模塊。這樣,就使得我們沒有必要把一個龐大的操作系統全部加載到嵌入式系統設備上。比如說,如果我們的應用系統不需要支持文件功能,則可以不用加載文件系統。這樣,就可以大大縮減操作系統的尺寸.pSoSystem的整個系統結構如圖1所示。

圖1pSOS系統框圖

pSoSystem網絡設備驅動程序概述

網絡驅動在pSoSystem里有作專門的處理,它不是直接和pSOS+內核模塊的I/Osupervisor打交道,而是和pNA+網絡模塊打交道。和I/O監管層一樣,為了屏蔽具體硬件之間的差異,pNA+也為網絡驅動程序提供了一個中間層,稱之為NI(NetworkInterface)層。在NI層,它為上層提供了一系列的標準網絡接口函數(如網卡初始化,網絡包發送等),這些接口函數是在網絡驅動程序里實現,而由pNA+模塊里的其它網絡層調用。要編寫網絡驅程,就是要具體實現這幾個接口函數。圖2是網絡驅動程序在pSoSystem中的模型圖。

圖2網絡驅動模型

通用網絡驅動模型的設計

通用網絡驅動模型的整體設計思想,就是將獨立于具體硬件的操作抽象出來,以形成一個通用的代碼框架。具體來說,主要包括以下幾個部分:

a) 底層驅動和上層應用的分離層次模型設計;

b) 由上述分離層次所得到的相應接口函數的設計;

c) 網卡數據包接收、發送的抽象代碼框架的設計;

下面,本文將就上述3個方面的設計作一個較為全面的分析。

底層驅動和上層應用的分離層次模型設計

顯然,這一塊的設計是整個驅動模型設計的首要部分。只有將底層驅動和上層應用有效地分離出來,才能保證代碼的獨立性與重用性,從而也使得驅動程序的開發者不用過多地關心上層應用,符合現代軟件的設計思想。關于這一部分的設計,pSoSys2tem已經幫助我們完成,其所提供的網絡驅動模型就是一個典型的軟件分層設計實例。詳情請看圖2.

接口函數的設計

一般來說,根據上述所設計的驅動程序分層模型,都會為上下兩層的溝通提供一些標準的接口函數。顯然,這些接口函數的實現,大部分是和底層硬件具體相關的,但其操作步驟卻是大同小異的。因此,在我們的通用驅動模型框架里,就是要抽象出獨立于具體硬件的一般操作,以形成一個通用的代碼框架,在這里,我們一般就以偽C代碼形式來給出各個接口函數的一般實現。

(1)NiLan接口函數的設計與分析

NiLan是pNA+層和網絡驅動掛接的一個最為重要的接口函數。實際上,早在pNA+模塊的加載過程中,pNA+就安裝了此函數,其相應的偽C代碼如下:

UCHAR *SetUpNI(UCHAR *FreeMemPtr)

{InstallNi((int(*)()) Nilan, IPaddr,

BSP-LAN1-MTU,BSP-LAN1-HWALEN,BSP-LAN1-FLAGS,SysVars.Lan1SubnetMask,0);

/*通過這個函數的調用,將NiLan函數安裝到了pNA+模塊中去了*/

FreeMemPtr=SetupLanParams(BSP-LAN1-PKB,FreeMemPtr);

/*在pNA+模塊里為網卡要用到的接收與發送等緩存分配空間*/

}

代碼1

通過這個函數,pNA+層可以完成所有有關網絡應用的調用。其具體做法就是:由pNA+層傳入不同的功能號,以達到調用相應具體功能函數的目的,其相應的偽C代碼如下:

longNiLan(ULONGfunction, union nientry*p)

{

if(function= =NI-INIT)

{

return ni-init();

}else

{

/*根據功能號,調用相應的功能函數*/

switch(function)

caseNI-SEND:調用ni-send();break;

case其它功能號:調用其它功能函數;break;

}

}

代碼2

(2)ni-init函數的設計與分析

此函數主要是用來配置和初始化網卡的各種硬件和軟件資源,具體功能如下所述:

a)初始化buffers,主要是將其鏈成鏈表,以方便操作;

b)初始化網卡相關的寄存器,最重要的就是收發寄存器的首址RxDesc和TxDesc;

c)初始化收發寄存器,主要是將其鏈成隊列,以方便內存的循環使用;

staticlongni-init(void)

{

InitBuffers();/*初始化buffer,主要是將

其鏈成鏈表*/

InstallIsr();/*安裝中斷服務程序,最重要

的就是網絡數據接收中斷*/

InitDescps()/*將收發寄存器鏈成隊列*/

lanInit();/*初始化網卡的各個寄存器*/

}

代碼3

網卡數據包收發代碼框架的設計與分析

設計通用網卡驅動模型,顯然,數據包的收發是最為重要的與具體硬件有關的操作,如何去除具體硬件的相關性,而抽象出獨立于各種硬件的一般的收發代碼,則顯得非常重要。下面,將就網卡收發過程的一般步驟進行分析。

(1)網卡數據包的發送過程其具體步驟如下所示

a)應用程序為了發送數據,調用相應的套接字;

b)套接字的調用引發pNA+的系統調用,pNA+層則調用NiLan函數將上層的數據傳給NI層;NiLan的具體實現參看代碼2,這里,主要解釋一下其傳入的參數;function:功能號,NiLan將根據不同的功能號調用合適的NI層的函數;p:NI層的入口點,即上層和下層交換數據的地方,發送數據時,由這個入口點將相應的數據由pNA+層傳入NI層,同樣,接收數據時,也是由這個入口點將NI層收到的數據上傳給pNA+層。

c)NI層收到pNA+層傳入的數據之后,則將待發送數據組裝成數據幀,以便接下來移

入網卡的發送寄存器發送出去,其相應的實現代碼如下所示:

staticvoidni-send(char*hwa-ptr,char*pkbpt

r,USHORTtype)

{

tx-hdr=InitMblk();/3初始化三元組,一個三元組里存放一個數據幀*/

FillFrameHead();/*填充幀頭*/

TxFillDesc();/*調用TxFillDesc()填充相

應的寄存器以把數據發送出去*/

}

代碼4

(2)網卡數據包的接收過程

網卡接收數據的過程不同于發送數據的過程,發送數據時,有一個獨立的發送數據的函數,而在網卡的接收數據的過程中,并不存在這樣一個獨立的函數,網卡數據的接收是通過中斷服務程序來完成的,其具體步驟如下:

a)網卡產生接收數據的中斷;

b)中斷導致ni-isr()中斷服務程序的調用,而在ni-isr()中,調用真正的中斷響應程序

ni-poll(),ni-poll()則根據不同的中斷事件,調用具體的中斷服務程序;

static voidni-isr(void)

{

ienter();

AppModel-run-on-sstack((Pointer)nipoll, Null);

ireturn();

}

static voidni-poll(void)

{

for(;;)

{

if(接收數據中斷)RxBufRcv();

if(發送數據中斷)TxFillDesc();

if(其它中斷)。..。..

}

}

代碼5

c)對于接收數據的中斷而言,在ni-poll()函數里調用的中斷響應函數就是RxBufRev(),這個函數是真正負責網卡數據接收的地方,其工作原理就是讀取網卡相應的接收寄存器,并通知pNA+層將數據取走;

staticvoidRxBufRcv(void)

{

for(;;)

{

good=CheckFrame()/*判斷接收的數據包是否出錯*/

if(good==TRUE)/*如果數據包沒有出錯,則將它交給pNA+層*/

{

/*建立三元組,并通知pNA+層*/

msgBlk=NiFuncs.esballoc((void3)&pktAddr-》type,dataLen,0,&frtn);

Announce(type,msgBlk,dataLen,IfNum);

}

}

}

代碼6

d)通過RxBufRec()函數將數據從網卡中收下后,它最后還要再調用Announce()函數

通知pNA+模塊將數據取走。至此,一個數據包的接收過程全部完成;注:Announce是一個回調函數,即在pNA+模塊中定義的,由NI層調用的函數;

驅動程序的安裝

在pSOS中,一般的驅動程序安裝是通過修改drv-conf.c(pSoSystem操作系統里的一個系統配置文件)中的InstallDriver來完成。而網絡驅動程序在pSoSystem里有作專門的處理,它是通過調用drvconf.c中的SetUpNi函數來實現的,而SetUpNi則會調用pSoSystem所提供的InstallDriver來最后完成網絡驅動程序的安裝。當然,最后還需要重新編譯pSoSystem的內核,從而將我們的驅動程序模塊加載到pSoSystem系統模塊中。具體實現可以參看前面的代碼1.

結束語

本文只給出了通用網絡驅動模型的最重要部分的設計與分析,至于其它一些細節函數,限于篇幅,本文未做詳述。有興趣的讀者,可以進一步參看文末所附的參考文獻。最后,希望本文能對有心開發類似應用的工程技術人員有所幫助。

責任編輯:gt

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    19336

    瀏覽量

    230199
  • 嵌入式
    +關注

    關注

    5086

    文章

    19143

    瀏覽量

    306045
  • 操作系統
    +關注

    關注

    37

    文章

    6847

    瀏覽量

    123420
收藏 人收藏

    評論

    相關推薦

    一個判斷操作系統的VBScript腳本代碼

    西門子觸摸屏基于不同的Windows操作系統,有的是標準的Windows系統,有的是嵌入式操作系統Windows CE。這兩種系統對于VBScript腳本的支持不同,因此在使用腳本編程
    發表于 09-21 14:56 ?604次閱讀

    嵌入式操作系統通用硬件抽象層設計

    層API能夠在下層硬件平臺上實現,那么操作系統和應用程序的代碼就可以移植。圖1 引入HAL后的嵌入式系統結構這樣,原先嵌入式系統的3層結構逐
    發表于 12-07 10:30

    嵌入式操作系統怎么實現網絡加載?

    在復雜的應用系統中通常都需要嵌入式操作系統的支持,這樣嵌入式操作系統鏡像文件的尺寸往往就會變得比較大??梢赃x擇通過網絡將嵌入式操作系統加載到
    發表于 03-18 08:20

    如何實現嵌入式操作系統網絡加載?

    如何實現嵌入式操作系統網絡加載?
    發表于 04-28 06:42

    Firefly通過網絡遠程掛載操作系統設計實現

    技術方案是通過NFS(Network File System)網絡文件系統從而實現了遠程掛載操作系統。例如:用戶可把系統文件集中放置在NFS
    發表于 04-07 16:08

    很小的ARM操作系統代碼

    很小的ARM操作系統代碼
    發表于 12-26 00:21 ?48次下載
    很小的ARM<b class='flag-5'>操作系統</b>源<b class='flag-5'>代碼</b>

    簡述幾種實時多任務操作系統

    從整體上介紹VxWorks、pSOSystem、Hopen OS、Pencil、CMX、PTXC 幾種實時操作系統(RTOS)及其特點, 有助于RTOS 選型。
    發表于 05-13 15:44 ?17次下載

    計算機網絡網絡操作系統

    理解網絡操作系統的功能與作用,了解常用網絡操作系統如WINDOWS操作系統、LINUX 操作系統
    發表于 08-05 17:50 ?3次下載

    操作系統網絡計算機的啟動研究

    介紹了一種基于集成的方法將多個單操作系統NC 的啟動程序代碼整合成一個多操作系統NC 啟動環境的方法。文中著重介紹了單操作系統NC 的啟動原理及多
    發表于 09-02 11:21 ?13次下載

    嵌入式操作系統通用硬件抽象層設計

    摘要 基于嵌入式操作系統硬件抽象層理論,設計一種用于嵌入式操作系統內核開發的通用硬件抽象層平臺。通用硬件抽象層能夠為嵌入式操作系統內核的設計
    發表于 03-29 15:16 ?1206次閱讀
    嵌入式<b class='flag-5'>操作系統</b>的<b class='flag-5'>通用</b>硬件抽象層設計

    網絡操作系統

    網絡操作系統           
    發表于 12-17 11:50 ?732次閱讀

    什么是網絡操作系統(NOS)

    什么是網絡操作系統(NOS) 網絡操作系統(NOS)是網絡的心臟和靈魂,是向網絡計算機提供服務
    發表于 04-03 15:07 ?2951次閱讀

    嵌入式實時操作系統pSOSystem系統

    This manual is part of a documentation set that describes pSOSystem, the modular, high-performance
    發表于 05-09 15:55 ?28次下載

    嵌入式操作系統網絡加載實現

      在復雜的應用系統中通常都需要嵌入式操作系統的支持,這樣嵌入式操作系統鏡像文件的尺寸往往就會變得比較大??梢赃x擇通過網絡將嵌入式操作系統
    發表于 08-25 14:02 ?1270次閱讀
    嵌入式<b class='flag-5'>操作系統</b>的<b class='flag-5'>網絡</b>加載<b class='flag-5'>實現</b>

    一個簡單實用的MCU程序框架(非操作系統,簡單調度任務) - 總體介紹

    。實際上,在我的使用過程中發現,應用這類實時操作系統的場景其實非常小,更多的應用無需操作系統,要做的只有簡單的幾個事情。?在無操作系統的程序上,如果沒有一個框架,
    發表于 12-08 14:06 ?6次下載
    一個簡單實用的MCU程序<b class='flag-5'>框架</b>(非<b class='flag-5'>操作系統</b>,簡單調度任務) - 總體介紹
    主站蜘蛛池模板: 成年视频xxxxxx在线| 九九视频在线观看视频6| 免费亚洲视频在线观看| 最近中文字幕2019免费版| 免费精品国产日韩热久久| xx顶级欧美熟妞xxhd| 午夜国产精品视频在线| 江苏电台在线收听| 99久久精品久久久久久清纯| 日韩精品无码免费专区| 黑吊大战白xxxxxx| 99久久精品免费看国产免费| 她也色在线视频站| 久久精品黄AA片一区二区三区| brazzers欧美最新版视频| 午夜国产精品视频在线| 美女扒开尿口让男生添动态图| 国产99对白在线播放| 在线播放一区| 少妇伦子伦精品无码| 久久精品av| 帝王受PLAY龙椅高肉NP| 一本道无码字幕在线看| 欧美美女性生活| 好大好爽好深舒服死了| jzz大全18| 月夜直播免费看| 翁公咬着小娇乳H边走边欢A| 猫咪www958ii| 国产色情短视频在线网站| 99精品视频在线观看re| 亚洲色偷偷偷网站色偷一区人人藻 | 久久国产精品无码视欧美| 成人在线不卡视频| 永久adc视频年龄确认| 特级淫片大乳女子高清视频 | 精品粉嫩BBWBBZBBW| 俄罗斯videosbest8| 最新国自产拍天天更新| 亚洲精品无码AV中文字幕蜜桃| 秋霞伦理机在线看片|