`
highsky
  • 浏览: 276191 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Linux核心数据结构--device

阅读更多
系统中每个网络设备都用一个设备数据结构来表示。

struct device

{


  /*

   * This is the first field of the "visible" part of this structure

   * (i.e. as seen by users in the "Space.c" file).  It is the name

   * the interface.

   */

  char                    *name;


  /* I/O specific fields                                           */

  unsigned long           rmem_end;        /* shmem "recv" end     */

  unsigned long           rmem_start;      /* shmem "recv" start   */

  unsigned long           mem_end;         /* shared mem end       */

  unsigned long           mem_start;       /* shared mem start     */

  unsigned long           base_addr;       /* device I/O address   */

  unsigned char           irq;             /* device IRQ number    */



  /* Low-level status flags. */

  volatile unsigned char  start,           /* start an operation   */

                          interrupt;       /* interrupt arrived    */

  unsigned long           tbusy;           /* transmitter busy     */

  struct device           *next;



  /* The device initialization function. Called only once.         */

int                     (*init)(struct device *dev);



  /* Some hardware also needs these fields, but they are not part of

     the usual set specified in Space.c. */

  unsigned char           if_port;         /* Selectable AUI,TP,   */

  unsigned char           dma;             /* DMA channel          */



  struct enet_statistics* (*get_stats)(struct device *dev);



  /*

   * This marks the end of the "visible" part of the structure. All

   * fields hereafter are internal to the system, and may change at

   * will (read: may be cleaned up at will).

   */



  /* These may be needed for future network-power-down code.       */

  unsigned long           trans_start;     /* Time (jiffies) of

                                              last transmit        */

  unsigned long           last_rx;         /* Time of last Rx      */

unsigned short          flags;           /* interface flags (BSD)*/

  unsigned short          family;          /* address family ID    */

  unsigned short          metric;          /* routing metric       */

  unsigned short          mtu;             /* MTU value            */

  unsigned short          type;            /* hardware type        */

  unsigned short          hard_header_len; /* hardware hdr len     */

  void                    *priv;           /* private data         */



  /* Interface address info. */

  unsigned char           broadcast[MAX_ADDR_LEN];

  unsigned char           pad;              

  unsigned char           dev_addr[MAX_ADDR_LEN]; 

  unsigned char           addr_len;        /* hardware addr len    */

  unsigned long           pa_addr;         /* protocol address     */

  unsigned long           pa_brdaddr;      /* protocol broadcast addr*/

  unsigned long           pa_dstaddr;      /* protocol P-P other addr*/

  unsigned long           pa_mask;         /* protocol netmask     */

  unsigned short          pa_alen;         /* protocol address len */



  struct dev_mc_list      *mc_list;        /* M'cast mac addrs     */

  int                     mc_count;        /* No installed mcasts  */

 

  struct ip_mc_list       *ip_mc_list;     /* IP m'cast filter chain */

  __u32                   tx_queue_len;    /* Max frames per queue   */

   

  /* For load balancing driver pair support */

  unsigned long           pkt_queue;       /* Packets queued       */

  struct device           *slave;          /* Slave device         */

  struct net_alias_info   *alias_info;     /* main dev alias info  */

  struct net_alias        *my_alias;       /* alias devs           */

 

  /* Pointer to the interface buffers. */

  struct sk_buff_head     buffs[DEV_NUMBUFFS];


  /* Pointers to interface service routines. */

  int                     (*open)(struct device *dev);

  int                     (*stop)(struct device *dev);

  int                     (*hard_start_xmit) (struct sk_buff *skb,

                                              struct device *dev);

  int                     (*hard_header) (struct sk_buff *skb,

                                          struct device *dev,

                                          unsigned short type,

                                          void *daddr,

                                          void *saddr,

                                          unsigned len);

  int                     (*rebuild_header)(void *eth,

                                          struct device *dev,

                                          unsigned long raddr,

                                          struct sk_buff *skb);

  void                    (*set_multicast_list)(struct device *dev);

  int                     (*set_mac_address)(struct device *dev,

                                          void *addr);

  int                     (*do_ioctl)(struct device *dev,

                                          struct ifreq *ifr,

                                          int cmd);

  int                     (*set_config)(struct device *dev,

                                          struct ifmap *map);

  void                    (*header_cache_bind)(struct hh_cache **hhp,

                                          struct device *dev,

                                          unsigned short htype,

                                          __u32 daddr);

  void                    (*header_cache_update)(struct hh_cache *hh,

                                          struct device *dev,

                                          unsigned char *  haddr);

  int                     (*change_mtu)(struct device *dev,

                                          int new_mtu);

  struct iw_statistics*   (*get_wireless_stats)(struct device *dev);

};

分享到:
评论

相关推荐

    Linux-USB--device-drive.rar_Linux usb device_USB LINUX_USB drive

    标题中的“Linux-USB--device-drive”指的是Linux系统下的USB设备驱动,它主要负责处理与USB设备相关的软件交互。USB设备驱动通常包括设备枚举、配置、接口选择和端点数据传输等功能。设备枚举是USB系统启动时识别新...

    Linux Device Driver --Sensor

    ### Linux Device Driver -- Sensor: V4L2 API深入解析 #### 概述 在Linux操作系统中,设备驱动程序是连接硬件与操作系统的核心组件,确保硬件能够被操作系统识别并正确使用。针对摄像头这样的传感器设备,Linux...

    linux-device-driver-source-code.rar_linux device driver

    本压缩包"linux-device-driver-source-code.rar"提供了Linux设备驱动的源代码,帮助开发者深入理解设备驱动的工作原理和编程实践。 首先,我们要明白设备驱动的分类。Linux设备驱动通常分为字符设备驱动、块设备...

    linux device-tree-guide.pdf

    Device Tree在Linux系统中扮演着至关重要的角色,它是一种数据结构,用于描述硬件平台的拓扑和特性。在早期的嵌入式系统中,硬件信息通常由内核直接包含,这意味着内核必须针对每种特定的硬件配置进行编译。随着...

    UDP-Custom-Device.zip

    1. **.cdx** 文件:这是Custom Device的核心,定义了设备的结构、接口和行为。用户可以通过此文件设置输入、输出通道,定义数据类型和通信协议。 2. **.c** 和 **.h** 文件:这些是C代码文件,实现了Custom Device...

    嵌入式linux驱动开发教程--源代码.rar

    - **请求队列**:块设备驱动中的核心数据结构,用于处理I/O请求。 6. **中断处理与底半部** - **中断处理**:硬件事件触发中断,中断处理程序执行,快速响应硬件请求。 - **底半部机制**:中断处理后,复杂的...

    cudnn-8.0-linux-x64-v5.1

    标题 "cudnn-8.0-linux-x64-v5.1" 提供的信息主要涉及一个针对CUDA(Compute Unified Device Architecture)的深度学习库——CuDNN(CUDA Deep Neural Network)。这个版本是针对Linux操作系统,64位架构,并且是...

    cudnn-9.0-linux-x64-v7.tgz

    CUDNN(CUDA Deep Neural Network)是由NVIDIA公司开发的一款深度学习库,它与CUDA(Compute Unified Device Architecture)紧密集成,旨在加速深度神经网络(DNNs)在GPU上的运行速度。CUDNN v7.0是针对CUDA 9.0...

    Linux Device Drivers / Linux 设备驱动程序(第三版)

    2. **设备模型**:讲解Linux设备模型,包括总线、设备、驱动三者的关系,以及如何使用`struct device`,`struct device_driver`等数据结构来表示它们。 3. **字符设备驱动**:涵盖字符设备的注册、注销、读写操作,...

    linux数据结构[汇编].pdf

    Linux操作系统的核心在于其内核,而内核的高效运行离不开一系列关键的数据结构。这些数据结构在内存管理和系统调用中起到至关重要的作用。本章详细介绍了Linux内核中的一些主要数据结构,它们是构建和管理操作系统...

    Reading-and-comprehense-linux-Kernel-network-protocol-stack_y123456yz.tar.gz

    5. **网络协议栈的调度和队列管理**:如`netpoll`机制用于高效地处理网络事件,`sk_buff`(socket buffer)数据结构用于缓冲网络数据。 通过注释和流程分析,你可以看到每个函数的调用顺序,理解数据包是如何从物理...

    LINUX下多路径(multi-path)介绍及使用

    - 使用`yum –y install device-mapper device-mapper-multipath`来安装必要的软件包。 - 使用`chkconfig –level 2345 multipathd on`将multipathd设置为开机自启动。 - 通过`lsmod | grep dm_multipath`检查...

    arm-linux-gcc-3.4.1.tgz

    "include"则包含头文件,提供API定义和数据结构声明。 为了使用这个工具链,你需要将其解压并添加到环境变量PATH中,这样命令行就可以找到arm-linux-gcc和其他相关工具。通过这个工具链,你可以编写C/C++代码,并...

    introduction_linux_device_drivers.

    这三个面向构成了驱动程序的核心功能: 1. **硬件面向**:处理与物理设备之间的交互。 2. **内核面向**:注册到内核的子系统中,并响应各种事件(如文件打开、页错误、热插拔等)。 3. **用户面向**:通过设备文件来...

    Linux-2[1].6-device-model.rar_linux 设备模型

    在Linux操作系统中,设备模型是系统管理硬件设备...通过阅读"Linux 2[1].6 device model.pdf"这份文档,你可以深入了解这一模型的细节,包括它的设计原则、数据结构和API,这对于理解和开发Linux驱动程序是至关重要的。

    Linux驱动程序编写-中文

    在Linux中,驱动程序通常遵循统一的驱动模型(Unified Device Model),这有助于保持代码的模块化和可移植性。 驱动程序的开发流程通常包括以下步骤: 1. 设备识别:首先,驱动需要能够识别和枚举硬件设备,这通常...

Global site tag (gtag.js) - Google Analytics