VxWorks網路驅動配置及分析

2021-06-19 19:26:56 字數 4945 閱讀 4156

vxworks支援兩種形式的網路驅動,一種是bsd驅動支援通用的bsd4.4網路,api,結構等和大多數bsd網路的驅動類似.另一種是end網路驅動,是vxworks獨有的,根據vxworks mux介面程式設計,不過end驅動在底層也要轉換成bsd的形式.

vxworks網路驅動可參見vxworks網路驅動

1.bsd4.4網路驅動設定.

網路裝置驅動的呼叫主要在/target/src/config/usrnetwork.c檔案中,下面說明bsd4.4驅動在vxworks系統呼叫.

主要呼叫過程如下:

vxworks系統執行的第乙個任務target\config\all\usrconfig.c檔案中 usrroot()*****==>>target\src\config\usrnetwork.c檔案中的usrnetinit 

( )通過陣列表netif初始化相應的bsd網絡卡驅動.

在usrnetwork.c中的呼叫過程如下:

usrnetinit()函式中呼叫usrnetifattach():

#ifdef include_bsd

if (!attached)

#endif

usrnetifattach ()函式中呼叫陣列表usrnetiftbl

for (pnif =usrnetiftbl; pnif->ifname != 0; pnif++)

網路bsd驅動陣列表usrnetiftbl在檔案/target/src/config/usrnetwork.c中的定義初始化:

local netif netif = 

,#endif

#ifdef 

include_fei 

,#endif 

#ifdef 

include_ex 

,#endif 

#ifdef 

include_enp 

,#endif 

設定方法:

從以上可以看出bsd網路驅動只需在bsp配置檔案config.h中將網路(#defineinclude_network)bsd網絡卡巨集定義(#defineinclude_***)和一些i/o引數(一般不需要)加入,則在檔案usrnetwork.c中進行相應的初始化.

如: 在vxworks加入支援intel的網絡卡驅動.在config.h中加入"#define 

include_fei".

主要網絡卡定義如下:

#define 

include_ene 

#define 

include_elt 

#define 

include_esmc 

#define 

include_fei 

#define 

include_elc 

#define 

include_eex 

#define 

include_eex32 

#define 

include_ex 

#define 

include_enp 

#define 

include_sm_net 

#define 

include_sm_seq_addr 

#define 

include_el_3c90x_end

#define 

include_ln_97x_end

....

2.end網路驅動設定.

end網路裝置的初始化主要通過定義在檔案confignet.h中的乙個陣列表實現.初始化網路時muxdevload()會按這個表的定義把end初始化安裝到vxworks系統.

主要呼叫過程:

vxworks系統執行的第乙個任務target\config\all\usrconfig.c檔案中 usrroot()*****==>>target\src\config\usrnetwork.c檔案(該檔案初始化tcp/ip)中 usrnetinit(boot_line_adrs)(該函式作用是新增mux end)*****===>>pcooki = pcookie = muxdevload(pdevtbl->unit,.....)其中pdevtbl在bsp網路配置檔案confignet.h中定義.end_tbl_entry enddevtbl=,該錶定義了網路裝置的具體引數.

confignet.h部分定義如下所示:

#define dec_load_func dec21x40endload 

#define dec_buff_loan 1

# define dec_load_string

"0x81020000:0x80000000:0x12:0x12:-1:-1:-1:0:0x80800

000"

import end_obj* dec_load_func (char*, void*);

end_tbl_entry enddevtbl =,,

};

設定方法:

由以上可看出在vxworks新增end網路驅動

在檔案config.h中新增"#defineinclude_network"和"#defineinclude_end".

confignet.h中加入end驅動的入口函式"#define***_load_func  ***xxendload"和一些相關的初始化字串.

這樣就會在生成bsp包含end/mux,系統網路初始化呼叫函式muxdevload()會更據這個表初始化end網路.

檔案confignet.c關於end驅動初始化的主要內容:

#ifdef include_end

import int 

ipattach ();

import end_tbl_entry enddevtbl; 

#endif

#ifdef include_end  

int count;

end_tbl_entry* pdevtbl;  

end_obj* pcookie = null;

end_obj* pend;

#endif

#if defined(include_end)

muxmaxbinds = mux_max_binds; 

if (muxlibinit() == error)

關於default_boot_line 的解釋

default_boot_line的原意是為沒有nvram的target設計的,這樣使用者就不需要在每次系統啟動是手工輸入這些引數了.

系統啟動網路時***endload()會解釋這一行並按這一行的定義進行載入.

emac(0,0) : 啟動裝置,可是是軟盤,硬碟,pcmcia卡等 其他的裝置名稱如:

fd為軟盤,(0,0)表示第乙個軟碟機,3.5寸盤.

dc則表示從dec 21x4x 晶元啟動,即系統有nvram存在,這種方式現在已不採用.

elpci表示啟動裝置為3com etherlink xl pci網絡卡.

fei:intel 82559 etherexpress網絡卡.

ene: ne2000網絡卡

elt: 3com乙太網卡

eex: intel網絡卡

ata: ata/ide 硬碟 ............

405gp: 主機名 

vxworks 從主機載入的vxworks檔案 

h=172.16.1.159 

主機的ip位址 

e=172.16.254.52 目標機的ip位址,若網路啟動target server時,這個ip必須和主機上target server配置的target ip位址一致,且設定back end選項為wdbrpc

u=***  使用者名稱,pw=***  密碼: 若通過網路載入除錯時,主機的ftp伺服器和目標機的使用者名稱和密碼必須相同 

tn=vxtarget 目標機名稱

#define default_boot_line \

"emac(0,0)405gp:vxworks h=172.16.1.159 e=172.16.254.52 \

u=*** pw=*** tn=vxtarget"

網路配置及操作

linux 系統中最常用的網路配置命令包括 ifconfig route。其中ifconfig 用來檢視和配置網路介面 通常是網絡卡資訊 包括網路介面裝置的ip 位址 掩碼等。route 用來管理linux 系統核心中的路由表,它最大的用途就是用來設定靜態的路由表項,通常是在系統用 ifconfig...

linux網路裝置驅動DM9000驅動分析(4)

14 接受資料 在中斷函式中,我們可以看到呼叫了dm9000 rx 接收資料並存入 skbuff 並提交協議上一層。1 首先看看下面這個結構體,這個結構體按照 dm9000 的接收格式封裝了 dm9000 接收的資料報資訊 struct dm9000 rxhdr packed 2 接收函式dm900...

Linux網路知識及配置

1 網路基礎知識 1 私有ip位址 2 linux網路配置 1 修改主機名 三步 hostname oldboylinux vi etc sysconfig network etc hosts裡對應的主機名。2 網絡卡配置檔案說明 root jackroo cat etc sysconfig net...