当前位置: 首页 > news >正文

投资公司网站建设成都微信网站建设

投资公司网站建设,成都微信网站建设,上海网页制作服务,手机做简单的网站文章目录什么时候进行的设备初始化#xff1f;设备注册和初始化NIC#xff08;网卡 Network Interface Card#xff09;初始化的基本目标设备与内核之间的交互硬件中断中断类型传送节流方式为了改善效率中断共享IRQ处理函数映射的组织irqaction结构体存储方式什么时候进行的… 文章目录什么时候进行的设备初始化设备注册和初始化NIC网卡 Network Interface Card初始化的基本目标设备与内核之间的交互硬件中断中断类型传送节流方式为了改善效率中断共享IRQ处理函数映射的组织irqaction结构体存储方式什么时候进行的设备初始化 内核初始化图 1、当内核引导时会执行start_kernel对一些子系统做初始化 2、start_kernel终止前会调用init内核线程由其负责初始化的后续工作。 初始化任务中有三个部分 1、引导期间选项   调用两次parse_args一次是直接调用而另一次是通过parse_early_param间接调用以处理引导加载程序bootloaser在引导期间传给内核的配置参数。 2、中断和定时器   硬中断和软中断分别由init_IRQ和softirq_init做初始化。 3、初始化函数   内核子系统及内建的设备驱动程序由do_initcalls初始化。free_init_mem会释放一块被无用程序所持有的内容。 run_init_process确定在系统上运行的第一进程也就是其他进程的父进程PID为1一直运行直到系统做完工作。 通常运行程序是Init管理员可以通过init引导期间选项指定另一个不同程序。 不提供选项内核会从一组众所周知的位置去执行init命令如果找不到init就会发生内核panic 设备注册和初始化 一个网络设备可以用就必须被内核认可并且关联正确的驱动程序。 驱动程序把驱动设备所需的所有信息存储在私有数据结构中然后与其他需要此设备的内核组件交互。 1、注册和初始化任务的一部分由内核负责 2、其他部分由设备驱动程序负责 初始化分为硬件初始化、软件初始化、功能初始化 1、硬件初始化   由设备驱动程序和通用总线层例PCI或USB合作完成。驱动有时会通过用户提供的参数协调把每个设别的这类功能配置成IRQ和I/O地址使其能与内核交互。 2、软件初始化   在设备能使用之前需要依赖开启和配置的网络协议用户需要提供IP地址等配置信息等。 3、功能初始化   针对每个网络设备的配置。例流量控制可以决定封包加入及退出设备出口队列的方式。 NIC网卡 Network Interface Card初始化的基本目标 Linux内核中每个设备都有一个net_device数据结构表示。net_device的分配以及内部字段的初始化部分的是由设备驱动程序完成部分是由内核函数完成。 设备驱动程序如何分配建立设备/内核通信所需的资源 1、IRQ线   NIC必须被分配一个IRQ用于设备与内核之间的交互。虚拟设备不需要分配一个IRQ例如内环设备因其活动都在内部进行。   /proc/interrupts文件可用于观察当前分派状态 2、I/O端口和内存注册   驱动程序将其设备的一个内存区域配置寄存器映射到系统内存使得驱动程序的读/写操作可以通过系统内存地址直接进行简化代码。I/O端口和内存分别使用request_region和release_region注册和释放 设备与内核之间的交互 几乎所有设备包括NIC都采用两种与内核的交互方式 1、轮询   由内核端的驱动定期检查设备状态查看是否发生了什么事情 2、中断   由设备端驱动。当设备需要内核注意时会向内核发送出一个硬件信号产生中断事件 硬件中断 每个中断事件都会运行一个函数被称为中断处理函数而中断处理函数必须按照设备的所需进行裁剪因此由设备驱动程序安装。当设备驱动程序注册一个NIC时会请求并分派一个IRQ。 static inline int __must_check request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,const char *name, void *dev) void free_irq(unsigned int irq, void *dev_id)request_irq函数会注册一个处理函数。首先确保所请求的中断是一个有效的中断而且还没分配给另一个设备除非这两个设备能够共享IRQ free_irq函数会删除处理函数给定的设备由dev_id标识。如果没有其他设备注册在该IRQ线就关闭IRQ 在内核接收到中断通知时会使用IRQ编号找出该驱动程序的中断处理函数并执行。为了找到处理函数内核会把IRQ编号和函数处理函数之间的相连接关系存储在一张全局表中。相连关系可以是一对一或一对多。 中断类型 通过中断NIC能够告知其驱动程序几种不同的事件 1、接收一帧   这是常见标准的情况 2、传输失败   这种事件只有当被为二进制指数后退功能失败时才由Ethernet设备产生由NIC在硬件层实现。驱动程序不会把这种通知信息转送到那些较高层的网络层这些网络层会通过其他方式获取到传输失败。 3、DMA传输已成功完成   使用同步传输时无DMA当该帧已上传至NIC驱动程序会立刻知道   使用DMA时使用异步传输设备驱动程序必须等待NIC发出明确的中断事件。 4、设备有足够内存处理新传输   当出口队列没有足够空间保存一个最大尺寸的帧时NIC设备驱动程序会停止出口队列而关闭传输。   当内存可用时该队列又会再次开启 传送节流方式为了改善效率 在系统中设备驱动程序会在队列空间缺乏时关闭传输同时要求NIC当可用内存大于给定量时设备的MTU发出一个中断然后当中断到来时重启传输。 例 // 平台 RK3568 // drivers/net/ethernet/3com/3c509.c static netdev_tx_t el3_start_xmit(struct sk_buff *skb, struct net_device *dev) {netif_stop_queue (dev);......if (inw(ioaddr TX_FREE) 1536)netif_start_queue(dev);else/* Interrupt us when the FIFO has room for max-sized packet. */outw(SetTxThreshold 1536, ioaddr EL3_CMD);...... }驱动程序可以用netif_stop_queue停止设备队列以此能禁止内核提交后续的传输请求。 驱动程序会检查该设备的内存是否足够的内存容纳一个1536个字节的包。 如果有驱动程序会启动队列允许内核再次提交传输请求。 否则就会指示设备配置寄存器当条件满足时产生一个中断。中断处理函数将使用netif_start_queue重启设备队列。 中断共享 IRQ线是有限的资源。添加系统能容纳设备数目的简单方式就是允许几台设备共享同一个IRQ。 每个设备会针对该IRQ将其自己的处理函数注册给内核再由内核启用这些同一个共享IRQ的设备的所有函数。而不是由中断通知寻找正确的设备再启用其处理函数。 一组设备共享一条IRQ线时所有这些设备的设备驱动程序都必须能力处理共享的IRQ换言之每当一个设备注册要使用一条IRQ线时就必须明确说明其是否支持中断共享。 当另一设备试图注册同一个IRQ编号时如果此设备或者该IRQ当前所分派的设备无法共享IRQ就会被拒绝。 IRQ处理函数映射的组织 IRQ处理函数的映射存储在一个向量表中每一个IRQ都对应一个处理函数列表。 只有当多台设备共享同一个IRQ时一个列表才会有一个以上的元素。向量的尺寸取决于具体的体系结构可以从15变化到200以上。 // 定义在include/linux/interrupt.h struct irqaction// 定义在include/linux/irqdesc.h struct irq_desc// kernel/irq/manage.c static int __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new)在之前介绍的硬件中断函数request_irq函数就是包含__setup_irq的包裹函数用一个irqaction结构体输入然后将其插入至一个全局变量irq_desc。 handle_IRQ_event 处理中断并将其传给驱动程序的内核函数是依赖irq_desc结构体的。 irqaction结构体存储方式 对一个可能的IRQ都有一个irq_desc实例每个成功注册的IRQ处理函数都有一个irqaction实例。irq_desc尺寸是由结构体中NR_IRQS指定 当给定IRQ编号也就是irq_desc向量的给定元素有一个以上的irqaction实例时就需要中断共享。 irqaction数据结构的字段中存储哪些与IRQ处理例程相关的信息 // 平台RK3288 typedef irqreturn_t (*irq_handler_t)(int, void *); irq_handler_t handler; // handler成员为中断处理函数由设备驱动程序所提供的函数用于处理中断的通知信息 // 传入的参数 int irq产生此通知信息的IRQ编号void *dev_id设备标识符。同一个驱动程序可能同时要负责不同的设备需要设备ID来正确处理通知信息unsigned int irq; // 一组标识取值为IRQF_* 定义在include/linux/interrupt.h // IRQF_SHARED 当置位时设备驱动程序可以处理共享的IRQ // IRQF_IRQPOLL 中断用于轮询(出于性能考虑只有首先在共享中断中注册的中断才被考虑)void *dev_id // 与此设备相关联的net_device数据结构的指针。声明为void *的原因是不仅仅只有NIC设备使用IRQ各种设备类型使用的不同的数据结构struct irqaction *next; // 所有共享同一个IRQ编号的设备会用此指针链接成一个列表const char *name; // 设备名称。可以通过/proc/interrupts内容读取设备名称
http://www.dnsts.com.cn/news/53996.html

相关文章:

  • 怎样创建网站快捷方式国外公共空间设计网站
  • 做网站网站代理犯法吗长沙网站建设大概多少钱
  • 网站是一个链接的页面结合吗网站开发培训光山
  • 新乡网站建设公司黄页html5新手做的网页
  • 网站建设论文选题聚名网官网登录入口
  • 医疗网站如何做优化网站布局模式
  • 怎么给网站做链接屏蔽阿里云虚拟主机装WordPress
  • 网站建设合同属于印花税的哪个税目acaa网页设计师
  • 厦门的企业网站知名的饰品行业网站开发
  • 做网站ui黄浦区网站建设公司
  • 网站路径优化网站建设公司怎么
  • 做好网站建设工作赣州市南康区建设局网站
  • 网站维护的基本内容包括哪些百度一下你就知道移动官网
  • 松原建设局网站网站后台如何取消验证码登陆
  • 网页设计旅游网站源代码免费建设厅网站2015154
  • 做网站首页置顶多少钱沈阳建设工程信息网举报
  • html 网站模板下载c2c网站的功能
  • 厦门高端网站建设公淄博网站优化价格
  • 建设银行网站登录密码微信插件图片转换wordpress
  • 嘉兴做网站公司哪家好天津手机模板建站
  • 漫画门户网站怎么做的游仙区专业网站建设价格
  • 如何改变wordpress的版面大连百度推广seo
  • 毕业设计做网站用什么软件绍兴网站建设服务
  • 无锡网站建设系统修改wordpress后台地址 插件
  • seo网站优化对象上海快速优化排名
  • 网站单个页面多用户商城系统源码教程
  • 网站建设哪里有thinkphp手机网站模板
  • 济南做网站建设的公司电话做网站被罚款
  • 做网站可以做什么网站建设指导思想
  • 网站建设需求设计地推拉新app推广平台