<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)絡(luò )驅動(dòng)程序功能分析

Linux網(wǎng)絡(luò )驅動(dòng)程序功能分析

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

 //解析包的協(xié)議

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

  skb->protocol = eth_type_trans(skb, tp->dev);

  //把包送到協(xié)議層

  netif_rx(skb);

  //記錄收包時(shí)間

  tp->dev->last_rx = jiffies;

  }

  10.讀取包的網(wǎng)卡收發(fā)包的狀態(tài),統計數據

  static struct net_device_stats *tg3_get_stats(struct net_device *dev)

  {

  //從硬件相關(guān)的寄存器讀取數據,累加

  //stats->rx_packets, stats->tx_packets, stats->rx_bytes, stats->tx_bytes等

  }

  11.用戶(hù)的ioctl命令系統調用

  static int tg3_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)

  {

  struct mii_ioctl_data *data = (struct mii_ioctl_data *)ifr->ifr_data;

  switch(cmd) {

  //ethtool程序命令的調用

  case SIO*HTOOL:

  return tg3_ethtool_ioctl(dev, (void *) ifr->ifr_data);

  //mii程序命令的調用

  case SIOCGMIIREG: {

  err = tg3_readphy(tp, data->reg_num 0x1f, mii_regval)

  data->val_out = mii_regval;

  return err;

  }

  ……

  }

  }

  12.PCI設備的掛起和恢復函數

  static int tg3_suspend(struct pci_dev *pdev, u32 state)

  {

  //停用網(wǎng)卡的中斷寄存器

  tg3_disable_ints(tp);

  //停止網(wǎng)卡收發(fā)包

  netif_device_detach(dev);

  //停止網(wǎng)卡某些硬件,fireware的一些

  tg3_halt(tp);

  //設置網(wǎng)卡的電源狀態(tài)

  tg3_set_power_state(tp, state);

  }

  static int tg3_resume(struct pci_dev *pdev)

  {

  //恢復網(wǎng)卡電源

  tg3_set_power_state(tp, 0);

  //允許網(wǎng)卡收發(fā)包

  netif_device_attach(dev);

  //初始化收發(fā)包的緩沖區

  tg3_init_rings(tp);

  //初始化網(wǎng)卡硬件

  tg3_init_hw(tp);

  //打開(kāi)網(wǎng)卡中斷寄存器

  tg3_enable_ints(tp);

  }

  13.參數設置

  在里還提供一些方法供系統對設備的參數進(jìn)行設置和讀取信息。一般只有超級用戶(hù)(root)權限才能對設備參數進(jìn)行設置。設置方法有:

  tg3_set_mac_addr (dev->set_mac_address)

  當用戶(hù)調用ioctl類(lèi)型為SIOCSIFHWADDR時(shí)是要設置這個(gè)設備的mac地址。一般對mac地址的設置沒(méi)有太大意義的。

  dev->set_config()

  當用戶(hù)調用ioctl時(shí)類(lèi)型為SIOCSIFMAP時(shí),系統會(huì )調用的set_config方法

  用戶(hù)會(huì )傳遞一個(gè)ifmap結構包含需要的I/O、中斷等參數。

  總結:

  所有的遵循通用的接口。設計時(shí)采用的是面向對象的方法。一個(gè)設備就是一個(gè)對象(net_device 結構),它內部有自己的數據和方法。一個(gè)設備最基本的方法有初始化,發(fā)送和接收。

  驅動(dòng)程序的體系結構可以劃分為四層:

  網(wǎng)絡(luò )協(xié)議接口,網(wǎng)絡(luò )設備接口,設備驅動(dòng),網(wǎng)絡(luò )設備和網(wǎng)絡(luò )媒介層

  網(wǎng)絡(luò )驅動(dòng)程序,最主要的工作就是完成設備驅動(dòng)層。在中所有網(wǎng)絡(luò )設備都抽象為一個(gè)接口,這個(gè)接口提供了對所有網(wǎng)絡(luò )設備的操作集合。由數據結構struct net_device來(lái)表示網(wǎng)絡(luò )設備在內核中的運行情況,即網(wǎng)絡(luò )設備接口。它既包括純軟件網(wǎng)絡(luò )設備接口,如環(huán)路(Loopback),也包括硬件網(wǎng)絡(luò )設備接口,如以太網(wǎng)卡。而由以dev_base為頭指針的設備鏈表來(lái)集體管理所有網(wǎng)絡(luò )設備,該設備鏈表中的每個(gè)元素代表一個(gè)網(wǎng)絡(luò )設備接口。數據結構net_device中有很多供系統訪(fǎng)問(wèn)和協(xié)議層調用的設備方法,包括初始化,打開(kāi)和關(guān)閉網(wǎng)絡(luò )設備的open和stop函數,處理數據包發(fā)送的hard_start_xmit函數,以及中斷處理函數等。

  網(wǎng)絡(luò )設備在Linux里做專(zhuān)門(mén)的處理。Linux的網(wǎng)絡(luò )系統主要是基于BSD unix的socket機制。在系統和驅動(dòng)程序之間定義有專(zhuān)門(mén)的數據結構(sk_buff)進(jìn)行數據的傳遞。系統里支持對發(fā)送數據和接收數據的緩存,提供流量控制機制,提供對多協(xié)議的支持。

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

上一頁(yè) 1 2 3 下一頁(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>