a一级爱做片免费观看欧美,久久国产一区二区,日本一二三区免费,久草视频手机在线观看

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > Linux網絡驅動程序功能分析

Linux網絡驅動程序功能分析

作者: 時間:2012-05-30 來源:網絡 收藏

 //解析包的協議

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

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

  //把包送到協議層

  netif_rx(skb);

  //記錄收包時間

  tp->dev->last_rx = jiffies;

  }

  10.讀取包的網卡收發包的狀態,統計數據

  static struct net_device_stats *tg3_get_stats(struct net_device *dev)

  {

  //從硬件相關的寄存器讀取數據,累加

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

  }

  11.用戶的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)

  {

  //停用網卡的中斷寄存器

  tg3_disable_ints(tp);

  //停止網卡收發包

  netif_device_detach(dev);

  //停止網卡某些硬件,fireware的一些

  tg3_halt(tp);

  //設置網卡的電源狀態

  tg3_set_power_state(tp, state);

  }

  static int tg3_resume(struct pci_dev *pdev)

  {

  //恢復網卡電源

  tg3_set_power_state(tp, 0);

  //允許網卡收發包

  netif_device_attach(dev);

  //初始化收發包的緩沖區

  tg3_init_rings(tp);

  //初始化網卡硬件

  tg3_init_hw(tp);

  //打開網卡中斷寄存器

  tg3_enable_ints(tp);

  }

  13.參數設置

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

  tg3_set_mac_addr (dev->set_mac_address)

  當用戶調用ioctl類型為SIOCSIFHWADDR時是要設置這個設備的mac地址。一般對mac地址的設置沒有太大意義的。

  dev->set_config()

  當用戶調用ioctl時類型為SIOCSIFMAP時,系統會調用的set_config方法

  用戶會傳遞一個ifmap結構包含需要的I/O、中斷等參數。

  總結:

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

  驅動程序的體系結構可以劃分為四層:

  網絡協議接口,網絡設備接口,設備驅動,網絡設備和網絡媒介層

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

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

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

上一頁 1 2 3 下一頁

評論


相關推薦

技術專區

關閉