深入理解网络技术内幕 阅读笔记(四)

第五章 网络设备初始化


一个网络设备可用,就必须被认可,并且关联正确的驱动程序。
初始化的几个阶段:
        硬件初始化
                由设备驱动程序和通用总线合作完成。驱动程序把每个设备的功能配置成IRQ和I/O地址,使其能与内核交互。
        软件初始化
                在设备能够被使用之前,依赖于所开启和配置的网络协议而定,用户需要提供其他一些配置参数,如IP地址等。
        功能初始化
                因为有些选项需要针对每个设备进行配置,因此设备初始化引导必须负责这些选项。
硬件中断
        每个中断事件都会执行一个函数,被成为中断处理例程。一般而言,当设备驱动程序注册一个NIC时,会请求并分派一个IRQ。注册和IRQ使用与体系结构相关的request_irq和free_irq函数。
  • 中断类型
  • 接收一帧
  • 传输失败
  • DMA传输已成功完成
  • 设备有足够的内存处理新传输


设备处理层初始化
网络初始化代码的重要部分,在引导期间由定义在net/core/dev.c中的net_dev_init完成。
  • 由两个软中断(NET_TX_SOFTIRQ, NET_RX_SOFTIRQ)所使用的对应各个CPU的数据结构(per-cpu变量)被初始化(struct softnet_data)。
  • 当内核被编译为支持/proc文件系统时,有一些文件会通过dev_proc_init和dev_mcast_init添加到/proc。
  • 用以协议无光的目的缓存,会以dst_init做初始化 。
  • 协议处理例程向量ptype_base初始化,用于分离入口流量的多路合并传输。

你可能感兴趣的:(Linux,网络)